Chris, un addict cryptique des mots croisés, a un algorithme défini pour l'ordre dans lequel il les résout.
Nous utiliserons l'image ci-dessus comme guide.
- Chris commence toujours par le premier indice transversal, dans ce cas 1 Across. Chris est un passionné de mots croisés, donc on suppose qu'il connaîtra toujours la réponse à l'indice sur lequel il travaille.
- Une fois que Chris aura terminé un indice, il vérifiera tous les indices adjacents à ceux qu'il a complétés (dans le premier cas, 1 Down, 2 Down et 3 Down) puis complétera l'indice avec le nombre le plus bas. S'il n'y a pas d'indices adjacents, il passerait à l'étape 3.
- Si l'indice est tel que le numéro suivant (comme décrit à l'étape 3) a à la fois un indice transversal et un indice négatif, il remplira d'abord l'indice transversal (100% de certitude, cela frise le TOC!)
- S'il n'y a pas d'indices adjacents, il ira au prochain indice disponible qui est le suivant en nombre (en travers ou en bas)
- Répétez à partir de l'étape 2 jusqu'à ce que tous les indices soient terminés.
Et c'est là que cela vous revient, chers codeurs. Vous avez été chargé de créer du code qui peut, après avoir été fourni avec un modèle de mots croisés, fournir une sortie décrivant l'ordre des indices basé sur l'algorithme de Chris pour le résoudre.
Le code acceptera la saisie d'un modèle de mots croisés, sous la forme d'un .
représentant un carré blanc et d'un #
représentant un carré noir.
Exemple :
.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....
L'entrée peut se faire par: a) une lecture de fichier de la représentation du mot croisé, ou b) par l'entrée ligne de chaque ligne du mot croisé, suivie par \n
, avec une seconde \n
indiquant EOF.
Et puis il déterminera la méthode par laquelle Chris le résoudrait selon l'algorithme ci-dessus qu'il a décrit.
La sortie doit être au format d'une série d'instructions séparées par des virgules sous la forme de n(A|D)
, où n
est le nombre d'indices suivi de A
pour à travers ou D
à bas.
Ainsi, dans l'exemple ci-dessus (à la fois de l'image et de l'exemple de modèle, qui sont les mêmes), la sortie serait:
1A,1D,2D,3D,9A,10A,4D,5D,6D,7D,8D,11A,12A,13A,15A,14D,15D,16A,17A,18D,19D,20A,21D,23A,22D,24A,25D,27A,28A,26D,29A,30A,31A
Le code le plus court gagne ...
Essai
Vous devez fournir avec votre soumission le code, un nombre d'octets, ainsi que l'un des quatre cas de test représentés dans le format .
et #
, ainsi que la sortie générée à partir de cette entrée. Il existe quatre cas de test, les trois ci-dessous ainsi que l'exemple de modèle ci-dessus.
Exemples de cas de test:
Cas de test 1
.....#
.#.#.#
...#..
.#.#.#
.....#
##.#..
Production: 1A,1D,2D,3D,4A,5A,6A,7A
Cas de test 2
.....#..
.#.##..#
.#....#.
...##.#.
.####...
......##
Production: 1A,1D,2D,5A,4D,4A,3D,3A,7A,8A,6D,9A
Cas de test 3
.........#
#.#.#.#.#.
....#...#.
#...#.#.#.
..###.#.#.
.#....#...
.#####...#
.....###..
Production: 1A,2D,3D,4D,5D,7A,8A,9A,10A,11A,11D,12A,13A,6D,14D,15A,16A,17A
Cas de test 4
.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....
Production: 1A,1D,2D,3D,9A,10A,4D,4A,5D,6D,7D,8D,11A,12A,13A,15A,14D,15D,16A,17A,18D,19D,20A,21D,23A,22D,24A,25D,27A,28A,26D,29A,30A,31A
Bonne chance!
17A
à la fin. Aussi le quatrième4A
juste après4D
.Réponses:
GolfScript, 154 caractères
L'entrée doit être fournie sur STDIN. Les exemples donnent les résultats suivants (vérifiez en ligne ):
la source
votes++
Mathematica
806477(Il semble y avoir un problème dans l'ordre des étapes de la solution. J'examine la question.)
Golfé
La fonction
q
trouve l'ordre des solutions de mots croisés.Non golfé
board
affiche le jeu de mots croisés. Le code n'est pas inclus dans le nombre de caractères. Plusieurs sous-fonctions deq
sont empruntées ici.TestCases
1
2
3
4
la source
3A
ne devrait pas être juste après le2D
car il n'y a pas encore d'indice. Les autres solutions montrent également cet effet.5A
a un indice et devrait donc être privilégié3A
.ToString
deux fois