Die Herausforderung
Sie müssen ein vollständiges Programm schreiben, das aus STDIN sieben Zahlen entnimmt und die zweidimensionale Historie des Zellularautomaten (CA) an STDOUT ausgibt. Das ist Code Golf.
Eingabeformatierung der Eingabe handelt es sich um sieben durch Kommas getrennte Ganzzahlen / Zeichenfolgen. Die erste Zahl ist die Nummer der Regel gemäß Wolfram-Code (der Standardname für jede Regel). Die zweite ist die anfängliche Startkonfiguration. Die dritten und vierten beschreiben, welches Muster und wie oft es links von der Startkonfiguration angehängt werden soll. als Polsterung. Der fünfte und sechste machen dasselbe für die rechte Seite. Die letzte Zahl ist die Anzahl der Generationen, um die Simulation auszuführen.
Ein Beispiel für eine Eingabe ist also 90,11,0,4,0,4,5
. Dies sollte Ihrem Programm mitteilen, dass Sie Regel 90 ausführen . Es sollte dem Programm auch mitteilen, dass bei der Erstkonfiguration 11
die Zeichenfolge 0
viermal an beide Enden angehängt werden soll, sodass das eigentliche Startmuster lautet 0000110000
. Außerdem wird Ihr Programm angewiesen, diese Simulation für 5 Generationen auszuführen.
Ausgabe Ihr Programm sollte das gesamte Array von Zellen jeder Generation (durch Zeilenumbrüche getrennt) drucken, damit die Ausgabe das Raum-Zeit-Diagramm der Zertifizierungsstelle ist. Für jede Generation wird der Zustand jeder Zelle durch ihren Zustand und die Zustände der Zellen unmittelbar links und rechts gemäß der als Eingabe bereitgestellten Regel bestimmt. Die Simulation sollte sich um die Kanten wickeln. Das erste, was gedruckt wird, sollte das Startarray als gen sein. 0.
Die Eingabe 90,11,0,4,0,4,5
sollte so genau wie möglich zur folgenden Ausgabe führen.
0000110000
0001111000
0011001100
0111111110
1100000011
0110000110
Beachten Sie, dass der Ausgangszustand in den fünf Generationen nicht enthalten ist. Beachten Sie auch, dass sich die Simulation um die Kanten schlängelt.
Mehr Beispiele
Eingang:
184,1100,01,2,01,1,4
Ausgabe:
0101110001
1011101000
0111010100
0110101010
0101010101
Eingang:
0,1011,1,0,0,1,2
Ausgabe:
10110
00000
00000
Weitere Informationen zur Funktionsweise und Nummerierung von 1D CAs
quelle
Antworten:
Golfscript,
77 7370 ZeichenVielen Dank an @Howard, der darauf hingewiesen hat, wie man 4 Zeichen spart.
quelle
48-
->1&
und ich denke auch drei weitere. Sie können)
vor dem Block weglassen (den Zähler nicht erhöhen) und somit auch die letzten beiden Pops speichern.APL (153 Zeichen)
Und in weniger lesbarer, etwas kürzerer Form:
Beispiel:
Ich bin sicher, dass es Raum für Verbesserungen gibt (ich habe sogar ein paar Änderungen gefunden, als ich diesen Beitrag geschrieben habe!), Aber einige davon könnten grundlegende Änderungen beinhalten, und ich kann es nicht mehr ertragen, APL anzustarren. Die hier verwendete Variante von APL ist Dyalog APL .
quelle
Ruby,
165159 ZeichenBearbeiten: Ich habe einige Stellen für kleine Verbesserungen gefunden.
Beispiellauf:
quelle
C
303 305 301 294292305 Edit: oops. Ich habe vergessen, dass
calloc()
das zwei Argumente erfordert. Es explodierte bei größerem Input.301 Edit: Ah HA! Benutzt my
calloc()
boo-boo, um 2 weitere Bytes zu sparen, indem die Blockgröße des angeforderten Speichers erhöht wird.294 Edit: 300 gebrochen! Beseitigte eines der
strcat()
s und optimierte ein paar Schleifen. Ich muss maximal munch verwenden, was genauso viel Spaß macht wie use.292 Edit: Benötigte die
+2
Zuweisung im Speicher nicht.Ich benutzte die Antwort von luser droog als Grundidee, änderte aber den Wrapping-Algorithmus sowie viele Optimierungen und Faktorisierungen von Konstanten.
quelle
C,A,
! :)brk()
? dannp=s+C+1;
irgendwo.+++
!%[01]
zu%s
! -9 (... viele Jahre später)C (
487484418 mit Leerzeichen entfernt)* Fiel 66 mit Hilfe von JoeFish *
Typoskript
quelle
int
Variablen global machen und#include
r,A,B,C,n,i,j; main(){char *s...
for
Loops:for(;A--;)strcat(s,a);
A
undC
später, damit Sie nichti
oderB
überhaupt nicht deklarieren müssen .p=malloc((C=strlen(s))+1); --C; strcpy(p,s); for(A=0;A<n;A++){
Sorry, ich--C;
:p=malloc((C=strlen(s)-1)+2);
. Ich denke, Golfcode macht mehr Spaß, als ihn überhaupt zu erfinden!#include
Dascanf
entfernen sollte. Aber es ist wahrscheinlich in Ordnung, da es nur einmal aufgerufen wird. ... Meine alte Maschine ist gestern gestorben und ich installiere immer noch Cygwin. Ich werde diese Änderungen übernehmen, sobald ich sie testen kann. Vielen Dank!