Dada una cadena que representa el estado actual de un juego de Monopoly al comienzo del turno de un jugador, comprime todos los datos necesarios en la salida más pequeña. Las respuestas serán juzgadas por el tamaño de salida y el tamaño de la fuente .
Nota: Existen muchas variaciones regionales, pero todas las referencias en esta publicación a nombres de propiedades, etc., se basan en este tablero .
Entrada:
La entrada se dará como una sola ;
cadena separada. Esta cadena se le da al programa de la forma habitual en el idioma elegido, ya sea stdin, argumentos, etc.
La entrada sin formato se ve así:
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)
Un ejemplo de entrada formateada es esta:
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;
Tomado poco a poco:
3;1;
Hay 3 jugadores, y es el turno del jugador 1 (indexado a cero, entonces el segundo jugador)
Jugadores
false;1546;0;14;-1;
false;7692;1;10;1;
true;
El primer jugador:
- no está en quiebra
- tiene $ 1546 en efectivo a la mano
- posee 0 tarjetas para salir de la cárcel
- está en la posición 14 (Virginia Ave)
- no esta en la carcel
El segundo jugador está en la cárcel y ha estado por un turno. No estoy seguro de por qué , ya que tiene una tarjeta GOoJF, pero está allí.
El tercer jugador está en bancarrota, y no se requiere ni se brinda más información.
Propiedades
1;false;1;
1;false;0;
0;true;0;
-1;false;0;
-1;false;0;
-1;false;0;
...
Las propiedades se enumeran en orden alrededor del tablero, comenzando desde el Mediterráneo y terminando en Boardwalk. Las propiedades que no pueden ser propiedad no se incluyen en esta lista, por lo que habrá un total de 28. Nivel de mejora 0
significa no mejorado. Level 1
es una casa, hasta el nivel 5
de un hotel. A -1
para propietario significa que no es propiedad de ningún jugador.
De acuerdo con las reglas estándar, una propiedad hipotecada debe ser propiedad y no debe mejorarse. Una propiedad que se mejora debe ser propiedad y no debe ser hipotecada.
Además, para que una propiedad sea mejorada, un jugador debe poseer el bloque de color completo. Para los propósitos de este juego, no nos importa si las propiedades se mejoran "de manera uniforme".
Tenga en cuenta que estas posiciones no son las mismas que las posiciones de los jugadores que figuran arriba. Por ejemplo, un jugador en el 5
puesto estaría en Reading Railroad, que es la tercera propiedad en la lista (ya que Go, Community Chest e Tax Income Tax no pueden ser propietarios). Las posiciones de los jugadores van desde 0
(Ir) en sentido horario hasta 39
(Boardwalk).
Tarjetas
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;
Cada una de las barajas Chance y Community Chest tienen 16
cartas totales. Los números se presentan tal como aparecen en el mazo barajado actualmente. Para este ejemplo, la primera carta sacada del mazo de Oportunidad será la carta 0
, seguida de la carta 1
(quien barajó ese mazo apesta). La primera carta sacada del cofre de la Comunidad es la carta 3
, entonces 12
.
No se preocupe por lo que significa cada tarjeta (el texto de la tarjeta), excepto por la tarjeta 0
. Esa es la tarjeta Get Out of Jail Free para ese mazo. Si un jugador lo posee, estará al final de la lista, representado como -1
.
Salida:
Debe generar (para consola, stdout o archivo) una representación del estado del juego. Esto debe incluir toda la información requerida para representar el juego. Por ejemplo, puede omitir (o abreviar) propiedades no propias, ya que no se pueden mejorar ni hipotecar. La entrada no puede omitirlos porque es una lista no indexada.
La compresión debe realizarse de manera que pueda calcular el tamaño de salida del peor de los casos. Esto puede descalificar ciertos algoritmos de compresión (a menos que pueda probar el peor de los casos y dar un ejemplo de entrada en el peor de los casos).
A menos que su código fuente sea irrazonablemente detallado, explique cómo se representa el juego. Se desaconsejan las respuestas que consisten en nada más que un programa de golf y salida comprimida. Por ejemplo, si está omitiendo ciertos valores, explique cómo es posible derivarlos de la salida.
Puntuación / Reglas:
La puntuación se basa tanto en el tamaño de compresión del peor de los casos en bits como en el tamaño del código fuente en bytes :
score = (outputBits * 2) + encoderSourceBytes
Una respuesta completa debe incluir:
- Ejemplo de salida
- Fuente del codificador
- Fuente del decodificador (sin contar contra la puntuación)
Todos los codificadores deben ser programas completos, y las lagunas estándar están prohibidas. El uso de bibliotecas de compresión incorporadas o externas también está prohibido.
El ganador es la respuesta con el puntaje más bajo , como se definió anteriormente.
fuente
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.
Estar en la cárcel es un buen juego tardío porque no estás pagando el alquiler. :)Respuestas:
(Recientemente se editó una respuesta, lo que me llamó la atención sobre esta pregunta, y decidí intentarlo aunque es una pregunta antigua).
Swift 1.2 - 1016 Puntos (2 * 81 + 854)
La salida es en el peor de los 81 bytes, y cambia con la cantidad de jugadores.
Cualquiera de los dos métodos funciona. La versión Playground es un poco más larga.
Comprimir zona de juegos
(Asume que
Input.txt
está en elPlayground Documents Directory
)Compress.swift - ejecuta en la Terminal usando
swift Compress.swift
(Asume que
Input.txt
está en elDesktop
)Muestra de entrada / salida
.
fuente
P puro (3592 puntos)
La salida es de 182 bytes. El tamaño es O (1), por lo que este es el peor de los casos.
Esto usa sscanf ampliamente para leer los archivos y simplemente volca las estructuras en el disco.
Tuve que modificar ligeramente la entrada, ya que su ejemplo no incluía 28 propiedades.
Para las variables, las nombré desde la primera letra de lo que es, o si eso entrara en conflicto, la segunda (o posterior) letra. Por ejemplo, Juego, pLayer, pRoperty, etc.
compress.c (680 bytes):
compress.c (pre-golf)
decompress.c :
Entrada / salida :
Comprimido (182 bytes):
¡Ejecutarlo!
fuente