はじめてAtCoderに参加してみた
Qiitaに記事を書くようになったり、仕事のことでいろいろ調べているうちに
「競技プログラミング」が流行っていることを知りました。
Twitterなんかでもはてブの記事がTLに流れてきたりするので興味本位でアカウントを作成。
いろいろ調べていると、コンテストが金曜日の夜や休日の夜に開催されるらしく、
そこに参加して問題を解いていくそう。
年末年始で忙しく、アカウント作成だけで終わっていたのでやっとコンテストに参加することができました。
初めて参加したのがAtCoder Beginner Contest 151。
最近はkintoneをいじることが多く、jsでやってみようと思ったものの
おすすめはされていないみたいなので、数ヶ月前に少しだけ勉強したPythonで参加しました。
初回なので何がなんだかパルプンテ
どきどきしながらPCの前で待機し、時間ピッタリにスタート。
画面の右下にカウントダウンが表示されます。
問題はAからFの6題があって、問題ごとに配点が違いました(Aは100点で100点ずつ増える)。
問題がズラッと並べられているし、よくわからないけどAが初心者向けだろうということでAの問題を選択。
実行制限時間とか書いてるけどとりあえず無視…。
解いた問題 ABC 151 A-Next Alphabet
【問題文】
$z$ でない英小文字 $C$ が与えられます。
アルファベット順で $C$ の次の文字を出力してください。
【制約】
$C$ は $z$ でない英小文字
【入力】
入力は以下の形式で標準入力から与えられる。
$C$
【出力】
アルファベット順で $C$ の次の文字を出力せよ。
【入力例】
a
【出力例】
b
参加してみて
・まず標準入力という言葉に詰まる。
・Pythonの知識が抜け落ちている。
・JavaScriptからPythonの配列の考え方にシフトするのが大変だった。
とりあえず解けたものの、ダサいコードになったので戒めとして貼っておくことにします。
ライブラリやメソッドを調べればよかったのかなと反省。
a = input()
alpha = ["a", "b", "c", "d", "e", "f", "g",
"h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u",
"v", "w", "x", "y", "z"]
for i in range(len(alpha)):
alphabet = alpha[i]
if a == alphabet:
s = i + 1
alphabet = alpha[s]
print(alphabet)
break
実行制限時間が2secと書いているのに対してこのコードは17msかかっていました。
完全にアウト。これはハマるなあ、と終わった瞬間に思いました。
終わりに
AtCoderは過去問なども公開されているので休日など時間のある際に
書く練習をしてみようと思います。
まずは毎週何かしらのコンテストに参加して慣れることも大切なんじゃないかなと感じました。
次回は実行時間も気にしながら解けるようにコードを書いてみようと思います!