Masz tablicę wejściową o rozmiarze m * n. Każda komórka w tablicy jest wypełniona P lub T. Jedyna operacja, którą możesz wykonać na tablicy, to odwrócenie kolumn. Po odwróceniu kolumny litery we wszystkich komórkach tej kolumny przełączają się (P staje się T i viceversa). Jeśli masz liczbę „x” wierszy z tą samą literą (np. PPPP), otrzymasz punkt. Zaprojektuj algorytm, który pobiera tablicę i zwraca rozwiązanie (które kolumny przerzucić), tak aby powstała tablica miała maksymalną możliwą liczbę punktów.
Uwaga: Jeśli istnieje wiele rozwiązań, które dają najwyższy wynik, wybierz to, które ma najmniejszą liczbę przerzutów. Przykład:
Tablica wejściowa:
PPTPP
PPTPP
PPTTP
PPPTT
PPPTT
Wynik:
3
Objaśnienie:
Rozwiązanie, które daje najwyższe punkty: Odwróć kolumnę nr. 3
Zatem oryginalna tablica wyglądałaby następująco:
PPPPP // 1 point
PPPPP // 1 point
PPPTP
PPTTT
PPTTT
//Total: 2 points
Zauważ, że można również przerzucić kolumny 4 i 5, aby uzyskać wynik dwa, ale to wymaga dodatkowego przewrócenia.
Możesz użyć dowolnego dogodnego formatu wejściowego do przedstawienia dwuwymiarowej tablicy, a także dowolnych dwóch różnych, ale ustalonych wartości do reprezentowania P
i T
.
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
Odpowiedzi:
APL, 37
Przykład:
Testowane tutaj.
źródło
Pyth , 28
Pobiera dane wejściowe w postaci zagnieżdżonej listy, np
Daje wynik indeksowany 0, np
^U2lhQ
: Generuje wszystkie możliwe listy zer i 1 o odpowiedniej długości._osZ
: Porządkuje te listy od większości 1 do najmniej.+/QN/Qm!dN
: Zlicza, ile razy każda lista (N
) i jej odwrotność, zamienione zera i 1sm!dN
występują na wejściu. Pierwszy odpowiada serii odwrotów, pozostawiając wszystkie zera, drugi - pozostawieniu wszystkich zer.eo
: Porządkuje listę według powyższego klucza i pobiera jej ostatni element, który będzie wynikiem dla najbardziej pasujących kolumn, a wśród nich najmniejszą.f@ ... TUhQ
: Konwertuje tę listę jedynek i zer na listę indeksów, które mają być odwrócone.W przypadku indeksowania 1 zmień na
d
ak
, a następnie umieśćmhd
na początku.źródło
CJam,
5351 bajtówOdczytuje dwuwymiarową tablicę zer i jedynek z STDIN. Np. Przykładem w pytaniu byłoby
Sprawdź to tutaj.
Najpierw pobiera się wszystkie możliwe podzbiory kolumn, w kolejności rosnącej długości, a następnie wykonuje odwracanie dla każdego podzbioru i sortuje je według liczby wierszy, w których nadal są zarówno 0, jak i 1. Wreszcie zwracamy pierwszy taki podzbiór. Polega to na stabilnym sortowaniu, tak że początkowa kolejność zwiększania długości zajmuje się przerywnikiem.
źródło
Haskell, 98
format wejściowy to lista list int. możesz użyć wersji łańcuchowej do testowania:
o nie, przestrzenie! to boli!
działa to poprzez iterację po wierszach i obliczanie liczby punktów, które uzyskamy, jeśli odwrócimy kolumny w taki sposób, że ten wiersz zdobędzie punkt.
pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że odwrócenie wiersza do wszystkich
True
lub wszystkichFalse
nie ma znaczenia, ponieważ siatki będą dokładnie odwrotne względem siebie, a zatem będą miały dokładnie taki sam wynik.sposób, w jaki obliczamy liczbę, gdy dany rząd otrzymuje punkt, jest taki: powtarzamy ponownie rzędy i sumujemy punkty, które daje nam każdy rząd, wykorzystując fakt, że robią to dokładnie wtedy, gdy wiersze są identyczne lub dokładnie odwrotne.
na przykład, jeśli wiersz, który przerzucamy, jest,
TPPTP
a bieżący wiersz, nad którym iterujemy, jestPTTPT
lubTPPTP
wtedy rząd zyskuje punkt, ale gdy jest to inny rząd, nie daje nam żadnych punktów.źródło
CJam, 37 lat
Format wejściowy:
źródło
Mathematica - 76
źródło
Python 2, 234
Dane wejściowe to lista list:
Dane wyjściowe to krotek flipów przy użyciu indeksowania python od 0:
Jeśli dane wyjściowe muszą być indeksowane od 1, wówczas kod ma 272 znaki, przy czym 0 oznacza brak przewrotów:
źródło