CodingRally

AtCoder練習問題日記 C-rallyと自分の脳の動き

C-rallyの問題にチャレンジ!

今日は祝日で時間があったので、2つ目のC-rallyの問題に挑戦してみました。1問目をやったばかりなので、問題文の理解や、その仕組み、目的がかなり頭に浮かんできやすかったです。問題文には、決まったデータではなく、拡張性のあるような抽象化された内容が含まれていたり、少しだけ数式が入っていることがあります。以前の自分なら、そういう問題を見た瞬間に「うんざり」してしまい、すぐに閉じていたでしょう。普段Youtubeをずっと見続けていたり、嫌なことを考えないためにあえて脳を動かさないようにしていたので、考えることが非常に難しくなっているような気がします。

問題文に対する気づき

少し我慢して、紙に書き出しながら考えを進めていきました。問題の中に「Xi-Pの2乗」という式があり、「ああ、これは差分の2乗だから、±は関係ないし、集会に行く人の行きと帰りでの移動量を計算しているのか」と理解できました。

実際には、問題文には「参加するために(計算式で示された)体力を消費する」とだけ書いてあり、「行き帰り」のことは直接的には記載されていません。でも問題文から実際に起きていることのように想像してそれに気づいた時、ちょっと面白いなと思いました。

座標Pをどう求めるか?

次に考えたのは、「どうやって集会の座標Pを求めるか」ということでした。入力されるのは各々の座標なので、それを距離として計算し、全て足して総数で割る「平均値」でいいのかなと考えました。しかし、入力例を見ると同じ座標にいる人もいるかもしれないので、重みづけが必要かもしれないと思い、調べたりしました。これについては、頭が良くないので数学的にはあんまり的確に理解できなかったですが、平均とか、切り捨てとか試してみて平均値の四捨五入でいいんだなと後から分かりました。

プログラムのロジックを考える

その次に、標準入力からデータをどのように取得し、プログラム内で処理していくかを考えました。ただ、私の悪い癖なのですが、少しずつわかる部分から作っていくため、繰り返し動作や変数の名前を適当にしてしまうことが多いです。プログラムが動けば、最後はそのまま次に進んでしまうので、後から見直すとカオスになっていることがよくあります。毎回次に繋がるようなコードが作れていないなと感じますが、趣味の範囲でやっているし、リハビリみたいなものだと思って気軽に進めています。だから私が過去に勤めていた会社で作ったプログラムとかはソースコードとかも置いてきたと思うけど、誰も触れずに私が居なくなって終わりだったかもしれません。

ChatGPTとのサポート

Pythonのコードの書き方については詳しくないので、「入力されたデータをリストに入れる方法はどうする?」とか、「数字の四捨五入はどうやるの?」といった質問をChatGPTにしながら進めていきました。最終的に、どうにか規定通りに動く「クソみたいなコード」が完成しましたが、そのコードについてChatGPTに解説してもらい、今日のチャレンジは終了としました。

こんなクソコードでも自分がちょっとずつ考えて進めていったとか、Visual Stdio Code上で表示させているのを眺めていると楽しい気持ちになりますね。多分、Chat GPTが無ければ問題に対してとりあえず完成したコードも達成できないし、解説読んでも分からないし、面白くないとか、問題が分からないとか、コードが分からないとかそういったことで一瞬で挫折していたと思います。自分の、プログラミングしてみたいというちょっとした好奇心と、Chat GPTに課金しているから使い尽くしたいというちょっとした義務感とが良い感じで調和して、良さげな趣味になりそうな気がします。多分、ちょっと年配の人がクロスワードとか数独とかそういったものをやっているような感覚かもしれません。でも、仕事がある現役世代に対してだとこのプログラミングという、論理的な思考力が実際の業務にも役立ってくれそうな気がしています。例えば業務効率化でアイデアがあるときに、その解決法にプログラミングがあって、そういうときに気分的な障壁がめちゃくちゃ下がると思うんです。で、私は職業プログラマーじゃないので綺麗なコードじゃなくてはいけないとか、早く書かなくてはいけないとか、Chat GPTを使ってはいけない環境でももちろんありませんから、ただ単純に楽しいかなという気持ちでいます。AtCoderって本気の人たちにはランキングとかそういう競い合いが重要だと思いますが、私は自分の能力の低さを嫌というほど痛感していて、戦っても勝てないのは目に見えているので戦いたくなくて、だから練習問題をこそっと借りて楽しむ程度でいきたいです。

私が高専のとき、40人クラスでいつも成績は30位台後半でした。なんとか卒業しましたが自分の出来なさを痛感しました。クラスで毎回10位以内の人たちはその後、進学や留学、大企業の研究者やGoogleの中心部で勤務したり国の研究者になっているみたいです。尊敬もしているし、自分の限界も感じつつ、でもちょっとずつ今からでも成長したいです。

また、次の週末に新しい問題をやってみようと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です