30 lines
676 B
Text
30 lines
676 B
Text
module Subleq
|
|
|
|
using OffsetArrays
|
|
|
|
function interpret(allwords::AbstractVector{Int})
|
|
words = OffsetArray(allwords, -1)
|
|
buf = IOBuffer()
|
|
ip = 0
|
|
while true
|
|
a, b, c = words[ip:ip+2]
|
|
ip += 3
|
|
if a < 0
|
|
print("Enter a character: ")
|
|
words[b] = parse(Int, readline(stdin))
|
|
elseif b < 0
|
|
print(buf, Char(words[a]))
|
|
else
|
|
words[b] -= words[a]
|
|
if words[b] ≤ 0
|
|
ip = c
|
|
end
|
|
ip < 0 && break
|
|
end
|
|
end
|
|
return String(take!(buf))
|
|
end
|
|
|
|
interpret(src::AbstractString) = interpret(parse.(Int, split(src)))
|
|
|
|
end # module Subleq
|