Para aquellos de ustedes que no están familiarizados, el problema de la colegiala de Kirkman es el siguiente:
Quince señoritas en una escuela salen tres juntas por siete días seguidos: es necesario organizarlas diariamente para que no dos caminen dos veces juntas.
Podríamos ver esto como una lista anidada de 3 por 5 (o matriz):
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
Esencialmente, el objetivo del problema original es descubrir 7 formas diferentes de organizar la matriz anterior para que dos letras nunca compartan una fila más de una vez . De MathWorld (vinculado anteriormente), encontramos esta solución:
[[a,b,c] [[a,d,h] [[a,e,m] [[a,f,i] [[a,g,l] [[a,j,n] [[a,k,o]
[d,e,f] [b,e,k] [b,h,n] [b,l,o] [b,d,j] [b,i,m] [b,f,g]
[g,h,i] [c,i,o] [c,g,k] [c,h,j] [c,f,m] [c,e,l] [c,d,n]
[j,k,l] [f,l,n] [d,i,l] [d,k,m] [e,h,o] [d,o,g] [e,i,j]
[m,n,o]] [g,j,m]] [f,j,o]] [e,g,n]] [i,k,n]] [f,h,k]] [h,l,m]]
Ahora, ¿y si hubiera un número diferente de colegialas? ¿Podría haber un octavo día? † Este es nuestro desafío.
† En este caso, no †† , pero no necesariamente para otras dimensiones de matriz
†† Podemos mostrar esto fácilmente, ya que a
aparece en una fila con todas las demás letras.
El reto:
Dada una entrada de dimensiones (filas, de columnas) de una matriz de colegialas (es decir 3 x 5
, 4 x 4
, o [7,6]
, [10,10]
, etc.), de salida de la mayor cantidad posible de 'día' que se ajustan a los requisitos especificados anteriormente.
Entrada: las
dimensiones de la matriz de colegiala (cualquier forma de entrada razonable que desee).
Salida: la
serie más grande posible de matrices que se ajustan a los requisitos anteriores (cualquier forma razonable).
Casos de prueba:
Input: [1,1]
Output: [[a]]
Input: [1,2]
Output: [[a,b]]
Input:* [2,1]
Output: [[a]
[b]]
Input: [2,2]
Output: [[a,b] [[a,c] [[a,d]
[c,d]] [b,d]] [b,c]]
Input: [3,3]
Output: [[a,b,c] [[a,d,g] [[a,e,i] [[a,f,h]
[d,e,f] [b,e,h] [b,f,g] [b,d,i]
[g,h,i]] [c,f,i]] [c,d,h]] [c,e,g]]
Input: [5,3]
Output: [[a,b,c] [[a,d,h] [[a,e,m] [[a,f,i] [[a,g,l] [[a,j,n] [[a,k,o]
[d,e,f] [b,e,k] [b,h,n] [b,l,o] [b,d,j] [b,i,m] [b,f,g]
[g,h,i] [c,i,o] [c,g,k] [c,h,j] [c,f,m] [c,e,l] [c,d,n]
[j,k,l] [f,l,n] [d,i,l] [d,k,m] [e,h,o] [d,o,g] [e,i,j]
[m,n,o]] [g,j,m]] [f,j,o]] [e,g,n]] [i,k,n]] [f,h,k]] [h,l,m]]
There may be more than one correct answer.
* Gracias a @Frozenfrank por corregir el caso de prueba 3 : si solo hay una columna, solo puede haber un día, ya que el orden de las filas no importa.
Esta es una competencia de código de golf : gana la respuesta más corta.
fuente
Respuestas:
Mathematica, 935 bytes
esto es para 26 damas max
EDITAR
Hice algunos cambios y creo que funciona! El código ahora está configurado para resolver [5,4] (que es el "problema de los golfistas sociales") y obtiene el resultado en unos segundos. Sin embargo, el problema [5,3] es más difícil y tendrá que esperar entre 10 y 20 minutos, pero obtendrá la combinación correcta para todos los días. Para casos más fáciles es muy rápido.
de todos modos, puede probarlo y ver los resultados
Pruébelo en línea aquí,
copie y pegue usando ctrl-v
presione shift + enter para ejecutar el código
, puede cambiar la entrada al comienzo del código -> Inp = {5,4}
ejecute codificar varias veces para obtener diferentes permutaciones
fuente
[5,3]
caso de prueba en el que se basa todo este problema. Además, esto se puede jugar más al golf; hay varios nombres de variables que son más grandes de lo que deben ser, y algunas funciones pueden acortarse con@
notación infija o infijada. ¡Pero espero que sigas trabajando!914
. Debería ser golfable a alrededor de 850.