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 dos int
tipos assinados ?
2**32-1
é um caso de teste, mas estou disposto a reduzi-lo. (Fato interessante: PokerStars tem um 25B
chip no seu pasta de imagem.)