Zadanie
Napisz program, który odczytuje trzy liczby całkowite m , n albo ze STDIN, albo jako argumenty wiersza poleceń, drukuje wszystkie możliwe nachylenia prostokąta o wymiarach m × n przez domino 2 × 1 i 1 × 2, a na koniec liczbę prawidłowych przechyleń.
Domeny poszczególnych kafelków muszą być reprezentowane przez dwie kreski ( -
) dla 2 × 1 i dwa pionowe słupki ( |
) dla 1 × 2 dominów. Po każdym kafelku (w tym ostatnim) musi następować przesuw linii.
Do celów punktacji musisz również zaakceptować flagę ze STDIN lub jako argument wiersza poleceń, który powoduje, że Twój program wypisuje tylko liczbę prawidłowych nachyleń, ale nie same nachylenia.
Twój program nie może być dłuższy niż 1024 bajty. Musi działać dla wszystkich wejść, tak że m × n ≤ 64 .
(Zainspirowany przez Wydrukuj wszystkie domina z prostokątem 4x6 .)
Przykład
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
Punktacja
Twój wynik zależy od czasu wykonania programu dla wejścia 8 8 z ustawioną flagą.
Aby ten kod był najszybszym, a nie najszybszym wyzwaniem komputerowym , uruchomię wszystkie zgłoszenia na własnym komputerze (Intel Core i7-3770, 16 GiB PC3-12800 RAM), aby ustalić oficjalny wynik.
Proszę zostawić szczegółowe instrukcje, jak skompilować i / lub wykonać swój kod. Jeśli potrzebujesz konkretnej wersji kompilatora / tłumacza swojego języka, złóż oświadczenie w tej sprawie.
Zastrzegam sobie prawo do pozostawienia zgłoszeń bez oceny, jeśli:
Nie ma darmowego (jak w piwie) kompilatora / interpretera dla mojego systemu operacyjnego (Fedora 21, 64 bity).
Pomimo naszych starań Twój kod nie działa i / lub generuje niepoprawne dane wyjściowe na moim komputerze.
Kompilacja lub wykonanie trwa dłużej niż godzinę.
Twój kod lub jedyny dostępny kompilator / interpreter zawiera wywołanie systemowe
rm -rf ~
lub coś równie podejrzanego.
Tabela liderów
Ponownie oceniłem wszystkie zgłoszenia, uruchamiając zarówno kompilacje, jak i wykonania w pętli z 10 000 iteracji do kompilacji i od 100 do 10 000 iteracji do wykonania (w zależności od szybkości kodu) i obliczając średnią.
Oto wyniki:
User Compiler Score Approach
jimmy23013 GCC (-O0) 46.11 ms = 1.46 ms + 44.65 ms O(m*n*2^n) algorithm.
steveverrill GCC (-O0) 51.76 ms = 5.09 ms + 46.67 ms Enumeration over 8 x 4.
jimmy23013 GCC (-O1) 208.99 ms = 150.18 ms + 58.81 ms Enumeration over 8 x 8.
Reto Koradi GCC (-O2) 271.38 ms = 214.85 ms + 56.53 ms Enumeration over 8 x 8.
--
. Jeśli jest pionowy, jest dwa |
, jeden pod drugim.