Produisez un programme pour numéroter correctement une grille de mots croisés.
Contribution
L'entrée sera le nom d'un fichier représentant la grille de mots croisés. Le nom du fichier d'entrée peut être passé sous forme d'argument, sur l'entrée standard ou par d'autres moyens conventionnels autres que le codage en dur.
Format de fichier de grille: un fichier texte. La première ligne se compose de deux constantes entières séparées par des espaces blancs M
et N
. À la suite de cette ligne se trouvent des M
lignes composées chacune de N
caractères (plus une nouvelle ligne) sélectionnés parmi [#A-Z ]
. Ces caractères sont interprétés de manière à '#'
indiquer un carré bloqué, ' '
un carré ouvert dans le puzzle sans contenu connu et toute lettre un carré ouvert contenant cette lettre.
Production
La sortie sera un fichier de numérotation et peut être envoyée à la sortie standard, à un fichier dont le nom est dérivé du nom de fichier d'entrée, à un fichier spécifié par l'utilisateur ou à une autre destination conventionnelle.
Format de fichier de numérotation Un fichier texte. Les lignes commençant par '#' sont ignorées et peuvent être utilisées pour les commentaires. Toutes les autres lignes contiennent un onglet séparé triplet i
, m
, n
où i
représente un nombre devant être imprimé sur la grille, et m
et n
représentent la rangée et la colonne de la place où il doit être imprimé. Le nombre de lignes et de colonnes commence à 1.
Schéma de numérotation
Une grille correctement numérotée a les propriétés suivantes:
- La numérotation commence à 1.
- Aucune colonne ou étendue de carrés ouverts n'est non numérotée. (Vous pouvez supposer qu'aucune réponse de caractère unique n'existera dans le problème.)
- Les nombres seront rencontrés dans l'ordre de comptage en scannant de la ligne du haut vers le bas en prenant chaque ligne de gauche à droite. (Ainsi, chaque étendue horizontale est numérotée sur son carré le plus à gauche, et chaque colonne est numérotée sur son carré le plus haut.)
Entrée de test et sortie attendue
Contribution:
5 5
# ##
#
#
#
## #
Sortie (en négligeant les lignes de commentaire):
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
De côté
Il s'agit du premier de ce qui sera, espérons-le, plusieurs défis liés aux mots croisés. Je prévois d'utiliser un ensemble cohérent de formats de fichiers tout au long du processus et de créer une suite respectable d'utilitaires liés aux mots croisés. Par exemple, un puzzle ultérieur nécessitera l'impression d'une version ASCII des mots croisés en fonction de l'entrée et de la sortie de ce puzzle.
'\n'
en c sur toutes les plateformes. L'hypothèse est que le fichier d'entrée a été produit sur le même système qui le traitera, donc ce problème devrait être transparent. Une note générale sur le code-golf: si vous travaillez dans une langue étrange ou sur une plate-forme étrange, notez simplement tout ce qui pourrait surprendre le lecteur. Les gens en tiendront compte pour juger votre soumission.Réponses:
Ruby -
210139 caractèresTesté avec rubis 1.9.
la source
./temp.ruby:4: wrong argument type Symbol (expected Proc) (TypeError)
.ruby1.9 test.rb
.PHP - 175 caractères
la source
Python,
194177 177176172 caractèresla source
h.join(f)
je pensenext(f)
au lieu def.readline()
si vous êtes> = 2,6 sinonf.next()
echo test_input_file_name | python golf.py
, est-ce mal?C ++
270264260256253 carUtiliser:
Joliment formaté:
J'ai essayé de lire les mots croisés en une seule fois et d'utiliser une seule boucle.
Mais le coût de la compensation du caractère '\ n l'emportait sur les gains:
Compressé: 260 caractères
la source
C,
184189 caractèresPas grand chose à dire ici; la logique est assez basique. Le programme prend le nom de fichier sur l'entrée standard lors de l'exécution. (C'est tellement ennuyeux que le programme doit travailler avec un nom de fichier, et ne peut pas simplement lire le contenu du fichier directement à partir de l'entrée standard. Mais celui qui paie le piper appelle l'air!)
Le
fscanf()
motif étrange est ma tentative de numériser la première ligne complète, y compris la nouvelle ligne, mais pas inclure les espaces de tête sur la ligne suivante. Il y a une raison pour laquelle personne n'utilisescanf()
.la source
5 5
, vous prenez les 5 premiers comme largeur, alors que vous auriez dû prendre la seconde (ce qui n'a pas d'importance, bien sûr, dans cet exemple).Implémentation de référence:
c99 non- golfé et un peu plus de 2000 caractères comprenant diverses frobs de débogage toujours là.
la source
PerlTeX : 1143 caractères (mais je ne l'ai pas encore joué au golf )
Il a besoin d'un fichier appelé
grid.txt
avec la spécification, puis compiler avecla source
Scala 252:
compilation et invocation:
la source
SHELL SCRIPT
exemple d'E / S:
./numberCrossWord.sh crosswordGrid.txt
la source
/bin/sh
plaint de la ligne 11. Pourriez-vous dire quel shell vous utilisez (y compris le numéro de version)?Caractères ANSI C 694
Il s'agit d'une version C qui recherche des parcours horizontaux ou verticaux de deux espaces qui sont soit appuyés contre le bord, soit contre un caractère «#».
Le fichier d'entrée provient de stdin et doit être:
Tous les conseils pour le compactage seront reçus avec gratitude.
Sortie pour l'exemple fourni
la source