Chris, tajemniczy uzależniony od krzyżówek, ma ustalony algorytm, według którego je rozwiązuje.
Użyjemy powyższego obrazu jako przewodnika.
- Chris zawsze zaczyna od pierwszej wskazówki, w tym przypadku 1 Across. Chris jest zdolnym entuzjastą krzyżówki, więc zakłada się, że zawsze pozna odpowiedź na wskazówkę, nad którą pracuje.
- Gdy Chris ukończy wskazówkę, sprawdzi wszystkie wskazówki sąsiadujące z tymi, które ukończył (w pierwszym przypadku 1 w dół, 2 w dół i 3 w dół), a następnie ukończy wskazówkę o najniższym numerze. Jeśli nie ma żadnych sąsiednich wskazówek, przejdzie do kroku 3.
- Jeśli wskazówka jest taka, że następny numer (jak opisano w kroku 3) zawiera zarówno wskazówkę przekreśloną, jak i wskazówkę dolną, najpierw ukończy wskazówkę przekreśloną (100% pewności, to graniczy z OCD!)
- Jeśli nie ma żadnych sąsiadujących wskazówek, przejdzie do następnej dostępnej wskazówki, która będzie następna pod względem liczby (w poprzek lub w dół)
- Powtarzaj od kroku 2, aż wszystkie wskazówki zostaną ukończone.
I tu sprowadza się do was, drodzy koderzy. Masz za zadanie stworzyć kod, który po otrzymaniu szablonu krzyżówki może dostarczyć wyniki opisujące kolejność wskazówek opartych na algorytmie Chrisa do jego rozwiązania.
Kod zaakceptuje wprowadzenie szablonu krzyżówki w postaci .
białego kwadratu i #
czarnego kwadratu.
Przykład :
.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....
Dane wejściowe mogą odbywać się poprzez: a) odczyt pliku reprezentacji krzyżówki, lub b) wprowadzanie linii każdego wiersza krzyżówki, a następnie \n
drugie \n
wskazanie EOF.
A następnie określi metodę, według której Chris rozwiąże go zgodnie z powyższym algorytmem, który opisał.
Dane wyjściowe muszą być w formacie szeregu instrukcji oddzielonych przecinkami w postaci n(A|D)
, gdzie n
jest numer wskazówki, po której następuje znak „ A
za” lub „ D
za”.
Tak więc w powyższym przykładzie (zarówno z obrazu, jak i przykładowego szablonu, które są jednym i tym samym), dane wyjściowe byłyby następujące:
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
Najkrótszy kod wygrywa ...
Testowanie
Musisz podać swój kod, liczbę bajtów, a także jeden z czterech przypadków testowych reprezentowanych w formacie .
i #
, a także dane wyjściowe wygenerowane z tego wejścia. Istnieją cztery przypadki testowe, trzy poniżej oraz powyższy przykładowy szablon.
Przykładowe przypadki testowe:
Przypadek testowy 1
.....#
.#.#.#
...#..
.#.#.#
.....#
##.#..
Wynik: 1A,1D,2D,3D,4A,5A,6A,7A
Przypadek testowy 2
.....#..
.#.##..#
.#....#.
...##.#.
.####...
......##
Wynik: 1A,1D,2D,5A,4D,4A,3D,3A,7A,8A,6D,9A
Przypadek testowy 3
.........#
#.#.#.#.#.
....#...#.
#...#.#.#.
..###.#.#.
.#....#...
.#####...#
.....###..
Wynik: 1A,2D,3D,4D,5D,7A,8A,9A,10A,11A,11D,12A,13A,6D,14D,15A,16A,17A
Przypadek testowy 4
.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....
Wynik: 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
Powodzenia!
17A
na końcu. Również czwarty4A
zaraz po4D
.Odpowiedzi:
GolfScript, 154 znaków
Dane wejściowe należy podać na STDIN. Przykłady dają następujące wyniki (sprawdź online ):
źródło
votes++
Mathematica
806477(Wygląda na to, że wystąpiła usterka w porządku kroków rozwiązania. Patrzę na to.)
Grał w golfa
Funkcja
q
znajduje kolejność rozwiązań krzyżówek.Nie golfił
board
wyświetla krzyżówkę. Kod nie jest uwzględniany w liczbie znaków.q
Wypożyczono tutaj kilka podfunkcji .Przypadki testowe
1
2)
3)
4
źródło
3A
nie powinno być zaraz po,2D
ponieważ nie ma jeszcze wskazówki. Także inne rozwiązania wykazują ten efekt.5A
Ma wskazówkę i dlatego należy ją faworyzować3A
.ToString
dwa razy