Wireworld ist ein zellularer Automat, der so konzipiert wurde, dass er Elektronen ähnelt, die durch Drähte fließen. Seine einfache Mechanik ermöglicht den Aufbau digitaler Schaltungen. Es hat sogar den Bau eines ganzen Computers ermöglicht .
Ihre Mission ist es, die kürzeste Wireworld-Implementierung in der Sprache Ihrer Wahl zu erstellen.
Jede Zelle im Gitter hat einen von vier Zuständen. Die vier Zustände sind "leer", "Kupfer", "Elektronenkopf" oder "Elektronenschwanz".
- Eine leere Zelle bleibt immer eine leere Zelle
- Ein Elektronenkopf wird immer zu einem Elektronenschwanz
- Ein Elektronenschwanz wird immer zu Kupfer
- Eine Kupferzelle wird zum Elektronenkopf, wenn genau ein oder zwei ihrer acht Nachbarn Elektronenköpfe sind, andernfalls bleibt sie Kupfer
Dieser Wettbewerb wird einen ähnlichen Stil haben wie der Wettbewerb " Das kürzeste Spiel des Lebens" , jedoch mit ein paar Änderungen.
- Das Gitter muss mindestens 40 mal 40 Zellen groß sein
- Die Kanten des Gitters dürfen NICHT umlaufen (kein Torus). Behandle Zellen außerhalb des Feldes als konstant "leer".
- Die Benutzer müssen in der Lage sein, ihre eigene Startkonfiguration einzugeben.
- Auf leere Bildschirme zu starren, macht keinen Spaß. Das Programm muss die laufende Simulation visuell anzeigen.
Das ist Codegolf, die wenigsten Bytes gewinnen.
quelle
ALPACA, 82 Zeichen
ALPACA ist eine Sprache, die speziell für zellulare Automaten entwickelt wurde.
o ist nichts; c ist Dirigent; e ist Elektron; t ist der Elektronenschwanz.
quelle
GolfScript (
125 120 105100 Zeichen)Beachten Sie, dass ich
\033
jeweils ein Zeichen zähle , da diese durch ein Literalzeichen ersetzt werden könnenESC
. Dies verwendet ANSI-Steuercodes, setzt also eine kompatible tty voraus. Beachten Sie auch, dass Frames ab dem Eingaberaster gedruckt werden.Es gibt einige Überschneidungen mit der Option "Summenraster erstellen" , bei der auch die Nachbarschaft "Moore" verwendet wird.
Kodierung: Leerzeichen =>
; Elektronenkopf =>
i
; Elektronenschwanz =>`
; Kupfer =>X
.Die Pause zwischen den Iterationen ist die Zeit, die zur Berechnung von 46656 und 46656 benötigt wird . Wenn Sie
6.?.?
zu einem anderen Ausdruck wechseln , können Sie die Geschwindigkeit steuern. Das nächst langsamere für die gleiche Zeichenanzahl ist7.?.?
das viel langsamere (die Ausgabe ist 22-mal so groß und es handelt sich nicht um eine lineare Komplexitätsberechnung).Für einen Testfall habe ich verwendet
von der Rosetta Code Wireworld Herausforderung.
quelle
Python
371341 ZeichenJa, es ist nicht so kurz, aber es hat eine interaktive Benutzeroberfläche!
Anleitung:
Klicken Sie mit der linken Maustaste, um den Draht zu platzieren
Klicken Sie mit der rechten Maustaste, um zu löschen
Klicken Sie mit der mittleren Maustaste, um den Elektronenkopf zu platzieren
Klicken Sie außerhalb der Achsen, um den Automaten zu bewegen
quelle
(x>0)&(x<3)
->(0<x<3)
. :)Python (
243214)Versucht, eine Kreuzung zwischen Benutzerfreundlichkeit und Charakteren zu machen. Das Raster ist 40x40. Die Eingabe erfolgt über stdin. Ein Elektronenkopf ist
h
, Elektronenschwanz istt
, Kupfer istc
, alles andere ist leer.Die while-Schleife (Zeile 3) ist nicht komprimiert (funktioniert nicht, wenn sie im Code platziert ist):
quelle
g[e]='h'if(t=='c')&...else't'if i=='h'else'c'if i=='t'else i
. IchC
355347300294 ZeichenEdit: realisiert das brauche ich nicht
feof()
Bearbeiten: 47 Zeichen gespeichert! Entfernte den Schlaf, entfernte fast alle Zahnspangen, kombinierte viele Operationen.
Edit: Letzte heute, da ich 300 Zeichen gebrochen habe. Geändert
printf
zuputs
, fand beim ersten Vergleich eine süße kleine Optimierung.C eignet sich nicht gut für diese Art von Problem, aber hey, Golfen macht Spaß. Dies ist eine ziemlich gewaltige Implementierung, aber ich wollte sehen, wie weit ich damit Golf spielen kann.
Die Eingabe ist eine Textdatei mit dem Namen
i
. Es enthält eine Darstellung des Ausgangszustands mit*
für Kupfer,+
für Elektronenkopf,-
für Elektronenschwanz, Leerzeichen für leere Zellen. Ich benutze das XOR-Gatter auf der Wiki-Seite zum Testen.quelle
cond?43:42
geschrieben werden42+(cond)
? Und ich bin sicher,r=s[j][i++];*p=r==43?45:r;if(r==45)*p=42;
kann reduziert werden,r=s[j][i++];*p=r==43?45:r==45?42:r;
wenn nichtr=s[j][i++]-43;*p=!r?45:r==2?42:r;
Python,
234218 ZeichenSie geben die Karte in Form von drei komplexen Zahlen ein, die die Koordinaten der Kupferzellen (die die Kopf- und Schwanzlisten enthalten müssen), Köpfe und Schwänze darstellen. Hier ist ein Beispiel:
Beachten Sie, dass wir
eval
die Eingabe, so dass Sie für Listen komplexer Zahlen beliebig komplexe Ausdrücke verwenden können.quelle
QBasic, 309 Bytes
Warnung: Die Golf-Version ist nicht benutzerfreundlich: Sie verfügt über eine seltsame Eingabemethode, wird als Endlosschleife ausgeführt und hat keine Verzögerung (läuft daher auf einigen Systemen zu schnell). Führen Sie es nur aus, wenn Sie wissen, wie Sie ein Programm in Ihrer QBasic-Umgebung beenden. Die ungolfed Version wird empfohlen (siehe unten).
Geben Sie zum Ausführen an der Eingabeaufforderung die Breite
w
und Höhe Ihrer Konfiguration anh
. 1 Geben Sie dannw*h
einstellige Codes für die Zellen ein (von links nach rechts, dann von oben nach unten), und drücken Sie0
= leer6
= Draht7
= Signalkopf1
= SignalschwanzSobald Sie alle Zellen eingegeben haben, beginnt die Simulation (und wird für immer fortgesetzt, bis Sie das Programm beenden).
Ungolfed
Eine benutzerfreundlichere Version. Ändern Sie zum Ändern des Layouts die
DATA
Anweisungen am Ende.Der Code nutzt die
POINT
Funktion, die den Farbwert eines Pixels vom Bildschirm liest. Dies bedeutet, dass wir die Zellen nicht separat als Array speichern müssen. Um sicherzustellen, dass alle Zellen gleichzeitig aktualisiert werden, führen wir die Aktualisierungen auf einer zweiten "Seite" durch. Wir können die aktive Seite mit einer Version derSCREEN
Anweisung umschalten und den Inhalt einer Seite mit derPCOPY
Anweisung in eine andere kopieren .1 Die Maximalwerte für Breite und Höhe hängen davon ab, welcher Bildschirmmodus verwendet wird. In
SCREEN 9
kann die Breite bis zu 638 und die Höhe bis zu 348SCREEN 7
betragen. Hat eine kleinere Auflösung (maximale Konfigurationsgröße 318 mal 198), aber die Pixel sind größer und daher leichter zu erkennen (auf DOS QBasic oder dem DOSBox-Emulator - leider nur auf QB64) ergibt ein kleineres Fenster).Beispiellauf
Ungolfed-Version auf archive.org , mit Bildschirmmodus 7:
quelle