中年プログラマーの息抜き

ブログをはじめました。気の向くままにプログラム関連ネタをメモしていきます。

特定の数字が使えないとき

ホテルなどで部屋数と部屋番号

部屋番号へ4や9が使われていないことが多いので、その条件のプログラムで1000番目の部屋番号を考えてみた。

① 方法1
(カウンティング)
$count = 0;
while ($limit < 1000) if (!preg_match('/4|9/', ++$count)) $limit++;

② 方法2
(進数相互変換)
$count = '';
$octal = decoct(1000);
for ($i = 0; $i < strlen($octal); $i++) $count.= $octal[$i] < 4 ? $octal[$i] : $octal[$i] + 1;

考察

処理時間
方法1の処理時間は、部屋番号の大きさに比例する。(1000部屋で0.0005秒、1000000部屋で1秒)
方法2の処理時間は、ほぼ一定になる。(1000部屋で0.00001秒、1000000部屋でも同じ)

まとめ

どちらも正解か、、だけど、方法1で実装する気がする・・移行用PGなどは方法2か・・