読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

PHPですべてをFにしたかった

すべてをFにしたかった結果

<?php

require "F";

F('FFffFfF FFfffFF FFfFfff FFfFFFF Ffffff FfffFf FfFfFff FFfFfff FFffFfF Ffffff FfFffff FFffFfF FFFffFf FFffFFf FFffFfF FFfffFF FFFfFff Ffffff FffFffF FFfFFFf FFFffFF FFfFffF FFffFff FFffFfF FFFffFf FfFFFf FfFFFff FFfFFFf FfffFf FFFfFF FfFf');
The Perfect Insider.

最初の <?php と require を消す方法は何かないだろうか…。
あと小文字のfを使うのも妥協した。

やったこと

F = 1, f = 0 に見立てて、2進数 -> 10進数 -> 文字化して、最後にeval()しただけ。

F
<?php

function F($str) {
    $str = str_replace('f', '0', $str);
    $str = str_replace('F', '1', $str);

    $ret = "";
    foreach (explode(' ', $str) as $s) {
        $ret .= chr(bindec($s));
    }

    eval($ret);
}

F()に渡す文字列を作るのは、その逆をすればよい。

<?php

$filepath = $argv[1];

$ret = [];

foreach (file($filepath) as $line) {
    foreach (str_split($line) as $c) {
        $ret[] = decbin(ord($c));
    }
}
$ret = implode(' ', $ret);

$ret = str_replace('0', 'f', $ret);
$ret = str_replace('1', 'F', $ret);

echo $ret;