/=1/=9/! /^(.*)=x/M$1/ # Don't use quoting for this program, as it'll just disturb the count. # (It doesn't matter what we use for each character, as there are only # four distinct possibilities.) Make sure this doesn't clash with what # we use later! /=[^x~?!]/*/ /=([^x])/$1/ # Mfit # ? does nothing on Mfit if the program has an even length. /^M\?((..)*.)$/S$1/ # Otherwise, it cycles ? to ! to ~ to ?. /^M\?((..)*)$/C%%$1/ /%%\?/!%%/ /%%!/~%%/ /%%~/?%%/ /^C(.*)%%/S$1/ # ~ duplicates the source code. /^M~(.*)$/S$1$1/ # Anything else prints the length of the source as an ASCII character. /^M(.*)()/$ /^M/P$g:128:/ /^P([0-9]+):(128):/# /^P([0-9]+):(128):/P$m:0:/ /^P([0-9]+):(0):/# /^P([0-9]+):(0):/P-$c-/ /^P-([^a]|[^b])-/| /^P-([^a]|[^b])-./S/ # Shanty # ! duplicates the source code. /^S!(.*)$/M$1$1/ # ? reverses the source code. /^S\?/R--/ /--(.*)(.)$/$2--$1/ /^R(.*)--/M$1/ # Anything else errors out. /^S(.*)()/$ /^S.*$/O$g/ /^O(.*)$/| /^O(.*)$/=n=x=9/ /=1/* /=1// .