-
04.11.09 17:12 #16
Aber ich hoffe, dass sich das mit der Zeit ändert. Leider wird man damit aber dann mehr Zeichen benötigen, und 8 fand ich für eine Programmiersprache sehr passend.

Ciao
DosCoderMan kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.
Sollte ich mal Mist labern weist mich bitte darauf hin.
Ich freue mich über ein Danke, wenn ich helfen konnte!
-
Das ist auch garnicht wahr. Man könnte eine Art SysCall implementieren.
zB können wir "Datei öffnen" so implementieren:- Schreibe den Dateinamen, nullterminiert, in die Speicherzellen 2 bis n
- Schreibe eine '1' für "open" in die Speicherzelle 1
- Erhöhe den Wert in Speicherzelle 0 um 1
- Lese das Dateihandle aus Speicherzelle 1
Der Interpreter achtet dann auf veränderungen der Speicherzelle 0. Wenn dort ein "+" ausgeführt wird, führe den Befehl in Speicherzelle 1 + die korrekte Anzahl an Argumenten aus, schreibe das Ergebnis nach Speicherzelle 1und setzte Speicherzelle 0 wieder auf 0, um bereit für den nächsten SysCall zu sein.
So könnte man Dateizugriffe, Graphische Oberflächen, Netzwerkfähigkeit und ähnliches in Brainfuck implementieren, ohne wirklich was an der Sprache zu ändern.
Hmm, ob ich Zeit finde *interessiert guck*
-
05.11.09 10:15 #18Außer sie noch unübersichtlicher zu machen. Grafische Oberflächen mit deiner Technik, ohne Objektorientierung! Oder willst du die auch noch irgendwie rein implementieren. Ich wünsch' dir viel Spaß, bitte benachrichtige mich, wenn du fertig bist... ohne wirklich was an der Sprache zu ändern...
.
Ciao
DosCoderMan kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.
Sollte ich mal Mist labern weist mich bitte darauf hin.
Ich freue mich über ein Danke, wenn ich helfen konnte!
-
Naja komm, objektorientierte GUI-Programmierung hast du mit der WindowsAPI doch auch nicht.
proof-of-concept: ein simples Brainfuck Programm, was eine Zeile mit einem Dateinamen von der Standardeingabe einließt, dann diese Dtaei öffnet und bis zum EOF (bzw zum ersten 0 byte) ließt
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
goto mem 2 >> read line (the filename) ,----------[++++++++++>,----------] goto mem 1 <[<] call syscall 1 (open) +<+ goto 2 and set mem 2 to 0 >>[-] move mem(1) to mem(2) <[->+<] put 1 to mem(1) + do while mem(1) != 0 [ set mem(1) = 0 [-] call syscall 2 (read) ++<+ print the result >. ]
Und er zugehörige, grob zusammen geschusterte Interpreter:
Code python:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
# -*- encoding: utf8 -*- import re, sys class Brainfuck( object ): def __init__( self ): self.code = [] def parse( self, source ): self.code = [] stack = [] source = list( re.sub( r'[^+-.,<>\[\]]', "", source ) ) for char in source: if char in "+-": self.code.append( ('add', {'+': 1, '-': -1}[char] ) ) if char in '<>': self.code.append( ('move', {'>': 1, '<': -1}[char] ) ) if char == '[': stack.append( len( self.code ) ) self.code.append( [ 'push', None ] ) if char == ']': last = stack.pop() self.code[last][1] = len( self.code ) - last self.code.append( ( 'pop', len( self.code ) - last ) ) if char == '.': self.code.append( ('io_put', None) ) if char == ',': self.code.append( ('io_get', None) ) # print self.code def run( self ): code = self.code ip = 0 length = len( code ) stack = [] mem = [0] * 30000 mp = 0 files = {} while ip < length: op, arg = code[ip] #print op, arg, mp if op == 'add': if mp == 0: syscall = mem[1] if syscall == 1: fname = "".join( map( __builtins__.chr, mem[2: mem.index( 0, 2 ) ] ) ) fp = max( [0] + files.keys() ) + 1 files[ fp ] = open( fname, "rb" ) mem[1] = fp if syscall == 2: fp = files[ mem[2] ] ch = fp.read(1) mem[1] = ord(ch) if ch else 0 else: mem[mp] = (mem[mp] + arg) % 255 elif op == 'move': mp = (mp + arg) % 30000 elif op == 'push': if mem[mp] == 0: ip += arg elif op == 'pop': if mem[mp] != 0: ip -= arg elif op == 'io_put': sys.stdout.write( __builtins__.chr(mem[mp]) ) elif op == 'io_get': chr = sys.stdin.read(1) mem[mp] = ord( chr ) if chr else 0 ip += 1 # print mem[0:20] if __name__ == '__main__': source = "".join( open( sys.argv[1] ).readlines() ) bf = Brainfuck() bf.parse( source ) bf.run()
Code :1 2 3 4 5
olli@desktop:/tmp$ echo 'hallo tutorials.de!' > input.txt olli@desktop:/tmp$ python brainfuck.py open.bf input.txt hallo tutorials.de! olli@desktop:/tmp$
Geändert von OnlyFoo (05.11.09 um 10:42 Uhr)
-
05.11.09 10:54 #20
Hi,
hast du eigentlich sonst nichts zu tun?
Und zum Thema Objektorientierung:
deshalb verwende ich sie ja auch nicht, nicht umsonst bin ich auch überzeugter Pinguin!objektorientierte GUI-Programmierung hast du mit der WindowsAPI doch auch nicht...
Zurück zu BrainFuck:
Wende dich doch mal an Urban Müller, vielleicht kauft der dir deinen Interpreter ab. Da der ja mit Python geschrieben ist, hat man dadurch auch endlich Plattformunabhängigkeit. Ist also noch eine Verbesserung.
Ciao
DosCoderMan kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.
Sollte ich mal Mist labern weist mich bitte darauf hin.
Ich freue mich über ein Danke, wenn ich helfen konnte!
-
Plattform unabhängigkeit ist doch nix neues? Wenn du mal Google fragst findest du sicher genug Interpreter in Java, Perl, Python, php + ko... Sogar hier im Archiv sind welche...
Und nein, ich hab sonnst nichts zu tun gehabt. Ich muss allerdings gleich zur Uni... Bin fauler Student.
-
05.11.09 11:57 #22
Hi,
mit der Interpetergeschichte von Brainfuck habe ich mich noch nicht beschäftigt, ich habe nämlich noch andere Sachen zu tun...
Auf jeden Fall viel Spaß bei der Uni, ich habe zur Zeit gerade Ferien, xD.
Ciao
DosCoderMan kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.
Sollte ich mal Mist labern weist mich bitte darauf hin.
Ich freue mich über ein Danke, wenn ich helfen konnte!
-
Hallo zusammen,
wie sieht es denn aus bei euch? Will noch jemand mitmachen, hatte aber noch nicht genügend Zeit? Dann könnten wir die Abgabefrist noch etwas nach hinten verschieben.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Hallo nochmal,
es hat sich zwar niemand hier im Thema gemeldet, aber wir haben uns trotzdem mal dazu entschlossen, die Bearbeitungsphase zu verlängern. Der neue Abgabetermin ist jetzt Samstag, der 14. November 2009, irgendwann in den Abendstunden. Viel Spaß noch bei dieser Runde
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Oktober passt nicht ganz, ich vermute du meinst November.
Leider habe ich aus Zeitmangel nicht die Ressourcen, um eine Lösung einzureichen.mfg Nils
Problem gelöst?
Dann bitte das Thema als erledigt anhaken
und die Antwort bewerten, die weitergeholfen hat.
Danke!
-
Trotz verlängerter Bearbeitungszeit nur 3 Abgaben von 2 Teilnehmern – schade! War euch das Thema zu schwierig, zu uninteressant, oder woran lag es?
Grüße,
Matthais„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
15.11.09 00:56 #27
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo,
ich fande die Aufgabe sehr witzig und intessant...
ich hatte auch mit einer Java / Python Variante begonnen, jedoch bin ich beim zusammenmixen der wav-Samples hängen geblieben und hatte dann auch keine Zeit mehr... mich weiter mit dem wav-Format zu beschäftigen.
Ein paar Hinweise wie man die wav Samples kombinieren kann hätte vielleicht mehr Leute zur Abgabe einer Lösung motiviert.
Im Prinzip konnte man sich das aus den WIKI Artikeln herleiten jedoch blieb da halt das schnelle Erfolgserlebnis aus und dann vergeht einem schon mal die Lust am Ganzen...
Hätte mich damit auch vorher melden können...
Für das nächste mal sollte man vielleicht ein paar mehr Hilfen (Spoiler) einstreuen. Bei den vorhergehenden Contests waren die Hilfestellungen meistens sehr brauchbar.
Ein Ziel des Coding Quiz sollte es ja auch sein neben interessanten Fragestellungen auch mal über den Tellerrand zu schauen und unterschiedliche Technologien / Programmiersprachen auszuprobieren.
Damit das gut klappt müsste man die Einstiegshürden etwas niedriger anlegen. Damit hier die Cracks nicht abgeschreckt werden sollte natürlich noch irgendwo etwas kniffeliges eingebaut werden so das die auch ihren Spaß haben - nur eben nicht in der Basisversion der Aufgabe.
Freue mich auf die nächsten Coding Contests
Btw. vielleicht sollten wir auch mal sowas wie Lernprogramme machen:
Sprich als Aufgabe eine kleine Lernsoftware für einen bestimmten Bereich programmieren... Mathematik , Physik, Chemie?
Muss nichts großes sein vielleicht auch einfach mal ein kleines Mashup
Mit Lernprogrammen hätten nicht nur die Leute was davon, die die Software bauen (Wir), sondern auch die, die sie dann benutzen (Lehrer / Schüler)
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Thomas hat Recht, das Niveu war hier um einiges höher, was durchaus dazu geführt haben könnte, dass einige abgeschreckt waren.
Ich hätte gerne mitgemacht, habe im Moment aber nicht die Zeit mich länger mit einem Thema auseinander zu setzen, weshalb ich auch keine Lösung einreichen konnte.
Die Aufgabe an sich finde ich sehr interessant, da kann man vieles draus machen.
Und ich habe tiefen Respekt davor, dass du dir immer die Mühe machst diese Aufgaben vorzubereiten.
Und auch wenn ich keine Lösung einreichen kann, mache ich mir doch immer drei Tage intensiv Gedanken darüber, auf welchem Wege man die Aufgabe lösen kann.mfg Nils
Problem gelöst?
Dann bitte das Thema als erledigt anhaken
und die Antwort bewerten, die weitergeholfen hat.
Danke!
-
Bei mir lags in den letzten 2 Wochen an mangelnder Zeit. Ich schiebs mal auf die Jahreszeit. Ich steh immer so spät auf, dass ich dann so lange arbeiten muss, dass ich danach mich denn auch nicht mehr unbedingt mit programmieren beschäftigen möchte

Übernächste Woche hab ich Urlaub. Ich denke dann werde ich die Aufgabe nachträglich nochmal lösen.
-
Ich fand die Aufgabe sehr interessant.
Leider überstieg sie meine Kenntnisse. :-/
Ich wollte das ganze in Java lösen nur kam ich nicht sehr weit... deshalb wäre ich sehr froh wenn jemand ne Java-Lösung anbieten könnte damit ich mal sehen kann wie jemand anders das gelöst hat/hätte...
Ähnliche Themen
-
Quiz?
Von MeisterLampion im Forum Office-AnwendungenAntworten: 12Letzter Beitrag: 03.11.06, 15:48 -
Quiz: Was bin ich?
Von MrTwister im Forum WerkstattAntworten: 3Letzter Beitrag: 05.04.06, 19:14 -
Quiz
Von JannyR im Forum PHPAntworten: 2Letzter Beitrag: 21.05.05, 15:58 -
Quiz
Von alkaline im Forum PHPAntworten: 0Letzter Beitrag: 27.09.04, 10:16 -
php Quiz
Von Sim im Forum PHPAntworten: 0Letzter Beitrag: 09.05.04, 12:43



7Danke




Login




