プログラミングをやっていると、適当な順に並んだ整数をループで作り出したくなる瞬間が度々あると思います。
そんな時にはまず The On-Line Encyclopedia of Integer Sequences® (OEIS®) あたりを調査するのが定石だと思いますが、つい先日、面白い仕掛けを使っている tweet を発見しました。
これぐらいしか遊びが思いつかなかった https://t.co/M0OO1ySUsf pic.twitter.com/bwrZOWaaUk
— ぶーやー (@tyabu12) September 8, 2022
なんと rand() を使用して、適当な整数配列を再現しようという試み!
そこで、seed の 152965 を簡単に探し出したいと思いコードを書いてみました。
<?php
$arr = [0,1,1,1,0,0,0,1,1,0,0,1,0,1,0];
$max= max($arr);
$min= min($arr);
$i = 0;
$count = count($arr);
$result = [];
while($result !== $arr){
srand($i);
for($j = 0; $j < $count; $j++){
$rand = rand($min, $max);
if($rand === $arr[$j]){
$result[$j] = $rand;
} else {
$i += 1;
break;
}
}
}
echo $i . PHP_EOL;
[0,1] 以外の組み合わせも対応できるように max, min を使用しましたが、paiza.io では time out になってしまったので、[0,1] 以外は現実的ではないかもしれません。
感想
参考にした tweet とかみると、知ってたはずの仕組みをまだまだ有効に使えてないなぁと感じます。
あと、某プロジェクトの締め切り間近なのにこんな記事書いてるなんて時間も有効に使えてないなぁともw
書いてる30分間は楽しかったのになぁ。。。
どうしよ。間に合わないwww