contentRubyで使える!競技プログラミング、小手先TLE対策RubyAtCoder競技プログラミングAtCoderでRubyを使って競技プログラミングをしている物好きな人はいますかね。私もですRubyで競技プログラミングをしていると、TLEとの戦いになることがあります。そんなとき、オーダーレベルでのアルゴリズムの改良ができれば最高ですが、そんなひらめきがいつでも降ってくるわけがない。いうわけで今回は小手先のテクニックによって少しでも実行時間を短くする方法を紹介します。"a"ベンチマークは後で乗せますが、このstr[0]はめっちゃ遅いです・・。添え字アクセス時に、Stringの新しいインスタンスを作成しているせいでしょう。.charsメソッドで1文字毎の配列にしてしまいます。"a"このアクセスであれば、添え字アクセス時に新しいStringのインスタンスは作られないので、ループを回す場合は結構早くなります。文字列の比較よりは数値の比較のほうが早いですよね。.codepointsメソッドで数値として持ってしまうのが良いです。97では上記3パターンのベンチマークを取ってみます。endend結果はこう。0.394821)codepoints早いですね。大量のループがあり、その中で文字列中の1文字を比較するような時は、文字列で持たずにcodepointsで持っておくとTLEを回避できることがあるかもしれません。9]]こんな風にアクセスするのが普通かもしれません。endendが、ループの中においては、これより若干早くなる可能性がある書き方が存在します!それが、これ。endendほんとに!?って思うかもしれませんが、ベンチマーク取ってみます。0.872905)若干早いですね。この若干によりTLEを回避できるかもしれません!終わりにmapよりmap!を使うだとか、巷でよく言われている小手先のテクニックについてではなく、あまり見ない2つの手法を紹介しました。仕事ではdocbase.io、趣味ではuwaoe.netを開発。upLoginユーザーは見つかりませんでした。