September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
55
Task/Execute-SNUSP/Julia/execute-snusp.julia
Normal file
55
Task/Execute-SNUSP/Julia/execute-snusp.julia
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
const echo2 = raw"""
|
||||
/==!/======ECHO==,==.==#
|
||||
| |
|
||||
$==>==@/==@/==<==#"""
|
||||
|
||||
@enum Direction left up right down
|
||||
|
||||
function snusp(datalength, progstring)
|
||||
stack = Vector{Tuple{Int, Int, Direction}}()
|
||||
data = zeros(datalength)
|
||||
dp = ipx = ipy = 1
|
||||
direction = right # default to go to right at beginning
|
||||
|
||||
lines = split(progstring, "\n")
|
||||
lmax = maximum(map(length, lines))
|
||||
lines = map(x -> rpad(x, lmax), lines)
|
||||
for (y, li) in enumerate(lines)
|
||||
if (x = findfirst("\$", li)) != nothing
|
||||
(ipx, ipy) = (x[1], y)
|
||||
end
|
||||
end
|
||||
|
||||
instruction = Dict([('>', ()-> dp += 1),
|
||||
('<', ()-> (dp -= 1; if dp < 0 running = false end)), ('+', ()-> data[dp] += 1),
|
||||
('-', ()-> data[dp] -= 1), (',', ()-> (data[dp] = read(stdin, UInt8))),
|
||||
('.', ()->print(Char(data[dp]))),
|
||||
('/', ()-> (d = Int(direction); d += (iseven(d) ? 3 : 5); direction = Direction(d % 4))),
|
||||
('\\', ()-> (d = Int(direction); d += (iseven(d) ? 1 : -1); direction = Direction(d))),
|
||||
('!', () -> ipnext()), ('?', ()-> if data[dp] == 0 ipnext() end),
|
||||
('@', ()-> push!(stack, (ipx, ipy, direction))),
|
||||
('#', ()-> if length(stack) > 0 (ipx, ipy, direction) = pop!(stack) end),
|
||||
('\n', ()-> (running = false))])
|
||||
|
||||
inboundsx(plus) = (plus ? (ipx < lmax) : (ipx > 1)) ? true : exit(data[dp])
|
||||
inboundsy(plus) = (plus ? (ipy < length(lines)) : (ipy > 1)) ? true : exit(data[dp])
|
||||
function ipnext()
|
||||
if direction == right && inboundsx(true) ipx += 1
|
||||
elseif direction == left && inboundsx(false) ipx -= 1
|
||||
elseif direction == down && inboundsy(true) ipy += 1
|
||||
elseif direction == up && inboundsy(false) ipy -= 1
|
||||
end
|
||||
end
|
||||
|
||||
running = true
|
||||
while running
|
||||
cmdcode = lines[ipy][ipx]
|
||||
if haskey(instruction, cmdcode)
|
||||
instruction[cmdcode]()
|
||||
end
|
||||
ipnext()
|
||||
end
|
||||
exit(data[dp])
|
||||
end
|
||||
|
||||
snusp(100, echo2)
|
||||
Loading…
Add table
Add a link
Reference in a new issue