Nota: Esto está relacionado con una variación del juego Rummikub
Antecedentes y reglas
Rummikub es un juego basado en fichas. Hay cuatro colores: rojo, naranja, azul y negro. Para cada color hay 13 fichas (etiquetadas del 1 al 13), y también hay 2 comodines que son independientes del color, por lo tanto, hay 54 piezas en total. En esta variación de Rummikub, cada jugador recibe 14 fichas y debe obtener una ficha más y soltar otra cada ronda, de modo que el recuento de fichas sea constante. Los jugadores no ven las fichas del otro. El objetivo es agrupar las fichas, de modo que todas las piezas pertenezcan al menos a un grupo (ver más abajo). Cuando un jugador tiene todas las piezas agrupadas, sueltan su tablero de fichas y revelan sus piezas. Luego, los demás verifican si todas las combinaciones son válidas, y si lo son, el jugador gana la ronda.
¿Cómo se pueden agrupar los mosaicos?
Solo hay dos tipos de grupos:
Grupos multicolores :
- Se componen de 3 o 4 fichas.
- Solo contienen fichas con el mismo número.
- Todos los azulejos son de diferentes colores.
- Ejemplo:
RED 9, BLUE 9, BLACK 9
.
Grupos monocolor :
- Se componen de al menos 3 fichas.
- No pueden contener más de 13 fichas.
- Solo contienen fichas con diferentes números consecutivos, en orden ascendente.
- Todos los azulejos tienen el mismo color.
- Las baldosas etiquetadas con
1
pueden no ser lugares después de las baldosas etiquetadas13
. - Ejemplo:
RED 5, RED 6, RED 7
.
Espera, ¿qué hacen los comodines?
Los comodines pueden sustituir cualquier pieza del juego. Por ejemplo, nuestro primer ejemplo puede ser JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
o RED 9, BLUE 9, JOKER
. Lo mismo se aplica a nuestro otro ejemplo. Sin embargo, uno no puede colocar dos comodines en el mismo grupo, por lo que cosas como JOKER, ORANGE 8, JOKER
están prohibidas.
Tarea
Dado un grupo de mosaicos Rummikub, determine si es válido. Se le garantiza que no aparecerán mosaicos duplicados, excepto los 2 comodines y que los mosaicos que reciba como entrada son válidos (por ejemplo, cosas como 60
no aparecerán).
De entrada y salida
Puede tomar la entrada y proporcionar la salida por cualquier método estándar.
Algunos formatos de entrada válidos: lista de cadenas, lista de tuplas, listas anidadas, cadenas o cualquier otra cosa que considere adecuada. Los colores pueden tomarse como Cadenas (por ejemplo:) "Blue","Red", etc.
, como abreviaturas de Cadena (haga que las baldosas Azul y Negra sean distinguibles) o como enteros que correspondan a un color. Cuando se trata de comodines, debe mencionar la forma en que su programa los recibe como entrada. Si elige cadenas, puede tener algo como RED 9, JOKER, ...
, si elige tuplas que puede tener (9,"RED"), ("JOKER")
o algo equivalente. Si ayuda, puede recibir un color para ese Joker (que no debería afectar la salida de su programa). Por ejemplo, puede tener ("JOKER","RED")
o ("JOKER","BLUE")
, pero eso no debería influir en la salida de ninguna manera.
Con respecto a la salida, se aplican las reglas estándar para un problema de decisión .
Ejemplos trabajados
Tomemos un ejemplo, que con suerte hará que sea más fácil de entender. Dado un grupo de la siguiente manera, donde cada tupla representa un mosaico:
[(9, "ROJO"), (9, "NARANJA"), ("JOKER"), (9, "NEGRO")]
Esto debería devolver un valor verdadero, porque la entrada es válida. En este caso, el Joker sustituye (9, "BLUE")
, y forman un grupo multicolor.
Si le dieran el siguiente grupo:
[(9, "AZUL"), (9, "NARANJA"), (9, "ROJO"), (9, "NEGRO"), ("JOKER")]
Sería inválido y, por lo tanto, su programa debería devolver un valor falso, porque no queda nada para que el comodín lo sustituya, porque el número máximo de tarjetas en un grupo multicolor es 4.
Casos de prueba adicionales
Estos son para un conjunto de pruebas extendido que cubre casi todas las situaciones posibles:
Entrada -> Salida [(1, "AZUL"), (2, "AZUL"), (3, "AZUL"), (4, "AZUL"), (5, "AZUL"), (6, "AZUL")] - > veraz [(6, "AZUL"), (6, "ROJO"), (6, "NEGRO)] -> verdad [(5, "NEGRO"), (6, "NEGRO"), (7, "NEGRO"), (8, "NEGRO"), (9, "NEGRO"), (10, "NEGRO"), ( "JOKER"), (12, "BLACK")] -> verdad [("JOKER"), (3, "AZUL"), (3, "ROJO")] -> verdad [(8, "NEGRO"), (2, "ROJO"), (13, "AZUL")] -> falso [(4, "RED"), (3, "RED"), (5, "RED")] -> falsedad [(5, "NEGRO"), (6, "NEGRO)] -> falsedad [("JOKER"), (5, "RED"), ("JOKER")] -> falsedad [(4, "ROJO"), (5, "ROJO"), (6, AZUL ")] -> falsedad [(4, "RED"), ("JOKER"), (5, "RED")] -> falsedad [(12, "NEGRO"), (13, "NEGRO), (1," NEGRO ")] -> falsedad
Este es el código de golf , por lo que gana el código más corto en bytes en cada idioma.