yamachan.log

紫陽花

プロコンにはまりつつある

最近プロジェクトオイラーを解いてます。
projecteuler.net

有名な数学者、レオンハルトオイラーさんの名前をとったプロコンの問題を集めたサイトでこれを1日1問ペースで解いてます。
自分は高校から文系に進んだので数学は理系進学の人ほどの知識や経験はないです。
なのでフィボナッチ数列とかなんだっけ?みたいなところから始めてやってます。(後思い出す)
プログラミングのある程度の書き方、eachとかforとかwhileとか配列とかの概念を理解して使いこなせれば解けます。(問題によるけども)

問題につまづくと平気で3時間とか考えてたりしちゃうから、時間を気にしながらやらないと気づいたら夜みたいになりかねない。

CかRubyで書いてるのだけどもRubyは配列の操作とかしやすくて便利です。

一つ問題を紹介すると、

f:id:katlez:20160124200303p:plain

という問題、

これの日本語訳はこちら
f:id:katlez:20160124200552p:plain

最初はなんじゃこりゃと思ったのですが解いてみると簡単で解けたときの快感が最高です。笑

自分がかいた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