ThunderStorm (12.03.2013)
- Portal
- Community
- Forum Rules
- U-Labs Network
Account-Boerse
Downloade ohne Wartezeit und Geschwindigkeitsbeschränkung von Uploaded.net und Share-Online.biz!U-IMG
Schneller Speicherdienst für Bilder, die in Forenbeiträge eingefügt oder an Freunde gesendet werden können.
- Forum
- Programmierung
- Dokumente
- Aufgaben
- Anfänger Brainfuck-Interpreter
Thema: Brainfuck-Interpreter
-
11.03.2013, 19:42 #1U-Labs Routinier
- Registriert seit
- 19.11.2011
- Beiträge
- 496
Thanked 412 Times in 268 PostsBrainfuck-Interpreter
Hi,
wieder eine Programmieraufgabe: es soll ein Interpreter für die esoterische Programmiersprache Brainfuck programmiert werden.
Spoiler:Meine Lösung (Java)
Code:import java.io.IOException; import java.io.Reader; import java.util.Scanner; public final class BrainfuckInterpreter { private final String input; private int inputPtr; private final short[] data; private short dataPtr; public BrainfuckInterpreter(final Reader source) throws IOException { input = getInputAsString(source); data = new short[Short.MAX_VALUE]; inputPtr = dataPtr = 0; } public void interpret() { for (; inputPtr < input.length(); ++inputPtr) { switch (input.charAt(inputPtr)) { case '>': ++dataPtr; break; case '<': --dataPtr; break; case '+': ++data[dataPtr]; break; case '-': --data[dataPtr]; break; case '.': System.out.print((char) data[dataPtr]); break; case ',': data[dataPtr] = new Scanner(System.in).nextByte(); break; case '[': if (data[dataPtr] == 0) handleLoop('['); break; case ']': handleLoop(']'); --inputPtr; break; default: break; } } } private void handleLoop(final char sign) { int brackets = 1; while (brackets > 0) { switch (input.charAt(sign == '[' ? ++inputPtr : --inputPtr)) { case '[': brackets += sign == '[' ? 1 : -1; break; case ']': brackets += sign == '[' ? -1 : 1; break; } } } private String getInputAsString(final Reader source) throws IOException { final StringBuilder output = new StringBuilder(); int current = source.read(); while (current != -1) { output.append((char) current); current = source.read(); } return output.toString(); } }
Code:public final class BrainfuckInterpreterTest { public static void main(String[] args) throws FileNotFoundException, IOException { final BrainfuckInterpreter bfinterpreter = new BrainfuckInterpreter(new FileReader("/home/tobi/test.bf")); bfinterpreter.interpret(); } }
Brainfuck-Codes zum Füttern des Interpreters:
Spoiler:Hello World
Code:++++++++++ [ >+++++++>++++++++++>+++>+<<<<- ] Schleife zur Vorbereitung der Textausgabe >++. Ausgabe von 'H' >+. Ausgabe von 'e' +++++++. 'l' . 'l' +++. 'o' >++. Leerzeichen <<+++++++++++++++. 'W' >. 'o' +++. 'r' ------. 'l' --------. 'd' >+. '!' >. Zeilenvorschub +++. Wagenrücklauf
Code:Hello World
Spoiler:99 Bottles of Beer
Code:# 99 bottles of beer in Brainf*ck # Copyright (C) 2008 Raphael Bois # 1671 brainf*ck instructions. # Published under GPL v2 Initialization ++ Counter for loop (a) >+ unused >++ Counter for loop (b) > Flag for 'no more' >+ Flag for not 'no more' >>> (5) to (7) : temporary values ++++++++++[->+>+>++++++++++<<<]>>> 10 10 100 in (8) (9) (10) >++++++++++ 10 in (11) [- >+++++ 50 in (12) >++++++++++ 100 in (13) >+++++++++++ 110 in (14) >++++++++ 80 in (15) >++++++++ 80 in (16) >+++ 30 in (17) >++++ 40 in (18) >+ 10 in (19) <<<<<<<<] + >-- + 48 '0' plus 1 in (12) >++ + 102 'f' plus 1 in (13) >+++++ + 115 's' plus 1 in (14) >-- + 78 'N' plus 1 in (15) >++++ + 84 'T' plus 1 in (16) >++ + 32 ' ' plus 1 in (17) >++++ + 44 comma plus 1 in (18) > + 10 LF plus 1 in (19) stuff for writing parts of the song >+ select stuff >+ select stuff >+ write song part 3 >++ write song part 1 >+ write song part 2 >+ Flag for 'end of song' >++ Flag for not 'end of song' All bytes are at val plus 1 Go back to (7) with final initialization step (remove 1 to all bytes) [-<] <<<<<<< at (0) [ loop (a) - >> at (2) [ loop (b) >>>>>>>> at (10) [ start loop <<<<<<< at (3) [->[-] print '(N|n)o more' >>>>>>>>>>>. '(N|n)' <----. 'o' >>>. ' ' <<<--. 'm' ++. 'o' +++.+ 'r' <-.+ 'e' <<+<<<<<<<< ]+> at (4) [-<[-]>>>>> at (9) prints number (using (9) and (10)) [>>>+<<<<+<+<+>>>-]<<<[->>>+<<<]> at (6) [>>>>>>+<<<<<<-]>>>>>[[-]>.<]<<<<[>>>>>-<<<<<-]>> at (9) [<<+<+<+>>>>-]<<<<[->>>>+<<<<]> at (6) [>>>>>>+<<<<<<-]>>>>>>.<<<<<[>>>>>-<<<<<-] at (7) memorize in (11) if (10) not 1 >>>[-<<<+<+>>>>]<<<<[->>>>+<<<<]>-[[-]>>>>+<<<<]<<< at (4) ]+ >>>>>>>> at (12) print ' bottle(s) of beer' >>>>>. ' ' <<<<----. 'b' >----. 'o' +++++..- 'tt' <++++++++++. 'l' -------. 'e' <<[[-]>>>.<<<]>> 's' if (11)==1 ie if (10)!=1 >>>>. ' ' <<<----. 'o' <+. 'f' >>>>. ' ' <<<<----. 'b' +++..+ 'ee' >+++.+ 'r' [>] at (20) +>+>[->+<<-<- print ' on the wall' DOT LF LF <<<. ' ' <<<----. 'o' -. 'n' >>>. ' ' <<<++++++. 't' <++. 'h' ---. 'e' >>>>. ' ' <<<+++. 'w' <----. 'a' +++++++++++.. 'll' ------>---- reset to 'f' and 's' >---------- ---------- ---------- -- sets (15) to 'N' >>>++.-- DOT >.. LF LF >>>] at (22) >>>[->[-]<<<<<<<[<]<[-]>>[>]>>>>>]+ if end of song reset bottles counter >[-<[-] at (25) <<<< at (21) [->>[->+<<<<- print ' on the wall' COMMA ' ' <<<. ' ' <<<----. 'o' -. 'n' >>>. ' ' <<<++++++. 't' <++. 'h' ---. 'e' >>>>. ' ' <<<+++. 'w' <----. 'a' +++++++++++.. 'll' ------>---- reset (13) and (14) to 'f' and 's' >++++++++++ ++++++++++ ++++++++++ ++ sets (15) to 'n' >>>. comma <. ' ' >>>>>>]<<]< at (20) [->>>>[-<<+< at (21) <<<++.-- DOT >. LF [<]<<<<<<<< at (3) [->[-]<]+> at (4) [-<[-]> >>>>>>>>>>>>. 'T' <<<-----. 'a' ++++++++++. 'k' ------. 'e' >>>>. ' ' <<<----. 'o' -. 'n' <. 'e' >>>>. ' ' <<<<-. 'd' >+. 'o' ++++++++. 'w' ---------. 'n' >>>. ' ' <<<<---. 'a' >. 'n' <+++. 'd' >>>>. ' ' <<<++. 'p' <---. 'a' >+++.. 'ss' >>>. ' ' <<<<++++++++. 'i' >+. 't' >>>. ' ' <<<<--------. 'a' >--. 'r' ---. 'o' ++++++. 'u' -------. 'n' <+++. 'd' ++>+++++ reset (13) and (14) to 'f' and 's' >>>>. comma <. ' ' [<]<<<<<<< at (4) ]+ >>>>>> at (10) decrements values -<<<+>>[<<[-]<+<+>>>>-]<<<<[>-<[-]]>[->>>+<<<]>[->->+++++++++<<]>>> at (10) >>[>]>>>>] at (24) <<<<] at (20) >>>>>>]+ at (26) <<<<<<<[<]< at (10) ] +<+ <<<<<<+< at (2) - ] print 'Go to the store and buy some more' comma ' ' >>>>>>>>>>[>]>>>>> at (25) [->[-]<]+> at (26) [-<[-] <<<<<<<<< at (16) -------------. 'G' <<----. 'o' >>>. ' ' <<<+++++. 't' -----. 'o' >>>. ' ' <<<+++++. 't' <++. 'h' ---. 'e' >>>>. ' ' <<<-. 's' +. 't' -----. 'o' +++. 'r' <. 'e' >>>>. ' ' <<<<----. 'a' >----. 'n' <+++. 'd' >>>>. ' ' <<<<--. 'b' >+++++++. 'u' ++++. 'y' >>>. ' ' <<<------. 's' ----. 'o' --. 'm' <+++. 'e' >>>>. ' ' <<<. 'm' ++. 'o' +++.+ 'r' <.+ 'e' >>>>>. coma <. ' ' >>>>>>>>> ]+ Initialize last loop to print final '99 bottles of beer on the wall' DOT <[-]+<[-]<[-]<[-]+<<< at (19) [<]<[-]<[-]<[-]<[-] at (7) ++++++++++[->+>+>++++++++++<<<]>->->- <<<<<<[-]+<[-]<+<< at (0) ]
Code:99 bottles of beer on the wall, 99 bottles of beer. Take one down and pass it around, 98 bottles of beer on the wall. 98 bottles of beer on the wall, 98 bottles of beer. Take one down and pass it around, 97 bottles of beer on the wall. 97 bottles of beer on the wall, 97 bottles of beer. Take one down and pass it around, 96 bottles of beer on the wall. 96 bottles of beer on the wall, 96 bottles of beer. Take one down and pass it around, 95 bottles of beer on the wall. 95 bottles of beer on the wall, 95 bottles of beer. Take one down and pass it around, 94 bottles of beer on the wall. 94 bottles of beer on the wall, 94 bottles of beer. Take one down and pass it around, 93 bottles of beer on the wall. 93 bottles of beer on the wall, 93 bottles of beer. Take one down and pass it around, 92 bottles of beer on the wall. 92 bottles of beer on the wall, 92 bottles of beer. Take one down and pass it around, 91 bottles of beer on the wall. 91 bottles of beer on the wall, 91 bottles of beer. Take one down and pass it around, 90 bottles of beer on the wall. 90 bottles of beer on the wall, 90 bottles of beer. Take one down and pass it around, 89 bottles of beer on the wall. 89 bottles of beer on the wall, 89 bottles of beer. Take one down and pass it around, 88 bottles of beer on the wall. 88 bottles of beer on the wall, 88 bottles of beer. Take one down and pass it around, 87 bottles of beer on the wall. 87 bottles of beer on the wall, 87 bottles of beer. Take one down and pass it around, 86 bottles of beer on the wall. 86 bottles of beer on the wall, 86 bottles of beer. Take one down and pass it around, 85 bottles of beer on the wall. 85 bottles of beer on the wall, 85 bottles of beer. Take one down and pass it around, 84 bottles of beer on the wall. 84 bottles of beer on the wall, 84 bottles of beer. Take one down and pass it around, 83 bottles of beer on the wall. 83 bottles of beer on the wall, 83 bottles of beer. Take one down and pass it around, 82 bottles of beer on the wall. 82 bottles of beer on the wall, 82 bottles of beer. Take one down and pass it around, 81 bottles of beer on the wall. 81 bottles of beer on the wall, 81 bottles of beer. Take one down and pass it around, 80 bottles of beer on the wall. 80 bottles of beer on the wall, 80 bottles of beer. Take one down and pass it around, 79 bottles of beer on the wall. 79 bottles of beer on the wall, 79 bottles of beer. Take one down and pass it around, 78 bottles of beer on the wall. 78 bottles of beer on the wall, 78 bottles of beer. Take one down and pass it around, 77 bottles of beer on the wall. 77 bottles of beer on the wall, 77 bottles of beer. Take one down and pass it around, 76 bottles of beer on the wall. 76 bottles of beer on the wall, 76 bottles of beer. Take one down and pass it around, 75 bottles of beer on the wall. 75 bottles of beer on the wall, 75 bottles of beer. Take one down and pass it around, 74 bottles of beer on the wall. 74 bottles of beer on the wall, 74 bottles of beer. Take one down and pass it around, 73 bottles of beer on the wall. 73 bottles of beer on the wall, 73 bottles of beer. Take one down and pass it around, 72 bottles of beer on the wall. 72 bottles of beer on the wall, 72 bottles of beer. Take one down and pass it around, 71 bottles of beer on the wall. 71 bottles of beer on the wall, 71 bottles of beer. Take one down and pass it around, 70 bottles of beer on the wall. 70 bottles of beer on the wall, 70 bottles of beer. Take one down and pass it around, 69 bottles of beer on the wall. 69 bottles of beer on the wall, 69 bottles of beer. Take one down and pass it around, 68 bottles of beer on the wall. 68 bottles of beer on the wall, 68 bottles of beer. Take one down and pass it around, 67 bottles of beer on the wall. 67 bottles of beer on the wall, 67 bottles of beer. Take one down and pass it around, 66 bottles of beer on the wall. 66 bottles of beer on the wall, 66 bottles of beer. Take one down and pass it around, 65 bottles of beer on the wall. 65 bottles of beer on the wall, 65 bottles of beer. Take one down and pass it around, 64 bottles of beer on the wall. 64 bottles of beer on the wall, 64 bottles of beer. Take one down and pass it around, 63 bottles of beer on the wall. 63 bottles of beer on the wall, 63 bottles of beer. Take one down and pass it around, 62 bottles of beer on the wall. 62 bottles of beer on the wall, 62 bottles of beer. Take one down and pass it around, 61 bottles of beer on the wall. 61 bottles of beer on the wall, 61 bottles of beer. Take one down and pass it around, 60 bottles of beer on the wall. 60 bottles of beer on the wall, 60 bottles of beer. Take one down and pass it around, 59 bottles of beer on the wall. 59 bottles of beer on the wall, 59 bottles of beer. Take one down and pass it around, 58 bottles of beer on the wall. 58 bottles of beer on the wall, 58 bottles of beer. Take one down and pass it around, 57 bottles of beer on the wall. 57 bottles of beer on the wall, 57 bottles of beer. Take one down and pass it around, 56 bottles of beer on the wall. 56 bottles of beer on the wall, 56 bottles of beer. Take one down and pass it around, 55 bottles of beer on the wall. 55 bottles of beer on the wall, 55 bottles of beer. Take one down and pass it around, 54 bottles of beer on the wall. 54 bottles of beer on the wall, 54 bottles of beer. Take one down and pass it around, 53 bottles of beer on the wall. 53 bottles of beer on the wall, 53 bottles of beer. Take one down and pass it around, 52 bottles of beer on the wall. 52 bottles of beer on the wall, 52 bottles of beer. Take one down and pass it around, 51 bottles of beer on the wall. 51 bottles of beer on the wall, 51 bottles of beer. Take one down and pass it around, 50 bottles of beer on the wall. 50 bottles of beer on the wall, 50 bottles of beer. Take one down and pass it around, 49 bottles of beer on the wall. 49 bottles of beer on the wall, 49 bottles of beer. Take one down and pass it around, 48 bottles of beer on the wall. 48 bottles of beer on the wall, 48 bottles of beer. Take one down and pass it around, 47 bottles of beer on the wall. 47 bottles of beer on the wall, 47 bottles of beer. Take one down and pass it around, 46 bottles of beer on the wall. 46 bottles of beer on the wall, 46 bottles of beer. Take one down and pass it around, 45 bottles of beer on the wall. 45 bottles of beer on the wall, 45 bottles of beer. Take one down and pass it around, 44 bottles of beer on the wall. 44 bottles of beer on the wall, 44 bottles of beer. Take one down and pass it around, 43 bottles of beer on the wall. 43 bottles of beer on the wall, 43 bottles of beer. Take one down and pass it around, 42 bottles of beer on the wall. 42 bottles of beer on the wall, 42 bottles of beer. Take one down and pass it around, 41 bottles of beer on the wall. 41 bottles of beer on the wall, 41 bottles of beer. Take one down and pass it around, 40 bottles of beer on the wall. 40 bottles of beer on the wall, 40 bottles of beer. Take one down and pass it around, 39 bottles of beer on the wall. 39 bottles of beer on the wall, 39 bottles of beer. Take one down and pass it around, 38 bottles of beer on the wall. 38 bottles of beer on the wall, 38 bottles of beer. Take one down and pass it around, 37 bottles of beer on the wall. 37 bottles of beer on the wall, 37 bottles of beer. Take one down and pass it around, 36 bottles of beer on the wall. 36 bottles of beer on the wall, 36 bottles of beer. Take one down and pass it around, 35 bottles of beer on the wall. 35 bottles of beer on the wall, 35 bottles of beer. Take one down and pass it around, 34 bottles of beer on the wall. 34 bottles of beer on the wall, 34 bottles of beer. Take one down and pass it around, 33 bottles of beer on the wall. 33 bottles of beer on the wall, 33 bottles of beer. Take one down and pass it around, 32 bottles of beer on the wall. 32 bottles of beer on the wall, 32 bottles of beer. Take one down and pass it around, 31 bottles of beer on the wall. 31 bottles of beer on the wall, 31 bottles of beer. Take one down and pass it around, 30 bottles of beer on the wall. 30 bottles of beer on the wall, 30 bottles of beer. Take one down and pass it around, 29 bottles of beer on the wall. 29 bottles of beer on the wall, 29 bottles of beer. Take one down and pass it around, 28 bottles of beer on the wall. 28 bottles of beer on the wall, 28 bottles of beer. Take one down and pass it around, 27 bottles of beer on the wall. 27 bottles of beer on the wall, 27 bottles of beer. Take one down and pass it around, 26 bottles of beer on the wall. 26 bottles of beer on the wall, 26 bottles of beer. Take one down and pass it around, 25 bottles of beer on the wall. 25 bottles of beer on the wall, 25 bottles of beer. Take one down and pass it around, 24 bottles of beer on the wall. 24 bottles of beer on the wall, 24 bottles of beer. Take one down and pass it around, 23 bottles of beer on the wall. 23 bottles of beer on the wall, 23 bottles of beer. Take one down and pass it around, 22 bottles of beer on the wall. 22 bottles of beer on the wall, 22 bottles of beer. Take one down and pass it around, 21 bottles of beer on the wall. 21 bottles of beer on the wall, 21 bottles of beer. Take one down and pass it around, 20 bottles of beer on the wall. 20 bottles of beer on the wall, 20 bottles of beer. Take one down and pass it around, 19 bottles of beer on the wall. 19 bottles of beer on the wall, 19 bottles of beer. Take one down and pass it around, 18 bottles of beer on the wall. 18 bottles of beer on the wall, 18 bottles of beer. Take one down and pass it around, 17 bottles of beer on the wall. 17 bottles of beer on the wall, 17 bottles of beer. Take one down and pass it around, 16 bottles of beer on the wall. 16 bottles of beer on the wall, 16 bottles of beer. Take one down and pass it around, 15 bottles of beer on the wall. 15 bottles of beer on the wall, 15 bottles of beer. Take one down and pass it around, 14 bottles of beer on the wall. 14 bottles of beer on the wall, 14 bottles of beer. Take one down and pass it around, 13 bottles of beer on the wall. 13 bottles of beer on the wall, 13 bottles of beer. Take one down and pass it around, 12 bottles of beer on the wall. 12 bottles of beer on the wall, 12 bottles of beer. Take one down and pass it around, 11 bottles of beer on the wall. 11 bottles of beer on the wall, 11 bottles of beer. Take one down and pass it around, 10 bottles of beer on the wall. 10 bottles of beer on the wall, 10 bottles of beer. Take one down and pass it around, 9 bottles of beer on the wall. 9 bottles of beer on the wall, 9 bottles of beer. Take one down and pass it around, 8 bottles of beer on the wall. 8 bottles of beer on the wall, 8 bottles of beer. Take one down and pass it around, 7 bottles of beer on the wall. 7 bottles of beer on the wall, 7 bottles of beer. Take one down and pass it around, 6 bottles of beer on the wall. 6 bottles of beer on the wall, 6 bottles of beer. Take one down and pass it around, 5 bottles of beer on the wall. 5 bottles of beer on the wall, 5 bottles of beer. Take one down and pass it around, 4 bottles of beer on the wall. 4 bottles of beer on the wall, 4 bottles of beer. Take one down and pass it around, 3 bottles of beer on the wall. 3 bottles of beer on the wall, 3 bottles of beer. Take one down and pass it around, 2 bottles of beer on the wall. 2 bottles of beer on the wall, 2 bottles of beer. Take one down and pass it around, 1 bottle of beer on the wall. 1 bottle of beer on the wall, 1 bottle of beer. Take one down and pass it around, no more bottles of beer on the wall. No more bottles of beer on the wall, no more bottles of beer. Go to the store and buy some more, 99 bottles of beer on the wall.
-
The Following User Says Thank You to Mr. White For This Useful Post:
Gehe zu:
Aufgaben
Nach oben
- Bereiche
- Benutzerkontrollzentrum
- Private Nachrichten
- Abonnements
- Wer ist online
- Foren durchsuchen
- Forum-Startseite
- Foren
- U-Labs Intern
- Talk, Talk, Talk!
- News-Bereich
- Multimedia
- Technikecke
- Programmierung
- Gaming Area
- Knuddels und die Szene
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:52 Uhr.
Powered by vBulletin® - © Jelsoft Enterprises Ltd.