Wyzwanie:
Na podstawie danych wejściowych macierzy określ ilość przekątnych i przekątnych ze zduplikowanymi liczbami.
Więc jeśli mamy taką matrycę:
[[aa,ab,ac,ad,ae,af],
[ba,bb,bc,bd,be,bf],
[ca,cb,cc,cd,ce,cf],
[da,db,dc,dd,de,df]]
Wszystkie przekątne i anty przekątne byłyby:
[[aa],[ab,ba],[ac,bb,ca],[ad,bc,cb,da],[ae,bd,cc,db],[af,be,cd,dc],[bf,ce,dd],[cf,de],[df],
[af],[ae,bf],[ad,be,cf],[ac,bd,ce,df],[ab,bc,cd,de],[aa,bb,cc,dd],[ba,cb,dc],[ca,db],[da]]
Przykład:
[[1,2,1,2,1,2],
[1,2,3,4,5,6],
[6,5,4,3,2,1],
[2,1,2,1,2,1]]
Wszystkie przekątne i anty przekątne byłyby:
[[1],[2,1],[1,2,6],[2,3,5,2],[1,4,4,1],[2,5,3,2],[6,2,1],[1,2],[1],
[2],[1,6],[2,5,1],[1,4,2,1],[2,3,3,2],[1,2,4,1],[1,5,2],[6,1],[2]]
Usuwanie wszystkich przekątnych i przekątnych zawierających tylko unikalne liczby:
[[2,3,5,2],[1,4,4,1],[2,5,3,2],[1,4,2,1],[2,3,3,2],[1,2,4,1]]
Tak więc wynikiem jest liczba przekątnych i przekątnych zawierających zduplikowane liczby:
6
Zasady konkursu:
- Jeśli macierz wejściowa jest pusta, zawiera tylko 1 liczbę lub zawiera tylko unikalne liczby w całej macierzy, wynik jest zawsze taki sam
0
. - Dane wejściowe z pewnością zawierają tylko cyfry dodatnie
[1,9]
(chyba że są całkowicie puste). - Matryca zawsze będzie prostokątna (tzn. Wszystkie rzędy mają tę samą długość).
- I / O jest elastyczny. Dane wejściowe można traktować jako listę liczb całkowitych, tablicę liczb całkowitych 2D lub obiekt Matrix, jako ciąg znaków itp. Itp. Można również przyjąć jeden lub oba wymiary macierzy jako dodatkowe dane wejściowe jeśli pozwoliłoby to zaoszczędzić bajty w wybranym języku.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input: Output:
[[1,2,1,2,1,2], 6
[1,2,3,4,5,6],
[6,5,4,3,2,1],
[2,1,2,1,2,1]]
[[]] 0
[[1,2], 0
[3,4]]
[[1,1], 2
[1,1]]
[[9,9,9], 6
[9,9,9],
[9,9,9]]
[[7,7,7,7], 8
[7,7,7,7],
[7,7,7,7]]
[[1,1,1], 1
[2,3,4],
[2,5,1]]
[[1,8,4,2,9,4,4,4], 12
[5,1,2,7,7,4,2,3],
[1,4,5,2,4,2,3,8],
[8,5,4,2,3,4,1,5]]
[[1,2,3,4], 4
[5,6,6,7],
[8,6,6,9],
[8,7,6,5]]
źródło
row
icol
do mojej listy „ekstremalnie sytuacyjnych funkcji”. Naprawdę sprytne rozwiązanie.c(m|x-y,m|x+y)
prosto do szafirowego połączenia i usunąćl=
część. Nie widzę żadnych nieudanych testów. Wypróbuj online!l
instancja.row
icolumn
do R dziś rano, ponieważ nigdy o nich nie słyszałem.J ,
2120 bajtów-1 bajt dzięki Jonasz!
Wypróbuj online!
Wyjaśnienie:
źródło
(-.@-:~.)
„unikalne przedmioty się nie zgadzają” w J, ale ja też spotkałem się z tym wiele razy i nie sądzę, żebyś mógł ... mamy=
i~:
na jednym ręka-:
i<this is missing>
.1#.|.,&((~:&#~.)/.)]
. Wypróbuj online!&
, dzięki!Japt , 31 bajtów
Wypróbuj wszystkie przypadki testowe
Wyjaśnienie:
Próbowałem także wersji opartej na odpowiedzi Kirka L. Haskella, ale nie mogłem znaleźć dobrego sposobu na „pogrupowanie według funkcji wskaźników X i Y”, a alternatywa, którą znalazłem, nie była wystarczająca.
źródło
JavaScript (ES6),
107 105 10198 bajtówWypróbuj online!
Uwaga
Sposób w jaki ten kod jest golfowany, anty-przekątna składająca się z jedynej dolnej lewej komórki nigdy nie jest testowana. Zgadza się, ponieważ nie może zawierać zduplikowanych wartości.
Skomentował
źródło
05AB1E , 25 bajtów
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
Czuję, że coś tu przegapiłem.
Spróbuj później zagrać w golfa.
źródło
rotate N left
byłobyN._
teraz. Takí‚εεygÅ0«N._]
też działa. Może również usunąć spłaszczenie dzięki tej nowej zmianie ... wciąż bez oszczędności bajtów:í‚vyεygÅ0«N._}ø}«ʒ0KDÙÊ}g
N(._
, ale maszNFÁ}
taką samą długość, a nawet w tym przypadku krótszą z powodu jednoczesnego]
zamknięcia pętli i map. Ogólnie rzecz biorąc, użycie._
jest przydatne tylko wtedy, gdy idzie się w lewo, aby zapisać 1 bajt, w porównaniu doNFÀ}
.Python 2 ,
144136 bajtówWypróbuj online!
źródło
Oktawa , 98 bajtów
Wypróbuj online!
źródło
cellfun
, a także dla masochistystructfun
. W Octave jest to albo for-loop, albo posiadaniefun
!Haskell,
118112 bajtówWypróbuj online!
źródło
Węgiel drzewny ,
615653 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pętla po przekątnych do przodu i do tyłu;
i=0
reprezentuje przekątne do przodu, podczas gdyi=1
reprezentuje przekątne do tyłu.Pętla nad indeksem każdego wiersza. To reprezentuje wskaźnik początku przekątnej.
Pętla nad indeksem każdej kolumny.
Oblicz indeks wierszy przekątnej przy tym indeksie kolumny. Używam
for
pętli nad tablicą jednoelementową zamiast przypisania, ponieważ pozwala to uniknąć zawijania przypisania do bloku za pomocą następującej instrukcji, oszczędzając w ten sposób bajt.Sprawdź, czy jest to pierwsza kolumna, czy przekątna ma się zawinąć między dolną a górną częścią.
Jeśli tak nie jest, wstaw ostatnią listę z listy.
jeśli tak, zacznij nową pustą listę.
Dodaj bieżącą pozycję ukośną do tej listy.
I wypchnij tę listę (z powrotem) do listy list.
Policz liczbę list zawierających duplikaty.
Weźmy przykład, kiedy
i=0
ik=1
. Oznacza to, że mamy już zebrane dwóch przekątnych[[1,1,5,2],[9,4,3,5]]
. Oto nasz wkład:Następnie zapętlamy
l
od0
do7
. Powoduje to przesunięcie zarówno wiersza, jak i kolumny o 1 za każdym razem:Lista jest teraz
[[1,1,5,2],[9,4,3,5],[5,4,4]]
. Jednak kiedyl
jest3
, mamyk+l=4
wielokrotność wysokości tablicy. Oznacza to, że musimy zacząć nową listę:[[1,1,5,2],[9,4,3,5],[5,4,4],[]]
. Następnie nadal zbieramy elementy ukośne:Lista jest teraz
[[1,1,5,2],[9,4,3,5],[5,4,4],[2,7,2,1]]
. Teraz, kiedyl
jest7
, mamyk+l=8
kolejną wielokrotność wysokości tablicy. Oznacza to, że musimy zacząć nową listę, która kończy się z ostatnim elementem, że przekątna:[[1,1,5,2],[9,4,3,5],[5,4,4],[2,7,2,1],[4]]
.Zbierając przekątne zawijania zaczynające się od pierwszego elementu każdego rzędu, ostatecznie gromadzimy wszystkie przekątne tablicy.
źródło
Wolfram Language (Mathematica) ,
99 98 96 9483 bajtyWypróbuj online!
Function[a,a~Diagonal~#&/@Range[t=-#~Total~2,-t]]
pobiera wszystkie przekątnea
- co działa, ponieważ#~Total~2
jest większe niż jakikolwiek wymiara
.źródło
APL + WIN, 69 bajtów
Monity o matrycę 2D w postaci 4 6⍴1 2 1 2 1 2 1 2 3 4 5 6 6 5 4 3 2 1 2 1 2 1 2 1
Daje to:
Wypróbuj online! Dzięki uprzejmości Dyalog Classic
Wyjaśnienie:
Wydajność:
źródło
Perl 5,
8982 bajtówTIO
źródło
TSQL,
140128 bajtówZnalazłem sposób na golfa 12 postaci. To nie jest już najdłuższe rozwiązanie.
Gra w golfa:
Nie golfowany:
Wypróbuj to
źródło