Gegeben ist eine Tafel variabler Größe mit einer maximalen Größe von 5 mal 5 Feldern. Jedes Feld kann mit einem 'x' gefüllt werden. Wenn es nicht mit einem 'x' gefüllt ist, wird es mit einem 'o' gefüllt.
Der Ausgangszustand jeder Karte ist angegeben (siehe unten). Mit jedem Brett müssen 10 Runden gespielt werden (max. Bedingungen: siehe unten) und die Entwicklung des x muss beobachtet werden.
Eine Runde funktioniert folgendermaßen:
- Jedes 'x' breitet sich auf orthogonal angrenzende Felder aus, verschwindet jedoch von selbst
- Jedes Mal, wenn sich zwei 'x' auf einem Feld befinden, neutralisieren sie sich gegenseitig
Die Entwicklung aller 'x' in jeder Runde muss gleichzeitig erfolgen. Beispiel:
o o o o x o
o x o -> x o x
o o o o x o
Bei jeder Evolutionsrunde muss man sehen, ob das Brett von "x" geleert wird. Ist es nicht leer, könnte ein sich wiederholendes Muster vorliegen. Ist dies auch nicht der Fall, geben wir die Analyse der Evolution auf. Zusätzlich müssen Sie für jedes Startbrett den maximalen Prozentsatz an x Feldern ausdrucken (auf ganze Zahlen abgerundet).
Eingang:
Die Eingabedaten finden Sie hier (Pastebin) Diese Daten enthalten 100 Startzustände. Wie bereits erwähnt, variieren die Platten in der Größe. Die Anzahl der Zeilen wird mit der Nummer n von 1 bis 5 angegeben, gefolgt von n Zeilen, die nur 'x' und 'o' enthalten und das Startmuster darstellen. Jede Reihe einer Tafel hat 1 bis 5 Felder.
Ausgabe:
Das komplette Ergebnis muss ausgedruckt werden, eine gedruckte Reihe für jede Starttafel in der folgenden Form:
Round {0-10}: {repetition/empty/giveup}, {0-100} percent maximum-fill
Beispiele:
Beispiel 1:
Input: 2 Starting state: x o x
xox x x
xx
Round 1: x x o
o x
Round 2: x o x
o x
Round 3: o x o
o o
Round 4: x o x -> The pattern repeats:
o x It is the same as in round 2,
therefore we stop. Maximum fill was
in the starting state with four times 'x'
of 5 fields altogether,
so we have 4/5 = 80 %.
Output: Round 4: repetition, 80 percent maximum-fill
Beispiel 2:
Input: 1 Starting state: x x
xx
Round 1: x x -> We already have a repetition, because
the pattern is the same as in the starting
state. The board is always filled 100 %.
Output: Round 1: repetition, 100 percent maximum-fill
Nach acht Tagen werde ich die funktionierende Antwort mit den wenigsten Zeichen als Gewinner markieren. Zusätzlich werde ich den korrekten Output für die 100 Startboards (Input) posten.
Sie können Ihre bevorzugte Sprache (Programmierung / Scripting / was auch immer) verwenden.
Habe Spaß!
PS: Wenn Sie Fragen haben, können Sie diese gerne stellen.
PPS: In Bezug auf die ursprünglichen Schöpfer: Für Menschen, die in der Lage sind, Deutsch zu sprechen, wurde die Frage von NICHT KLICKEN, WENN SIE KEINE SPOILER WOLLEN, hier genommen . Da die offizielle Zeit für das Abschließen der Herausforderung abgelaufen ist, wollte ich sehen, ob jemand eine kurze und elegante Lösung finden kann.
22.04.2014:
Herausforderung erledigt! Gewinner als akzeptiert markiert. Richtige Ausgabe:
Round 10: giveup, 50 percent maximum-fill
Round 5: empty, 66 percent maximum-fill
Round 1: repetition, 100 percent maximum-fill
Round 1: empty, 100 percent maximum-fill
Round 4: repetition, 100 percent maximum-fill
Round 4: repetition, 70 percent maximum-fill
Round 2: repetition, 60 percent maximum-fill
Round 4: empty, 88 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 5: repetition, 80 percent maximum-fill
Round 10: repetition, 80 percent maximum-fill
Round 1: empty, 80 percent maximum-fill
Round 3: repetition, 60 percent maximum-fill
Round 4: repetition, 48 percent maximum-fill
Round 9: empty, 41 percent maximum-fill
Round 10: giveup, 92 percent maximum-fill
Round 10: giveup, 53 percent maximum-fill
Round 10: giveup, 66 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 10: giveup, 88 percent maximum-fill
Round 10: giveup, 76 percent maximum-fill
Round 10: giveup, 68 percent maximum-fill
Round 10: giveup, 40 percent maximum-fill
Round 10: giveup, 100 percent maximum-fill
Round 10: giveup, 71 percent maximum-fill
Round 2: empty, 81 percent maximum-fill
Round 6: repetition, 36 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 4: repetition, 66 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 3: empty, 80 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 10: giveup, 83 percent maximum-fill
Round 7: repetition, 37 percent maximum-fill
Round 9: repetition, 85 percent maximum-fill
Round 5: repetition, 40 percent maximum-fill
Round 5: repetition, 60 percent maximum-fill
Round 4: empty, 80 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 4: repetition, 46 percent maximum-fill
Round 6: repetition, 42 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 4: repetition, 70 percent maximum-fill
Round 4: repetition, 80 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 4: repetition, 56 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 10: giveup, 54 percent maximum-fill
Round 10: giveup, 66 percent maximum-fill
Round 2: repetition, 40 percent maximum-fill
Round 2: repetition, 40 percent maximum-fill
Round 6: repetition, 75 percent maximum-fill
Round 7: empty, 85 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 6: repetition, 70 percent maximum-fill
Round 2: empty, 66 percent maximum-fill
Round 1: empty, 66 percent maximum-fill
Round 3: empty, 100 percent maximum-fill
Round 3: empty, 66 percent maximum-fill
Round 8: repetition, 42 percent maximum-fill
Round 1: empty, 60 percent maximum-fill
Round 2: repetition, 100 percent maximum-fill
Round 2: repetition, 83 percent maximum-fill
Round 4: repetition, 66 percent maximum-fill
Round 6: repetition, 75 percent maximum-fill
Round 4: empty, 66 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 10: giveup, 56 percent maximum-fill
Round 4: empty, 66 percent maximum-fill
Round 6: repetition, 33 percent maximum-fill
Round 3: empty, 57 percent maximum-fill
Round 3: repetition, 100 percent maximum-fill
Round 6: repetition, 73 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 10: giveup, 73 percent maximum-fill
Round 5: empty, 80 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 3: repetition, 53 percent maximum-fill
Round 10: giveup, 33 percent maximum-fill
Round 10: giveup, 80 percent maximum-fill
Round 10: giveup, 63 percent maximum-fill
Round 10: giveup, 70 percent maximum-fill
Round 10: giveup, 84 percent maximum-fill
Round 7: repetition, 70 percent maximum-fill
Round 10: repetition, 57 percent maximum-fill
Round 10: giveup, 55 percent maximum-fill
Round 6: repetition, 36 percent maximum-fill
Round 4: repetition, 75 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 10: giveup, 64 percent maximum-fill
Round 10: giveup, 84 percent maximum-fill
Round 10: giveup, 58 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 10: giveup, 53 percent maximum-fill
Round 4: repetition, 40 percent maximum-fill
Round 4: empty, 40 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 10: giveup, 68 percent maximum-fill
Antworten:
Perl,
308, 304, 305, 293, 264, 262Bearbeiten: Nach einer der letzten Änderungen ist ein Fehler aufgetreten, der zu einer falschen Ausgabe für leere Boards geführt hat (die Ausgabe der Testsuite war in Ordnung). Schon seit
Round 0
in einem bestimmten Ausgabeformat nur leere Karten in der Eingabe vorhanden sein können (obwohl sich keine in der Testsuite befindet), musste der Fehler behoben werden. Schnelle Fehlerbehebung bedeutete eine Erhöhung der Bytezahl (tatsächlich um 1) - natürlich keine Option. Deshalb musste ich ein bisschen mehr Golf spielen.Run with
-p
(+1 zur Zählung addiert), liest aus STDIN. Benötigt 5.014 wegenr
Substitutionsmodifikator.dh
quelle
perl -p x.pl < input.txt
wenn sich Daten in einer Datei befinden, oderperl -p x.pl
und Zeile für Zeile, um eine einzelne Eingabe zu testen (mitctrl-D
(ctrl-Z
) beenden ). Denken Sie daran, Ihre Perl-Version5.014
oder eine neuere Version zu überprüfen .1 \n o
Eingabe abzufangen.C # - 1164 Zeichen
Dies ist meine erste Teilnahme am Code-Golf.
Ich weiß, ich bin weit entfernt von den besten Ergebnissen - übrigens wirklich erstaunlich!
Aber ich dachte, ich würde meine Lösung trotzdem in C # teilen.
Lediglich die using-Direktiven zählen bereits 97 Zeichen - daher denke ich, dass es ziemlich schwierig sein wird, den Rest innerhalb von weniger als 200 Zeichen zu erreichen.
Es ist ein ziemlich iterativer Ansatz, bei dem LINQ an vielen Stellen verwendet wird. Ich habe auch das Herunterladen der Eingabedatei und das Schreiben der Ausgabedatei in den Code aufgenommen.
Hier ist eine etwas besser lesbare Version:
quelle
J - 275 char
Oh, all diese I / O-Spezifikationen! So eine beschämend hohe Punktzahl für J am Ende. Übernimmt die Eingabe in STDIN mit einer nachgestellten Zeile und geht davon aus, dass
\r
die Eingabe keine Zeilenumbrüche ( ) enthält. Hier ist das Ergebnis der Anwendung auf die Beispieleingabedatei in der Frage.Ungolfed: (Ich kann später eine gründlichere und J-Neuling-freundlichere Erklärung hinzufügen.)
Der
$:
Teil bewirkt, dass der Hauptteil über die Eingabe rekursiv wird (eine schrecklich unbequeme Form für das Parsen von J), wobei die@
Verkettung über jeden Abschnitt angewendet wird .nlines
findet die Anzahl der Zeilen für die nächste Tafel.Die Aktion auf jedem Brett (
evolvex
) ist ordentlich:iterate
(a
im Golf aufgerufen ) erstellt eine Liste jeder Iteration der Simulation, bis wir entweder etwas vorher gesehenes oder zu viele Schritte treffen. Dannpercent@,.
berechnet den Prozentsatz des gefüllten Quadrats in jedem Ergebnis, undformat
läuft einige Statistiken (stat
, genanntt
in dem Golf) , um herauszufinden , wie die Simulation beendet, welcher Prozentsatz war die größt, und so weiter, bevor all das in einen String formatiert wird .Kümmert sich schließlich
}:
um etwas Müll, bevor; joinln
alle einzelnen Board-Ausgaben in einer durch Zeilenumbrüche getrennten Zeichenfolge zusammengefasst werden.quelle
jconsole golf.ijs < input.txt
.v
als Name zu sein, was aus irgendeinem Grund in Skripten nicht erlaubt ist. (Ich hatte das Snippet in der REPL ausgeführt.) Das Ändern ina
scheint zu funktionieren.