Brainfuck: Forskelle mellem versioner
Andreas (diskussion | bidrag) No edit summary |
David (diskussion | bidrag) |
||
Linje 14: | Linje 14: | ||
== Brainfuck-fortolker == | == Brainfuck-fortolker == | ||
Nedenstående java-kode kan eksekvere brainfuck programmer. | Nedenstående java-kode kan eksekvere brainfuck programmer. Programmet er skrevet af Andreas. | ||
package bf; | package bf; |
Nuværende version fra 1. sep. 2013, 19:49
Brainfuck er et meget minimalistisk, esoterisk programmeringssprog. Sproget blev udviklet i 1993 af Urban Müller og var et forsøg på at lave et Turing-komplet programmeringssprog med en meget lille compiler.
Sammenlignet med programmeringssprog til almene formål er Brainfuck svært at skrive programmer i fordi det tilbyder meget få instruktioner. Det begrænsede instruktionssæt er lige præcis tilstrækkeligt for at gøre sprogets teoretiske udtrykskraft universelt (Turing-komplet).
Sproget er derfor ikke tiltænkt som et praktisk anvendeligt sprog, men i stedet som en form for underholdning.
Brainfuck-fortolker
Nedenstående java-kode kan eksekvere brainfuck programmer. Programmet er skrevet af Andreas.
package bf; import java.io.*; public class Brainfuck { public static void main(String[] args) throws IOException { if (args.length < 1) { System.out.println("Usage: java bf.Brainfuck file.bf"); return; } String program; try (BufferedReader rdr = new BufferedReader(new FileReader(args[0]))) { program = ""; String line; while ((line = rdr.readLine()) != null) { program += line; } } int i = 0; char[] data = new char[30000]; final char[] commands = program.toCharArray(); int count = 0; for (int pos = 0; pos < commands.length; pos++) { char c = commands[pos]; switch (c) { case '>': i++; break; case '<': i--; break; case '+': data[i]++; break; case '-': data[i]--; break; case '.': System.out.print(data[i]); break; case ',': try (BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in))) { char[] in = new char[1]; rdr.read(in); data[i] = in[0]; } break; case '[': if (data[i] == 0) { count = 1; while (count > 0) { pos++; if (commands[pos] == '[') { count++; } if (commands[pos] == ']') { count--; } } } break; case ']': if (data[i] != 0) { count = 1; while (count > 0) { pos--; if (commands[pos] == '[') { count--; } if (commands[pos] == ']') { count++; } } } break; } } System.out.println(); } }
Programmer
Hello World
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-] <.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.
Ovenstående program giver følgende output:
Hello world!
Sierpinski trekant
[ This program prints Sierpinski triangle on 80-column display. ] > + + + + [ < + + + + + + + + > - ] > + + + + + + + + [ > + + + + < - ] > > + + > > > + > > > + < < < < < < < < < < [ - [ - > + < ] > [ - < + > > > . < < ] > > > [ [ - > + + + + + + + + [ > + + + + < - ] > . < < [ - > + < ] + > [ - > + + + + + + + + + + < < + > ] > . [ - ] > ] ] + < < < [ - [ - > + < ] + > [ - < + > > > - [ - > + < ] + + > [ - < - > ] < < < ] < < < < ] + + + + + + + + + + . + + + . [ - ] < ] + + + + + * * * * * M a d e * B y : * N Y Y R I K K I * 2 0 0 2 * * * * *
Ovenstående kode giver følgende output (eksekveret direkte på serveren, refresh gerne mange gange!):