awkでテトリス

awkネタ
以前どっかのサイトに載せられていたawkで作ったテトリス
これでテトリスが出来るのだからすげー。
ぜひ遊んでみてください。

# $Id: awktris.awk,v 1.4 2006/01/31 23:14:42 tnn Exp $

# awktris - tetris in 19 lines of code, or 1516 bytes.
# hand-crafted self-extracting AWK.

# (c) 2004 Tobias Nygren <tnn+awktris-awk@nygren.pp.se>
# Do whatever you like as long as I'm credited properly.

# Compatibility
# -------------
# mawk, popular on Linux systems, doesn't work because of aggressive input
# buffering. AWK was never intended for interactive use and awktris relies
# on a hack assuming the AWK implementation leaves terminal buffering alone.
# Use GNU awk instead.

# /usr/bin/awk on Solaris is horribly broken for other reasons. They however
# ship an /usr/bin/nawk which works fine. BSD awks and Tru64 work fine.


BEGIN{p="GgM{uWstty -g_;uKl=$0;close(u)}Gt(m~systemZstty _ m)}GqM{t(l);close("\
"e);exit(0)}Gp(s~printf(s)}GhM{pZ+';Ew=0;w<12;wO)pZ-';pZ+Tn'}GrM{t(l);pZT033["\
"H';hM;Ez=0;z<20;zO) {pZ|';Ew=0;w<12;wO~i=f[w+z*12];F(w-c)>=0&&(w-c)<4&&(z-d)"\
">=0&&(z-d)<4&&b[(w-c)+(z-d)*4]) iWX_;p(i)}pZ|Tn'}hM;printfZscore: %iQrows: %"\
"iQ%sQkeys: jklmqQtnn@netilium.org _,s,o,B);tZraw'}GnM{c=4;d=0;j=16*int(randM"\
"*6);Ei=0;i<16;iO)b[i]=substr(a,i+1+j,1)I_X_}GvM{N4;yO)L4;xO)FbY4]&&((V<0||V>"\
"=12||U<0||U>=20)||(f[V+(U)*12]!W '))R0;R1}A{pZT033[HT033[2J';gM;tZraw';aWaDD"\
"DDDDXDCaDXaaXDCCaXaaXXDCCaXXaaXDCDXDDCaXaaXXaaDC_;Ei=0;i<240;iO)f[i]W _;nM;e"\
"W((S :;do echo __;sleep 1;done)&(S :;do echo `dd bs=1 count=1`;done))2>/dev/"\
"null_;E;;~eKF$1I_q'qM;F$1I_j'{cP;F!vM)cO}F$1I_k'{N4;yO)L4;xO)mY4]=b[y+(3-x)*"\
"4];Ei=0;i<16;iO)b[i]=m[i];F!vM~N4;yO)L4;xO)mY4]=b[3-y+x*4];Ei=0;i<16;iO)b[i]"\
"=m[i]}}F$1I_l'{cO;F!vM)cP}F$1I_m'{S(vM~rM;dO}dP}F$1I_'{sP;dO;F!vM~dP;N4;yO)L"\
"4;xO)FbY4]&&V>=0&&V<12&&U>=0&&U<20)f[V+(U)*12]W#_;nM;j=0;N20;yO~k=1;L12;xO~F"\
"fY12]!W#'k=0}Fk~jO;oO;L12;xO~fY12]W+_;rM}Ei=y*12+11;i>11;iP)f[i]=f[i-12];Ei="\
"0;i<12;iO)f[i]W _}}FjI1~BWsingle!_;s+=50}FjI2~BWdouble!_;s+=200}FjI3~BWtripl"\
"e!_;s+=400}FjI4~BW*tetris*_;s+=800}}F!vM~BWend :Z;rM;qM}}rM}}";split("){/_)/"\
"(_/[x+y*/=_/c+x/d+y/\\/while/return / | /--/++/Ey=0;y</()/Ex=0;x</|getline;/"\
"==/function /if(/for(/XC/aaa/BEGIN/\"",b, "/");for(i=1;i<26;i++)gsub(substr(\
"~'ZYWVUTSRQPONMLKIGFEDCA_",i,1),b[i],p);system(ARGV[0] " '" p "'");exit(0)}