Komprimieren Sie alle erforderlichen Daten auf die kleinste Ausgabe, wenn Sie eine Zeichenfolge angeben, die den aktuellen Status eines Monopoly- Spiels zu Beginn des Zuges eines Spielers darstellt. Die Antworten werden von beurteilt werden Ausgabegröße und Quellengröße .
Hinweis: Es gibt viele regionale Unterschiede, aber alle Verweise in diesem Beitrag auf Eigenschaftsnamen usw. basieren auf dieser Tafel .
Eingang:
Die Eingabe erfolgt als einzelne, ;
getrennte Zeichenfolge. Diese Zeichenfolge wird dem Programm auf die in der von Ihnen gewählten Sprache übliche Weise übergeben, unabhängig davon, ob es sich um stdin, Argumente usw. handelt.
Die unformatierte Eingabe sieht folgendermaßen aus:
numPlayers (1 to 8)
whose turn (0 to numPlayers-1)
for each player:
bankrupt? (true/false)
money (0 to 2^16-1)
get-out-of-jail-free cards (0 to 2)
position (0 to 39)
jail turns (-1 to 2)
for 28 properties:
owner (-1 to numPlayers-1)
mortgaged? (true/false)
improvement level (0 to 5)
for 16 chance cards in deck:
card index (-1 to 15)
for 16 community chest cards in deck:
card index (-1 to 15)
Ein Beispiel für eine formatierte Eingabe lautet wie folgt:
3;1;false;1546;0;14;-1;false;7692;1;10;1;true;1;false;1;1;false;0;0;true;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;
Stück für Stück aufgenommen:
3;1;
Es gibt 3 Spieler, und es ist Spieler 1 an der Reihe (null-indexiert, also der zweite Spieler)
Spieler
false;1546;0;14;-1;
false;7692;1;10;1;
true;
Der erste Spieler:
- ist nicht bankrott
- hat $ 1546 Bargeld zur Hand
- besitzt 0 aus dem Gefängnis entlassene Karten
- ist auf Position 14 (Virginia Ave)
- ist nicht im Gefängnis
Der zweite Spieler ist im Gefängnis und war für eine Runde. Ich weiß nicht warum , da er eine GOoJF-Karte hat, aber er ist da.
Der dritte Spieler ist bankrott und weitere Informationen werden weder benötigt noch gegeben.
Eigenschaften
1;false;1;
1;false;0;
0;true;0;
-1;false;0;
-1;false;0;
-1;false;0;
...
Die Eigenschaften werden in der Reihenfolge um das Brett aufgelistet, beginnend mit Mittelmeer und endend an der Promenade. Eigenschaften, deren Eigentümer nicht sein kann, sind in dieser Liste nicht enthalten, sodass insgesamt 28 vorhanden sind. Verbesserungsstufe 0
bedeutet nicht verbessert. Level 1
ist ein Haus, bis zu Level 5
für ein Hotel. Ein -1
für Besitzer bedeutet, dass es keinem Spieler gehört.
Nach Standardregeln, eine Eigenschaft , die verpfändet muss im Besitz sein und darf nicht verbessert werden. Eine Immobilie, die verbessert wird, muss Eigentum sein und darf nicht verpfändet werden.
Außerdem muss ein Spieler den gesamten Farbblock besitzen , damit eine Eigenschaft verbessert werden kann . Für die Zwecke dieses Spiels ist es uns egal, ob die Eigenschaften "gleichmäßig" verbessert werden.
Beachten Sie, dass diese Positionen nicht mit den oben angegebenen Spielerpositionen übereinstimmen. Zum Beispiel wäre ein Spieler auf der 5
Position bei Reading Railroad, der dritten Eigenschaft in der Liste (da Go, Community Chest und Income Tax nicht im Besitz sein können). Spielerpositionen laufen von 0
(Go) im Uhrzeigersinn bis 39
(Boardwalk).
Karten
0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;
3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;
Jedes der Zufalls- und Community-Truhen-Decks hat 16
Gesamtkarten. Die Zahlen werden so angezeigt, wie sie im aktuell gemischten Deck erscheinen. In diesem Beispiel ist die erste Karte, die aus dem Zufallsstapel gezogen wird, eine Karte 0
, gefolgt von einer Karte 1
(wer auch immer diesen Stapel gemischt hat, ist am Boden). Die erste Karte, die aus der Community-Truhe gezogen wird 3
, ist dann die Karte 12
.
Kümmere dich nicht darum, was jede Karte bedeutet (der Kartentext), außer für die Karte 0
. Das ist die kostenlose Karte zum Verlassen des Gefängnisses für dieses Deck. Wenn ein Spieler es besitzt, wird es am Ende der Liste als dargestellt -1
.
Ausgabe:
Sie müssen eine Darstellung des Spielstatus ausgeben (auf Konsole, Standardausgabe oder Datei). Dies muss alle Informationen enthalten, die für die Darstellung des Spiels erforderlich sind . Beispielsweise könnten Sie nicht im Besitz befindliche Immobilien weglassen (oder abkürzen), da sie weder verbessert noch verpfändet werden können. Die Eingabe kann sie nicht auslassen, da es sich um eine nicht indizierte Liste handelt.
Die Komprimierung sollte so erfolgen, dass Sie die Ausgabegröße im ungünstigsten Fall berechnen können. Dies kann bestimmte Komprimierungsalgorithmen disqualifizieren (es sei denn, Sie können den ungünstigsten Fall nachweisen und ein Beispiel für eine Eingabe im ungünstigsten Fall angeben).
Sofern Ihr Quellcode nicht unangemessen ausführlich ist, erklären Sie, wie das Spiel dargestellt wird. Antworten, die nur aus einem Golf-Programm und einer komprimierten Ausgabe bestehen, werden nicht empfohlen. Wenn Sie beispielsweise bestimmte Werte weglassen, erläutern Sie, wie Sie sie aus der Ausgabe ableiten können.
Wertung / Regeln:
Die Bewertung basiert sowohl auf der Worst-Case- Komprimierungsgröße in Bits als auch auf der Quellcodegröße in Bytes :
score = (outputBits * 2) + encoderSourceBytes
Eine vollständige Antwort muss enthalten:
- Ausgabebeispiel
- Encoder-Quelle
- Decoderquelle (wird nicht mit der Punktzahl verrechnet)
Alle Encoder müssen vollständige Programme sein, und Standardlücken sind verboten. Die Verwendung von eingebauten oder externen Komprimierungsbibliotheken ist ebenfalls verboten.
Der Gewinner ist die Antwort mit der niedrigsten Punktzahl, wie oben definiert.
quelle
The second player is in jail, and has been for one turn. I'm not sure why, since he has a GOoJF card, but he's there.
Im Gefängnis zu sein ist eine gute Strategie, weil man keine Miete zahlt. :)Antworten:
(Eine Antwort wurde kürzlich bearbeitet, wodurch ich auf diese Frage aufmerksam wurde, und ich habe beschlossen, es zu versuchen, obwohl es eine alte Frage ist.)
Swift 1.2 - 1016 Punkte (2 * 81 + 854)
Die Ausgabe ist im schlimmsten Fall 81 Bytes und ändert sich mit der Anzahl der Spieler.
Beide Methoden funktionieren. Die Playground-Version ist etwas länger.
Spielplatz komprimieren
(Angenommen,
Input.txt
ist in derPlayground Documents Directory
)Compress.swift - im Terminal mit ausführen
swift Compress.swift
(Angenommen,
Input.txt
ist auf derDesktop
)Sample Input / Output
.
quelle
Reines C (3592 Punkte)
Die Ausgabe beträgt 182 Bytes. Die Größe ist O (1), dies ist also der schlimmste Fall.
Dies verwendet sscanf ausgiebig, um die Dateien zu lesen, und speichert die Strukturen einfach auf der Festplatte.
Ich musste die Eingabe leicht modifizieren, da Ihr Beispiel 28 Eigenschaften nicht enthielt.
Für Variablen habe ich sie aus dem ersten Buchstaben des eigentlichen Buchstabens oder, falls dies zu Konflikten führen sollte, aus dem zweiten (oder nachfolgenden) Buchstaben benannt. Zum Beispiel Game, pLayer, pRoperty usw.
compress.c (680 Bytes):
compress.c (vorgolfen)
dekomprimieren.c :
Eingabe / Ausgabe :
Komprimiert (182 Byte):
Starte es!
quelle