読者です 読者をやめる 読者になる 読者になる

PietでABC061に出てみた

Pietと呼ばれる難解プログラミング言語を用いてAtCoder Beginner Contest 061 - AtCoder Beginner Contest 061 | AtCoderに出てみたので、その記録を残しておきます。

Pietについて

 Pietを知らない人はこの辺を見ましょう。Pietが分かりやすく説明されている最高の資料なのでまだ見ていない人はみましょう。

 簡単に言うと、ドット絵ソースコードプログラミング言語です。例えば、下のような二つの数の最大公約数をもとめるプログラムが描けます。f:id:basemusi:20170513235017j:plain

 しかし、なぜかPietのソースコードを直接Atcoderに提出することはできないので、Pietのソースコードを書いたら適当にc++とかに変換します。その辺の話はkmc.hatenablog.jpで書きました。この記事ではABCのD問題とかも解いているので、今回の結果もまずまずのものが得られるだろうと思っていました。

 

結果

1完でした……つらい。。。

コンテスト中の流れ

21:00

コンテスト開始。A問題を読み、解けそうなので早速取り掛かる。

21:22~21:27

Pietからc++への変換が久しぶりだったので、変換ツールの使い方を思い出しながらA問題を提出。 WA。 入力の順番を勘違いしていたことに気づき、それを修正してAC。 Atcoderに提出したプログラム

Piet版↓

f:id:basemusi:20170514000404p:plain

21:30

B問題を読む。解法のアルゴリズムは難しくないが、二重ループが必要そうで書きたくないので飛ばす。 C問題を読む。いろいろとめんどくさそうだが、ループは一重でよさそうなのでこれにとりかかる。

22:20

使用する配列の初期化・基数ソート・答えを求めるループの3つのループを描き上げる。 しかし、ここで他の言語では変数の参照にあたる処理がPietでは計算量がO(1)でないことを思い出して、今書いているプログラムがTLE解であることに気づき絶望する。案の定サンプルを入れたら、実行に数十分かかった。実行中の中断が自由にできないPietのIDEを用いていたので、そのままコンテスト終了。

コンテスト終了後

少しのデバッグとともにC問題を提出しなおし、TLE以外はそこそこ合ってそうなことを確認して満足したので終了。 Atcoderに提出したプログラム

Piet版↓

f:id:basemusi:20170514001448p:plain

まとめ

Pietでプログラミングは難しい(575)