Wprowadzenie
Tangramy to klasyczna łamigłówka polegająca na układaniu / dopasowywaniu bloków do różnych kształtów. Od chińskiego 七巧板 - dosłownie oznacza „siedem desek umiejętności”. Weźmy ten pomysł i wykorzystajmy siedem kawałków Tetrominos do wypełnienia siatki.
Wyzwanie
Napisz funkcję lub program, który pobiera tablicę współrzędnych siatki jako dane wejściowe i wysyła wypełnioną siatkę 10 na 20 wypełnioną elementami Tetris, z wyjątkiem określonych współrzędnych.
Zoptymalizuj swój wynik, starając się utrzymać jednolity rozkład elementów.
Kryteria
Użyj tej pastebin współrzędnych, aby wykonać swoje zadanie. Istnieje pięć zestawów współrzędnych. Zmodyfikuj format zapisu współrzędnych, ale nie wartości.
Zestaw danych nr 2 nie może zostać rozwiązany - w tym przypadku po prostu wyślij siatkę z wypełnionymi komórkami wejściowymi (tzn. X
Tam, gdzie są otwory).
Wejście
Współrzędne siatki reprezentują „otwory” w siatce. Są to komórki, które nie mogą zawierać żadnej części Tetromino.
Współrzędne siatki:
(0,0), (1,0), (2,0), ... (9,0)
(0,1), (1,1), (2,1), ... (9,1)
.
.
.
(0,19), (1,19), (2,19), ... (9,19)
Użyj wybranego przez siebie stylu tablicy języka programowania, aby wprowadzić współrzędne.
Reprezentuj otwory w siatce za pomocą
X
lub innego ASCII do wydruku .
Wynik
Używając standardowego rozmiaru siatki Tetris o szerokości 10 komórek i wysokości 20 komórek , wydrukuj siatkę roztworu tylko wtedy, gdy siatkę można całkowicie i idealnie wypełnić za pomocą elementów Tetromino.
Kawałki zbudowane z liter I
, O
, L
, J
, T
, Z
, S
w następujący sposób:
I
I L J
I OO L J T ZZ SS
I OO LL JJ TTT ZZ SS
Przykład
Przykład rozwiązania wyjściowego bez współrzędnych wejściowych:
ZZIIIILLLI
JZZTTTLLLI
JJJSTLOOLI
SZZSSLOOLI
SSZZSLLJJI
TSOOSLLJII
TTOOSSLJII
TZOOSSLZII
ZZOOSSZZII
ZJJJJSZLLI
TTTJJOOILI
ITZJJOOILI
IZZTTTLIII
IZOOTZLIII
IJOOZZLLII
LJJJZSSTII
LLLTSSTTTI
LLLTTSSZJI
OOLTSSZZJI
OOIIIIZJJI
Z następującą dystrybucją:
I
I L J
I OO L J T ZZ SS
I OO LL JJ TTT ZZ SS
11 6 8 6 6 7 6
Notatki
Współrzędne reprezentują pojedynczą X
i Y
pozycję na siatce. Siatka jest oparta na 0, co oznacza, że współrzędna (0,0)
powinna być albo górną lewą, albo lewą dolną komórką, wybór autora.
Cegły mogą:
- być wybrane według uznania autora.
- być obracany według uznania autora.
- być umieszczone na siatce w dowolnym miejscu według uznania autora (aka: brak grawitacji Tetris)
Cegły nie mogą:
- być umieszczone poza granicami siatki.
- nachodzą na istniejącą cegłę lub dziurę w siatce.
- być niestandardowym kawałkiem Tetris tetromino.
Punktacja
Twój wynik jest w formacie:
(1000 - [bajty w kodzie]) * (M / 10 + 1)
Gdzie M jest mnożnikiem dla rozkładu elementów używanych w zestawach rozwiązań.
Najwyższy wynik Ides of March wygrywa.
Aby obliczyć M, dodaj najniższą indywidualną wartość rozkładu tetromino dla każdego zestawu, a następnie weź średnią zaokrągloną w dół, aby obliczyć M.
Na przykład:
Set 1: 5
Set 2: 4
Set 3: 5
Set 4: 6
Set 5: 3
6 + 4 + 5 + 4 + 4 = 21/5 = 4,6
Więc użyłbyś 4
jako swojej wartości M.
Uwaga: Jeśli zestaw nie ma rozwiązania, nie uwzględniaj go przy obliczaniu M, ponieważ nie miałby on rozkładu tetromino.
źródło
Odpowiedzi:
Python 3 , 819 bajtów, M = 0, wynik = 181
To jest program DFS z brutalną siłą. Buduje tablicę numpy i wstawia wszystkie wprowadzone otwory. Następnie bierze lewy, niewypełniony kafelek w najwyższym rzędzie, który ma jeden, i umieszcza tetromino. Rekurencyjnie, teraz robimy to ponownie - kiedy nie możemy albo znaleźć rozwiązania, albo wycofujemy się i wypróbowujemy kolejny kawałek przy pierwszej okazji.
Ma M 0, ponieważ próbuje użyć elementów w określonej kolejności i prawie zawsze znajduje rozwiązanie bez ostatniego na liście. Próbowałem użyć losowo uporządkowanej listy w każdym cyklu, aby uzyskać bardziej równomierny rozkład, ale dostałem tylko M wynoszące 2, co nie było warte bajtów wymaganych do importowania random.shuffle .
Nie mogę skomentować poniższego kodu, ponieważ podczas gry w golfa od dawna zapomniałem, jak wiele z tego robi. Ogólny pomysł:
Wypróbuj online!
Test próbny:
źródło