Hace un tiempo compré una nueva billetera que puede contener 8 tarjetas (4 en ambos lados). Sin embargo, parece que tengo muchas más tarjetas que eso y necesito elegir cuáles quiero llevar conmigo. Algunas tarjetas las uso con más frecuencia que otras, pero las tarjetas que prefiero llevar conmigo no son necesariamente las que más uso.
El reto
Dada una pila de tarjetas, devuelva el diseño de mi billetera de la mejor manera posible con mis preferencias y restricciones. El diseño debe ser el siguiente:
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
Actualmente poseo las siguientes cartas: las pilas siempre consistirán en una selección de estas:
- 1 documento de identidad ( ID )
- 1 licencia de conducir ( DL )
- 2 tarjetas de crédito ( CC )
- 5 tarjetas de débito ( DC )
- 1 tarjeta de transporte público ( PC )
- 1 tarjeta de acceso al gimnasio ( GC )
- 9 tarjetas de membresía de tiendas y almacenes aleatorios ( MC )
Tengo algunas preferencias y restricciones:
- Tarjetas ordenadas por prioridad: ID, DL, CC, DC, PC, GC, MC
- Tarjetas clasificadas por frecuencia de uso: CC, DC, PC, GC, MC, ID, DL
- Por razones de seguridad, el número total de tarjetas de débito y crédito en mi billetera puede ser como máximo 1 más que la suma de todas las otras tarjetas que irán en mi billetera ( N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC +1).
- Si está presente, mi tarjeta de identidad y mi licencia de conducir siempre deben ir en la fila 1. Esto no significa que otras tarjetas no puedan ocupar lugares en la fila 1.
- Las cartas de la pila que se usan con más frecuencia siempre deben ir en la fila 4.
Reglas
- No hay 2 cartas que puedan ocupar el mismo lugar.
- Las tarjetas de mayor prioridad siempre se prefieren a las de menor prioridad, a menos que la restricción DC / CC se active.
- ID / DL en la fila 1 anula la regla de frecuencia: si solo se proporciona ID, irá en la fila 1 y la fila 4 estará vacía.
- El formateo de entrada se puede hacer de la forma que desee, siempre que se mantenga el orden de la pila de entrada. p. ej.
ID,CC,PC,MC,MC,MC,DL
también se puede suministrar como p . ej .1ID 1CC 1PC 3MC 1DL 0DC 0GC
oID CC PC MC MC MC DL
. El formato de salida tiene algunas restricciones: todas las filas deben comenzar en una nueva línea, las columnas deben estar delimitadas de alguna manera. Los espacios vacíos se pueden presentar de la forma que desee, siempre que no estropee el diseño 4x2.
Puede haber más de una solución / pedido, depende de usted cuál proporcione como salida.
- Puede suponer que las tarjetas del mismo tipo siempre se agruparán en la entrada.
- Además de lo anterior, se aplican las reglas estándar de código de golf y las lagunas.
Prima
Puedes eliminar el 15% de su cuenta de byte si también devuelve las tarjetas que no entraron en la billetera. Imprimir "¡Encaja!" en caso de que no queden tarjetas. Esta salida adicional debe estar claramente separada del diseño del returend.
Ejemplos
Entrada:
ID, DL, CC, GC, MC
2 salidas posibles:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
Entrada:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2 salidas posibles:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
Entrada:
DC, DC, CC, CC, GC, DL
2 salidas posibles:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
Entrada:
CC, DC, DC, DC
2 salidas posibles:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
Entrada:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2 salidas posibles:
MC MC MC DC
PC GC or DC GC
DC DC PC MC
CC CC CC CC
optional: e.g. (DC, DC, DC, MC, MC, MC, MC) or (3DC, 4MC)
Entrada:
MC, MC, MC, MC, MC, MC, MC
2 salidas posibles:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
Entrada:
ID, CC
2 salidas posibles:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
Este es el código de golf , por lo que gana el código más corto (en bytes).
Respuestas:
Java 10,
385384382 bytesAunque no fue demasiado difícil, puedo ver por qué no recibió respuesta. Especialmente esa regla con respecto a " N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC +1 " cuesta una gran cantidad de bytes en este momento ...
Y como han pasado 2.5 años desde que este desafío publicado, OP podría tener otra billetera por ahora de todos modos ...
-1 byte gracias a @Jakob .
Pruébalo en línea.
Explicación:
Java 10, 390.15 (459 bytes - 15% de bonificación)
Pruébalo en línea.
fuente
F
con{"CC","DC","PC","GC","MC"}
.