プロコンにはまりつつある
最近プロジェクトオイラーを解いてます。
projecteuler.net
有名な数学者、レオンハルト・オイラーさんの名前をとったプロコンの問題を集めたサイトでこれを1日1問ペースで解いてます。
自分は高校から文系に進んだので数学は理系進学の人ほどの知識や経験はないです。
なのでフィボナッチ数列とかなんだっけ?みたいなところから始めてやってます。(後思い出す)
プログラミングのある程度の書き方、eachとかforとかwhileとか配列とかの概念を理解して使いこなせれば解けます。(問題によるけども)
問題につまづくと平気で3時間とか考えてたりしちゃうから、時間を気にしながらやらないと気づいたら夜みたいになりかねない。
CかRubyで書いてるのだけどもRubyは配列の操作とかしやすくて便利です。
一つ問題を紹介すると、
という問題、
これの日本語訳はこちら
最初はなんじゃこりゃと思ったのですが解いてみると簡単で解けたときの快感が最高です。笑
自分がかいたRubyコードを紹介するとこちら
# ここに数値を入れる num = "" data = 0 # まず5つの数字を取ってくる for i in 1..1000 do t = num[i,5] # 5つの数字を1つずつ切り出す five = t.split(//) # 毎回1にリセットする data = 1 # 5つをそれれかける five.each do |x| data *= x.to_i end # 5つの乗数を判別して最大だったら代入 if max < data max = data p max end end
答えが出ればそれで良しというスタイルで解いたので、あまりいい解き方ではないと思うので参考程度に。
ProjectEulerは世界中の人が解いているそうで毎週1問ぐらいのペースで問題がつかされてそれを誰が最速で解けるかを世界中のトップコーダーは競っているそうです。
ProjectEuler以外にもpaizaとかネットに問題はたくさんあるのでそういう違った問題にも手をのばいてみようかなと思います。
アルゴリズムのいい勉強にもなるしね。
テストも残り2つ残ってるので頑張ります
春休みはインターンと開発とアルゴリズム、それと英語、がんばるぞい
あとちょこっと旅行にも行こうかな、気晴らしに
最近はこんな感じ。
おわり
追記 2/19
Gunosyの方が以下のような書き方もできるよと紹介してもらいました。
"123456789".split(//).map(&:to_i).each_cons(5).map {|ary| ary.inject(:*) }.max
Rubyだとワンライナーでかけるから便利だそうで、確かに!と思いました!
自分はまだまだコーディング能力が足りていないのでもっと勉強せねば。。。。
ブログ見てもらってこういう書き方もあるよと教えてもらえてとても嬉しかったです、ありがとうございました。
コメントでもなんでも指摘、意見は大歓迎なのでたくさんいただけたら嬉しいです。
katlez