C,Haskell
しばらくHaskellでしか書かないと宣言して暫くがたった気がするけど。
C言語を触ってしまった.....
いやでも!そのあとHaskellで書き直したから、とか言い訳してみる。
ネットで昨夜見つけた問題です
m人がn個の問題を解き、そのうちの最多正当数を答えなさい、という
2 3
1 1 0
0 1 0
1 1 1
とあったら、3と出力するような。
まずはC
#include<stdio.h> int main(){ int m,n,i,j; int prev,now,temp; prev = now = 0; scanf("%d %d",&m,&n); for(i = 0; i < m ; i++){ for(j = 0; j < n ; j++){ scanf("%d",&temp); now += temp; } if(now >= prev) prev = now; now = 0; } printf("%d",prev); return 0; }
関数型言語ユーザとは思えない....
単純だったし、関数に分けるのが面倒だったのでmainにまとめてみた
続いてHaskell
main = do mn <- getLine cs <- getContents print $ foldr max 0 $g (f $ words mn) $ map read $words cs g :: (Int,Int)->[Int]->[Int] g (0,_) _ = [] g (m,n) xs =sum (take n xs):g (m-1,n) (drop n xs) f :: [String]->(Int,Int) f (a:b:xs) = (read a,read b)
fなんかは、もっと汎用性を持たせた形にしても良かったのだけど。
まあいっかという。
g関数もあんまり綺麗な実装じゃない。
でもHaskellのいいところは、頭に思いついた処理をそのままコードに落とし込めるところですね。
これで、C言語版とまったく同様の答えを導ける、当たり前だけど。
もっと工夫して見やすくしたいな、と思いつつそんな時間も今はない。
これらは、朝、部活が始まる前に解いたもの。
それから部活。
今日一日で7、8枚番組を書き、あとは”猫の忠信”の4文字を書くだけ!!
それから無人の研究室に行き、20時過ぎ帰宅。
まったくどうなることやらといった感じ