mirror of
https://github.com/Noratrieb/brainfuck.git
synced 2026-01-16 14:25:03 +01:00
works kind of
This commit is contained in:
parent
6bec58b802
commit
05a0937e2c
3 changed files with 10 additions and 18 deletions
|
|
@ -23,8 +23,8 @@ public class Brainfuck {
|
||||||
short[] memory = new short[MEM_SIZE];
|
short[] memory = new short[MEM_SIZE];
|
||||||
int pc = 0;
|
int pc = 0;
|
||||||
|
|
||||||
|
|
||||||
while (pc < pgm.size()) {
|
while (pc < pgm.size()) {
|
||||||
|
if (pointer > 1000) break;
|
||||||
switch (pgm.get(pc)) {
|
switch (pgm.get(pc)) {
|
||||||
case '>' -> {
|
case '>' -> {
|
||||||
if (pointer == MEM_SIZE - 1) {
|
if (pointer == MEM_SIZE - 1) {
|
||||||
|
|
@ -37,12 +37,14 @@ public class Brainfuck {
|
||||||
if (pointer == 0) {
|
if (pointer == 0) {
|
||||||
pointer = MEM_SIZE - 1;
|
pointer = MEM_SIZE - 1;
|
||||||
} else {
|
} else {
|
||||||
pointer++;
|
pointer--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case '+' -> increment(memory, pointer);
|
case '+' -> increment(memory, pointer);
|
||||||
case '-' -> decrement(memory, pointer);
|
case '-' -> decrement(memory, pointer);
|
||||||
case '.' -> out.append((char) memory[pointer]);
|
case '.' -> {
|
||||||
|
out.append((char) memory[pointer]);
|
||||||
|
}
|
||||||
case ',' -> {
|
case ',' -> {
|
||||||
} //todo implement i guess
|
} //todo implement i guess
|
||||||
case '[' -> {
|
case '[' -> {
|
||||||
|
|
@ -56,14 +58,14 @@ public class Brainfuck {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case ']' -> {
|
case ']' -> { //error lies here
|
||||||
if (memory[pointer] != 0) {
|
if (memory[pointer] != 0) {
|
||||||
int level = 0;
|
int level = 0;
|
||||||
while (pgm.get(pc) != '[' || level >= -1) {
|
while (pgm.get(pc) != '[' || level > -1) {
|
||||||
pc--;
|
pc--;
|
||||||
char instruction = pgm.get(pc);
|
char instruction = pgm.get(pc);
|
||||||
if (instruction == '[') level--;
|
if (instruction == '[') level--;
|
||||||
if (instruction == ']') level++;
|
else if (instruction == ']') level++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -101,7 +103,6 @@ public class Brainfuck {
|
||||||
|
|
||||||
String program = Files.readString(Paths.get(args[0]));
|
String program = Files.readString(Paths.get(args[0]));
|
||||||
List<Character> minified = brainfuck.minify(program);
|
List<Character> minified = brainfuck.minify(program);
|
||||||
|
|
||||||
String result = brainfuck.interpret(minified);
|
String result = brainfuck.interpret(minified);
|
||||||
|
|
||||||
System.out.println(result);
|
System.out.println(result);
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1 @@
|
||||||
++++++++++[>++++++++++<-]>>++++++++++>->>>>>>>>>>>>>>>>-->+++++++[->++
|
++++++++++[>+++++++++<-].
|
||||||
++++++++<]>[->+>+>+>+<<<<]+++>>+++>>>++++++++[-<++++<++++<++++>>>]++++
|
|
||||||
+[-<++++<++++>>]>>-->++++++[->+++++++++++<]>[->+>+>+>+<<<<]+++++>>+>++
|
|
||||||
++++>++++++>++++++++[-<++++<++++<++++>>>]++++++[-<+++<+++<+++>>>]>>-->
|
|
||||||
---+[-<+]-<[+[->+]-<<->>>+>[-]++[-->++]-->+++[---++[--<++]---->>-<+>[+
|
|
||||||
+++[----<++++]--[>]++[-->++]--<]>++[--+[-<+]->>[-]+++++[---->++++]-->[
|
|
||||||
->+<]>>[.>]++[-->++]]-->+++]---+[-<+]->>-[+>>>+[-<+]->>>++++++++++<<[-
|
|
||||||
>+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>
|
|
||||||
+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->+++
|
|
||||||
+++++<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]+[-<+]->>]+[-]<<<.>>>+[
|
|
||||||
-<+]-<<]
|
|
||||||
|
|
@ -19,6 +19,7 @@ fn run(path: String) {
|
||||||
println!("Path: {}", path);
|
println!("Path: {}", path);
|
||||||
let program = fs::read_to_string(path).unwrap();
|
let program = fs::read_to_string(path).unwrap();
|
||||||
let program = minify(program);
|
let program = minify(program);
|
||||||
|
println!("{}", program);
|
||||||
|
|
||||||
let start = SystemTime::now();
|
let start = SystemTime::now();
|
||||||
let out = interpret(program.chars().collect());
|
let out = interpret(program.chars().collect());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue