Su tarea es, dada una cuadrícula cuadrada de dígitos ( 0-9
), generar una de las formas en que los dígitos se pueden agrupar de manera que:
- Cada dígito es parte de exactamente un grupo
- Todos los grupos tienen el mismo número de dígitos.
- Todos los grupos están delimitados por una forma similar a un polígono (esto significa que cada dígito en el grupo está al lado de [izquierda, derecha, arriba, abajo] al menos otro dígito del mismo grupo, a menos que cada grupo tenga 1 elemento).
- Todos los grupos tienen la misma suma.
La cuadrícula de entrada siempre será un cuadrado: puede elegir cualquier método de entrada que desee (incluido el suministro de argumentos a una función o método). Además, la entrada proporcionará la cantidad de grupos en los que su programa debería agrupar los dígitos.
Entrada de ejemplo:
Supongamos que su formato de entrada es stringOfDigits numberOfGroups
.
Un ejemplo de entrada sería:
156790809 3
que se traduciría a (una cuadrícula de sqrt(9) * sqrt(9)
)
1 5 6
7 9 0
8 0 9
que tendrías que dividir en 3 grupos, cada uno de los cuales debería tener 9 / 3 = 3
elementos con la misma suma.
Salida: La salida debe ser la cadena de dígitos, con espacios opcionales y nuevas líneas para formatear, con cada dígito seguido de una letra que a-z
indique su grupo. Debe haber exactamente numberOfTotalDigits / numberOfGroups
elementos en cada grupo. Nunca tendrá que dividir algo en más de 26 grupos.
Salida de ejemplo:
1a 5a 6b
7c 9a 0b
8c 0c 9b
Tenga en cuenta que reemplazar todas las a
s con b
sy b
s con a
s es igualmente válido. Mientras cada grupo se denota con una letra distinta, la salida es válida.
Además, espero que la mayoría de los programas muestren algo similar a esto, porque las nuevas líneas / espacios son opcionales:
1a5a6b7c9a0b8c0c9b
En este caso, agregar todos los dígitos del grupo a
, b
o c
hace 15. Además, todos los grupos están unidos por algún polígono.
Salidas inválidas:
1a 5a 6b
7c 9a 0c
8c 0b 9b
porque los grupos no forman polígonos (específicamente, el 6b
está aislado y 0c
también está solo).
1a 5a 6b
7c 9a 0b
8c 0b 9b
porque el grupo b
tiene 4 elementos mientras que c
solo tiene 2.
Etc.
Si no hay una solución válida, su programa puede hacer cualquier cosa (es decir, detenerse, bloquearse, ejecutarse para siempre), pero si su programa imprime None
cuando no hay una solución válida, -15
a su puntaje.
Si hay más de una solución, solo tiene que imprimir una, pero -20
si su programa las imprime todas separadas por algún delimitador.
Este es el código de golf, por lo que gana el código más corto (con bonificaciones).
6b
está aislado, no el0b
.156790889 3
parece que debería ser156790809 3
Respuestas:
Pyth , 122-20-15 = 87
Cambios:
130 -> 120: Cambiado a entrada separada de nueva línea.
120 -> 134: Se corrigió un error que involucraba a grupos que no tenían un tamaño igual a la longitud lateral de la matriz.
134 -> 120: Imprime todas las soluciones, incluidas las equivalentes en el cambio de nombre de grupo.
120 -> 122: se corrigió un error en el que solo se generarían rutas, en lugar de todos los grupos legales.
Prueba de funcionamiento:
Explicación:
fuente
JavaScript (ES6) 361 (376-15)
372(Tal vez todavía se pueda jugar un poco más)
Como función, el primer parámetro es la cadena de dígitos y el segundo parámetro es el número de grupos.
Es una búsqueda recursiva ingenua, deteniéndose en la primera solución encontrada (sin bonificación de -20).
Necesita algunos casos de prueba más para verificar el rendimiento en una entrada más grande.
No golfista y explicado
Prueba en la consola FireFox / FireBug
F("156790809",3)
salida1c5c6b7a9c0b8a0a9b
F("156790819",3)
salidaNone
fuente