言語によらず、プログラムを書くときの実装技術の1つ。
特にメモリの制約がゆるく、リングサイズに強い制約が無いときは
(リングサイズが特定の値である必要が無く、一定以上であればよいとき)
リングサイズを2のるい乗とし、識別子にはリングサイズ-1とする。
当然知識としては知っているけど、
とっさにリングバッファを実装するときには実践できていなかったのでメモ。
言語によらず、プログラムを書くときの実装技術の1つ。
特にメモリの制約がゆるく、リングサイズに強い制約が無いときは
(リングサイズが特定の値である必要が無く、一定以上であればよいとき)
リングサイズを2のるい乗とし、識別子にはリングサイズ-1とする。
当然知識としては知っているけど、
とっさにリングバッファを実装するときには実践できていなかったのでメモ。
ローカル環境では標準出力(または標準エラー出力)にデバッグプリント文を出力し、
リモート環境ではなにもして欲しくない。
これをすべて自動で実現させるための方法についてまとめておく。
具体的には、プログラミングコンテストでデバッグコードの除去ミスがあったので
同じミスを二度と起こさないようにするための方法。
アルゴリズム的に何か難しいわけではないけど、
実装上の工夫?として必須だと感じたのでメモ。
TopCoder Statistics - Problem Statement
問題の概要は以下の通り。
N人を円状に並べ、1〜Nで番号付けする。
1番目の人から時計回りに以下の操作を繰り返す。
t番目の操作に対して、t^3番目の人を円から削除する。
t+1番目の操作は削除した人の次の人から開始する。
このとき最後まで残された人の番号を求める。
Javaのようなオブジェクト指向言語を学べば1〜2日で習うであろう事に
オブジェクトの比較に==は使ってはいけないということ。
あろうことか、Javaを5年以上使っていながら
このミスを犯してしまったので、そのミスをまとめておく。