Subleq: Difference between revisions
Content added Content deleted
Catskill549 (talk | contribs) |
|||
Line 244: | Line 244: | ||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
Hello, world! |
|||
</pre> |
|||
=={{header|AWK}}== |
|||
<lang AWK> |
|||
# syntax: GAWK -f SUBLEQ.AWK SUBLEQ.TXT |
|||
# converted from Java |
|||
BEGIN { |
|||
instruction_pointer = 0 |
|||
} |
|||
{ printf("%s\n",$0) |
|||
for (i=1; i<=NF; i++) { |
|||
if ($i == "*") { |
|||
ncomments++ |
|||
break |
|||
} |
|||
mem[instruction_pointer++] = $i |
|||
} |
|||
} |
|||
END { |
|||
if (instruction_pointer == 0) { |
|||
print("error: nothing to run") |
|||
exit(1) |
|||
} |
|||
printf("input: %d records, %d instructions, %d comments\n\n",NR,instruction_pointer,ncomments) |
|||
instruction_pointer = 0 |
|||
do { |
|||
a = mem[instruction_pointer] |
|||
b = mem[instruction_pointer+1] |
|||
if (a == -1) { |
|||
getline <"con" |
|||
mem[b] = $1 |
|||
} |
|||
else if (b == -1) { |
|||
printf("%c",mem[a]) |
|||
} |
|||
else { |
|||
mem[b] -= mem[a] |
|||
if (mem[b] < 1) { |
|||
instruction_pointer = mem[instruction_pointer+2] |
|||
continue |
|||
} |
|||
} |
|||
instruction_pointer += 3 |
|||
} while (instruction_pointer >= 0) |
|||
exit(0) |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
15 17 -1 17 -1 -1 16 1 -1 16 3 -1 15 15 0 0 -1 |
|||
72 101 108 108 111 44 32 119 111 114 108 100 33 * Hello, world! |
|||
10 0 |
|||
input: 3 records, 32 instructions, 1 comments |
|||
Hello, world! |
Hello, world! |
||
</pre> |
</pre> |