Execute Brain****: Difference between revisions

m
Added Sidef language
(Nimrod -> Nim)
m (Added Sidef language)
Line 1,741:
 
Original source [http://seed7.sourceforge.net/algorith/puzzles.htm#brainf7].
 
=={{header|Sidef}}==
{{trans|Perl}}
<lang ruby>var tape_length = 50_000;
var eof_val = -1;
var unbalanced_exit_code = 1;
 
var cmd = 0;
var cell = 0;
var code = [];
var loops = [];
var tape = tape_length.of(0);
 
func get_input {
static input_buffer = '';
input_buffer.len || (input_buffer = STDIN.readline);
input_buffer == nil ? eof_val : (input_buffer.sub!(/^(.)/s); $1);
}
 
func jump {
var depth = 0;
while (depth >= 0) {
++cmd < code.len || exit(unbalanced_exit_code);
given (code[cmd])
when ('[') { ++depth }
when (']') { --depth };
}
}
 
var commands = :(
'>' => { ++cell },
'<' => { --cell },
'+' => { tape[cell] := 0 ++ },
'-' => { tape[cell] := 0 -- },
'.' => { tape[cell] := 0 chr print },
',' => { tape[cell] = get_input() },
'[' => { ?tape[cell] ? loops.append(cmd) : jump() },
']' => { cmd = (loops.pop - 1) },
);
 
code = ARGF.slurp.split(1);
 
loop {
if (commands.exists(code[cmd])) {
commands[code[cmd]].run;
};
++cmd < code.len || break;
}</lang>
 
=={{header|Standard ML}}==
2,747

edits