Utwórz program do poprawnego numerowania siatki krzyżówek.
Wejście
Dane wejściowe to nazwa pliku reprezentującego siatkę krzyżówki. Wejściowa nazwa pliku może być przekazana jako argument na standardowym wejściu lub w inny konwencjonalny sposób niż kodowanie na stałe.
Format pliku siatki: plik tekstowy. Pierwszy wiersz składa się z dwóch stałych całkowitych oddzielonych spacjami M
i N
. Po tej linii są M
wiersze składające się ze N
znaków (plus nowy wiersz) wybranych spośród [#A-Z ]
. Znaki te są interpretowane w taki sposób, że '#'
oznaczają zablokowany kwadrat, ' '
otwarty kwadrat w łamigłówce bez znanej zawartości, a dowolną literę otwarty kwadrat zawierający tę literę.
Wynik
Wynik będzie plikiem numeracji i może zostać wysłany na standardowe wyjście, do pliku, którego nazwa pochodzi od wejściowej nazwy pliku, do pliku określonego przez użytkownika lub do innego konwencjonalnego miejsca docelowego.
Format pliku numeracji Plik tekstowy. Linie zaczynające się od „#” są ignorowane i mogą być użyte do komentarzy. Wszystkie inne linie zawierać kartę wydzielił triplet i
, m
, n
gdzie i
oznacza liczbę drukowany na siatce i m
i n
reprezentują wiersza i kolumny na placu, gdzie powinien zostać wydrukowany. Liczba zarówno wierszy, jak i kolumn zaczyna się od 1.
Schemat numerowania
Prawidłowo numerowana siatka ma następujące właściwości:
- Numeracja zaczyna się od 1.
- Żadna kolumna ani zakres otwartych kwadratów nie jest numerowany. (Możesz założyć, że w problemie nie będzie odpowiedzi na pojedynczy znak).
- Liczby będą napotykane w kolejności liczenia, skanując od górnego rzędu do dołu, biorąc każdy wiersz od lewej do prawej. (Tak więc każde przęsło poziome jest ponumerowane w jego lewym kwadracie, a każda kolumna jest ponumerowana w jego najwyższym kwadracie).
Testuj wejście i oczekiwane wyjście
Wejście:
5 5
# ##
#
#
#
## #
Dane wyjściowe (pomijając wiersze komentarza):
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
Na bok
Jest to pierwsze z wielu wyzwań związanych z krzyżówką. Planuję używać spójnego zestawu formatów plików w całym procesie i zbudować w tym czasie porządny zestaw narzędzi związanych z krzyżówkami. Na przykład kolejna układanka będzie wymagała wydrukowania wersji krzyżówki ASCII na podstawie danych wejściowych i wyjściowych tej układanki.
'\n'
c na wszystkich platformach. Założono, że plik wejściowy został utworzony w tym samym systemie, który go przetworzy, więc ten problem powinien być przejrzysty. Ogólna uwaga na temat golfa kodowego: jeśli pracujesz w obcym języku lub na dziwnej platformie, po prostu zanotuj wszystko, co może zaskoczyć czytelnika. Ludzie uwzględnią to, oceniając twoje zgłoszenie.Odpowiedzi:
Rubin -
210139 znakówTestowane z Ruby 1.9.
źródło
./temp.ruby:4: wrong argument type Symbol (expected Proc) (TypeError)
.ruby1.9 test.rb
.PHP - 175 znaków
źródło
Python,
194177176172 znakówźródło
h.join(f)
Myślę, że powinieneś być w stanie korzystaćnext(f)
zamiastf.readline()
jeśli masz> = 2,6 elsef.next()
echo test_input_file_name | python golf.py
, czy to źle?C ++
270264260256253 znakUżywać:
Ładnie sformatowane:
Próbowałem odczytać całą krzyżówkę za jednym razem i użyć jednej pętli.
Ale koszt rekompensaty dla postaci \ n przewyższał wszelkie zyski:
Skompresowany: 260 znaków
źródło
C,
184189 znakówNie ma tu wiele do powiedzenia; logika jest dość podstawowa. Program pobiera nazwę pliku na standardowe wejście w czasie wykonywania. (To tak denerwujące, że program musi pracować z nazwą pliku i nie może po prostu odczytać zawartości pliku bezpośrednio ze standardowego wejścia. Ale ten, kto płaci piperowi, wywołuje melodię!)
Dziwny
fscanf()
wzór to moja próba zeskanowania pełnej pierwszej linii, w tym nowej linii, ale bez uwzględnienia początkowych białych znaków w następnej linii. Jest powód, dla którego nikt nie używascanf()
.źródło
5 5
, bierzesz pierwsze 5 jako szerokość, kiedy powinieneś wziąć drugi (co oczywiście nie ma znaczenia w tym przykładzie).Referencyjne wdrożenie:
ok. 99 nieoszlifowanych i ponad 2000 znaków, w tym wciąż dostępne różne froby debugujące.
źródło
PerlTeX : 1143 znaków (ale jeszcze nie grałem w golfa)
Potrzebuje pliku wywołanego
grid.txt
ze specyfikacją, a następnie skompilować zźródło
Scala 252:
kompilacja i wywołanie:
źródło
SKRYPT POWŁOKI
próbki I / O:
./numberCrossWord.sh crosswordGrid.txt
źródło
/bin/sh
skargi dotyczą wiersza 11. Czy możesz powiedzieć, jakiej powłoki używasz (w tym numer wersji)?Znaki ANSI C 694
Jest to wersja C, która szuka poziomych lub pionowych przebiegów dwóch spacji, które są albo skierowane ku krawędzi, albo przeciwko znakowi „#”.
Plik wejściowy jest pobierany ze standardowego wejścia i musi być:
Wszelkie wskazówki dotyczące kompaktowania zostaną z wdzięcznością przyjęte.
Dane wyjściowe dla podanego przykładu
źródło