Weźmy pod uwagę macierze bloków binarnych po przekątnej, które mają kwadratowe bloki 1s na głównej przekątnej, i wszędzie są 0. Nazwijmy takie macierze „prawidłowymi” macierzami.
Na przykład, oto kilka prawidłowych macierzy 4x4:
1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1
0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1
0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1
Zauważ, że alternatywnym sposobem opisywania takich macierzy jest łańcuch kwadratowych bloków 1 od lewego górnego do prawego dolnego rogu, dotykających od rogu do rogu, a wszędzie indziej jest 0.
Dla kontrastu, oto niektóre nieprawidłowe matryce 4x4:
1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
1 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0
Będzie podawany był n
przez n
binarnej macierzy jako wejście - jaka jest minimalna liczba 0
bitów trzeba do zestawu 1
, aby uzyskać prawidłową matrycę?
Możesz napisać funkcję lub biorąc programu w dowolnym dogodnym strun listy lub macierzy formacie reprezentujący n
przez n
matrycę 0 i 1 (o ile nie jest ona wstępnie przetworzone). Wiersze muszą być w jakiś sposób wyraźnie oddzielone, więc formaty takie jak tablica 1D bitów nie są dozwolone.
To jest golf golfowy , więc celem jest zminimalizowanie liczby bajtów w twoim programie.
Przykłady
Na przykład, jeśli dane wejściowe to
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
odpowiedź brzmi 5, ponieważ można ustawić pięć 0
bitów, 1
aby uzyskać:
1 0 0 0 0
0 1 1 0 0
0 1 1 0 0
0 0 0 1 0
0 0 0 0 1
i jest to minimalna wymagana liczba. Jednak jeśli dane wejściowe były
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
wtedy odpowiedź brzmi 24, ponieważ jedyną prawidłową macierzą 5x5, w której prawym górnym rogu jest 1
macierz wszystkich 1
s.
Przypadki testowe
Testy są tu reprezentowane jako tablica liczb całkowitych 2D.
[[0]] -> 1
[[1]] -> 0
[[0,1],[0,0]] -> 3
[[1,0],[0,0]] -> 1
[[0,0,0],[0,1,0],[0,0,0]] -> 2
[[0,1,0],[0,0,0],[0,1,0]] -> 7
[[0,1,0],[1,0,0],[0,0,1]] -> 2
[[1,1,1],[1,1,1],[1,1,1]] -> 0
[[0,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,0]] -> 4
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]] -> 8
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,1,0]] -> 14
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,1,0,0]] -> 14
[[0,0,0,0,0],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 7
[[0,0,0,0,0],[0,0,0,0,0],[1,0,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 11
[[0,0,0,0,0],[0,0,1,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,1]] -> 5
[[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 24
[[0,0,0,1,0],[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 23
[[0,1,0,0,0],[1,0,0,0,0],[0,0,1,0,0],[0,0,0,0,1],[0,0,0,1,0]] -> 4
[[0,1,1,1,0],[0,1,1,0,1],[0,1,1,1,0],[0,1,0,0,1],[0,0,0,0,0]] -> 14
Notatki
- Powiązane wyzwanie: wydrukuj macierz blokową
- Inspiracja: Freedom Factory, Google Code Jam 2016 Problem 2D
źródło