日々常々

ふつうのプログラマがあたりまえにしたいこと。

Buzzになる数字をn個挙げる

流出云々で「パスワード」がバズってたので、「バズワード」を連想したわけです。

そこから昨日FizzBuzzを書いたりしたものだから、こうなります。

で。FizzBuzzはあるということで……

これで。

 *Main> filter (\a -> a == "Buzz") $ map fizzBuzz [1..100]
 ["Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz"]

……。



実行前に気づきましたけどね!

タプルを返すようにする。

map (\a -> (a, fizzBuzz a)) [1..100]

二番目の値でフィルタリング

filter (\(a, b) -> b == "Buzz") $ map (\a -> (a, fizzBuzz a)) [1..100]

一番目の値のリストにする。

map fst $ filter (\(a, b) -> b == "Buzz") $ map (\a -> (a, fizzBuzz a)) [1..100]

なんか冗長…


Buzzになる数字をn個挙げる、と言うことで10個。

take 10 $ map fst $ filter (\(a, b) -> b == "Buzz") $ map (\a -> (a, fizzBuzz a)) [1..]

できた。きっと明後日には「これは無いわー」とか言ってると思う。


あ、Haskellに手を出してみました。まだよくわかってません。

2012/05/10 0:45 追記

再帰でいけるだろー、と悶々とした結果出たもの。

 *Main> let x n ns = if (fizzBuzz n) == "Buzz" then n : x (n + 1) ns ++ ns else x (n + 1) ns
 *Main> take 10 $ x 1 []
 [5,10,20,25,35,40,50,55,65,70]

かっこわるい……。

2012/05/10 01:16 追記

……あ。