用PHP编写的PPAP测试

用PHP编写的PPAP测试

简要概述

    • PPAPテストを Web Audio API で

 

    その発想はなかった

环境中文原文是什么?

    PHP 7.1.0RC5

实施

    • 以前実装したネタとはできるだけ被らないようにする

ズンドコキヨシ with PHP
変数を使わずズンドコキヨシ with PHP
こんなズンドコキヨシは嫌だ with PHP
こんなズンドコキヨシは嫌だ with PHP その2

追記:途中から本筋でなく無理矢理なループの実現に力を入れ始めた :puke:

简洁地

<?php
$ppap = [
    'ペン',
    'パイナッポー',
    'アッポー',
    'ペーン',
];

while (true) {
    shuffle($ppap);
    $result = implode('', $ppap);
    echo $result . PHP_EOL;;
    if ($result === 'ペンパイナッポーアッポーペーン') {
        break;
    }
}
echo '\(^o^)/ピコ!' . PHP_EOL;

迭代器 (dié qì)

<?php
class PPAP implements Iterator
{
    public $ppap = [
        'ペン',
        'パイナッポー',
        'アッポー',
        'ペーン',
    ];

    public function current()
    {
        shuffle($this->ppap);                                                                                                                                   
        return array_shift($this->ppap); 
    }

    public function key()
    {
    }

    public function next()
    {
    }

    public function rewind()
    {
        $this->ppap = [
            'ペン',
            'パイナッポー',
            'アッポー',
            'ペーン',
        ];
    }

    public function valid()
    {
        return count($this->ppap);
    }
}

$ppap = new PPAP();
loop:
$result = '';
foreach ($ppap as $p) {
    $result .= $p;
}
echo $result . PHP_EOL;
if ($result !== 'ペンパイナッポーアッポーペーン') {
    $ppap->rewind();
    goto loop;
}
echo '\(^o^)/ピコ!' . PHP_EOL;

生成器

<?php
$result = '';
foreach ((function () {
    $ppap = [
        'ペン',
        'パイナッポー',
        'アッポー',
        'ペーン',
    ];
    shuffle($ppap);

    foreach ($ppap as $p) {
        yield $p;
    }
})() as $p) {
    $result .= $p;
}

echo $result . PHP_EOL;
if ($result !== 'ペンパイナッポーアッポーペーン') {
    require __FILE__;
} else {
    echo '\(^o^)/ピコ!' . PHP_EOL;
}

发电机(不使用洗牌功能的版本)

#!/usr/local/bin/php
<?php
$result = '';
foreach ((function () {
    $ppap = [
        'ペン',
        'パイナッポー',
        'アッポー',
        'ペーン',
    ];

    $f = function ($ppap) {
        $rand = array_rand($ppap);
        $p = $ppap[$rand];
        unset($ppap[$rand]);
        $ppap = array_values($ppap);
        return [$p, $ppap];
    };

    $count = count($ppap);  
    for ($i = 0;$i < $count;$i++) {
        list($p, $ppap) = $f($ppap);
        yield $p;
    }
})() as $p) {
    $result .= $p;
}

echo $result . PHP_EOL;
if ($result !== 'ペンパイナッポーアッポーペーン') {
    system(__FILE__);
} else {
    echo '\(^o^)/ピコ!' . PHP_EOL;
}
广告
将在 10 秒后关闭
bannerAds