ズンドコキヨシ by ズンドコスクリプト

そんなにズンドコしたいならズンドコでやろうよ。

というわけで、ズンドコスクリプトによるズンドコキヨシは以下のとおりとなりました。

````text:kiyoshi.zd
ズンズンドコズンズンズンドコドコズンズンドコズンズンズンズンドコ
ズンズンドコズンドコドコドコドコズンドコドコドコズンドコズンドコ
ズンドコドコドコズンズンドコドコズンドコドコドコズンズンドコズン
ズンズンドコズンドコドコドコドコズンドコドコズンズンズンドコズン
ズンドコドコズンドコズンズンドコズンドコドコズンドコドコドコズン
ズンズンドコズンドコドコドコドコズンドコドコズンズンドコズンドコ
ズンドコドコズンドコドコドコズンズンドコドコドコズンドコドコズン
ズンズンドコズンズンズンズンズンズンドコドコドコズンズンズンズン
ズンドコドコズンズンドコズンドコズンドコドコドコズンズンドコズン
ズンドコドコズンドコドコズンズンズンズンズンズンドコズンドコズン
ズンズンドコズンズンドコズンズンズンドコズンドコドコドコズンズン
ズンズンドコドコドコドコズンドコズンズンドコズンズンズンドコズン
ドコドコドコズンズンズンドコドコドコズンズンズンズンズンドコズン
ドコズンドコズンドコドコズンドコドコドコドコズンズンズンドコドコ
ドコズンズンズンズンズンドコドコドコズンドコドコドコズンドコドコ
ドコドコドコズンズンズンドコドコドコズンズンズンズンズンドコドコ
ドコズンドコズンドコズンズンズンドコドコドコズンズンズンドコドコ
ドコズンズンズンズンズンドコドコドコズンドコドコドコズンドコドコ
ドコドコドコズンズンズンドコドコドコズンズンズンズンズンドコズン
ドコズンドコドコズンドコドコドコズンズンドコズンズンズンズンドコ
ズンズンドコズンズンズンドコズンズンドコドコドコズンドコドコドコ
ズンドコドコズンドコズンズンズンズンドコドコズンドコズンズンドコ
ズンドコドコズンドコドコズンズンズンドコドコズンズンドコズンドコ
ズンズンドコズンズンズンズンズンズンドコドコドコズンズンドコドコ
ズンズンドコズンドコドコドコドコズンズンドコズンドコズンズンズン
ズンズンドコドコドコドコドコドコズンズンドコドコドコドコズンズン
ズンズンドコズンズンズンズンドコズンズンドコズンドコズンズンズン
ドコドコドコズンズンズンドコドコドコズンズンズンズンズンドコズン
ドコズンドコドコドコズンドコズンドコドコドコズンズンズンドコドコ
ドコズンズンズンズンズンドコドコドコズンドコドコズンズンドコドコ
ズンズンドコズンドコズンズンドコズンドコドコドコドコズンドコドコ
ズンズンドコドコズンドコズンズンズンドコドコドコドコドコズンドコ
ドコドコドコズンズンズンドコドコドコズンズンズンズンズンドコドコ
ドコズンズンズンドコズンズンドコドコドコドコズンズンズンドコドコ
ドコズンズンズンズンズンドコズンドコズンドコドコズンズンドコドコ
ズンズンドコズンドコズンズンドコズンズンドコズンズンドコズンズン
ズンズンドコズンドコドコドコドコズンドコドコドコズンズンズンドコ
ズンドコドコドコズンドコドコドコズンズンドコズンドコズンズンズン
ドコドコドコズンズンズンドコドコドコズンズンズンズンズンドコズン
ドコズンドコドコドコズンドコズンドコドコドコズンズンズンドコドコ
ドコズンズンズンズンズンドコドコドコズンドコドコズンズンドコドコ
ズンズンドコズンズンズンズンズンドコドコドコズンズンズンドコドコ
ドコズンズンズンズンズンドコドコドコズンズンズンドコズンズンドコ
ドコドコドコズンズンズンドコドコドコズンズンズンズンズンドコズン
ドコズンドコドコズンズンドコドコズンズンドコズンドコズンズンドコ
ズンドコズンドコドコズンドコドコズンズンドコドコズンズンドコズン
ズンズンドコズンドコズンドコズンズンドコドコドコズンズンドコズン
ズンドコドコズンズンズンズンドコズンドコドコズンドコドコドコズン
ズンドコドコズンズンドコズンズンズンドコズンドコドコドコズンドコ
ズンズンドコズンドコドコドコドコズンドコドコズンズンドコズンドコ
ズンズンドコドコドコズンドコドコズンドコドコドコズンズンズンズン
ズンドコドコドコズンズンドコズンズンドコドコズンドコズンズンドコ
ズンドコドコズンドコドコドコズンズンドコドコドコズンドコズンズン
ズンズンズンズンドコズンドコズンキ・ヨ・シ!
````

以下のとおり実行します。

````shell
/path/to/zdscript kiyoshi.zd
````

ズンドコスクリプトの処理系は以下のとおりです。

````perl:zdscript
#!/usr/bin/env perl
use v5.20;
use warnings;
use utf8;
use File::Temp;
my $zd = do {
    my $fh = \*STDIN;
    open $fh, '<', $ARGV[0] or die $! if @ARGV;
    binmode $fh => ':utf8';
    local $/;
    my $s = <$fh>;
    close $fh;
    $s;
};
($zd) = split/キ・ヨ・シ!/,$zd;
$zd =~ s{(ズン|ドコ)}{{ズン=>0,ドコ=>1}->{$1}}eg;
$zd =~ s/[^01]//g;
$zd =~ s{([01]{8})}{pack"C",eval"0b$1"}eg;
my $fh = File::Temp->new();
my $fn = $fh->filename;
print $fh $zd;
close $fh;
chmod 0755, $fn;
system $fn;
unlink $fn;
````

なお、以下のコードで任意の実行ファイルをズンドコスクリプト化できます。

````perl:zdencode
#!/usr/bin/env perl
use v5.20;
use warnings;
use utf8;
binmode STDOUT => ':utf8';
my $zd = join"",map{sprintf"%08b",unpack"C",$_} split //,do {
    my $fh = \*STDIN;
    open $fh, '<', $ARGV[0] or die $! if @ARGV;
    local $/;
    my $s = <$fh>;
    close $fh;
    $s;
};
$zd =~ s{(.)}{qw(ズン ドコ)[$1]}eg;
say $zd."キ・ヨ・シ!";
````

ディスアセンブラーも用意しました。

````perl:zddecode
#!/usr/bin/env perl
use v5.20;
use warnings;
use utf8;
my $zd = do {
    my $fh = \*STDIN;
    open $fh, '<', $ARGV[0] or die $! if @ARGV;
    binmode $fh => ':utf8';
    local $/;
    my $s = <$fh>;
    close $fh;
    $s;
};
($zd) = split/キ・ヨ・シ!/,$zd;
$zd =~ s{(ズン|ドコ)}{{ズン=>0,ドコ=>1}->{$1}}eg;
$zd =~ s/[^01]//g;
$zd =~ s{([01]{8})}{pack"C",eval"0b$1"}eg;
print $zd;
````

なお、`zdencode`は任意の実効ファイルをズンドコスクリプト化できます。elf binaryであろうがshell scriptだろうが。利用に関し、当方は一切のセ・キ・ニ・ン!をを負いかねますのでよろしくお願いします。

キ・ヨ・シ!じゃなくてダン。