茶色になりました。

AtCoderで茶色になりました。使用言語は主にSwiftです。
ABC324から、ABC332までの、約2ヶ月ほどでの入茶でした。

きっかけは同僚の「すぐ緑になれそう」という一言です。
その後、どちらが少ない出場回数で緑になれるか競争しています。

ここでは、課題に感じたことと、課題への取り組みについて書きたいと思います。

まず、デビュー戦では、暗黙のコピーが発生した際のパフォーマンス低下に苦しみました。特に文字列です。
文字に関してもSwiftがリッチなことで、C++と比べてパフォーマンスが低く、これをどう回避するかに取り組みました。

方針として、文字を触る必要がある場合にはutf8CStringメソッドで変換し、CCharを使うことにしました。

次に作業性の悪さの問題がありました。いろいろ探してみたのですが、自分にはしっくりこなかったので、ojtとSwift Packageを、シェルスクリプトMakefileを用いて、テストやデバッグや送信ができるように整えました。

その後、upsolveでのライブラリの不足に直面します。ついかっとなって、AcLibraryを勝手に移植しました。以下です。
https://github.com/narumij/swift-ac-library

すでに移植されたものはGithubにみつかったのですが、テストコードがしっかり通っているモノがどうしても欲しかったので、新たに移植する選択をしました。

移植できたライブラリいくつか試したところ、どうしてもTLEしてしまう問題に遭遇しました。

いろいろ試した結果、入力処理だけで制限時間の8割ほどに達していることがわかり、getchar_unlockedを用いた入力ライブラリを作成し、セオリーのreadLineを卒業しました。出力にputchar_unlockedを用いることで、処理時間を稼げる場合もありますが、文字列をutf8CStringにするコストが悪い方に効いて性能悪化する場合もあるので、こちらは採用しませんでした。

他に、平衡二分探索木も勝手に移植していますが、こちらは実験レベルにとどまっています。

関連書籍として、鉄則本を最初の一冊目に選び、今のところこの一冊だけで取り組んでいます。次はけんちょん本を買い足したいです。

1ヶ月半がすぎ、ある程度コンテストに対して慣れたわりにレートが伸び悩んでいて、
問題文を理解したがらない自分の脳みそを課題と感じ、A問題10問を毎日解く取り組みを三日ほどしました。

さらに、レベルアップを望んで、D問題への取り組み始めました。

そんな矢先の、入茶でした。

もともとPaizaでAをとっていたので、茶色になれると踏んではいたのですが、実際に到達できて一安心です。
Swift固有の問題にまだまだ遭遇したり、苦しんだりしそうですが、ゴールは緑、夢は水色で、この先も精進します。

 

SSとかは省略します。あしからずご了承ください。