https://qiita.com/drken/items/fd4e5e3630d0f5859067 ← これ。
コンテスト自体が一問5分という制限があるためか、やっつけで片付ける事が目的ですよね。
結果としてビギナーは所詮この程度とバカにしたようなコードしかない。
ガチの初心者ならそれで良いと思うけど、5分でさっと書ける実力のある人がそのコード残すの?
と思うと残念でならない。
私はプログラマでもないし、言語は一つしか使えないし、下手すると解くのに何時間もかかってしまうけど、
というか、私が欲しかったのは、そういう最低限問題が解けるだけの、
豚にメシをくれてやるような雑なコードじゃなかった。
たとえば、第 8 問: ABC 085 C - Otoshidama (300 点)。
ここで重要な知見として 1 秒間で処理できる for 文ループの回数は、10^8=100,000,000 回程度 というのがあります。
なんて書かれてる。
えー。私の環境、for(1..10**8) {} (本当に何もしない繰り返し)で3秒かかりました。
for(1..10**8) { i=0 } (変数になにか代入するだけ)で6~7秒くらい。
ガチ初心者は3重ループしなくて良いんだと気づけるだけで良い。
でもハエを払うように5分で済ませられる実力のある人だったらさぁ……
まず、総当たりする前にそもそも解があるか、超簡単な確認くらいしようよ?
if ( is_resolvable(N, Y) ) { do_something(N, Y); } else { print "-1 -1 -1"; } sub is_resolvable() { if ( Y > 10000*$N ) { # Shortage return 0; } elsif ( $Y < 1000*$N ) { # Too much return 0; } else { return 1; } }
(is_resolvable()って、なんかDNS関係っぽくて好きじゃない名前だけど)
(追:&とか不等号が文字参照になって見づらいので置換。架空言語でも概略分かればいいじゃない……)
もしかして、業界、自力で出来るようにならない初心者は、必要のない初心者?
本当に出来ない人がようやく越えられた一歩なんて、見落としてるのかな。
まぁ私自身は
いじったらすごくなる → たーのしー
これってプログラミングの醍醐味なのかしら?たーのしーと思いつつ、
最終的に丸一日かかって第8問が完成致しました。