Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 01.06.13 12:06 
Hallo,
es soll keine Konkurrenz zu www.entwickler-ecke....+gesucht_111556.html sein, aber ich habe auch einmal die berühmten Ameisen versucht.
Eingegeben werden kann die Anzahl der Ameisen (maximal 50) und ein Regelsystem (max.Länge 15) bestehend aus L und R für links und rechts, dass mit seiner Länge auch die Anzahl der verwendeten Farben festlegt.
Ist der Rechner schnell genug, dann können auch Tausende Schritte in sehr kurzer Zeit ermittelt und angezeigt werden.

Im Gegensatz zum Original lasse ich mich meine Ameisen auf einem (aufgefalteten) Torus laufen. Dadurch entstehen noch zusätzliche Effekte. U.a. kann es geschehen, dass zwei Ameisen mit der Regel LR ihre Wege wieder löschen.

Interessante Regelsysteme, außer dem klassischen LR, sind z.B. RLR, LLRR, LRRRRRLLR, LLRRRLRLRLLR und RRLLLRLLLRRR.

Beste Grüße
Mathematiker

Rev 1: Änderung in der Geschwindigkeitsauswahl und weiteres. Quelltext kommentiert. Regel kann Länge 20 annehmen.
Rev 2: Erste Ameise kann zentral starten und weitere kleine Änderungen
Rev 3: Ideen von user profile iconHorst_H eingebaut, wodurch der Ablauf deutlich schneller wird.
Rev 4: Wenn es um Geschwindigkeit bei solchen grafischen Darstellungen geht, kann nur user profile iconHorst_H helfen. Seine Superidee mit Scanline macht das Programm nochmals viel schneller; mehr als 20 Millionen Schritte je Sekunde auf meinem alten PC.
Rev 5: Eine Änderung der Darstellungsgeschwindigkeit wirkt sich auch während der Simulation aus.
Rev 6: Über den Schalter "Regeln testen" werden systematisch, ab der eigegebenen Regel, alle getestet und jeweils einige Millionen Schritte berechnet.
Rev 7: Für jede Regel wird die "Horst_H-Martok"-Nummer angegeben.
Rev 8: Regel kann entweder als String mit L und R oder aber über die "Horst_H-Martok"-Nummer eingegeben werden.
Rev 9: Torus kann abgeschaltet werden.
Rev 10: Die erzeugten Abbildungen können automatisch als GIF gespeichert werden.
Rev 11: Veränderte Dateinamen beim Speichern. Unter "Regel testen" werden die Regeln mit einem 'R' am Anfang übersprungen, da diese schon mit der symmetrischen Regel (L gegen R getauscht) schon untersucht wurden.

In einem späteren Beitrag befindet sich ein analoges Programm zu Turmiten.
Einloggen, um Attachments anzusehen!
_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein


Zuletzt bearbeitet von Mathematiker am Mo 17.06.13 20:11, insgesamt 14-mal bearbeitet

Für diesen Beitrag haben gedankt: Delphi-Laie, lenamarkert
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 01.06.13 13:42 
Guten Tag,
ja wie öfters arbeiten wir "paralell" :) Aber ist doch auch schön mal andere "Quelltexte" zu sehen oder?

- zum Quelltext:
finde ich leider sehr unübersichtlich :(
- Fehler gefunden (wundert mich, dass das bei dir klappt):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const abbruch:boolean = true;
//weiter unten:
if not abbruch then
    begin
       abbruch:=true;
       exit;
    end;

    abbruch:=false;

du weist einer Konstanten einen Wert zu ?!
und am Anfang evt. dein Label "aktualisieren", sonst klickt man erneut auf Starten und ist angeblich schon bei Schritt 100 mio obwohl man bei 0,2 mioist :D
 label3.caption := '0'; am Anfang reicht ja

-Farbe müsste geändert werden, aber ich seh nur "schwarz/weiß"

sollte noch einstellbar sein: Startposition einer neuen Ameise, jede Ameise besitzt verschiedene Regeln etc... gibt viel zu tun ;)

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 01.06.13 14:00 
Hallo,
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
- Fehler gefunden (wundert mich, dass das bei dir klappt):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
const abbruch:boolean = true;
//weiter unten:
if not abbruch then
    begin
       abbruch:=true;
       exit;
    end;
    abbruch:=false;

du weist einer Konstanten einen Wert zu ?!

Das ist kein Fehler, sondern eine typisierte Konstante (Compilerschalter {$J+})
Alles andere sehe ich mir noch an. Danke für die Hnweise.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 01.06.13 14:35 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

Das ist kein Fehler, sondern eine typisierte Konstante (Compilerschalter {$J+})

Für mich sind das dann variablen :D

P.S: Mein Compiler meckert auch, dass der linken Seite (abbruch) nichts zugewiesen werden kann.. ab welcher Delphi-Version geht das?

(ich hatte mal in anderen Threads gelesen, dass du mit Delphi 5 arbeitest ? ich habe Delphi 7, wieso geht's bei dir und mir nicht Oo )

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 01.06.13 15:55 
Ja, das funktioniert gut. Und das automatische Zeichnen sieht auch schön aus. Vor allem die selbst angebbaren Regeln machen das Programm interessant.

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

Das ist kein Fehler, sondern eine typisierte Konstante (Compilerschalter {$J+})

Für mich sind das dann variablen :D
Sind es auch. Diese typisierten Konstanten sind nur wegen Kompatibilität mit Delphi 1 noch vorhanden und sie zu verwenden ist sehr schlechter Programmierstil, da man durch das const jeden Leser des Quelltextes in die Irre führt. Und diese Irreführung ist ja auch der einzige Unterschied zu echten Variablen, denen man das auch ansieht, dass es Variablen sind.

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
P.S: Mein Compiler meckert auch, dass der linken Seite (abbruch) nichts zugewiesen werden kann.. ab welcher Delphi-Version geht das?
Das kann man einstellen. Unter Delphi 1 ging das auch ohne diese Einstellung.

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
- zum Quelltext:
finde ich leider sehr unübersichtlich :(
Ein Quelltextformatierer hilft (in neueren Delphiversionen Strg + D). Dass die Shift Taste wohl nicht funktionierte (sorry, ich mag das gar nicht ;-)), kann aber auch das nicht korrigieren.

Ich habe aber schon deutlich schlechter formatierte Quelltexte gesehen und die Variablen haben auch sprechende Namen.
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 01.06.13 17:02 
Ich habe bei meiner "Ameisen-Turingmaschine" eine extra Unit zum Typ TAmeise angelegt
die finde ich übersichtlicher.. für Mahtematiker als Beispiel:
ausblenden volle Höhe Delphi-Quelltext
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:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
unit uTAmeise;

{Zur Info: 2DDDynArray steht für ein 2D Array das Doppel Dynamisch ist !
man kann es also in den negativen und in den positiven Bereich vergrößern,
diese Unit ist selbstgeschrieben, aber die Methoden sind selbsterklärend}


interface

uses Windows, uT2DDDynArray, Graphics;

Procedure FeldErstellen;
Procedure FeldFree;
Procedure FeldZeichne( var Bild: TBitmap );

type
  TAmeise = class
    private
    Schritte: Cardinal;
    //Ameise
      SAusrichtung,
      Ausrichtung: ShortInt;
      Position: TPoint;
      BG, BUG: ShortInt;
      procedure gehRechts;
      procedure gehLinks;
      procedure lauf;
    public
      property Schritt: Cardinal read Schritte;
      property StartAusrichtung: ShortInt read SAusrichtung;
      property BeiUngeraden: ShortInt read BUG;
      property BeiGeraden: ShortInt read BG;

      constructor create(Start_Ausrichtung, Bei_Ungeraden, Bei_Geraden: ShortInt);
      procedure EinWeiter;
      procedure Weiter( AnzahlSchritte: Cardinal );
      procedure GehAuf( SchrittNr: Cardinal );
      procedure setBeiUngeraden( Bei_Ungeraden: ShortInt );
      procedure setBeiGeraden( Bei_Geraden: ShortInt );
      destructor destroy; override;

      procedure Zeichne( var Bild: TBitmap; ZStartpunkt, ZPosition: Boolean );
  end;

var
  Feld: T2DArray;

const
  //weiss = false;
  //schwarz = true;
  Oben = 0;
  Rechts = 1;
  Unten = 2;
  Links = 3;

  WSize = 0//startgröße (x: -wsize..wsize;)
  HSize = 0//startgröße (y: -hsize..hsize;)

implementation

//Ameisen- unanhäniger Teil
Procedure FeldErstellen;
begin
//FeldFree;
Feld := T2DArray.create( -WSize, WSize, -HSize, HSize, weiss);
end;

Procedure FeldFree;
begin
Feld.Free;
end;

Procedure FeldZeichne( var Bild: TBitmap );
begin
  Feld.zeichne( Bild );
end;


//Ameisen-Teil

//private teil
procedure TAmeise.gehRechts;
begin
  case Ausrichtung of
    Oben:     Ausrichtung := Rechts;
    Rechts:   Ausrichtung := Unten;
    Unten:    Ausrichtung := Links;
    Links :   Ausrichtung := Oben;
    else
  end;
end;

procedure TAmeise.gehLinks;
begin
  case Ausrichtung of
    Oben:     Ausrichtung := Links;
    Rechts:   Ausrichtung := Oben;
    Unten:    Ausrichtung := Rechts;
    Links :   Ausrichtung := Unten;
    else
  end;
end;

procedure TAmeise.lauf;
begin
  case Ausrichtung of
    Oben:     dec(Position.Y);
    Rechts:   inc(Position.X);
    Unten:    inc(Position.Y);
    Links:    dec(Position.X);
    else
  end;
end;



//--------------------------------public- Teil---------------------------

constructor TAmeise.create(Start_Ausrichtung, Bei_Ungeraden, Bei_Geraden: ShortInt);
begin
Schritte := 0;
Ausrichtung := Start_Ausrichtung;
SAusrichtung := Start_Ausrichtung;
BG := Bei_Geraden;
BUG := Bei_Ungeraden;
Position.X := 0;
Position.Y := 0;
end;

procedure TAmeise.EinWeiter;
  procedure Dreh(Richtung: ShortInt);
    begin
      case Richtung of
        Oben:   begin end;
        Rechts: gehRechts;
        Unten:  begin gehRechts; gehRechts; end//gehLinks; gehLinks;
        Links: gehLinks;
        else
      end;
    end;
begin
if Feld.read( Position.X, Position.Y) then //=schwarz    (BG)
  begin
  Feld.write( Position.X, Position.Y, weiss);
  //gehLinks;
  Dreh( BG );
  end
else //if not Feld.read( Position.X, Position.Y) then //=weiss  (BUG)
  begin
  Feld.write( Position.X, Position.Y, schwarz);
  //gehRechts;
  Dreh( BUG );
  end;
lauf;
Feld.sfnE( Position.X, Position.Y ); { Erzeuge Feld falls nicht existiert}
inc(Schritte);
end;

procedure TAmeise.Weiter( AnzahlSchritte: Cardinal );
var C: Cardinal;
begin
For C := 1 to AnzahlSchritte do
  EinWeiter;
end;

procedure TAmeise.GehAuf( SchrittNr: Cardinal );
begin
if SchrittNr >= Schritt then
  Weiter( SchrittNr - Schritt )
else
  begin
  free;
  create( SAusrichtung, BUG, BG );
  Weiter( SchrittNr );
  end;
end;

procedure TAmeise.setBeiUngeraden( Bei_Ungeraden: ShortInt );
begin
BUG := Bei_Ungeraden;
end;

procedure TAmeise.setBeiGeraden( Bei_Geraden: ShortInt );
begin
BG := Bei_Geraden;
end;


//für User
procedure TAmeise.Zeichne( var Bild: TBitmap; ZStartpunkt, ZPosition: Boolean );
begin
//Startpunkt lime kreuzen
if ZStartpunkt then
  Feld.UmrandePixel( Bild, 00, cllime, bsBDiagonal);
//aktuelle Position rot umranden
if ZPosition then
  Feld.UmrandePixel( Bild, Position.X, Position.Y , clred, bsClear);
end;

initialization
  FeldErstellen;

finalization
  FeldFree;
end.

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!


Zuletzt bearbeitet von IhopeonlyReader am Sa 01.06.13 17:14, insgesamt 2-mal bearbeitet
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 01.06.13 20:03 
Hallo,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Vor allem die selbst angebbaren Regeln machen das Programm interessant.

Danke.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Diese typisierten Konstanten sind nur wegen Kompatibilität mit Delphi 1 noch vorhanden und sie zu verwenden ist sehr schlechter Programmierstil, da man durch das const jeden Leser des Quelltextes in die Irre führt. Und diese Irreführung ist ja auch der einzige Unterschied zu echten Variablen, denen man das auch ansieht, dass es Variablen sind.

Ist ja beabsichtigt. :lol: Nein, nicht wirklich. Ich habe es in Revision 1 geändert.
Aus irgendeinem Grund "liebe" ich dieses Konstrukt. Warum, kann ich nicht begründen.

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe bei meiner "Ameisen-Turingmaschine" eine extra Unit zum Typ TAmeise angelegt
die finde ich übersichtlicher..

Das bestreite ich nicht. Ich versuche immer möglichst schnell die Idee als Quelltext umzusetzen und den Quelltext möglichst kurz zu halten. Dass dies kein moderner und gut lesbarer Stil ist, weiß ich.
Selbst auf die Gefahr hin, dass einige lachen: Sobald ich einen Algorithmus mir überlegt habe, "sehe" ich den Quelltext und tippe darauflos. Dadurch wird es bei mir oft nur eine einzige, wichtige Methode.
Müsste ich im Team programmieren, hätten mich die Anderen schon lange :evil: ... und ich würde wohl gefeuert.

In der Revision 1 habe ich noch einige Änderungen durchgeführt. Die maximale Regelsystemlänge ist jetzt 20.
Den Quelltext habe ich etwas kommentiert. Für richtiges Programmieren ist das noch nicht ausreichend. Ich weiß. :wink:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 01.06.13 20:17 
Welcher Hobby-Programmierer würde in einer Programmiergruppe nicht gehasst :D
Aber ich versuche mein Quelltext, wenn ich weiß dass andere versuchen werden ihn zu verstehen, so zu konstruieren, dass er für die späteren Leser, die die Programmiersprache evt. nur in Teilen beherrschen, verständlich ist.

P.S: Meine Mammutsätze mag ich auch :rofl: (siehe 2ten Satz oben)

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 01.06.13 21:09 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Den Quelltext habe ich etwas kommentiert. Für richtiges Programmieren ist das noch nicht ausreichend. Ich weiß. :wink:
Der beste Quelltext ist der, der nur wenige Kommentare braucht. An der Stelle bist du auch auf einem guten Weg, denn du bezeichnest wie ich schon geschrieben hatte deine Variablen sinnvoll. Das fehlt vielen. Und einrücken tust du auch.
Deine jetzige Anzahl an Kommentaren ist normalerweise ausreichend, wenn der Quelltext ansonsten gut ist. (Für Spezialfälle oder spezielle Erklärungen natürlich nicht.)

Dass der Quelltext nicht in gut benannte Funktionen aufgeteilt ist und noch dazu direkt im Buttonklick liegt, lässt sich bei der Länge des Quelltextes verschmerzen, ist bei größeren Programmen aber ein ernstes Problem.

Schlecht lesbar ist der Quelltext durch folgende Faktoren:
  • Keine Groß- und Kleinschreibung:
    Wie auch in der deutschen Sprache selbst macht das Quelltext sehr viel schlechter lesbar.
    setlength versteht man nun einmal z.B. langsamer als SetLength.
  • Keine Leerzeichen neben Operatoren usw.:
    Ich finde es deutlich übersichtlicher, wenn Parameter usw. auch visuell getrennt sind, z.B.
    ausblenden Delphi-Quelltext
    1:
    TempBitmap.Canvas.Rectangle(-1, -1, breite + 1, hoehe + 1);					

    statt
    ausblenden Delphi-Quelltext
    1:
    tempbitmap.Canvas.rectangle(-1,-1,breite+1,hoehe+1);					

  • Mehrere Befehle in einer Zeile:
    ausblenden Delphi-Quelltext
    1:
    for j:=0 to tempbitmap.height+1 do speicher[i,j]:=0;					

    Man muss erst die gesamte Zeile anschauen um zu sehen, ob dort noch Befehle folgen oder ob die danach folgenden Zeilen zur Schleife gehören.
Diese Punkte findest du so übrigens auch im Object Pascal Style Guide. ;-)

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 01.06.13 22:41 
Hallo,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Diese Punkte findest du so übrigens auch im Object Pascal Style Guide. ;-)

