Created
February 12, 2019 19:57
-
-
Save nulldatamap/759cf6e12b629c3440a5fca313ca7de1 to your computer and use it in GitHub Desktop.
This file contains 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/env bash | |
INSTRUCTIONS="[<>.+]|-" | |
SETUP="s/^.+/@\\0|@0,|/" | |
ADD_OR_SUB="s/([^@]*)@([+-])([^|]*)\|(([0-9]+,)*)@([0-9]+),(([0-9]+,)*)\|(.*)/\1\2@\3|\4@\6\2,\7|\9/" | |
ADD_CELL_0="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)0\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\41\5,\6|\8/" | |
ADD_CELL_1="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)1\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\42\5,\6|\8/" | |
ADD_CELL_2="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)2\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\43\5,\6|\8/" | |
ADD_CELL_3="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)3\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\44\5,\6|\8/" | |
ADD_CELL_4="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)4\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\45\5,\6|\8/" | |
ADD_CELL_5="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)5\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\46\5,\6|\8/" | |
ADD_CELL_6="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)6\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\47\5,\6|\8/" | |
ADD_CELL_7="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)7\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\48\5,\6|\8/" | |
ADD_CELL_8="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)8\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\49\5,\6|\8/" | |
ADD_CELL_9="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)9\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\4+0\5,\6|\8/" | |
ADD_CELL_CARRY="s/([^|]+)\|(([0-9]+,)*)@\+([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@1\4,\5|\7/" | |
ADD_CELL_MAX="s/([^|]+)\|(([0-9]+,)*)@255\+,(([0-9]+,)*)\|(.*)/\1|\2@0,\4|\6/" | |
SUB_CELL_0="s/([^|]+)\|(([0-9]+,)*)@([0-9]+)0-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\4-9\5,\6|\8/" | |
SUB_CELL_1="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)1-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\40\5,\6|\8/" | |
SUB_CELL_2="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)2-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\41\5,\6|\8/" | |
SUB_CELL_3="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)3-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\42\5,\6|\8/" | |
SUB_CELL_4="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)4-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\43\5,\6|\8/" | |
SUB_CELL_5="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)5-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\44\5,\6|\8/" | |
SUB_CELL_6="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)6-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\45\5,\6|\8/" | |
SUB_CELL_7="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)7-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\46\5,\6|\8/" | |
SUB_CELL_8="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)8-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\47\5,\6|\8/" | |
SUB_CELL_9="s/([^|]+)\|(([0-9]+,)*)@([0-9]*)9-([0-9]*),(([0-9]+,)*)\|(.*)/\1|\2@\48\5,\6|\8/" | |
SUB_CELL_MIN="s/([^|]+)\|(([0-9]+,)*)@0-,(([0-9]+,)*)\|(.*)/\1|\2@255,\4|\6/" | |
SUB_CELL_REMOVE_LEADING_ZEROS="s/([^|]+)\|(([0-9]+,)*)@0+([0-9]+),(([0-9]+,)*)\|(.*)/\1|\2@\4,\5|\7/" | |
ADD_CELL="$ADD_CELL_MAX; $ADD_CELL_0; $ADD_CELL_1; $ADD_CELL_2; $ADD_CELL_3; $ADD_CELL_4;\ | |
$ADD_CELL_5; $ADD_CELL_6; $ADD_CELL_7; $ADD_CELL_8; $ADD_CELL_9; $ADD_CELL_CARRY;" | |
SUB_CELL="$SUB_CELL_MIN; $SUB_CELL_0; $SUB_CELL_1; $SUB_CELL_2; $SUB_CELL_3; $SUB_CELL_4; \ | |
$SUB_CELL_5; $SUB_CELL_6; $SUB_CELL_7; $SUB_CELL_8; $SUB_CELL_9; $SUB_CELL_REMOVE_LEADING_ZEROS" | |
MOV_LEFT_A="s/([^@]*)@<([^|]*)\|@([0-9]+),(([0-9]+,)*)\|(.*)/\1<@\2|@0,\3,\4|\6/" | |
MOV_LEFT_B="s/([^@]*)@<([^|]*)\|(([0-9]+,)*)([0-9]+),@([0-9]+),(([0-9]+,)*)\|(.*)/\1<@\2|\3@\5,\6,\7|\9/" | |
MOV_RIGHT_A="s/([^@]*)@>([^|]*)\|(([0-9]+,)*)@([0-9]+),\|(.*)/\1>@\2|\3\5,@0,|\6/" | |
MOV_RIGHT_B="s/([^@]*)@>([^|]*)\|(([0-9]+,)*)@([0-9]+),([0-9]+,)(([0-9]+,)*)\|(.*)/\1>@\2|\3\5,@\6\7|\9/" | |
LOOP_START_SKIP="s/([^@]*)@\[([^|]*)\|(([0-9]+,)*)@0,(([0-9]+,)*)\|(.*)/\1[!@~\2|\3@0,\5|\7/" | |
LOOP_START_ENTER="s/([^@]*)@\[([^|]*)\|(([0-9]+,)*)@([0-9]+),(([0-9]+,)*)\|(.*)/\1[@\2|\3@\5,\6|\8/" | |
LOOP_END_SKIP="s/([^@]*)@\]([^|]*)\|(([0-9]+,)*)@0,(([0-9]+,)*)\|(.*)/\1]@\2|\3@0,\5|\7/" | |
LOOP_END_RELOOP="s/([^@]*)@\]([^|]*)\|(([0-9]+,)*)@([0-9]+),(([0-9]+,)*)\|(.*)/\1~@!]\2|\3@\5,\6|\8/" | |
SHUTTLE_RIGHT_A="s/($INSTRUCTIONS)(~(@+)!)/\2\1/g" | |
SHUTTLE_RIGHT_B="s/\[~@!/@[/g" | |
SHUTTLE_RIGHT_C="s/\]~(@+)!/~@\1!]/g" | |
SHUTTLE_RIGHT_D="s/\[~@(@+)!/~\1![/g" | |
SHUTTLE_LEFT_A="s/!@~\]/]@/g" | |
SHUTTLE_LEFT_B="s/!@(@+)~\]/]!\1~/g" | |
SHUTTLE_LEFT_C="s/!(@+)~\[/[!\1@~/g" | |
SHUTTLE_LEFT_D="s/!(@+)~($INSTRUCTIONS)/\2!\1~/g" | |
PRINT="s/([^@]*)@\.([^|]*)\|(([0-9]+,)*)@([0-9]+),(([0-9]+,)*)\|(.*)/\1.@\2|\3@\5,\6|\8\5 /" | |
FINISH_CHECK="s/[^@]*@\|[^|]+\|(.*)/<\1>/" | |
PROGRAM="$SETUP; :start; \ | |
$ADD_OR_SUB; $PRINT; \ | |
$ADD_CELL; $SUB_CELL; \ | |
$MOV_LEFT_A; $MOV_LEFT_B; \ | |
$MOV_RIGHT_A; $MOV_RIGHT_B; \ | |
$LOOP_START_SKIP; $LOOP_START_ENTER; \ | |
$LOOP_END_SKIP; $LOOP_END_RELOOP; \ | |
$SHUTTLE_RIGHT_A; $SHUTTLE_RIGHT_B; $SHUTTLE_RIGHT_C; $SHUTTLE_RIGHT_D; \ | |
$SHUTTLE_LEFT_A; $SHUTTLE_LEFT_B; $SHUTTLE_LEFT_C; $SHUTTLE_LEFT_D; \ | |
$FINISH_CHECK; Tdone; \ | |
bstart; \ | |
:done;"\ | |
echo "$PROGRAM" | |
cat | sed -r "$PROGRAM" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment