Existe una variante del conocido problema de N-reinas que involucra a reinas y caballeros y se dice que es "considerablemente más difícil" 1 . La declaración del problema es la siguiente:
Debes colocar un número igual de caballeros ♞ y reinas ♛ en un tablero de ajedrez de modo que ninguna pieza ataque a ninguna otra pieza. ¿Cuál es el número máximo de piezas que puede colocar en el tablero y de cuántas maneras diferentes puede hacerlo?
En este desafío de código de golf , se le dará una entrada n entre 3 y 32 (de la manera que sea más adecuada para su idioma). Para un n dado , puede haber cero o más soluciones al problema anterior. En caso de que no haya solución, debe generar / devolver nada ( nulo , cadena vacía , falso , ...). De lo contrario, debe dar dos resultados:
- Un tablero de solución (ver más abajo) para el tamaño n donde no es posible agregar una pieza de ajedrez de reina o caballero sin tener ninguna pieza bajo ataque. Debe haber un número igual de reinas y caballeros .
- La fuente de un programa a ejecutar que no acepta entradas y proporciona (i) otra solución (o nada ) para el mismo tamaño n , en el mismo formato, así como (ii) otro programa para la próxima solución (y así sucesivamente) ...)
Tenga en cuenta que:
- La secuencia de programas nunca debe devolver la misma placa dos veces, debe cubrir todas las soluciones posibles para el problema del tamaño n y, finalmente, tiene que terminar (sin producir ninguna salida).
- Puede devolver dos valores, devolver uno e imprimir el otro, o imprimir los dos valores devueltos.
- Sin embargo , si imprime tanto la placa como el siguiente programa, no se debe considerar que la placa forma parte del siguiente programa (recomendaría imprimir la placa en comentario, o utilizar tanto la salida estándar como las secuencias de error).
- El programa como valor de retorno debe ser una cadena, no un cierre.
Formato de tablero
- Un tablero es un cuadrado de tamaño n .
- Una celda de tablero puede estar vacía, una reina o un caballero.
- Debe elegir valores distintos para cada tipo de celdas (es decir, puede usar otros símbolos que Q, N al imprimir el tablero).
- Si devuelve un tablero sin cadenas, debe ser una colección ordenada de los n 2 valores del tablero (por ejemplo, matriz, vector o lista en orden de fila / columna-mayor, ...).
Si imprime el tablero, puede imprimirlo al cuadrado o como una línea. Por ejemplo, una placa de solución de tamaño 4 se puede imprimir de la siguiente manera (no se requieren espacios; símbolos a su discreción):
Q - - - - - - - - - - - - - N -
Si lo cree así, también puede generar:
♛ · · · · · · · · · · · · · ♞ ·
... pero esto es suficiente:
Q-------------N-
No importa si recorre las celdas en un orden de fila mayor o columna mayor, porque hay soluciones simétricas. Por ejemplo, las soluciones para n = 4 son:
Q------N-------- Q----------N---- Q------------N-- Q-------------N- -Q----------N--- -Q------------N- -Q-------------N --Q---------N--- --Q----------N-- --Q------------N ---QN----------- ---Q----N------- ---Q---------N-- ---Q----------N- ---NQ----------- ----Q------N---- ----Q----------N N------Q-------- -------QN------- -------Q----N--- ---N----Q------- -------NQ------- --------Q------N N----------Q---- ----N------Q---- -----------QN--- -N----------Q--- --N---------Q--- -------N----Q--- -----------NQ--- N------------Q-- --N----------Q-- ---N---------Q-- N-------------Q- -N------------Q- ---N----------Q- -N-------------Q --N------------Q ----N----------Q --------N------Q
También puede ver las soluciones para n = 5 como matrices ; los tableros contiene #
, q
y n
símbolos, que son células vacías de diferentes tipos (véase mi respuesta a continuación). Yo cuento 2836 tablas para n = 6 , al igual que en la respuesta de Sleafar (introduje un error cuando se reduce el recuento de bytes, pero se ha resuelto ahora).
Muchas gracias a Sleafar por encontrar no uno sino dos errores en mi código.
Puntuación
El código más corto en bytes gana.
Medimos el tamaño del primer programa, el que acepta n .
1 . Queens and Knights , por Roger KW Hui (¡cuidado! Contiene una solución)
-------------------------N--------Q-
no es válida porque se pueden agregar más piezas :) Q--------N---------------N--------Q-
.