Kotlin Heroes第二弾に参加してみた

Last Update: 2019-09-08

前回Kotlinを使った競技プログラミングコンテストに参加したのだが、その第2段が行われた。行われるのを知ったのは開催当日だったが、リハビリ兼ねてまた挑戦してみた。

前回と比べて

前回と比べて落ち着いて問題に取り組めた気がする。理由としては次のような感じ。

  • 英語の出題であるため、問題設定の理解に時間がかかることを見越し、メモ用紙を大量に用意して臨んだ
  • ブランクがあったのでいっそ開き直って落ち着いて挑戦できた(変な気負いがなかった)
  • プログラムのローカルでの実行方法を理解していたので、動作がわからないけど提出という無駄が減らせた

最初の挑戦は、「俺の実力を見せてやる」みたいな変な気負いがあった。本番開催までに挑戦できるPracticeではそれなりに問題が解けていたので、慢心があったに違いない。慢心が必要なのは英雄王だけである。私には不要だった。

やはり初回挑戦と同じく、問題文の理解には手間取った。というよりプログラミングの時間よりも、英語を読んで問題設定を理解しようとしている時間のほうが長かっただろう。ただそれは予め分かっていたため、大量のメモ用紙を用意しておいて対策した。

そしてこれが大事なのだが、前回は恥ずかしながら標準入力・出力を使ったプログラムの動作確認の仕方がよく分かっていなかった。とりあえずコードを書いたはいいが、サンプルに上げられているテストコードがちゃんとクリアできているのかさえ確認できない状態で挑戦していた。ちなみに後半の方になってようやく標準入力の入力の仕方が分かったが、時既に遅しだった。

というわけで前回と比べると、稲刈りの手伝いの後という体力的コンディションの悪さはあったものの、比較的落ち着いて問題に取り組むことができた。前回は1問しか解けなくて凹んでいたが、今回は2問いけた。進歩しているではないか。

3問目は挑戦したものの、そもそもかなり力技で解こうとしたためか途中のテストで落ちてしまった。前回はこういうときに「なんでや」と深みにハマっていったのを教訓として、3問目はそこで即座に切り上げて4問目に進んだ。4問目は時間切れで提出自体が間に合わなかったけれど。

ただ、開催期間が終わった後は自由に提出できる。時間内には間に合わなかったが、とりあえず「これでどうだ」という解法を提出してみた。しかしそれなりに自信があったものの、テストケース5番目で落ちてしまった。おそらくこういう場合、問題設定の理解に何らかの勘違いがあると思われる。

やはり英語での出題時にはこういう細かいニュアンスによる勘違いが壁となって立ちふさがってくる。アルゴリズム的な知識もさることながら、英語力も伸ばしていきたい・・・。

やはり開催時間の壁は大きい

今回も思ったけれど、開催時間の壁はやはり大きい。23:35分だったかそれくらいから始まり、終わる頃は深夜の2時になる。もうそんな時間帯になってくると脳みそがまともに働かない。英語で問題文を読むのにカロリーを消費するので、アルゴリズムを考える時間がほぼないに等しい。もう解法を閃くかどうかの話レベルである。

単にKotlinの勉強、というよりは腕試し感覚ではじめたことだが、Codeforceでやる前にAtCoderなど日本の競技プログラミングで腕試しをした方が良い気だろう。そこを一足飛びでわざわざ海外のプログラミングコンテストに挑戦するのはある意味無謀だろう。

順番を間違えているという気持ちは私の中にもあるが、AtCoderはKotlinのバージョンが古いからなぁ・・・。

問題の振り返りについて

本当はテストケースに落ちた問題など、じっくり取り組みたい。というより、それをしないと意味がないだろう。とはいえ、こういうのは後回しにされがちなので、今回もまたそのまま放置されるだろうと予測される1

そもそも部屋の片付けも終わってないのに、そんなことをやっている場合ではない。優先すべきは自分の生活環境を整えること、次に働くこと。問題の振り返りなどはどうしてもその次になってしまう。そこは仕方がない。

結果的には前回よりは上位に進めたようではある。1問多く解けたからだろう。逆に言えば、前回は1問しか解けなかったわけだから、もっとできるはずと思っていた私のプライドは砕け散っていたよ。おかげで今回は2問できた。

次に挑戦するなら日本でやってるAtCoderになるだろう。しかし私の場合は競技プログラミングがしたいというよりは、Kotlinの腕試しがしたいが挑戦している動機なので、AtCoderをやるかどうかはあやしいところである。

別の言語で挑戦すればいいだけの話だが、競技プログラミングがしたいわけではないのがミソである。だが、このままKotlin Heroesをやり続けてもあまり進歩はなさそうなので、競技プログラミングを通じてアルゴリズムの学習を進めていくのが一番いい気はしている。


  1. そもそも前回のコンテストの問題もちゃんとやりきってないしね。それ以前に前回解いたはずのコードをどこに保存したかわからなくなっていたりする。
    [return]