Cribbage é um jogo interessante, porque você precisa de um tabuleiro específico para pontuar o seu jogo. Uma placa de cribbage é assim:
Observe como a primeira coluna está à esquerda, à medida que sobe, depois à direita, à medida que desce, e depois à esquerda, à medida que sobe novamente.
E aqui é o que um mal desenhado arte ASCII prestados de uma placa de cribbage se parece com:
* * *
----------- -------
/ * \ |*|*|*|
/* * *\ |*|*|*|
/ * * * \ |*|*|*|
| * * | |*|*|*|
|* * * * * *| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
* * * |* * * * * *|
| * * |
\ * * * /
\* * */
\ * /
-----------
Aqui está o seu desafio:
Etapa 1: desenhe essa arte ASCII de uma placa de cribbage. O espaço em branco à direita é OK, desde que não haja diferença visível.
Etapa 2: dados três números inteiros como entrada, exiba cada pino no furo correto. Os pinos podem ser indexados em 0 ou 1. As entradas serão [0-121]
inclusivas. Você pode pegar essas entradas de qualquer maneira razoável, por exemplo, 3 entradas separadas, uma matriz, argumentos de linha de comando, etc. Aqui está um exemplo para a entrada (0, 37, 100)
(indexada 1):
* * *
----------- -------
/ * \ |*|*|*|
/* * *\ |*|*|*|
/ 2 * * \ |*|*|*|
| * * | |*|*|*|
|* * * * * *| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|3|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
1 * * |* * * * * *|
| * * |
\ * * * /
\* * */
\ * /
-----------
Etapa 3: faça a saída da coisa toda.
Teste de E / S:
Como cada uma delas é verticalmente alta, incluirei apenas 2, mas você pode ver mais nesta essência do github .
#Input: (56, 56, 56)
#Output:
* * *
----------- -------
/ * \ |*|*|*|
/* * *\ |*|*|*|
/ * * * \ |*|*|*|
| * * | |*|*|*|
|* * * * * *| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |3|2|1| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
* * * |* * * * * *|
| * * |
\ * * * /
\* * */
\ * /
-----------
#Input: (120, 89, 23)
#Output:
* * *
----------- -------
/ * \ |1|*|*|
/* * *\ |*|*|*|
/ * * * \ |*|*|*|
| * * | |*|*|*|
|* * * * * *| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|3| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|2|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
|*|*|*| |*|*|*| |*|*|*|
------- ------- -------
* * * |* * * * * *|
| * * |
\ * * * /
\* * */
\ * /
-----------
As brechas padrão se aplicam e a resposta mais curta em bytes vence!
Respostas:
Python 3, 496 bytes
Execução (ou importador) o código cria uma função que é chamada com as três contagens de jogadores:
f(5, 38, 53)
.Versão um pouco não destruída
z
é uma versão codificada / compactada do tabuleiro de lixo vazio.subs
contém uma lista separada por vírgula de substituições para decodificar / descompactarz
. Em cada substituição, a primeira letra é a substring para substituir e o restante da string é a substituição. Ofor y in subs.split(','):
loop faz as substituições. Por exemplo,Z|*|*|*|
faz com que todos os 'Zs sejam substituídos por|*|*|*|
. O método de compactação foi usado por sua simplicidade e eficácia (melhor que o stdlib). Mas provavelmente poderia ser melhorado ou substituído por algo melhor.Porque, seqüências de caracteres Python são imutáveis,
b
é uma lista dos personagens no tabuleiro de jogo.R
é uma lista que mapeia um jogador e marca para uma linha no tabuleiro do jogo ascii. Ele usa 'L', que é uma lista ou números de linhas dos quais os números de linhas correspondentes a '-------'- foram excluídos.Da mesma forma,
C
mapeia um jogador e marca para uma coluna no tabuleiro do jogo ascii.Usando
R
eC
, o buraco apropriado no tabuleiro do jogo pode ser definido como o número do jogador.Por fim,
print(*b,sep='')
imprime cada caractereb
sem inserir um espaço entre caracteres adjacentes. (Salva alguns bytes usando '' .join)fonte
Matricks ,
1441980 bytesViva para esolangs!
Editar: compactado verificando cada número em um loop para economizar uma tonelada de bytes. Também fiz a parte inferior "copiar" a parte superior (preciso de uma função inversa). Também substituí a maioria dos caracteres ascii pelos valores brutos para economizar um pouco mais. Corrigi também um bug no intérprete em que a entrada de número não estava funcionando corretamente.
Recebe entrada na linha de comando:
python matricks.py <filename> [[]] <num1>,<num2>,<num3> --asciiprint
Matricks é uma linguagem de minha própria criação. A documentação está na página do Github. A atualização mais recente foi uma correção de bug, nenhum recurso novo adicionado ou algo assim.
Repartição desta solução:
fonte
Python 2, 615 bytes
A função é chamada passando em um dicionário que contém as pontuações. Por exemplo:
A contagem de bytes reflete o recuo do loop "for x" com guias em vez de espaços.
Explicação
O primeiro loop cria a placa horizontalmente em uma string de 57x27, com números de faixa em vez de "buracos".
O segundo loop copia a sequência, substituindo os números por asteriscos, exceto nos locais de pontuação. Os pontos de peg nas linhas retas no meio da pista saem para trás.
O terceiro loop altera a orientação para vertical, corrigindo os pinos na faixa do meio e adicionando caracteres de nova linha.
Experimente aqui
fonte
Lote,
1302109910961079 bytesUngolfed:
fonte
Java,
10591035 bytesUngolfed:
Abusa formatos (printfs) como mad, e é provavelmente por isso que não é tão pequeno quanto poderia ser.
fonte