PHPでターミナルに黒魔道士を出す
<?php // draw.php foreach (str_split(stream_get_contents(STDIN), 1) as $c) { echo ctype_digit($c) ? "\x1b[" . ($c + 40) . "m \x1b[0m" : ($c === ' ' ? ' ' : $c); }
kuro.datという以下のような内容のファイルを用意。
00 00330 033320 0033320 003333220 000000033332220 0333333332222220 02222333322220 0002222333200 00002222220 030000022220 00300300002220 04000030000400 040000000000040 044400044444440 00444444400040 0330444440044440 03304444033044440 004404403304440 040440040044440 040444440044440 044044440044440 044404444044440 0444400444044040 044444444444004440 0000000000000000
コマンドを叩くと黒魔道士が現れる。
$ cat kuro.dat | php draw.php
追記
ワンライナー版も書いた。
<?= preg_replace(['/[0-9]/', '/ /'], ["\x1b[4\$0m \x1b[0m", ' '], stream_get_contents(STDIN));
preg_replaceに配列渡すの初めて使った気がする。
追記2
factor版も書いてみた。
IN: . USING: io kernel sequences prettyprint strings ; : colorize ( str -- escaped ) "\e[4" "m \e[0m" swapd 3append ; : a ( ch -- str ) [ 1string ] keep "0123456789" member? [ colorize ] when ; : b ( ch -- str ) 1string dup " " = [ drop " " ] when ; contents [ a [ b write ] each ] each