Brainfuck: Forskelle mellem versioner
Andreas (diskussion | bidrag) (Oprettede siden med ''''Brainfuck''' er et meget minimalistisk, esoterisk programmeringssprog. Sproget blev udviklet i 1993 af Urban Müller og var et forsøg p...') |
David (diskussion | bidrag) |
||
| (2 mellemliggende versioner af en anden bruger ikke vist) | |||
| 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; | ||
| Linje 107: | Linje 107: | ||
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-] | >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-] | ||
<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+. | <.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+. | ||
Ovenstående program giver følgende output: | |||
Hello world! | |||
=== Sierpinski trekant === | === Sierpinski trekant === | ||
| Linje 142: | Linje 145: | ||
+ . + + + . [ - ] < ] + + + + + | + . + + + . [ - ] < ] + + + + + | ||
* * * * * M a d e * B y : * N Y Y R I K K I * 2 0 0 2 * * * * * | * * * * * 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!): | |||
{{#widget:Iframe | |||
|url=http://damn.dk/brainfuck.php | |||
|width=600 | |||
|height=1000 | |||
|border=0 | |||
}} | |||
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!):