PaizaオンラインハッカソンVol.6に参加してみた(霧島京子ミッション, C++)

この記事は1年以上前に掲載されたものです。 情報が古い場合がありますのでお気を付け下さい。

PaizaオンラインハッカソンVol.6に参加してみた(六村リオミッション, C++)PaizaオンラインハッカソンVol.6に参加してみた(緑川つばめミッション, C++)に続いて、霧島京子ミッションにも挑戦してみた。個人的にはこれが一番しくじったが・・・。

回答例

解説

このコードは、主に以下のフェーズに分かれている。

  1. マスの個数を指定する
  2. マスを作成する
  3. 出目数を設定する
  4. 出目処理を行う

マスの個数を指定する

これについては、単純にstoiを使えば問題ない。

マスを作成する

マスを作成する際は、今回も空白を用いてstd::vectorとして生成する。こうすることであとがラクになる。念のため1で指定したマスの個数と実際に生成したマスが一致しているかどうかを確認して、一致していなければ例外を投げるようにしている。

出目数を設定する

これも入力文字列に単純にstoiすれば問題ない。

出目処理を行う

これが一番の鬼門である。やるべきこととしては、まず出目数を指定した上で、

  1. 出目数でゴールに到達するならゴール、ゴールを超えたならゲームオーバー
  2. 止まったマスを確認して、指定した数の分進む(プラスならゴールよりへ、マイナスならスタートよりへ)
  3. もしゴール以外でこれ以上進めない(数値が0)ならゲームオーバー
  4. まだ進める(0以外)なら、前にも到着したことのあるマスならゴールできないと判断してゲームオーバー、そうでなければ到着したフラグを立てる。
  5. 1に戻る

といった計算を行うようにする。基本的には配列は0スタートであることさえ気をつければクリアできるはずだが、結構難解な部分があるため、注意したほうがいいだろう。

結果

cf: https://paiza.jp/poh/joshibato/kirishima/result/36d0cba3

テストケースはすべて通過、処理時間も0.01秒だった。なお失敗回数は2回で、3回目の通過だった。

最後に

これで当方がC++で書いたPOH Vol.6のコードは全部となる。さらに「え、妻が松江?」松江Ruby会議07協賛 回文作成プログラミングコンテスト|POH6+もあり、Rubyでチャレンジした方は豪華ギフトのチャンスもあるのでぜひチャレンジしてみよう。

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。