Created
April 21, 2012 11:53
-
-
Save Leask/2436760 to your computer and use it in GitHub Desktop.
sed tetris by Julia Jomantaite
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/sed -nf | |
| # sedtris.sed - sed tetris | |
| # 26th of May, 2008 | |
| # Julia Jomantaite <[email protected]> | |
| 1{ | |
| s/.*/ 2a2a2a2a|3a3a3a3a3a3a3a3a3a3a|2a2a2a2a~/ | |
| s/[^~]*~$/&&&/ | |
| s/.*/& 2a2a2a2a|0a0a0a0a0a0a0a0a0a0a|2a2a2a2a~/ | |
| s/[^~]*~$/&&&&&&&&&&&&&&&&&&&&/ | |
| s// 2a2a2a2a|4a4a4a4a4a4a4a4a4a4a|2a2a2a2a~/ | |
| s/[^~]*~$/&&&/ | |
| s/.*/~&/ | |
| s/$/#....,,,~/ | |
| s/$/#AAAA AAAA APPA APPA~/ | |
| s/$/#AAAA ANAA LPOA AHAA~/ | |
| s/$/#AAAA BKIA FPFA CKEA~/ | |
| s/$/#AAAA EDCA GPJA IMBA~/ | |
| s/$/#ACIA EGME BDJB ACIA~/ | |
| s/$/#AAAA IKEA FPFA BKCA~/ | |
| s/$/#AAAA CGBA MPDA EJIA~/ | |
| s/$/#NEXTAAAA ANAA LPOA AHAA 5~/ | |
| s/$/#SCORE0~/ | |
| h | |
| b display | |
| } | |
| /1/{s/1//;x;s/#\.\.*/&./;s/#\.\{8\}/#./;x;} | |
| /^w/b rotate | |
| /^a/b left | |
| /^d/b right | |
| /^s/b nothing | |
| /^\[A/b rotate | |
| /^\[D/b left | |
| /^\[C/b right | |
| /^\[B/b nothing | |
| /^$/b nothing | |
| /^[z ]/{ | |
| g | |
| s/#\.*/&.../ | |
| s/#\.\{8\}/#./ | |
| s/$/#FALL~/ | |
| h | |
| b nothing | |
| } | |
| b display | |
| :rotate | |
| g | |
| s/#\.*/&./ | |
| s/#\.\{8\}/#./ | |
| /[14-9x][e-h]/! {/2[e-h]/!y/abcdefghijklmnop/acegikmobdfhjlnp/;} | |
| h | |
| b display | |
| :left | |
| g | |
| s/#\.*/&../ | |
| s/#\.\{8\}/#./ | |
| /|[0-9x][i-p]/! {/[14-9x][a-p][0-9x][i-p]/! { | |
| s/\([0-9x]\)a\(|\{0,1\}\)\([0-9x]\)\([b-p]\)/\1\4\2\3a/g | |
| s/\([b-p]\)\(|\{0,1\}\)\([0-9x]\)a\(|\{0,1\}\)\([0-9x]\)\([b-p]\)/\1\2\3\6\4\5a/g | |
| s/\([b-p]\)\(|\{0,1\}\)\([0-9x]\)a\(|\{0,1\}\)\([0-9x]\)\([b-p]\)/\1\2\3\6\4\5a/g | |
| s/\([b-p]\)\(|\{0,1\}\)\([0-9x]\)a\(|\{0,1\}\)\([0-9x]\)\([b-p]\)/\1\2\3\6\4\5a/g | |
| };} | |
| h | |
| b display | |
| :right | |
| g | |
| s/#\.*/&./ | |
| s/#\.\{8\}/#./ | |
| /[i-p]|/! {/[i-p][14-9x]/!{ | |
| s/\([0-9x]\)\([b-p]\)\(|\{0,1\}\)\([0-9x]\)a/\1a\3\4\2/g | |
| s/\([0-9x]\)\([b-p]\)\(|\{0,1\}\)\([0-9x]\)a\(|\{0,1\}\)\([0-9x]\)\([b-p]\)/\1a\3\4\2\5\6\7/g | |
| s/\([0-9x]\)\([b-p]\)\(|\{0,1\}\)\([0-9x]\)a\(|\{0,1\}\)\([0-9x]\)\([b-p]\)/\1a\3\4\2\5\6\7/g | |
| s/\([0-9x]\)\([b-p]\)\(|\{0,1\}\)\([0-9x]\)a\(|\{0,1\}\)\([0-9x]\)\([b-p]\)/\1a\3\4\2\5\6\7/g | |
| };}; | |
| h | |
| b display | |
| :nothing | |
| g | |
| #New brick | |
| /~ \(2a\)*|\([15-9x]a\)*|\(2a\)*~/! { | |
| /[b-p]/! { | |
| #Set % before all 4-letter "words" | |
| t e | |
| :e | |
| s/\(#NEXT\(\( \)\{0,1\}%[A-P]\)*\)\( \)\{0,1\}\([A-P]\)/\1\4%\5/ | |
| t e | |
| #Set @ before probable new letters | |
| s/^\(~[^~]*~[^~]*~.\{17\}\)\(..\)\(..\)\(..\)\(..\)/\1@\2@\3@\4@\5/ | |
| s/^\(~[^~]*~[^~]*~[^~]*~.\{17\}\)\(..\)\(..\)\(..\)\(..\)/\1@\2@\3@\4@\5/ | |
| t blank2 | |
| :blank2 | |
| /#NEXT\([^%]*%\)\{13\}[A-H]%[A-H]%[A-H]%[A-H]/{ | |
| s/^\(~[^~]*~[^~]*~[^~]*~[^~]*~.\{17\}\)\(..\)\(..\)\(..\)\(..\)/\1@\2@\3@\4@\5/ | |
| /#NEXT\([^%]*%\)\{9\}[A-H]%[A-H]%[A-H]%[A-H]/{ | |
| s/^\(~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~.\{17\}\)\(..\)\(..\)\(..\)\(..\)/\1@\2@\3@\4@\5/ | |
| b v2 | |
| } | |
| b v1 | |
| } | |
| s/^\(~.\{17\}\)\(..\)\(..\)\(..\)\(..\)/\1@\2@\3@\4@\5/ | |
| :v1 | |
| s/^\(~[^~]*~.\{17\}\)\(..\)\(..\)\(..\)\(..\)/\1@\2@\3@\4@\5/ | |
| :v2 | |
| #Add real new letters (capital) | |
| t f | |
| :f | |
| /^\([^@]*\)[15-9x]@.\([^%]*\)%[I-P]/s/$/#OVER~/ | |
| s/^\([^@]*\)@.\([^%]*\)%\([A-P]\)/\1\3\2\3/ | |
| t f | |
| #Decapitalization | |
| h | |
| s/^\(~[^~]*\)\{6\}~// | |
| x | |
| s/^\(\(~[^~]*\)\{6\}\)\(.*\)$/\1/ | |
| y/ABCDEFGHIJKLMNOP/abcdefghijklmnop/ | |
| x | |
| H | |
| #Add "Current" | |
| g | |
| s/\n/~/ | |
| s/#CURRENT.~//g | |
| s/\(#NEXT[^~]*\)\([0-9x]\)\(.*\)$/\1\2\3#CURRENT\2~/ | |
| #Add NEXT | |
| :g | |
| /\./{ | |
| s/#/$/ | |
| s/\./@/ | |
| b g | |
| } | |
| s/@/./g | |
| s/^\([^#]*\)#\([^~]*\)\(.*\)\(#NEXT[^~]*\)/\1#\2\3#NEXT\2/ | |
| s/\([^.]\)\(\.\)\([^.]*\)\(#NEXT[^~]*\)/\1\2\3\4 1/ | |
| s/\([^.]\)\(\.\{2\}\)\([^.]*\)\(#NEXT[^~]*\)/\1\2\3\4 5/ | |
| s/\([^.]\)\(\.\{3\}\)\([^.]*\)\(#NEXT[^~]*\)/\1\2\3\4 6/ | |
| s/\([^.]\)\(\.\{4\}\)\([^.]*\)\(#NEXT[^~]*\)/\1\2\3\4 7/ | |
| s/\([^.]\)\(\.\{5\}\)\([^.]*\)\(#NEXT[^~]*\)/\1\2\3\4 8/ | |
| s/\([^.]\)\(\.\{6\}\)\([^.]*\)\(#NEXT[^~]*\)/\1\2\3\4 9/ | |
| s/\([^.]\)\(\.\{7\}\)\([^.]*\)\(#NEXT[^~]*\)/\1\2\3\4 x/ | |
| s/\$/#/g | |
| h | |
| s/\(,*\)\([^,]*#NEXT[^~]*\)/\1\2\1/ | |
| s/.*#NEXT\([^~]*\)~.*/\1/ | |
| :g2 | |
| /,/{ | |
| s/\,/@/ | |
| y/ABCDEFGHIJKLMNOP/ACEGIKMOBDFHJLNP/ | |
| b g2 | |
| } | |
| s/@//g | |
| H | |
| g | |
| s/\n/~/ | |
| s/\(#NEXT\)[^~]*\(~.*\)~\([^~]*\)$/\1\3\2/ | |
| h | |
| b display | |
| };}; | |
| #Eat that line | |
| t d | |
| :d | |
| /~ \(2a\)*|\([15-9x]a\)*|\(2a\)*~/ { | |
| s/~ \(2a\)*|\([15-9x]a\)*|\(2a\)*// | |
| s/^~\([^~]*~\)\{3\}/& 2a2a2a2a|0a0a0a0a0a0a0a0a0a0a|2a2a2a2a~/ | |
| s/#SCORE[^~]*/&A/ | |
| b d | |
| } | |
| #Scoring | |
| /#SCORE[^~]*A/{ | |
| s/\(#SCORE[^~]*\)AAAA/\1+1200z/ | |
| s/\(#SCORE[^~]*\)AAA/\1+300z/ | |
| s/\(#SCORE[^~]*\)AA/\1+100z/ | |
| s/\(#SCORE[^~]*\)A/\1+40z/ | |
| /#SCORE[0-9]*+[0-9]*z/{ | |
| s/+/@+/ | |
| :finnul | |
| /0z/{ | |
| /#SCORE@/b endsum | |
| s/\(.\)@/@\1/ | |
| s/0z/z/ | |
| /+z/b endsum | |
| b finnul | |
| } | |
| t incr | |
| :incr | |
| s/9\(%*\)@/%\1@/ | |
| t incr | |
| s/#SCORE\(%*\)@/#SCORE0\1@/ | |
| s/8\(%*\)@/9\1@/ | |
| s/7\(%*\)@/8\1@/ | |
| s/6\(%*\)@/7\1@/ | |
| s/5\(%*\)@/6\1@/ | |
| s/4\(%*\)@/5\1@/ | |
| s/3\(%*\)@/4\1@/ | |
| s/2\(%*\)@/3\1@/ | |
| s/1\(%*\)@/2\1@/ | |
| s/0\(%*\)@/1\1@/ | |
| s/%/0/g | |
| t blank | |
| :blank | |
| s/9z/8z/ | |
| t incr | |
| s/8z/7z/ | |
| t incr | |
| s/7z/6z/ | |
| t incr | |
| s/6z/5z/ | |
| t incr | |
| s/5z/4z/ | |
| t incr | |
| s/4z/3z/ | |
| t incr | |
| s/3z/2z/ | |
| t incr | |
| s/2z/1z/ | |
| t incr | |
| s/1z/0z/ | |
| t finnul | |
| :endsum | |
| s/@// | |
| s/#SCORE\([0-9]*\)+\([0-9]*\)z/#SCORE\2\1/ | |
| } | |
| h | |
| b display | |
| } | |
| #Falling down | |
| :fall | |
| /~[^~]*[03][i-p].\{38\}[14-9x]/! { | |
| :c | |
| #Find the lowest line with the... | |
| s/\(~[^~]*[b-p][^~]*\)~\([^b-p~]*~\)/\1z\2/ | |
| s/~\([^~b-p]*\)\([b-p]\)\([^~]\{39\}\)[a-p]/~\1a\3\2/ | |
| s/~\([^~b-p]*\)\([b-p]\)\([^~]\{39\}\)[a-p]/~\1a\3\2/ | |
| s/~\([^~b-p]*\)\([b-p]\)\([^~]\{39\}\)[a-p]/~\1a\3\2/ | |
| s/~\([^~b-p]*\)\([b-p]\)\([^~]\{39\}\)[a-p]/~\1a\3\2/ | |
| s/z/~/ | |
| /[^~]*[b-p][^~]*~[^~b-p]*~[^~]*[b-p][^~]*/b c | |
| /#FALL~$/b fall | |
| h | |
| b display | |
| } | |
| s/#FALL~//g | |
| #Freezing | |
| s/0[b-h]/0a/g | |
| t i | |
| :i | |
| s/\(0[i-p]\)\(.*#CURRENT\)\(.\)/\3a\2\3/ | |
| t i | |
| s/\([15-9x]\)[b-p]/\1a/g | |
| s/2[b-p]/2a/g | |
| s/3[b-h]/3a/g | |
| s/4[b-p]/4a/g | |
| #if it's over | |
| /3[i-p]/ s/$/#OVER~/ | |
| /[15-9x][i-p]/{ | |
| s/\([15-9x]\)\([i-p]\)/\1a/g | |
| s/$/#OVER~/ | |
| } | |
| h | |
| #Display | |
| :display | |
| g | |
| s/#\.*/&./ | |
| s/#\.\{8\}/#./ | |
| s/,\{1,\}/&,/ | |
| s/,\{5\}/,/ | |
| s/#FALL~//g | |
| h | |
| s/^~/~ +----------+~/ | |
| s/~[^~]*~$/& +----------+/ | |
| s/~[^~]*|[^~]*3[^~]*//g | |
| s/~[^~]*|[^~]*4[^~]*//g | |
| s/2[a-h]//g | |
| s/\([15-9x]\)[i-p]/\1a/g | |
| /#OVER/s/^\(\(~[^~]*\)\{6\}~\)\([^~]*~\)/\1 |GAME OVER!|~/ | |
| /#CURRENT1/s/0[i-p]/[1;46;36mO[m/g | |
| /#CURRENT5/s/0[i-p]/[1;44;34mO[m/g | |
| /#CURRENT6/s/0[i-p]/[1;45;35mO[m/g | |
| /#CURRENT7/s/0[i-p]/[1;42;32mO[m/g | |
| /#CURRENT8/s/0[i-p]/[1;41;31mO[m/g | |
| /#CURRENT9/s/0[i-p]/[1;43;33mO[m/g | |
| /#CURRENTx/s/0[i-p]/[0;47;30mO[m/g | |
| s/0[a-h]/ /g | |
| #s/[+|\-]/[7m&[m/g | |
| s/1[a-h]/[1;46;36mX[m/g | |
| s/5[a-h]/[1;44;34mX[m/g | |
| s/6[a-h]/[1;45;35mX[m/g | |
| s/7[a-h]/[1;42;32mX[m/g | |
| s/8[a-h]/[1;41;31mX[m/g | |
| s/9[a-h]/[1;43;33mX[m/g | |
| s/x[a-h]/[0;47;30mX[m/g | |
| :decap | |
| /#NEXT[^~]*[A-P]/{ | |
| s/\(#NEXT[^~]*\)[A-H]/\1 / | |
| s/\(#NEXT[^~]*\)[I-P]/\1X/ | |
| b decap | |
| } | |
| s/\(#NEXT[^~]*\) /\1/ | |
| s/^\(\(~[^~]*\)\{2\}\)/& Next:/ | |
| s/^\(\(~[^~]*\)\{3\}\)\(.*\)\(#NEXT\([^~]\{4\}\)\)/\1 \5\3\4/ | |
| s/^\(\(~[^~]*\)\{4\}\)\(.*\)\(#NEXT[^~]\{4\} \([^~]\{4\}\)\)/\1 \5\3\4/ | |
| s/^\(\(~[^~]*\)\{5\}\)\(.*\)\(#NEXT\([^~]\{4\} \)\{2\}\([^~]\{4\}\)\)/\1 \6\3\4/ | |
| s/^\(\(~[^~]*\)\{6\}\)\(.*\)\(#NEXT\([^~]\{4\} \)\{3\}\([^~]\{4\}\)\)/\1 \6\3\4/ | |
| s/^\(\(~[^~]*\)\{7\}\)\(.*\)\(#SCORE\([^~]*\)\)/\1 Score:\5 \3\4/ | |
| s/ \(X\{1,4\}\)/ [7m\1[m /g | |
| s/^\(\(~[^~]*\)\{9\}\)/& "w" or up - rotate/ | |
| s/^\(\(~[^~]*\)\{10\}\)/& "a" or left - left/ | |
| s/^\(\(~[^~]*\)\{11\}\)/& "d" or right - right/ | |
| s/^\(\(~[^~]*\)\{12\}\)/& "s" or down - one step down/ | |
| s/^\(\(~[^~]*\)\{13\}\)/& "z" or space - drop down/ | |
| #uncomment the line below to switch colours off | |
| #s/\[\([0-9]*;\)*[0-9]*m//g | |
| s/#[^~]*~//g | |
| s/^~// | |
| s/~/\ | |
| /g | |
| i\ | |
| [2J[H | |
| p | |
| /GAME OVER!/q |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment