使用 PHP 来实现ズンドコキヨシ

每次都自愿加五个。

<?php
$z = 'ズン';
$d = 'ドコ';
$zd = [$z, $d];
while (true) {
    $zundoko = array_map(function() use ($zd) {
        return $zd[array_rand($zd)];
    }, range(0, 4));

    if ([$z, $z, $z, $z, $d] === $zundoko) {
        break;
    }
}
echo 'キ・ヨ・シ!';

一次只能一个一个地调整

<?php
list($z, $d) = $zd = ['ズン', 'ドコ'];
$zundoko = range(0, 4);
start:
    array_shift($zundoko);
    $zundoko[] = $zd[array_rand($zd)];

    if ([$z, $z, $z, $z, $d] === $zundoko) {
        echo 'キ・ヨ・シ!';
        exit(0);
    }
goto start;

我尝试着通过组合和使用array_fill函数来实现。

<?php
list($z, $d) = $zd = ['ズン', 'ドコ'];
$f = function() use ($zd) {
    return $zd[array_rand($zd)];
};
$zundoko = array_map($f, range(0, 4));
while (true) {
    if (array_fill(0, 4, $z) + [4 => $d] === $zundoko) {
        break;
    }
    $zundoko[] = $f();
    array_shift($zundoko);
}
echo 'キ・ヨ・シ!';

由于无法在即时调用内递归,所以我希望能够实现再起+闭包的即时调用。
http://qiita.com/tadsan/items/6b8cc35ff9ccb3c27678 を参考に見直したら動きました

<?php
$zd = ['ズン', 'ドコ'];
$expire = array_map(function($i) use ($zd) {
    return $i !== 4 ? $zd[0] : $zd[1];
}, range(0, 4));
($f = function ($zundoko = array()) use ($expire, $zd, &$f) {
    if ($expire === $zundoko) {
        return;
    }
    $zundoko[] = $zd[array_rand($zd)];
    $f(array_slice($zundoko, -5, 5));
})();
echo 'キ・ヨ・シ!';

bannerAds