Raku: 解 PWC 081 兩題
作者:gugod 發佈於: #rakuPerl Weekly Challenge 081 的兩題目分別是 1: Common Base String, 2: Frequency Sort.
Common Base String 之解法正好能將不久前提到的集合算符拿來用:
sub common-base-string (Str $A, Str $B) {
return ( base-string($A) ∩ base-string($B) ).keys;
}
其中 ∩
這個符號是數學領域中表示「取左右兩集合之交集」之交集算符。用於 Raku 程式中時,左右兩側算子之型可為陣列、Set 等等各種 Setty 型別之衍生型別。其運算結果之型別為 Set。
此符號之 Unicode 字符名稱為 INTERSECTION
。要在 Emacs 中輸入此符號,可使 insert-char
函式:
M-x insert-char <RET> intersection <RET>
或其組合鍵:
C-x 8 <RET> intersection <RET>
第二題 Frequency sort 的解法前半部大致上就是讀檔、切出字、再將不符規則的字給過濾掉。也就是一般常見的 NLP 前置作業。查了一下文件後發現有兩個不錯的方法可以拿來切出字:
$o.words
$o.split(/<?wb>/)
這兩方法之對象 $o
物件之型別可為 Str
或 IO
。可省去 readline
之類的步驟、能少寫一層迴圈,頂方便的。
<?wb>
為 Raku 正規表示式中代表單字邊界 (word boundary) 之字符類別。
words
看來簡潔,但只是依空白拆開,以本題來說,對於後續處理有些不方便。最後是用了 split(/<?wb>/)
。