こんなズンドコキヨシは嫌だ with PHP

  • 11
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

こんなズンドコキヨシは嫌だ

  • __toString()に実装されている
  • 変数、クラス名は全て日本語
  • ズン, ドコ, キ・ヨ・シ!は定義せず変数名やクラス名から取得する
  • クロージャの即時呼び出しのジェネレータでループ
<?php
class ズンドコキ・ヨ・シ!
{
    public function __toString()
    {
        $ズンズンズンズンドコ = null;
        foreach ((function($ズンドコ) {
            loop: yield $ズンドコ[mt_rand(0, 1)];
            goto loop;
        })(str_split(__CLASS__, 6)) as $どっちか) {
            echo $どっちか, PHP_EOL;
            $ズンズンズンズンドコ .= $どっちか;
            if (strstr($ズンズンズンズンドコ, key(get_defined_vars()))) {
                return mb_substr(__CLASS__, -6) . PHP_EOL;
            }
        }
    }
}

echo new ズンドコキ・ヨ・シ!();

こんなズンドコキヨシは嫌だ

  • バッファした標準出力を用いて比較
  • ズン, ドコの出力がクラスの__get()
  • クラス変数の名前とクラス名を用いてズン, ドコを出力
  • gotoでループ処理
  • key(array_reverse(get_defined_vars()))ズンズンズンズンドコを取得したいがために余計な変数を定義させずクロージャにした
<?php
class ズンドコキ・ヨ・シ!
{
    private $_0_2;
    private $_2_2;

    public function __get($name)
    {
        list(, $offset, $limit) = explode('_', $name);
        echo mb_substr(__CLASS__, $offset, $limit);
    }
}

ob_start();
$ズンズンズンズンドコ = new ズンドコキ・ヨ・シ!();
start:
    ((function($zundoko) {
        $zd = (new ReflectionClass(get_class($zundoko)))->getProperties()[mt_rand(0, 1)]->getName();
        $zundoko->$zd;
    })($ズンズンズンズンドコ));
    if (strstr(ob_get_contents(), key(array_reverse(get_defined_vars())))) {
        echo mb_substr(get_class($ズンズンズンズンドコ), -6), PHP_EOL;
        ob_end_flush();
        exit();
    }
goto start;