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.
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. :)