Subleq: Difference between revisions
Content added Content deleted
m (Add R solution) |
|||
Line 1,496: | Line 1,496: | ||
0, 0, -1, 72, 101, 108, 108, 111, 44, 32, 119, 111, |
0, 0, -1, 72, 101, 108, 108, 111, 44, 32, 119, 111, |
||
114, 108, 100, 33, 10, 0])</lang> |
114, 108, 100, 33, 10, 0])</lang> |
||
=={{header|R}}== |
|||
<lang R> |
|||
mem <- c(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) |
|||
getFromMemory <- function(addr) { mem[[addr + 1]] } # because first element in mem is mem[[1]] |
|||
setMemory <- function(addr, value) { mem[[addr + 1]] <<- value } |
|||
subMemory <- function(x, y) { setMemory(x, getFromMemory(x) - getFromMemory(y)) } |
|||
instructionPointer <- 0 |
|||
while (instructionPointer >= 0) { |
|||
a <- getFromMemory(instructionPointer) |
|||
b <- getFromMemory(instructionPointer + 1) |
|||
c <- getFromMemory(instructionPointer + 2) |
|||
if (b == -1) { |
|||
cat(rawToChar(as.raw(getFromMemory(a)))) |
|||
} else { |
|||
subMemory(b, a) |
|||
if (getFromMemory(b) < 1) { |
|||
instructionPointer <- getFromMemory(instructionPointer + 2) |
|||
next |
|||
} |
|||
} |
|||
instructionPointer <- instructionPointer + 3 |
|||
} |
|||
{{out}} |
|||
<pre>Hello, world!</pre> |
|||
=={{header|Racket}}== |
=={{header|Racket}}== |