Un nonograma es un rompecabezas lógico bidimensional que se parece a esto (capturas de pantalla del juego Pixelo , mi juego de nonogramas favorito):
El objetivo del juego es descubrir qué imagen codifican esos números. Las reglas son simples: un número en una columna o fila significa que en algún lugar de esa columna o fila, se rellenan muchos cuadros en una fila. Por ejemplo, la fila inferior de la imagen de arriba no debe tener cuadros rellenados, mientras que el de arriba debe tener todos sus cuadros llenos. La tercera fila desde abajo tiene 8 cajas llenas, y todas estarán en una fila.
Dos o más números para la misma columna o fila significan que hay múltiples "tiradas" de cajas llenas, con al menos un espacio entre ellas, con esas longitudes. El orden se conserva. Por ejemplo, hay tres cuadros rellenados en la columna de la derecha de la imagen de arriba, al menos un espacio debajo de ellos, y luego un cuadro más rellenado.
Aquí está el mismo rompecabezas, casi completado:
(Las X no son importantes, son solo una pista que el jugador deja para sí mismo para decir "Esta casilla definitivamente no está llena". Piensa en banderas en Buscaminas. No tienen reglas de significado).
Esperemos que pueda ver que, por ejemplo, las columnas del medio con sugerencias que dicen "2 2" tienen dos tramos de 2 longitudes de cajas rellenas.
Su misión, si elige aceptarla, es escribir un programa o función que cree un rompecabezas como este. Se le da el tamaño del tablero como un entero entero (5 <= n <= 50) en stdin o como argumento (no hay ninguna razón por la cual un rompecabezas de nonograma tiene que ser cuadrado, pero para este desafío lo será). Después de eso, se le dará una serie de 1s y 0s que representan cuadrados llenos y sin llenar en la imagen, respectivamente. Los primeros n de ellos son la fila superior, luego la siguiente fila, etc. Volverá o imprimirá para formar un tablero de 2 * 1 celdas (porque se ven mejor, y le da espacio para pistas de 2 dígitos para una columna ), todos ellos vacíos, con sugerencias correspondientes a los datos de entrada.
Formato de salida
Muestra
Entrada:
./nonogram <<< '5 0 1 1 1 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 0 1 1 1 0'
OR
n(5,[0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0])
Imagen:
Salida:
1
2 1 2
3 2 1 2 3
+----------
3|
2 2|
1 1 1|
2 2|
3|
Entrada:
./nonogram <<< '15 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1'
Imagen:
Salida:
1 1
1 1 3 3 5 5 3 3 1
7 2 3 2 4 2 3 210 2 3 0 4 215
+------------------------------
2|
1|
1|
1|
1|
1 1|
3 3 1 1|
1 5 1 1|
3 5 3|
1 5 1|
1 3 1|
1 1 1 1 1|
1 1 1 1 1 1 1 1|
11 3|
11 3|
Aclaraciones
- Su salida no necesita ser un rompecabezas solucionable. No todos los nonogramas tienen solución, pero esa no es su preocupación. Simplemente envíe las sugerencias que corresponden a la entrada, ya sea que sean un buen rompecabezas o no.
- Se permite un programa que tome argumentos en la línea de comando. Esto se afirma más arriba, pero es posible tener una idea equivocada. Para eso están las aclaraciones.
0
Es obligatorio imprimir una fila o columna que no haya rellenado los cuadros. No digo esto con palabras en ninguna parte, pero está en los datos de muestra.
5<=n<=50
es la especificación, por lo que no puede haber ningún número de 3 dígitos-
de lo que debería?Respuestas:
GolfScript, 128 caracteres
La entrada debe proporcionarse en STDIN como números separados por espacios.
Puedes probar el ejemplo aquí .
Código comentado:
fuente
~](:k/.zip\]{{1,%{,}%.!,+}%}/{' ':^*}%{.{,}%$-1=}:f~:r{^*\+r~)>'|'n}+%\f{.~)\[^]*@+>{^\+-2>}%}+%zip{r)^*\n}%r^*'+''--'k*n](
(por alguna razón lettercount.com dice 125 caracteres si lo copia, pero le aseguro que son 123 caracteres). Se han cambiado algunas partes del algoritmo, pero la mayoría sigue siendo la misma. También cambié algunos nombres de variables (tener 9 como variable es inteligente, pero también confuso), pero puede volver a cambiarlos si lo desea.Ruby, 216
255Si bien esto no produce la salida de muestra exacta dada en la pregunta, sigue las especificaciones. La única diferencia con los ejemplos es que imprimo algunos espacios iniciales / líneas nuevas.
Ejemplo:
Registro de cambios:
chunk
amap
.[nil]
lugar de llamarArray#compact
.fuente
length(leading spaces + numbers to the left) == 2*n
eheight(leading newlines + numbers at the top) == n
... así que mientras el monitor es lo suficientemente grande para3*n+1 × 2*n+2
los personajes, que no debería tener que descalificar a mí. :)Rubí, 434
fuente
ruby $yourprogram <<< $input
pero lo conseguíruby_nanograms:7:in '<main>': undefined method '+' for nil:NilClass (NoMethodError)
.ruby nonogram.rb 2 1 0 0 1
para un 2x20
la cuarta y última columna en el segundo ejemplo.+------
... la línea está sangrada por demasiados espacios también.GolfScript
149147El código
Ediciones:
puts
guardar un carácter másDemostraciones en línea
Una versión algo anotada del código
fuente
Javascript (E6) 314
334 357 410Sin golf
Uso
N(5,[0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0])
N(15,[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1])
Editar historial
1 Se eliminó la expresión regular utilizada para encontrar columnas
. Overkill 2 Simpler es mejor. Salida a una cadena, no a una matriz. Función auxiliar eliminada FILL (F)
3 Aún más simple. No puedo hacerlo mejor que esto. Todavía no se puede comparar con Golfscript :(
fuente
R, 384 caracteres
Con muescas y algunas explicaciones:
Uso:
fuente
C - 511
C definitivamente no fue hecho para formatear bien la salida. El recuento de caracteres incluye solo espacios necesarios / nuevas líneas.
La entrada es de STDIN, números separados por espacios.
fuente
Han pasado unos días y nadie respondió en Python, así que aquí está mi intento (probablemente bastante pobre):
Python 2.7 -
404397380 bytesPronto publicaré una versión sin golf, pero por el momento creo que es bastante legible. :)EDITAR: Mientras escribía la versión sin golf, noté algunas mejoras que podría hacer que sumaran bastante! Por alguna razón que no puedo explicar, ahora tiene nuevas líneas adicionales en la parte superior y espacios a la izquierda (aunque no creo que haya cambiado nada funcional), pero aún cumple con las especificaciones.
¡Ya viene la versión sin golf!Sin golf:
Se hicieron algunos cambios por razones de legibilidad (
g
divididos en tres funciones con nombre, listas complejas de comprensión hechas enfor
bucles), pero lógicamente funciona exactamente de la misma manera.Es por eso que es confuso que este no imprima espacios adicionales y líneas nuevas, mientras que el golf lo hace. ¯ \ _ (ツ) _ / ¯
fuente