AtCoder Beginners SelectionをHaskellで解く (2) ABC081A - Placing Marbles

AtCoder Beginners SelectionをHaskellで解く(1) ABC086A - Product - ねこも手を借りたい」の続編です。AtCoder Beginners Selections (ABS) をHaskellで解きます。 pizzacat83.hatenablog.com

普通に解くよりちょっと変なルール追加した方が楽しい気がしたので,コードの一部をポイントフリースタイルで書く,というルールを追加して解きます。詳しくは上の記事をご参照ください。

今回はABS 2問目の ABC081A - Placing Marbles を解きます。

解く

解きます。

f s = length $ filter ('1'==) s

main = do
  s <- getLine
  putStrLn $ show $ f s

文字列を [Char] とみてfilterをかけ,残った要素数を出力します。

余談ですがこの問題はifを3つ書く,ifを8つ書く,2進数と解釈してboolのリストに要素アクセスするなどいろいろな解法が考えられるので,ゴルフの問題としては面白そうだと思いました。

ポイントフリー化

変形していきます。

f s = length $ filter ('1'==) s
f s = length (filter ('1'==) s)
f s = length . (filter ('1'==)) s
f = length . filter ('1'==)

かなりシンプルなコードだったので,合成に書き換えるだけでできます。

atcoder.jp

つづく(といいな)