Zainspirowany tym pytaniem i dopracowany przez Luisa Mendo .
Wyzwanie
Biorąc pod uwagę macierz 2D liczb całkowitych, każdy wiersz ma maksymalną wartość. Jeden lub więcej elementów każdego rzędu będzie równe maksymalnej wartości ich odpowiedniego rzędu. Twoim celem jest określenie, które kolumny zawierają najwięcej wpisów, które są równe maksymalnej wartości odpowiedniego wiersza, a także liczbie maksymalnych wierszy znalezionych w tych kolumnach.
Wejście
- Dane wejściowe będą niepustą macierzą
M
xN
(M
> 0 iN
> 0) w dowolnej formie, która jest dobrze dopasowana do wybranego języka.
Wynik
- Twój program powinien zwrócić indeks każdej kolumny zawierający maksymalną liczbę maksymalnych wierszy (jako osobne wartości lub listę). Można zastosować indeksowanie 0 lub 1 (określ w opisie).
- Twój program powinien również zwrócić liczbę maksimów, które były obecne w tych kolumnach (pojedyncza liczba).
- Kolejność / format danych wyjściowych jest elastyczny, ale należy to wyjaśnić w tekście towarzyszącym odpowiedzi.
Dodatkowe informacje
- Wszystkie wpisy w macierzy wejściowej będą dodatnimi liczbami całkowitymi.
- Jeśli maksymalna wartość wiersza jest współdzielona przez wiele elementów w tym wierszu, wszystkie wystąpienia tej wartości liczą się do sumy ich kolumn.
- Jeśli wiele kolumn zawiera tę samą liczbę maksimów, powinieneś zwrócić listę wszystkich kolumn, które miały tę liczbę maksimów.
Przykład
Rozważ wejście
7 93
69 35
77 30
Wiersz 1 ma maksimum 93, co występuje tylko raz, a mianowicie w kolumnie 2. Wiersz 2: występuje w kolumnie 1. Wiersz 3: także w kolumnie 1. Zatem kolumna zwycięzcy to 1, z 2 maksimami. Tak więc wynik będzie [1] [2]
. Jeśli zmienimy wejście na
7 93
69 35
77 77
wyjście będzie [1 2] [2]
, ponieważ obie kolumny mają 2 maksima.
Przypadki testowe
input => output ( [1-based index array], [nMaxima] )
----------------------------------------------
7 93
69 35 => [1], [2]
77 30
7 93
69 35 => [1 2], [2]
77 77
1 2 3 4 => [4], [2]
5 6 7 8
16 2 3 13
5 11 10 8 => [1 2 4], [1]
9 7 6 12
1 1 1 1 => [1 2 3 4], [1]
25 6 13 25 => [1 4], [1]
1
2
3 => [1], [4]
4
100 => [1], [1]
Punktacja
To jest code-golf , wygrywa najkrótszy kod w bajtach. Tiebreaker przechodzi do wcześniejszej odpowiedzi.
Tabela liderów
Poniżej znajduje się fragment stosu do analizy wszystkich wpisów.
źródło
Odpowiedzi:
Galaretka , 9 bajtów
Dane wejściowe to lista 2D, dane wyjściowe to para: lista wskaźników opartych na 1 i maksymalna liczba maksimów.
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
J, 27 bajtów
Jest to czasownik monadyczny, używany w następujący sposób w przypadku drugiego przykładu:
Dane wyjściowe składają się z dwóch pól i wykorzystują indeksowanie oparte na 0. Wypróbuj tutaj!
Wyjaśnienie
źródło
MATL, 17 bajtów
Pierwsze wyjście to maksymalna liczba maksimów, a drugie wyjście to kolumny, w których to wystąpiło (indeksowanie 1).
Wypróbuj online!
Wyjaśnienie
źródło
MATL , 17 bajtów
Dane wejściowe to tablica 2D z wierszami oddzielonymi średnikami. Tak są dane wejściowe dla przypadków testowych
Dane wyjściowe to: najpierw maksymalna ilość maksimów, a następnie jeden lub więcej indeksów kolumn.
Wypróbuj online!
Wyjaśnienie
To używa innego podejścia niż odpowiedź Suever .
Najpierw obliczana jest macierz wartości logicznych (
true
ifalse
), gdzietrue
wskazuje na obecność wartości maksymalnej rzędu. Następnie indeksytrue
wartości są wyodrębniane do wektora. Na koniec obliczany jest tryb tego wektora (maksymalna liczba maksimów) wraz ze wszystkimi wartościami, które są najczęstsze (pożądane wskaźniki kolumnowe).źródło
Pyth,
201917 bajtów1 bajt dzięki @Suever .
1 bajt dzięki @Jakube .
Zestaw testowy.
Wyjście jest indeksowane na 0.
Zamówienie jest odwrócone.
Wszystkie dane wejściowe
Wszystkie wyjścia
Jak to działa
źródło
CJam ,
383531 bajtów2 bajty mniej dzięki @FryAmTheEggMan, z pomocą również z @quartata. Dziękujemy również @Dennis za usunięcie 4 kolejnych bajtów.
Dane wejściowe mają formę
Dane wyjściowe to tablica indeksów kolumn na podstawie 1 i liczby.
Wypróbuj online!
źródło
q~_::e>.f=:.+_:e>_@f{=U):Ua*~}p
oszczędza kilka bajtów. Przekształcenie go w blok kodu pozwoliłoby zaoszczędzić jeszcze 1.{=U):Ua*~}
robi ...Pyke, 17 bajtów
Wypróbuj tutaj!
źródło
Python 2, 106 bajtów
Dane wejściowe to dwuwymiarowa lista liczb zmiennoprzecinkowych, dane wyjściowe to para: lista indeksów opartych na 0 i liczba całkowita.
Przetestuj na Ideone .
źródło
Julia, 54 bajty
Dane wejściowe to macierz, dane wyjściowe to para: lista wskaźników opartych na 1 i maksymalna liczba maksimów.
Wypróbuj online!
źródło
JavaScript (ES6), 111 bajtów
Zwraca tablicę dwóch elementów; pierwszy to maksymalna liczba maksimów, drugi to tablica kolumn o indeksie zerowym z tą liczbą.
źródło
Oktawa,
4746 bajtówTworzy to anonimową funkcję, która automatycznie przypisuje się
ans
i może być uruchamiana za pomocąans([1 2 3; 4 5 6])
. Zwraca dwuelementową tablicę komórek, w której pierwszy element to maksymalna liczba maksimów, a drugi to indeks oparty na 1 kolumnach zawierających te maksima.Wszystkie przypadki testowe
źródło
Python 3, 142 bajty
Algorytm polega na tym, aby przejść przez każdy wiersz i zwiększyć wynik w kolumnach, które mają maksimum tego wiersza. Następnie znajdź maksimum wyników i znajdź kolumny, które mają ten maksymalny wynik, i zwróć je. Kolumny są indeksowane 1. Próbowałem wyrównać to do lambda, ale przy generowaniu wyników kolumna po kolumnie było to 153 bajty.
Przypadki testowe
źródło
Clojure, 150 bajtów
Człowieku, który jest długi, mam wrażenie, że można to bardzo uprościć. Przynajmniej produkuje poprawny wynik.
źródło
05AB1E , 14 (lub 12) bajtów
Dane wyjściowe w formacie
[[1-indexed columns-list], maxima]
.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Jeśli dozwolone jest umieszczanie elementów
0
na liście kolumn, które ignorujemy, może to być 2 bajty mniej przez usunięcie0K
:Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło