RosettaCodeData/Task/Subleq/Tcl/subleq.tcl
2023-07-01 13:44:08 -04:00

24 lines
683 B
Tcl

namespace import ::tcl::mathop::-
proc subleq {pgm} {
set ip 0
while {$ip >= 0} {
lassign [lrange $pgm $ip $ip+2] a b c
incr ip 3
if {$a == -1} {
scan [read stdin 1] %C char
lset pgm $b $char
} elseif {$b == -1} {
set char [format %c [lindex $pgm $a]]
puts -nonewline $char
} else {
lset pgm $b [set res [- [lindex $pgm $b] [lindex $pgm $a]]]
if {$res <= 0} {
set ip $c
}
}
}
}
fconfigure stdout -buffering none
subleq {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 10 0}