Produzca un programa para numerar correctamente una cuadrícula de crucigramas.
Entrada
La entrada será el nombre de un archivo que representa la cuadrícula de crucigramas. El nombre de archivo de entrada se puede pasar como argumento, en la entrada estándar o por otros medios convencionales que no sean la codificación fija.
Formato de archivo de cuadrícula: un archivo de texto. La primera línea consta de dos constantes enteras separadas por espacios en blanco M
y N
. Siguiendo esa línea hay M
líneas cada una compuesta de N
caracteres (más una nueva línea) seleccionados entre [#A-Z ]
. Estos caracteres se interpretan de tal manera que '#'
indican un cuadrado bloqueado, ' '
un cuadrado abierto en el rompecabezas sin contenido conocido y cualquier letra un cuadrado abierto que contenga esa letra.
Salida
La salida será un archivo de numeración, y puede enviarse a la salida estándar, a un archivo cuyo nombre se deriva del nombre de archivo de entrada, a un archivo especificado por el usuario oa algún otro destino convencional.
Formato de archivo de numeración Un archivo de texto. Las líneas que comienzan con '#' se ignoran y pueden usarse para comentarios. Todas las demás líneas contienen una pestaña separada triplete i
, m
, n
donde i
representa un número que va a imprimirse en la parrilla, y m
y n
representan la fila y columna de la plaza donde debe ser impreso. El número de filas y columnas comienza en 1.
Esquema de numeración
Una cuadrícula numerada correctamente tiene las siguientes propiedades:
- La numeración comienza en 1.
- Ninguna columna o tramo de cuadrados abiertos está sin numerar. (Puede suponer que no existirá una respuesta de carácter único en el problema).
- Los números se encontrarán en orden de conteo escaneando de la fila superior a la inferior tomando cada fila de izquierda a derecha. (Entonces, cada tramo horizontal está numerado en su cuadrado más a la izquierda, y cada columna está numerada en su cuadrado más alto).
Prueba de entrada y salida esperada
Entrada:
5 5
# ##
#
#
#
## #
Salida (descuidando las líneas de comentarios):
1 1 2
2 1 3
3 2 2
4 2 4
5 2 5
6 3 1
7 3 4
8 4 1
9 4 3
10 5 3
Aparte
Este es el primero de los que esperamos sean varios desafíos relacionados con crucigramas. Planeo usar un conjunto consistente de formatos de archivo en todo momento y construir un conjunto respetable de utilidades relacionadas con crucigramas en el proceso. Por ejemplo, un rompecabezas posterior requerirá imprimir una versión ASCII del crucigrama basado en la entrada y salida de este rompecabezas.
'\n'
en c en todas las plataformas. Se supone que el archivo de entrada se produjo en el mismo sistema que lo procesará, por lo que este problema debería ser transparente. Una nota general sobre code-golf: si está trabajando en un idioma extraño o en una plataforma extraña, simplemente tome nota de cualquier cosa que pueda sorprender al lector. La gente tendrá en cuenta eso al juzgar su presentación.Respuestas:
Ruby -
210139 caracteresProbado con rubí 1.9.
fuente
./temp.ruby:4: wrong argument type Symbol (expected Proc) (TypeError)
.ruby1.9 test.rb
.PHP - 175 caracteres
fuente
Pitón,
194177176172 caracteresfuente
h.join(f)
Creo que deberías poder usarlonext(f)
lugar def.readline()
si eres> = 2.6 másf.next()
echo test_input_file_name | python golf.py
, ¿está mal?C ++
270264260256253 charUsar:
Bien formateado:
Intenté leer todo el crucigrama de una vez y usando un solo bucle.
Pero el costo de compensar el carácter '\ n superó cualquier ganancia:
Comprimido: 260 caracteres
fuente
C,
184189 caracteresNo hay mucho que decir aquí; La lógica es bastante básica. El programa toma el nombre del archivo en la entrada estándar en tiempo de ejecución. (Es tan molesto que el programa tiene que trabajar con un nombre de archivo, y no puede simplemente leer el contenido del archivo directamente de la entrada estándar. ¡Pero el que paga el flautista llama la melodía!)
El
fscanf()
patrón extraño es mi intento de escanear la primera línea completa, incluida la nueva línea pero sin incluir los espacios en blanco iniciales en la siguiente línea. Hay una razón por la que nadie usascanf()
.fuente
5 5
, tomas los primeros 5 como el ancho, cuando deberías haber tomado la segunda (lo cual no importa, por supuesto, en este ejemplo).Implementación de referencia:
c99 sin golf y más de 2000 caracteres, incluidas varias ranuras de depuración todavía allí.
fuente
PerlTeX : 1143 caracteres (pero aún no lo he jugado)
Necesita un archivo llamado
grid.txt
con la especificación, luego compilar confuente
Scala 252:
compilación e invocación:
fuente
SHELL SCRIPT
muestra de E / S:
./numberCrossWord.sh crosswordGrid.txt
fuente
/bin/sh
queja sobre la línea 11. ¿Podría decir qué shell está utilizando (incluido el número de versión)?ANSI C 694 caracteres
Esta es una versión en C que busca recorridos horizontales o verticales de dos espacios que están unidos contra el borde o contra un carácter '#'.
El archivo de entrada se toma de stdin y debe ser:
Cualquier consejo para compactar esto será recibido con gratitud.
Salida para el ejemplo proporcionado
fuente