タイトルに意味はありません。
今、新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|というオンラインハッカソンがアツいです。特に野田さんのニーソは素晴らしいです。
私はC#言語しか使えないので頑張って書いてみました。採点結果は0.02秒 / 0.02秒 / 0.05秒の100点になりました。これが私の限界のようなのでgistにソースコードを公開しておこうかと思います。
特筆することはない至極素直なコーディングに心がけましたが…ちょっとだけ解説を。
- Array.Sort()はネイティブコードで実行されるので速いはずですが、Monoの場合マネージコードで実行されます。
- Array.BinarySearch()とMonoのArray.Sort()はComparison
やIComparer で比較されますが、これは組み込みの比較演算子に比べて遅いです。 - もっと言うとIEnumrable
は組み込み配列に比べて遅いです。 - stringインスタンス生成にはUnicodeへの変換などが絡むため遅いです。
- そもそもI/Oは遅いので呼び出し回数は可能な限り削減しましょう。
- MSILには4引数、4変数までは個別にオペコードが用意されていますが、それ以上の引数・変数に対してはオペランドでインデックス指定するため1バイトずつ長くなります。結局JITでネイティブのレジスタアクセスに変換されるので、気のせいといえば気のせいですが。
こんなところでしょうか。
さらにブレイクスルーがあったので続きを書きました。
0 件のコメント:
コメントを投稿