俄仕込みのF#でケブンッリジ関数。パイプ演算子って直感的で素敵だよね。
前回のC#版に続きまして、息抜きを兼ねて俄仕込みのF#でケブンッリジ関数を書きました。
#light open System open System.Text.RegularExpressions let str = @"こんにちは みなさん おげんき ですか? わたしは げんき です。 この ぶんしょう は いぎりす の ケンブリッジ だいがく の けんきゅう の けっか にんげん は もじ を にんしき する とき その さいしょ と さいご の もじさえ あっていれば じゅんばん は めちゃくちゃ でも ちゃんと よめる という けんきゅう に もとづいて わざと もじの じゅんばん を いれかえて あります。 どうです? ちゃんと よめちゃう でしょ? ちゃんと よめたら はんのう よろしく" let cmabrigde (s : string) = let rand = new Random() let rec convert (s : string) = let shuffle = s |> Seq.sort_by (ignore >> rand.Next) |> Seq.to_array if s.Length <= 1 then s.ToCharArray() elif s.ToCharArray() <> shuffle then shuffle else convert s Regex.Replace(s, @"(?<=\w)\w{2,}(?=\w)", fun (m : Match) -> new string(m.Value |> convert)) str |> cmabrigde |> printfn "%s" Console.ReadKey()
初心者のため、F#のことはあまりよくわかっていませんが、
とりあえずパイプ演算子って直感的で素敵だよね!、と。
C#にも欲しいなあこれ。