Étant donné une chaîne représentant l'état actuel d'un jeu de Monopoly au début du tour d'un joueur, compressez toutes les données nécessaires dans la plus petite sortie. Les réponses seront jugées par la taille de la sortie et la taille de la source .
Remarque: Il existe de nombreuses variantes régionales, mais toutes les références dans ce post aux noms de propriété, etc., sont basées sur ce tableau .
Contribution:
L'entrée sera donnée comme une seule ;
chaîne séparée. Cette chaîne est donnée au programme de la manière habituelle dans la langue choisie, que ce soit stdin, arguments, etc.
L'entrée non formatée ressemble à ceci:
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)
Voici un exemple d' entrée formatée :
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;
Pris petit à petit:
3;1;
Il y a 3 joueurs, et c'est au tour du joueur 1 (indexé zéro, donc le deuxième joueur)
Joueurs
false;1546;0;14;-1;
false;7692;1;10;1;
true;
Le premier joueur:
- n'est pas en faillite
- a 1546 $ en caisse
- possède 0 carte sans sortie de prison
- est en position 14 (Virginia Ave)
- n'est pas en prison
Le deuxième joueur est en prison, depuis un tour. Je ne sais pas pourquoi , puisqu'il a une carte GOoJF, mais il est là.
Le troisième joueur est en faillite, et plus d'informations ne sont ni requises ni fournies.
Propriétés
1;false;1;
1;false;0;
0;true;0;
-1;false;0;
-1;false;0;
-1;false;0;
...
Les propriétés sont répertoriées dans l'ordre autour du plateau, à partir de la Méditerranée et se terminant à Boardwalk. Les propriétés qui ne peuvent pas être détenues ne sont pas incluses dans cette liste, il y en aura donc un total de 28. Le niveau d'amélioration 0
signifie non amélioré. Le niveau 1
est une maison, jusqu'au niveau 5
d'un hôtel. Un -1
pour propriétaire signifie qu'il n'appartient à aucun joueur.
Selon les règles standard, un bien hypothéqué doit être la propriété et ne doit pas être amélioré. Une propriété améliorée doit être la propriété et ne doit pas être hypothéquée.
De plus, pour qu'une propriété soit améliorée, un joueur doit posséder la totalité du bloc de couleur. Aux fins de ce jeu, nous ne nous soucions pas si les propriétés sont améliorées "uniformément".
Notez que ces positions ne sont pas les mêmes que celles des joueurs indiquées ci-dessus. Par exemple, un joueur sur le 5
poste serait sur Reading Railroad, qui est la troisième propriété de la liste (car Go, Community Chest et Income Tax ne peuvent pas être détenus). Les positions des joueurs vont de 0
(Aller) dans le sens horaire à 39
(Boardwalk).
Cartes
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;
Chacun des decks Chance et Community Chest a un 16
total de cartes. Les chiffres sont présentés tels qu'ils apparaissent dans le jeu actuellement mélangé. Pour cet exemple, la première carte retirée du paquet Chance sera la carte 0
, suivie de la carte 1
(celui qui a mélangé ce paquet suce). La première carte tirée de la poitrine communautaire est la carte 3
, puis 12
.
Ne vous inquiétez pas ce que chaque carte des moyens (le texte de la carte), à l' exception de la carte 0
. C'est la carte Get Out of Jail Free pour ce deck. Si un joueur le possède, ce sera à la fin de la liste, représenté par -1
.
Production:
Vous devez sortir (sur console, stdout ou fichier) une représentation de l'état du jeu. Cela doit inclure toutes les informations nécessaires pour représenter le jeu. Par exemple, vous pouvez omettre (ou abréger) des propriétés non possédées, car elles ne peuvent être ni améliorées ni hypothéquées. L'entrée ne peut pas les omettre car il s'agit d'une liste non indexée.
La compression doit être effectuée de manière à pouvoir calculer la taille de sortie dans le pire des cas. Cela peut disqualifier certains algorithmes de compression (sauf si vous pouvez prouver le pire des cas et donner un exemple d'entrée dans le pire des cas).
À moins que votre code source ne soit déraisonnablement bavard, expliquez comment le jeu est représenté. Les réponses consistant uniquement en un programme de golf et une sortie compressée sont déconseillées. Par exemple, si vous omettez certaines valeurs, expliquez comment il est possible de les dériver de la sortie.
Pointage / Règles:
La notation est basée à la fois sur la taille de compression la plus défavorable en bits et sur la taille du code source en octets :
score = (outputBits * 2) + encoderSourceBytes
Une réponse complète doit comprendre:
- Exemple de sortie
- Source de l'encodeur
- Source du décodeur (non comptée dans le score)
Tous les encodeurs doivent être des programmes complets et les failles standard sont interdites. L'utilisation de bibliothèques de compression intégrées ou externes est également interdite.
Le gagnant est la réponse avec le score le plus bas , tel que défini ci-dessus.
la source
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.
Être en prison est une bonne catégorie car vous ne payez pas de loyer. :)Réponses:
(Une réponse a été récemment éditée, ce qui a attiré mon attention sur cette question, et j'ai décidé de l'essayer bien que ce soit une vieille question.)
Swift 1,2 - 1016 points (2 * 81 + 854)
La sortie est au pire de 81 octets, et change avec le nombre de joueurs.
L'une ou l'autre des deux méthodes fonctionne. La version Playground est légèrement plus longue.
Compress Playground
(Suppose
Input.txt
est dans lePlayground Documents Directory
)Compress.swift - exécuté dans Terminal en utilisant
swift Compress.swift
(Suppose
Input.txt
est sur leDesktop
)Exemple d'entrée / sortie
.
la source
Pure C (3592 points)
La sortie est de 182 octets. La taille est O (1), c'est donc le pire des cas.
Cela utilise sscanf de manière extensive pour lire les fichiers, et vide simplement les structures sur disque.
J'ai dû modifier légèrement l'entrée, car votre exemple ne comprenait pas 28 propriétés.
Pour les variables, je les ai nommées à partir de la première lettre de ce que c'est, ou si cela entrait en conflit, la deuxième lettre (ou la suivante). Par exemple, Game, pLayer, pRoperty, etc.
compress.c (680 octets):
compress.c (pré-golf)
decompress.c :
Entrée / sortie :
Compressé (182 octets):
Exécuter!
la source