弥生丸のゲーム攻略ブログ

CodeIQ「ホリエモンからの挑戦状」に挑戦中!標準入力に悩みまくった48時間




horie03

CodeIQのホリエモンからの挑戦状に挑戦中です。

もう悩みました!悩んで悩んで悩みまくりました。Twitterなんかで情報収集していると、プログラマーの方々は簡単簡単という声が聞こえてくる。

しかしプログラマー歴がまだ浅い私には難しい。処理時間の問題ではありません。

正解が出ないんです

2問あるんですが、1問目すらクリアできない。築き上げた不正解の山。でも諦めませんでした。

これをクリアできなければ、私のプログラマーとしての未来はない。

そんな気持ちで挑みました。そしてようやく、一問目だけクリアできました。

もうね、嬉しいったりゃありゃしない。「正解」の二文字を見た瞬間は涙がちょちょぎれそうでした。

まだ二問目はクリアしてないんですが(これをクリアするのがこの問題の本質なのですが……)とりあえず、ここまで悩んだことをアウトプットしておこうとキーボードを叩いている次第です。

Contents

まず問題が理解できない。標準入力ってなに?

まずね、問題が理解できないんですよ。でもね、それでも理解しようとします。というか、自分で勝手に解釈します。

この問題にはサンプルがあるんですが、私はまずそれを変数に当てはめればいいんだと解釈しました。

horie04

この数字で配列を作って、あとはループで回して足していくだけ。

なんだ、簡単じゃねぇかよ

ちなみに私、whileループより、forループのほうが好きです。なんでかっていうと、whileはね、よく無限ループに陥るんですよ……。

それでPCがフリーズしたりね。whileおそるべしです。

んでまぁ、ちゃちゃっとプログラムを組んで、サイトに通します。

horie01

はい不正解

そりゃそうだよね。サンプルの数字通したんだから。もう答え出てるしね。

ここでどうやら、サンプルを通すんじゃないらしいぞと私は気付きました。そして問題をもう一度よく読み直します。

そして目に付いた言葉が標準入力。標準入力てなんやねん。

まず目についたのが、標準入力のサンプル。このサイトcodeIQが標準入力のサンプルを用意してくれてるんですね。

それを見てまず、私は言語をjavascriptからphpに切り替えました。最初はjavascriptでやってました。標準入力のサンプルを見ると、phpのほうが簡単そうだったからですね。

さらに、ググって調べます。でもね、調べてもわかんないんですよね。ストリームがなんちゃら、STDINがなんちゃら。

言葉を調べるとわからない言葉が出てきて、その言葉を調べるとまたわからない言葉が出てくるという無限ループに陥ります。

さんざん悩んだ挙句わからなかったので、質問サイトで質問してみることにしました。

「ほりえもんの挑戦状にチャレンジしているのですが、標準入力を教えてくださいがなんちゃらかんちゃら」

だめと言われました

終わったら解答が出るだろうから、それまで待ちましょうと。そりゃそうだと物凄く納得しました。私は問題を解きたい一心ですが、一応賞金も出てるしね。

解答者がこのかたでよかったです。

終わるまで待つか、という考えも過りました。でも待てねぇよ!いや、最初から待つ気などない!

なので悪あがきします。これでもかこれでもかと、サイトにコードを通しました。築きあげる不正解の山。一体わたしの正解率は何%なのだろう?

一問も解いていないのだから、0%には間違いないが。

そうこうしているうちに、自身が数字をひとつも出力していないのに、解答欄に数字が出力されるようになりました。むむっ、と思いました。

私は数字など書いてないのになぜ?と。そうそれが標準入力だったのですね。

標準入力とは

わかってしまえば、なんのことはなかったです。標準入力、説明すれば難しい言葉が並ぶのでしょうが、この場合に限っていうなら、

サイトが用意したデータ(数字)を受け取ること

これで十分です。なんでも難しく考えるのはよくないですね。

数字を手に入れた私は最強!……ではなかった

ようやく数字を手に入れた私。数字さえ手に入れば、あとはプログラムを書くだけよう。

そして意気揚々とプログラムを書き始めるのですが、まだ私は問題を理解していなかった。

つなぎ合わせたときの長さLと、N個(1≦N≦5000)の棒の長さが標準入力から与えられるとき、N個の棒の中から3つをつなぎ合わせて長さがLになる組み合わせの総数を求めるプログラムを書いてください。

Lはね一個なわけですよ。でもなぜか、私はLが複数あると勘違いしてしまった。たくさんある答えLを必死で求めようとする私。

もうねループしまくり。Lがたくさんあるんだからループするしかないんです。私の頭もループしまくりでした。

そしてようやく、完成しました。ループしまくりのプログラムが。処理時間で通らないことなんてわかってるんです。でもそれでもいい。私は見たい。
「正解」の二文字を。

やっとその時が来たと思いました。

horie01

ねぇなんで? なんでなのよ。

もう一度、問題を読みます。どこか勘違いしているのだと。もうね。web画面に穴を穿つくらい問題読みました。

そして私は気付くのです。

まさかLはひとつなのか。ひとつなのかと。

そしてまたソースコードを書き直します。

さんざん書いたループ処理を大量に消します。

そして私は、ようやくスタートラインに立つのです。

horie02

この問題は、ここからが本質です。数字をループさせて求めるなら、プログラマーなら出来て当然なのでしょう。

でもね、正解の文字を見た時は本当に嬉しかった。

さぁ残り数日、二問目も解くぞ!




コメントを残す