競技プログラミングのためのF#入門
GitHub上の対応ディレクトリ 公式ページ, CADDI 2018 公式解説, PDF 解説
特記事項はなく, 解説通り次のように書けばいいでしょう.
| let solve = Array.forall (fun x -> x%2=0) >> fun b -> if b then "second" else "first"
let N = stdin.ReadLine() |> int
let Aa = Array.init N (fun _ -> stdin.ReadLine() |> int)
solve Aa |> stdout.WriteLine
|
関数の合成としてsolve
の引数を省略して書いています. 関数の合成は>>
です. 数学での関数合成は$f \circ g$で$g$を作用させてから$f$を作用させます. F#でこれを書きたいならf << g
です. パイプラインの発想と同じく左から右に流して書くにはg >> f
です.
上記のsolve
は引数をつけると次のように書けます.
| let solve Aa = Aa |> Array.forall (fun x -> x%2=0) |> fun b -> if b then "second" else "first"
|
「全て偶数」の代わりに「奇数が存在する」と書きたければ次のようにも書けます.
| let solve = Array.exists (fun x -> x%2=1) >> fun b -> if b then "first" else "second"
|
Previous: 073 C - Strange Bank Next: 075 D - Face Produces Unhappiness back to top