In der Revision 2 habe ich versucht, etwas von dem Genannten zu berücksichtigen.

Außerdem kann man jetzt eine einzelne Ameise zentral starten lassen. Damit werden die Ergebnisse "symmetrischer".
Faszinierend finde ich die Regel "LLRRLLRRLLRRLLRR" (4mal die voreingestellte). Die dort entstehenden Abbildungen sind schon bemerkenswert; chaotische Teile und Abschnitte mit einer gewissen Ordnung.

Beste Grüße
Mathematiker

Nachtrag: Ich melde mich erst einmal für 6 Tage aus der EE ab. Morgen geht's auf Klassenfahrt in die Toscana.
Ob ich :cry: soll oder :lol: , weiß ich erst hinterher. Mal sehen, wieviel Ärger mir meine "Lieblinge" machen.

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 01.06.13 22:45 
Ab schritt 40mio siehts aus wie ein Panzer :D

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 02.06.13 00:51 
Ihr solltet alle mal NKS lesen :lol:

So falsch kann der Herr Wolfram da nicht sein, wenn hier wieder genau das gleiche rauskommt.
Faszinierend, Captain.

EDIT: LLLLLRLR ist toll. Da passiert fast nix :D
Anders als bei normalen CA scheints hier nur 2 Gruppen zu geben: die, die irgendwann den Torus komplett mit "Zufall" füllen (auch wenn vorher vielleicht viel Struktur ist!) und die, die praktisch keinen Weg zurücklegen (Extremfall: LLL... bzw RRR...). Die "nested structures" scheints hier nicht zu geben, oder?

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: So 02.06.13 19:53 
Hallo,

ich habe es für Lazarus etwas umgebaut, das aber auch mit Delphi noch funktionieren sollte.
Die Rechnerei bekomme ich mit meinen 3.2 Ghz AMD Ph X4 955 nicht schneller als ~41 Mio Schritte/s ohne irgendeine Darstellung.
Anbei im Programm sind es etwa 27 Mio. Schritte/s, wenn alle 1 Mio Schritte eine Ausgabe erfolgt.
Dazu habe ich die IF Abfragen durch einen Zugriff auf ein Feld geändert.
Ala: In Feld[x] steht der Wert x+1 außer in Feld[max+1], dort steht 0.Ein falscher Sprung ist ja so wahnsinnig teuer.

Edit:
Ich habe spaßeshalber mal den Nährboden in einer zufälligen Farbe eingefärbt, womit sich die Ausgangssituation ändert-> unterschiedliche Ansichten.
Einmal Herzförmig, einmal sehr eckig
Gruß Horst
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Mathematiker
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 02.06.13 20:55 
LLRL (eigentlich ein Chaot der irgendwann anfängt eine Strasse zu bauen) macht hin und wieder merkwürdige Effekte aufgrund dessen das es in euren Versionen ein Torus ist.
Sehr spaßig.

Hat schonmal jemand über ein 3D Variante nachgedacht?
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: So 02.06.13 21:46 
Ja, ich :)
Nur als ich dachte, "wie soll man das als 2D-Bild darstellen" fande ich es nicht eine so tolle Idee...
Ich würde die "hintereinanderliegenden Farben" übereinanderlegen.. also dasselbe als wenn ich die Farben beim 2D entsprechend wähle

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: So 02.06.13 22:42 
Hallo,

auf youtube gibt es ja schöne Sachen dazu:
www.youtube.com/resu...ch_query=Langton+Ant
Man könnte 3D mäßig das ebene Gitternetz ja auf einen Torus projezieren, aber das ist wohl eher was für 3D Experten.
Das folgende Programm in C# kann viel mehr.
www.lukas.ck-servers...ex.php?id=langtonant

Gruß Horst
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 07.06.13 11:23 
Hallo,
nach meiner Klassenfahrt in die Toskana (ich bin sehr, sehr müde) melde ich mich zurück und habe auf die Schnelle in Revision 3 die tollen Ideen von
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Dazu habe ich die IF Abfragen durch einen Zugriff auf ein Feld geändert.

eingebaut.
Dadurch wird es deutlich schneller, allerdings Host_H's Lösung erreiche ich noch nicht.
Jetzt gehe ich erst einmal schlafen und stehe so gegen 8 Uhr Morgen(!) wieder auf.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Fr 07.06.13 12:21 
Hallo,


Eine kleine Bitte.Bei Revisionen den Dateinamen ändern Ameise_Rev3 / pameise3
offtopic:
dass Dir das keine Ruhe lässt, obwohl Du müde bist ;-)
Angenehme Ruhe

Gruß Horst
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 07.06.13 13:11 
Ich wünsche auch schöne Nicht-Ameisen-Träume.
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mo 10.06.13 15:27 
Hallo,

Meine Version ist nur deshalb so schnell, da bitmap.pixels so langsam ist.
Mithilfe Bitmap scanline siehe
edn.embarcadero.com/article/29173 und viele andere, ist Delphi wieder schneller, weil ich bei wieder zurückkopieren muss und anschließend in die paintbox, also zweimal das komplette Bild.

Auf Wikipedia bin ich auf etwas interessantes gestoßen:
Über en.wikipedia.org/wiki/Langton%27s_ant gelangte ich zu
en.wikipedia.org/wiki/Turmite und dann zu
Paterson's_worms
Zitat:
...{1,0,4,2,0,2,0}..who determined that it halts after 57 trillion timesteps leaving only {1,0,4,2,0,1,5} unsolved. According to Rokicki, the worm is still active after 5.2×1e19 timesteps.

Wow oder Wau! Das fragte ich mich, wie geht das denn?
en.wikipedia.org/wiki/Hashlife beschrieben auch in www.drdobbs.com/jvm/...pace-and-t/184406478
unter
sourceforge.net/projects/golly/ findet man das passende Win32 Program dazu.
Unter "other rules" ist auch Langton's ant in der LR Form in schwarzweiß und in ein paar Sekunden bis 1e17 brechnet.
Da fehlt nur noch der Wurm, der Primzahlen produziert ;-)

Gruß Horst

Moderiert von user profile iconMartok: URL-Tags repariert

Für diesen Beitrag haben gedankt: Mathematiker