Dada uma sequência que representa o estado atual de um jogo de monopólio no início do turno de um jogador, comprima todos os dados necessários na menor saída. As respostas serão julgadas pelo tamanho da saída e pelo tamanho da fonte .
Nota: Existem muitas variações regionais, mas todas as referências nesta postagem a nomes de propriedades etc. são baseadas neste quadro .
Entrada:
A entrada será fornecida como uma única ;
sequência separada. Essa string é fornecida ao programa da maneira que for habitual no idioma escolhido, seja stdin, argumentos, etc.
A entrada não formatada fica assim:
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)
Um exemplo de entrada formatada é 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;
Tomadas pouco a pouco:
3;1;
Existem 3 jogadores, e é a vez do jogador 1 (indexado a zero, então o segundo jogador)
Jogadoras
false;1546;0;14;-1;
false;7692;1;10;1;
true;
O primeiro jogador:
- não está falido
- tem $ 1546 em dinheiro na mão
- possui 0 cartões sem sair da cadeia
- está na posição 14 (Virginia Ave)
- não está na cadeia
O segundo jogador está na prisão e já esteve por um turno. Não sei por que , já que ele tem um cartão GOoJF, mas ele está lá.
O terceiro jogador está falido e mais informações não são necessárias nem fornecidas.
Propriedades
1;false;1;
1;false;0;
0;true;0;
-1;false;0;
-1;false;0;
-1;false;0;
...
As propriedades são listadas em ordem geral, começando no Mediterrâneo e terminando no Boardwalk. As propriedades que não podem ser de propriedade não estão incluídas nesta lista; portanto, haverá um total de 28. Nível de melhoria 0
significa não aprimorado. O nível 1
é uma casa, até o nível 5
de um hotel. A -1
para o proprietário significa que ele não pertence a nenhum jogador.
De acordo com as regras padrão, uma propriedade hipotecada deve ser de propriedade e não deve ser aprimorada. Uma propriedade aprimorada deve ser de propriedade e não deve ser hipotecada.
Além disso, para que uma propriedade seja aprimorada, o jogador deve possuir o bloco de cores inteiro. Para os propósitos deste jogo, não nos importamos se as propriedades estão sendo melhoradas "uniformemente".
Observe que essas posições não são as mesmas que as posições dos jogadores acima. Por exemplo, um jogador na 5
posição estaria em Reading Railroad, que é a terceira propriedade da lista (já que Go, Community Chest e Tax Income não podem ser de propriedade). As posições dos jogadores vão de 0
(Go) no sentido horário para 39
(Boardwalk).
Postais
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 um dos decks de Oportunidade e Baú da Comunidade tem um 16
total de cards. Os números são apresentados como aparecem no baralho atualmente embaralhado. Neste exemplo, a primeira carta retirada do baralho Chance será a carta 0
, seguida pela carta 1
(quem embaralhar aquele baralho é péssimo). O primeiro card retirado do baú da Comunidade é card 3
, então 12
.
Não se preocupe com o significado de cada cartão (o texto do cartão), exceto o cartão 0
. Essa é a carta Get Out of Jail Free para esse baralho. Se um jogador é o dono, ele estará no final da lista, representado como -1
.
Resultado:
Você deve gerar (para console, stdout ou arquivo) uma representação do estado do jogo. Isso deve incluir todas as informações necessárias para representar o jogo. Por exemplo, você pode omitir (ou abreviar) propriedades não proprietárias, pois elas não podem ser aprimoradas ou hipotecadas. A entrada não pode omiti-los porque é uma lista não indexada.
A compactação deve ser feita de maneira que você possa calcular o tamanho da saída do pior caso. Isso pode desqualificar certos algoritmos de compactação (a menos que você possa provar o pior caso e dar um exemplo de entrada do pior caso).
A menos que o seu código-fonte seja irracionalmente detalhado, explique como o jogo é representado. As respostas que consistem em nada além de um programa de golfe e saída compactada são desencorajadas. Por exemplo, se você estiver omitindo certos valores, explique como é possível derivá-los da saída.
Pontuação / Regras:
A pontuação é baseada no tamanho de compactação do pior caso, em bits , e no tamanho do código-fonte, em bytes :
score = (outputBits * 2) + encoderSourceBytes
Uma resposta completa deve incluir:
- Exemplo de saída
- Fonte do codificador
- Fonte do decodificador (não contada contra a pontuação)
Todos os codificadores devem ser programas completos e as brechas padrão são proibidas. Também é proibido o uso de bibliotecas de compactação internas ou externas.
O vencedor é a resposta com a pontuação mais baixa, conforme definido acima.
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 na prisão é um bom jogo porque você não está pagando aluguel. :)