Chris, un enigmatico criptico dei cruciverba, ha un algoritmo definito per l'ordine in cui li risolve.
Useremo l'immagine sopra come guida.
- Chris inizia sempre con il primo indizio, in questo caso 1 Across. Chris è un appassionato di cruciverba, quindi si presume che saprà sempre la risposta all'indizio su cui sta lavorando.
- Una volta che Chris ha completato un indizio, controllerà tutti gli indizi adiacenti a quelli che ha completato (nel primo caso, 1 in basso, 2 in basso e 3 in basso) e quindi completa l'indizio con il numero più basso. Se non ci sono indizi adiacenti, andrebbe al passaggio 3.
- Se l'indizio è tale che il numero successivo (come descritto nel passaggio 3) ha sia un indizio trasversale che un indizio discendente, completerà prima l'indizio opposto (certezza al 100%, questo confina con il DOC!)
- Se non ci sono indizi adiacenti, passerà al successivo indizio disponibile che è il prossimo numero (attraverso o in basso)
- Ripeti dal passaggio 2 fino al completamento di tutti gli indizi.
Ed è qui che dipende da te, cari programmatori. Ti è stato assegnato il compito di creare un codice che, fornendo un modello cruciverba, possa fornire un output che descriva l'ordine degli indizi basato sull'algoritmo di Chris per risolverlo.
Il codice accetterà l'inserimento di un modello di cruciverba, sotto forma di un .
quadrato bianco che #
rappresenta e un quadrato nero.
Esempio :
.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....
L'input può essere attraverso: a) un file letto della rappresentazione del cruciverba, oppure b) mediante input di riga di ciascuna riga del cruciverba, seguito da \n
un secondo che \n
indica EOF.
E poi determinerà il metodo con cui Chris lo risolverebbe secondo l'algoritmo sopra descritto.
L'output deve essere nel formato di una serie di istruzioni separate da virgola sotto forma di n(A|D)
, dove n
è il numero di indizio seguito da A
per across o D
per down.
Quindi nell'esempio sopra (sia dall'immagine, sia dal modello di esempio, che sono la stessa cosa), l'output sarebbe:
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
Il codice più corto vince ...
analisi
È necessario fornire con l'invio il codice, un conteggio dei byte, nonché uno dei quattro casi di test rappresentati nel formato .
e #
, nonché l'output generato da questo input. Esistono quattro casi di test, i tre seguenti e il modello di esempio sopra riportato.
Esempi di test:
Caso di prova 1
.....#
.#.#.#
...#..
.#.#.#
.....#
##.#..
Produzione: 1A,1D,2D,3D,4A,5A,6A,7A
Caso di prova 2
.....#..
.#.##..#
.#....#.
...##.#.
.####...
......##
Produzione: 1A,1D,2D,5A,4D,4A,3D,3A,7A,8A,6D,9A
Caso di prova 3
.........#
#.#.#.#.#.
....#...#.
#...#.#.#.
..###.#.#.
.#....#...
.#####...#
.....###..
Produzione: 1A,2D,3D,4D,5D,7A,8A,9A,10A,11A,11D,12A,13A,6D,14D,15A,16A,17A
Caso di prova 4
.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....
Produzione: 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
In bocca al lupo!
17A
alla fine. Anche il quarto 4A
subito dopo 4D
.