13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-16

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

  • __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;
13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?