ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

ズンドコしたい

ストリーム上の 0 と 1 の並びを sed に取り込んで、00001 かどうかを DFA っぽく検査する。

$ cat /dev/urandom \
 | LANG=C tr -dc "01" \
 | fold -w1 \
 | (sed -nf dfa.sed; echo 2) \
 | perl -ple 'BEGIN { @table = qw/ズン ドコ キ・ヨ・シ!/; } s/(.)/$table[$1]/e;' \
 | paste -sd$'\\0' -
ズンズンドコドコズンドコズンドコドコドコドコズンズンズンズンドコキ・ヨ・シ!

肝心の dfa.sed は下記の通り。 状態をラベルとして表現している。

s1 から始まって、s5 が「ドコ」を判定する状態。「ドコ」であったら、その後 quit に遷移して受理状態となる。

#!/usr/bin/env sed

:s1
          /0/ bs2
          b restart
:s2
          p; n
          /0/ bs3
          b restart
:s3
          p; n
          /0/ bs4
          b restart
:s4
          p; n
          /0/ bs5
          b restart
:s5
          p; n
          /1/ bquit
          bs5
:quit
          p; q
:restart
          p; n
          bs1