定期開催されている ABC こと AtCoder Beginner Contest に参加してみたら、純粋な実力不足以外にも本質じゃないところで躓いたりして大変もったいないことをしてしまったので、次回の学びをより深めるためにできそうなことをメモっておきます。
参加したのは "ABC 170" です https://atcoder.jp/contests/abc170
入力はコマンドライン引数じゃなくて「標準入力」
はい。
A問題、 sys.args
から入力を取り込むコードを書いていました。当然コケるのですが、思い込みのチカラで20分溶かしました。一番意義のない時間だった。
入力値は input
で取り込みます。
# 間違い
import sys
args = sys.argv
# do something ...
# 正解. 以下は入力が2つの整数値の場合
x, y = [ int(i) for i input().split() ]
# do something ...
WA(Wrong Answer) や RE(Runtime Error) で行き詰まったら、簡単なテストケースを書いてみる
いい感じに全部の条件を考慮できるケースをすべて生成するのはちょっとハードルが高いので(それが考慮できてれば多分詰まってない)、せめてローカルで動かせるテストデータ生成のコードくらいは書こうと思います。
幸い入力値の条件は明示されていますので、テストデータを生成するちょっとしたコードはすぐに書けるでしょう。それをパイプ越しに回答コードに渡してやれば多少は検証がマシになるんじゃないかと思ってます。
テストケース生成側で strerr に生成データを吐かせておけば、入力値を確認しつつ回答コードの入力の邪魔にもならないので、とりあえず次回 WA でどん詰まりしたらこれをやってみようと思います。
WA のまま終わってしまった問題を振り返る
コンテスト中はテスト失敗の原因詳細は出ないので、もし WA のまま試行錯誤のうちに終わってしまった問題があればその振り返りをします。
ハマってるときは何が悪いのかマジでわからないので、境界条件など、ロジックやアルゴリズムに関わる考慮漏れなのか、単純に自分のケアレスミス的なものによるものだったのか、きちんと確認しないと気になって眠れません。
以下の「便利リンク集」で過去問のテストケースが掲載されてます。そこからデータを落として実際に WA だったケースを検証可能です。
AtCoder's Testcases AtCoderの過去問のテストケースです。復習等に使用することが出来ます。非常に古いコンテストには対応しておりません。
各テストケースを観察すると、境界条件等の考え方などが見えて実案件のテストケースの開発業務にも参考になるかもしれませんね。
他の参加者の回答や公式の解説も併せて確認したいですね。解法が見えなくて苦戦した問題はそのへんでフォローしていきたいです。
次回以降
現時点ではプロコンにがっつりコミットするほど優先度は割かない予定です。
とはいえ、今後もABCには参加しようと思ってます。回答途中で終わってしまった問題のケアだけ振り返って、次回に臨もうと思います。繰り返していけば、そのうちにこの振り返り作業を後半の手強い問題でやれる日が来るでしょう。たぶん。