O pôquer tem regras de como você organiza suas fichas, geralmente aplicadas em torneios - suas fichas podem não ser "escondidas" dos seus oponentes por ficarem atrás de outras pessoas, principalmente para não esconder algumas fichas de denominação.
O desafio
Vamos jogar pôquer em ASCII, por isso precisamos escrever uma função ou programa que desenhe nosso arranjo de fichas ASCII, considerando seu valor total n
.
Entrada
- Um número inteiro positivo, n
(até 2**32-1
deve ser tratado)
Saída
- Uma representação ASCII da organização da pilha, conforme definido abaixo.
Isso pode conter espaços em branco à direita de cada linha, de modo que nenhuma linha tenha mais que um caractere a mais do que o comprimento usado pelos caracteres imprimíveis na linha mais longa (inferior);
Isso pode conter uma única nova linha à direita; e
Os caracteres que representam os chips podem estar em minúsculas, se você preferir.
A disposição da pilha irá:
- Conter o menor número possível de fichas, considerando as denominações (veja abaixo);
- Terá fichas com valor igual em "pilhas" (colunas);
- Seja ordenado de forma que as pilhas mais curtas fiquem à direita das pilhas mais altas; e
- Seja ordenado de forma que as pilhas com fichas de denominação maior estejam à direita das pilhas de igual tamanho das denominações mais baixas (representando que são visíveis ao (s) nosso (s) oponente (s) à direita)
As próprias fichas devem ser representadas como caracteres individuais, identificando sua cor:
White : 1 = W
Red : 5 = R
Green : 25 = G
Black : 100 = B
Yellow : 500 = Y
Pink : 1K = P
Orange : 5K = O
Cyan : 25K = C
Magenta : 100K = M
Aqua-blue : 500K = A
Lavender : 1M = L
Indigo : 5M = I
Turquoise : 25M = T
Violet : 100M = V
Silver : 500M = S
Exemplo
Para n = 276,352
o menor número de fichas seria:
2 * 100K + 3 * 25K + 1 * 1K + 3 * 100 + 2 * 25 + 2 * 1
MM CCC P BBB GG WW
O single P
deve ir na extrema direita,
depois as três pilhas de tamanho 2
devem ir a seguir,
- mas a MM
deve ir mais longe para a direita, seguido pelo GG
e então WW
desde 100K > 25 > 1
então as duas pilhas de tamanho 3
vão para a esquerda,
- mas o CCC
deve vá para a direita do BBB
desde25K > 100
Agora devemos colocar esses chips em pilhas reais, para produzir nossa saída:
BC
BCWGM
BCWGMP
Casos de teste
Input:
1
Output:
W
Input:
9378278
Output:
L
LWGPCM
LWGPCMB
LWGPCMBI
Input:
22222222
Output:
ROI
ROI
ROIWBPML
ROIWBPML
Input:
1342185143
Output:
WRCIV
WRCIVOLS
WRCIVOLSGBMT
Input:
2147483647
Output:
RMIS
RMISPC
RMISPCWL
RMISPCWLGBYOTV
Input:
4294967295
Output:
S
S
S
S
SRML
SRMLGOIT
SRMLGOITBPCV
SRMLGOITBPCVA
Isso é código-golfe , então o código mais curto em bytes vence. Sem brechas, yada yada, você sabe o que fazer.
2**31-1
ou sua intenção é maior do que a maioria dosint
tipos assinados ?2**32-1
é um caso de teste, mas estou disposto a reduzi-lo. (Fato interessante: PokerStars tem um25B
chip no seu pasta de imagem.)Respostas:
Pitão,
565552 bytesO código contém alguns imprimíveis, então aqui está um
xxd
hexdump reversível .Experimente online. Suíte de teste.
Dica profissional: para jogar golfe
1
no final de um programa que aceite um número diferente de zeroQ
, basta adicionar/
./QQ
, que seria em PythonQ // Q
, é 1 para diferente de zeroQ
.Sem compactação e não imprimíveis (55 bytes):
fonte
JavaScript (ES6),
185177... 171 bytesFormatado e comentado
Demo
fonte
Rubi,
181177 bytesTestes em Ideone .
fonte
Python 2.7,
282248238 bytesExplicação:
Preencha a lista
L
com os elementos que[quanity, chip_order, chip_character]
indicam a quantidade de cada tipo de chip, ondechip_order
garante que os chips de quantidade igual sejam classificados na ordem inversa ( primeiro os chips de maior valor ). Pegue as fichasL
no sentido inverso para criar cordas para cada linha. Imprima linhas no sentido inverso para obter as menores linhas no topo.Obrigado ao Blue por algumas das melhorias.
fonte
for
loop), poderá substituir o valor bruto para salvar alguns bytes. Para obter mais dicas, consulte codegolf.stackexchange.com/questions/54/…input
irá obter o número inteiro sem ter que converter eX[0]>0
pode ser reduzido para #X[0]
Mathematica, 440 bytes
A representação ASCI e a ordem correta engolem a maior parte do código.
* Funciona apenas com a versão 11 e superior (uso de Nothing) *
fonte
PHP, 274 bytes
fonte