AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte HQ9+fuck Interpreter
Thema durchsuchen
Ansicht
Themen-Optionen

HQ9+fuck Interpreter

Ein Thema von FAlter · begonnen am 16. Jan 2010 · letzter Beitrag vom 4. Feb 2015
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#1

Re: HQ9+fuck Interpreter

  Alt 22. Jan 2010, 14:13
Also das BF-Programm erzeugt ein Bild in Form von Text (A-Z),
dazu hab ich mir ein Programm geschrieben (in Delphi), welches diesen Text in ein Bitmap übersetzt.
- A bis Z als Intensität und das Leerzeichen, bzw. alles Andere als ganz Schwarz.

Beitrag #11
> mandelbrot.txt = BF-Programm
> Mandelbrot - Text2Image.exe = der Converter

Der Converter ist auch nix Besonderes:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
  i, i2: Integer;
  S: String;
begin
  Memo1.Hide; Button1.Hide; CheckBox1.Hide;
  SL := TStringList.Create;
  SL.Text := Memo1.Text;
  i2 := 0;
  for i := SL.Count - 1 downto 0 do
    if Trim(SL[i]) = 'then SL.Delete(i)
    else i2 := Max(Length(Trim(SL[i])), i2);
  with Image1.Picture.Bitmap do begin
    Width := i2;
    Height := SL.Count * 2;
    Canvas.Brush.Color := clBlack;
    Canvas.FillRect(Rect(0, 0, Width, Height));
    for i := Height div 2 - 1 downto 0 do begin
      S := SL[i];
      for i2 := Width - 1 downto 0 do
        if (i2 < Length(S)) and (S[i2 + 1] in ['A'..'Z']) then begin
          Canvas.Pixels[i2, i * 2] := (Ord(S[i2 + 1]) - Ord('@')) * 255 div 26 * $010101;
          Canvas.Pixels[i2, i * 2 + 1] := Canvas.Pixels[i2, i * 2];
        end;
    end;
    if CheckBox1.Checked then SaveToFile(ChangeFileExt(ParamStr(0), '.bmp'));
  end;
  SL.Free;
end;

Aber theoretisch wäre es möglich das Bitmap auch direkt in BF zu erzeugen und abzuspeichern.


Dieses BF-Programm erzeugt z.B. in der Standardausgabe ein Datei, welche man direkt als .COM abspeichern lassen sollte.
Diese .COM wiederrum ist ein 8-Bit-BF-Interpreter, mit welchem man ein BF-Programm "abspielen" kann.

Quasi das Henne-Ei-Problem, denn was war nun zuerst da?
> das BF-Programm, welches die .COM erzeugt
> oder die .COM, welche das BF-Programm verarbeiten kann



Aber Einiges kann ich schonmal sagen:
- ein BF-Programm zu schreiben ist relativ leicht, wenn man einmal verstanden hat, wie's geht
- dabei hilfreich ist auch der geringe Sprachumfang, von nur 6 Befehlen
- aber die Speicherverwaltung ist ein Akt
- man muß sich genau überlegen was man wie wo ablegt, um
> möglichst geringe Wege und und damit auch wenig/übersichtlichen Code zu erzeugen

Ein kleiner Fehler am Anfang (z.B. eine Variable/Speicherstelle vergessen und schon darf man womöglich das halbe Programm umschreiben.

Also ich kann es jedem nur empfehlen ... man lernt ganz neue Denkweisen, welche bestimmt auch in Delphi gut anzuwenden sind.
Angehängte Dateien
Dateityp: txt bf8_423.txt (2,3 KB, 4x aufgerufen)
Dateityp: txt bf8-interpreter_source_488.txt (27,6 KB, 2x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#2

Re: HQ9+fuck Interpreter

  Alt 22. Jan 2010, 21:57
Das langsame Teil rechnet immer noch. Derweil arbeite ich an einer optimierten Version, welche tatsächlich schneller zu sein scheint. Genauer gesagt, sie wandelt den BF code in eine andere Darstellung um und nimmt dabei Optimierungen vor.

Aber lange dauerts auch mit der alten (langsamen) Variante auch nicht mehr
Miniaturansicht angehängter Grafiken
untitled_768.png  
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#3

Re: HQ9+fuck Interpreter

  Alt 22. Jan 2010, 22:26
Ich fahr dann auch mal heim ... bin mal gespannt, wie weit meiner mit Rechnen ist.

hab mal alles zusammengepackt, was ich grad so mithab
Angehängte Dateien
Dateityp: 7z brainfuck_639.7z (512,8 KB, 3x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#4

Re: HQ9+fuck Interpreter

  Alt 22. Jan 2010, 22:56
Hi,

die vor etwa einer Stunde angekündigte optimierte Version ist da!

Was sit tut? Den code optimieren und dabei in eine interne Darstellung ünberführen, die dann von einem erneuereten Interpreter viel schneller interpretiert wird.

Gerade bei der mandelbrot-Berechnung macht sich das deutlich bemerkbar.

Der erste Beitrag ist (natürlich samt Anhang) aktualisiert.

Gruß
FAlter
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#5

Re: HQ9+fuck Interpreter

  Alt 22. Jan 2010, 23:28
Wann kommt den von euch die erste Inline-BF-Version für Delphi???
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#6

Re: HQ9+fuck Interpreter

  Alt 23. Jan 2010, 09:03
hier das Ergebnis: man sollte besser nicht auf die Zeit ganz unten im Text achten

@divBy0:
Du kannst doch FAlters Klasse verwenden?
Schau mal in seine Codes rein
und aus meinem MiniBF läßt sich auch leicht eine Funktion basteln.
Angehängte Dateien
Dateityp: 7z mandelbrot_-_text2image_865.7z (319,6 KB, 9x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#7

Re: HQ9+fuck Interpreter

  Alt 24. Jan 2010, 18:59
Hi,

ich habe mich dem Tastatur-Problem (siehe Thread von himis Programm) angenommen. Letztendlich war ich weder mit read(Char) noch mit ReadKey zufrieden, weshalb ich beide genommen habe und man per Parameter -key umswitchen kann wenn ein Programm unerwartet auf Eingaben reagiert.

Hoffe mal das jetzt noch mehr BF Programme laufen... Für die Kompatibilität dienen jetzt schon die -8 (bzw. -7 bzw. -16 bzw. -32), -bf und -key Switches.

Vielleicht weise ich auch mal auf die undokumentierten Switches hin:
-v (verbose) schreibt zusätzliche Infos raus
--norun führt das Programm nciht aus, tut aber alle anderen Schritte (nur in Kombination mit -v sinnvoll)
--nostrip lässt den Vorgang des Kommentar-entfernens weg (was auch immer das bringen soll)

Gruß
FAlter
Felix Alter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz