AppleScript zu linearem zellulären Automaten funktioniert nicht

Samuel Fiedler

Mitglied
Thread Starter
Dabei seit
08.03.2022
Beiträge
3
Reaktionspunkte
0
Hallo im Forum!

Ich habe heute einen linearen zellulären Automaten programmiert. Für weitere Informationen hinsichtlich eines linearen zellulären Automaten siehe Wikipedia.
Der Code ist:
AppleScript:
set links_zwei to 0
set links_eins to 0
set rechts_zwei to 0
set rechts_eins to 0
--                1           5             10             15             20             25             30             35
set spielfeld to [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

--                    1           5             10             15             20             25             30             35
set spielfeld_neu to [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
set ergebnis to "
+-----------------------------------+
|" & spielfeld & "|
"

repeat with i from 1 to 2
    log "Iteration " & i & ":

"
    repeat with ii from 3 to 33
        log "Teil " & ii & ":
"
        set links_zwei to item (ii - 2) of spielfeld
        set links_eins to item (ii - 1) of spielfeld
        set rechts_eins to item (ii + 1) of spielfeld
        set rechts_zwei to item (ii + 2) of spielfeld
        log links_zwei
        log links_eins
        log item ii of spielfeld
        log rechts_eins
        log rechts_zwei
        if links_zwei is 1 and links_eins is 1 and rechts_eins is 0 and rechts_zwei is 0 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 1 and links_eins is 0 and rechts_eins is 1 and rechts_zwei is 0 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 1 and links_eins is 0 and rechts_eins is 0 and rechts_zwei is 1 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 0 and links_eins is 1 and rechts_eins is 1 and rechts_zwei is 0 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 0 and links_eins is 1 and rechts_eins is 0 and rechts_zwei is 1 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 0 and links_eins is 0 and rechts_eins is 1 and rechts_zwei is 1 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 1 and links_eins is 1 and rechts_eins is 1 and rechts_zwei is 0 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 1 and links_eins is 1 and rechts_eins is 0 and rechts_zwei is 1 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 1 and links_eins is 1 and rechts_eins is 1 and rechts_zwei is 1 then
            set item ii of spielfeld_neu to 1
           
        else if links_zwei is 0 and links_eins is 1 and rechts_eins is 1 and rechts_zwei is 1 then
            set item ii of spielfeld_neu to 1
           
        else
            set item ii of spielfeld_neu to 0
        end if
    end repeat
    set ii to 0
    set ergebnis to ergebnis & "|" & spielfeld_neu & "|
"
    set spielfeld to spielfeld_neu
end repeat

tell script "replace"
    set ergebnis to replace(ergebnis, "0", " ")
    set ergebnis to replace(ergebnis, "1", "X")
end tell

set ergebnis to ergebnis & "+-----------------------------------+
"
get ergebnis

Mein konkretes Problem ist, dass AppleScript auch bei Zellen, die eigentlich als 4 Nachbarn nur 0, 0, 0, 0 haben, 1, 1, 0, 0 anzeigt und somit auch diese Zellen „zum Leben erweckt“. Was außerdem sehr merkwürdig ist, ist, dass dieses Problem nur nach schon lebenden Zellen auftaucht.

Gibt es dafür irgendeinen Ursprung (und hoffentlich eine Lösung) oder gibt es keinen Ursprung (& Lösung) und muss ich eine andere Programmiersprache verwenden?

Ich freue mich auf Antworten und Feedback!

LG
Samuel
 
Ohne deine Code genau angeguckt zu haben, würde ich auf deine if else if Kette tippen.
Die triggert nicht richtig.
 
Hallo oneOeight!
oneOeight:
Ohne deine Code genau angeguckt zu haben, würde ich auf deine if else if Kette tippen.
Die triggert nicht richtig.
Jetzt finde ich dort gerade auch eine falsche Bedingung, aber das scheint nicht das Problem zu sein.
Bei den Bedingungen schreibe ich nur in die Variable „spielfeld_neu“. Das Problem tritt aber in der Variable „spielfeld“ auf. Miteinander zu tun haben kann das nur nach einer Generation, bei „set spielfeld to spielfeld_neu“.
Ich habe es vorher schon mit einer Funktion nachbar_finder in AppleScript versucht (und dann if nachbar_finder(position, daten) is 1 usw. gemacht), aber das hat auch nicht funktioniert.
In JavaScript funktioniert es gar nicht (nach dem ich es in JavaScript „übersetzt“ habe). JavaScript gibt mir bei console.log(spielfeld); einen Array, der nur Nullen enthält :(.
Dann müssen wir wohl weiter am Problem arbeiten.

LG
Samuel
 
Ich würde eine Sprache nehmen, die man besser debuggen kann.
Und solche Konstrukte wie if else if else if ... else if durch etwas ersetzen, das man besser verifizieren kann.
 
Hallo oneOeight!
Ich würde eine Sprache nehmen, die man besser debuggen kann.
Und solche Konstrukte wie if else if else if ... else if durch etwas ersetzen, das man besser verifizieren kann.
Normalerweise programmiere ich auch in JavaScript, nur manchmal verwende ich den Skript-Editor als schnelles Werkzeug für irgendetwas.
Dass ich solche Konstrukte verwende, kommt daher, dass ich nicht der beste AppleScripter bin ;) .

LG
Samuel
 
Hallo,

Mein konkretes Problem ist, dass AppleScript auch bei Zellen, die eigentlich als 4 Nachbarn nur 0, 0, 0, 0 haben, 1, 1, 0, 0 anzeigt und somit auch diese Zellen „zum Leben erweckt“. Was außerdem sehr merkwürdig ist, ist, dass dieses Problem nur nach schon lebenden Zellen auftaucht.

Deinen Bedingungen nach kann es nach "zum Leben erweckten Zellen" nur noch 1,1 x 0,0 Nachbarn geben.

Gruß
 
Zurück
Oben Unten