たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【C#】AtCoder Beginner Contest 124 に参加してみた

Twitterを見てたらたまたま開催されていたことを知ったので、AtCoder Beginner Contest 124 に参加してみた。

atcoder.jp


AtCoder Beginner Contest とは

サイトに説明がありますが、プログラミングコンテストです。おそらく読んで字のごとく初心者むけ。コンテストに対しても、プログラミングに対しても。

結果

f:id:c_taquna:20190413231736p:plain

言い訳その1 2問しか解けなかった

2問しか解けなかったことについて。すでに開始していたのと、コンテストのやり方がよく分からなくてコードを書き始めるまでにかなりもたついてしまった。。。これは次回からは”開始時間の前に用意しておく”ことで解決できるので問題なし。

言い訳その2 問題2で間違えた部分

問題2で間違えた部分について。これは、考え方自体は間違っていなかったのだけど、余計な処理を入れたせいで一つだけ通らなかった。。まぁ考え方は悪くなかったから、今回は良しとしよう。

コンテストをやってみた感想

コンテストでは、一定の条件下のもとで速さを競いあうのですが、”問題を理解”して”与えられた課題を解決する方法”を考えなければいけません。ここに時間がかかるとそもそもコードを書くところまでいけない。なので、これからもできるだけ参加して、問題の解決策を考えることに慣れていこうと思います。

コードについて

時間を競うので、コンテストにおいては短いコードが良いコードだと思っています。ただ、短さというよりも私の場合は”表現力”を鍛えることを目標にしておきたいなと思います。”こういう処理は、こう書ける”みたいな手札を増やしていけたらいいなと。

進め方について

AtCoderで解いただけでは意味がないので、終わったあとは、各問題で、コードの短さが上位5位の人のコードを読もうと思います。上で書いたことと少し矛盾するかもしれないですが、やはり短くかけているということはそれだけ無駄が少ないということだと思うので。

コード的な反省

性能的にNGじゃなかったら、Collectionの処理はLinqを使ったほうがきれいに書けるし良い気がする。あとは、変換するときに複数行に分けない方が良い。

わりと自分でやりがち

var n = Console.ReadLine();
var n2 = int.Parse(Console.ReadLine());

var h = Console.ReadLine().Split();
var h2 = h.Select(x => int.Parse(x)).ToArray();

こっちの方がきれい

var n = int.Parse(Console.ReadLine());
var h = Console.ReadLine().Split().Select(x => int.Parse(x)).ToArray();