
CodinGameのSkynet: the Chasm(PUZZLES:3問目)をRubyで解いてみた
CodinGameはこちら ゲームでプログラミング学習する英語のサイト
続いて3問目。問題自体はEASYなんで簡単なんだろうけど、やってみるとなかなかコードが書けない。文章が英語ってことを引いたとしても、初心者だからこその書き始めの難しさが身にしみわたるw。
そういえばTwitterで記事をつぶやいたときに1人だけ「いいね」ってしてくれる海外の方がいるのが嬉しい。Twitterみると、CodinGameやってる人のようですね。これを糧に、さあがんばろう!
3問目のミッション
モータバイクで道を滑走するゲーム。途中で道が滑落しているので、滑落している部分(Gap)をジャンプで飛び越える。始めの位置からGapまでの道のりがRoad(固定)。ギャップを超えた先が着陸するための道(Platform)。着陸後にPlatformを越えると落ちてしまいゲームオーバーとなる。取得できるパラメータは今のスピード(speed)、今の位置(coord_x)。
注意点はジャンプする際にGap+1のスピードが必要なこと。ジャンプで飛べるのは、そのときのスピード分だけだから、Gap+着地点のスピードが必要になる。
出力する内容は、モータバイクの操作。スピードアップ(SPEED)、ジャンプ(JUMP)、スピードダウン(SLOW)、そのまま維持(WAIT)の文字を状況に応じて出力すればOK。
途中途中で状況がわかるように、STDERR.putsで今の状況を表示しながらコード書いていきます。
以下のコードは全然よくないコードですのでご注意を!言わずもがなですがw
code
STDOUT.sync = true # DO NOT REMOVE # Auto-generated code below aims at helping you parse # the standard input according to the problem statement. @road = gets.to_i # the length of the road before the gap. @gap = gets.to_i # the length of the gap. @platform = gets.to_i # the length of the landing platform. # game loop loop do speed = gets.to_i # the motorbike's speed. coord_x = gets.to_i # the position on the road of the motorbike. # Write an action using puts remaining_distance = @road - coord_x - 1 # To debug: STDERR.puts "Debug messages..." next_activity = "" if speed == 0 and coord_x == 0 next_activity = "SPEED" elsif if speed > @gap if remaining_distance <= 0 next_activity = "JUMP" else if speed > @gap + 1 next_activity = "SLOW" else next_activity = "WAIT" end end else next_activity = "SPEED" end if coord_x >= @road + @gap next_activity = "SLOW" end end puts next_activity STDERR.puts "speed :" + speed.to_s STDERR.puts "coord_x :" + coord_x.to_s STDERR.puts "@road :" + @road.to_s STDERR.puts "@gap :" + @gap.to_s STDERR.puts "platform:" + @platform.to_s STDERR.puts "remaining_distance :" + remaining_distance.to_s end
問題を解いてみた感想など
正直汚くて、よくわかんないコードの出来上がりですw。条件文がごちゃごちゃしすぎていて、自分でもわかりにくいのがよく分かる。ジャンプする前にジャンプできる位置を計算しないといけないのかとか色々思いましたが、そんなこと考える余裕すらないのが今のレベルだと実感しました。
他の人の例では、それぞれのアクションに対して端的に記載されている例がありますね。まずは単純でいいんだなって思いました。他の人の例でも動かないケースがあるようです。評価入っているものでも動かないのもあるので実際に動かしてみたほうがいいかもしれません。
では、次の問題へ挑戦です。