El póker tiene etiqueta en la forma en que organizas tus fichas, a menudo aplicadas en torneos: es posible que tus fichas no se "oculten" a tus oponentes al estar detrás de otros, principalmente para no ocultar algunas fichas de gran denominación.
El reto
Vamos a jugar al póker en ASCII, por lo que necesitamos escribir una función o programa que dibuje nuestra disposición de pila de chips ASCII dado su valor total n
.
Entrada
: un entero positivo n
(hasta se 2**32-1
debe manejar)
Salida
: una representación ASCII de la disposición de la pila como se define a continuación.
Esto puede contener espacios en blanco a la derecha de cada línea, de modo que ninguna línea sea más larga que un carácter más que la longitud utilizada por los caracteres imprimibles en la línea más larga (inferior);
Esto puede contener una nueva línea final; y
Los caracteres que representan chips pueden estar en minúsculas si lo prefiere.
La disposición de la pila:
- Contener la menor cantidad de fichas posibles, dadas las denominaciones (ver más abajo);
- Tendrá fichas de igual valor en "pilas" (columnas);
- Ser ordenado de tal manera que las pilas más cortas estén a la derecha de las pilas más altas; y
- Ordene de manera que las pilas con fichas de mayor denominación estén a la derecha de las pilas de igual tamaño de denominaciones más bajas (lo que representa que son visibles para nuestro oponente a la derecha)
Las fichas en sí deben representarse como caracteres individuales que identifiquen su color:
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
Ejemplo
Para n = 276,352
el menor número de chips sería:
2 * 100K + 3 * 25K + 1 * 1K + 3 * 100 + 2 * 25 + 2 * 1
MM CCC P BBB GG WW
El single P
debe ir a la extrema derecha,
luego los tres montones de tamaño 2
deben ir a continuación,
pero MM
deben ir más a la derecha seguidos por el GG
y luego WW
desde 100K > 25 > 1
entonces los dos montones de tamaño 3
van a la izquierda,
pero el CCC
must ir a la derecha del BBB
desde25K > 100
Ahora debemos colocar estos chips en pilas reales, para hacer nuestra salida:
BC
BCWGM
BCWGMP
Casos de prueba
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
Este es el código de golf , por lo que gana el código más corto en bytes. Sin escapatorias, yada yada, ya sabes el ejercicio.
2**31-1
, o tu intención es ser más grande que la mayoría de losint
tipos firmados ?2**32-1
es un caso de prueba, pero estoy dispuesto a reducirlo. (Dato interesante: PokerStars tiene un25B
chip en su carpeta de imágenes.)Respuestas:
Pyth,
565552 bytesEl código contiene algunos no imprimibles, así que aquí hay un
xxd
hexdump reversible .Pruébalo en línea. Banco de pruebas.
Consejo profesional: para jugar golf
1
al final de un programa que acepte un número distinto de ceroQ
, solo agregue/
./QQ
, que en Python seríaQ // Q
, es 1 para no ceroQ
.Sin compresión y no imprimibles (55 bytes):
fuente
JavaScript (ES6),
185177... 171 bytesFormateado y comentado
Manifestación
fuente
Rubí,
181177 bytesPruebas de ideona .
fuente
Python 2.7,
282248238 bytesExplicación:
Llene la lista
L
con elementos que[quanity, chip_order, chip_character]
indiquen la cantidad de cada tipo de chip, donde sechip_order
garantiza que los chips de igual cantidad se ordenen en orden inverso (los chips de mayor valor primero ). Tome las fichasL
en reversa para construir cadenas para cada línea. Imprima líneas al revés para obtener las líneas más pequeñas en la parte superior.Gracias a Blue por algunas de las mejoras.
fuente
for
bucle), puede sustituir el valor bruto para guardar algunos bytes. Para obtener más consejos, consulte codegolf.stackexchange.com/questions/54/…input
le dará el número entero sin tener que convertir, yX[0]>0
puede acortarse aX[0]
Mathematica, 440 bytes
La representación ASCI y el orden correcto se tragan la mayor parte del código.
* Solo funciona con la Versión 11 y superior (uso de Nothing) *
fuente
PHP, 274 bytes
fuente