Otrzymasz dwuwymiarową tablicę i liczbę i zostaniesz poproszony o sprawdzenie, czy dana macierz to Toeplitz, czy nie.
Format wejściowy:
Otrzymasz funkcję, która przyjmie two-dimensional
macierz jako argument.
Format wyjściowy:
Wróć 1
z funkcji, jeśli macierzą jest Toeplitz , w przeciwnym razie powróć -1
.
Ograniczenia:
3 < n,m < 10,000,000
gdzie n
jest liczba wierszy, a m
będzie liczba kolumn.
Przykładowy przypadek testowy:
Sample Input :
4
5
6 7 8 9 2
4 6 7 8 9
1 4 6 7 8
0 1 4 6 7
Sample Output :
1
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
code-golf
grid
decision-problem
matrix
Martin Ender
źródło
źródło
Odpowiedzi:
Mathematica, 42 bajty
Mathematica nie ma wbudowanej funkcji sprawdzania, czy coś jest macierzą Toeplitz, ale ma wbudowaną funkcję generowania. Tak więc generujemy jeden z pierwszej kolumny (
#&@@@#
) i pierwszego wiersza (#&@@#
) wejścia i sprawdzamy, czy jest on równy wejściowi. Aby przekonwertowaćTrue
/False
wynik na1
/-1
używamyBoole
(do podania1
lub0
), a następnie po prostu przekształcamy wynik za pomocą2x-1
.źródło
Oktawa , 30 bajtów
Zakładam, że nie muszę obsługiwać 1 000 000 x 1 000 000 matryc, jak mówi wyzwanie. Działa to dla matryc, które nie przekraczają dostępnej pamięci (w moim przypadku mniej niż 1 TB).
Wypróbuj online!
Pobiera to macierz
x
jako dane wejściowe i tworzy macierz Toeplitz na podstawie wartości z pierwszej kolumny i pierwszego wiersza. Następnie sprawdzi każdy element macierzy pod kątem równości. JEŻELI wszystkie elementy są równe, wówczas wejściem jest macierz Toeplitza.Wyjście będzie macierzą o takich samych wymiarach jak dane wejściowe. Jeśli na wyjściu są jakieś zera, to falsy to oktawa.
Edytować:
Właśnie zauważyłem ścisły format wyjściowy:
Działa to dla 41 bajtów. Może być możliwe zagranie w golfa z bajtu lub dwóch z tej wersji, ale mam nadzieję, że reguły wyjściowe zostaną nieco złagodzone.
źródło
Galaretka , 5 bajtów
Wypróbuj online!
Zgodnie z definicją tutaj .
źródło
05AB1E , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Haskell , 43 bajty
Wypróbuj online!
źródło
False
pozwolono Toeplitz = , mógłbym pobić go o jeden bajt.Mathematica, 94 bajty
Wejście
inny oparty na algorytmie Stewie Griffin
Mathematica, 44 bajty
źródło
s
? Nie możesz po prostu użyć#
zamiast tego?Java 7,
239233220113 bajtów-107 bajtów po użyciu bardziej wydajnego algorytmu dzięki @Neil .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
r
=n
ic
=m
jeśli porównasz to z wyzwaniem).-->
operatora!Haskell , 51 bajtów
t
pobiera listę liczb całkowitych i zwraca liczbę całkowitą.Wypróbuj online!
Może to być 39 lub 38 bajtów z wynikiem prawda / fałsz.
Pomysł do wykorzystania
init
został zainspirowany odpowiedzią Emigny 05AB1E, która wykorzystuje bardzo podobną metodę; wcześniej użyłem zagnieżdżonego zipowania.Jak to działa
zipWith((.init).(/=).tail)=<<tail
jest bez punktową formą\m->zipWith(\x y->tail x/=init y)(tail m)m
.m
, sprawdzając, czy pierwszy z usuniętym pierwszym elementem różni się od drugiego z usuniętym drugim elementem.or
Następnie łączy kontrole dla wszystkich par wierszy.1-sum[2|...]
konwertuje format wyjściowy.źródło
JavaScript (ES6),
6554 bajtówźródło
a=>a.some(b=>b.some((v,i)=>d[i]-(d[i]=v),d=[,...d]),d=[])?-1:1
(62 bajty)Rubinowy , 54 bajty
Dokładnie tak, jak określono, można grać w golfa bardziej, jeśli akceptowane są elastyczne wejścia / wyjścia.
Wyjaśnienie:
Iteruj po macierzy i porównaj każdą linię z linią powyżej, przesuniętą o jedną w prawo. Jeśli są różne, użyj pustej tablicy do następnej iteracji. Na koniec zwróć -1, jeśli ostatnia tablica jest pusta, lub 1, jeśli są to co najmniej 2 elementy (ponieważ najmniejszą możliwą macierzą jest 3x3, jest to prawdą, jeśli wszystkie porównania zwracają prawdę)
Wypróbuj online!
źródło
<=>
do obliczenia wyniku!|(*x,_),y|
to, żebyś nie musiał kroićx
?PHP, 70 bajtów
źródło
Python, 108
W ogóle nie jest wydajny, ponieważ dotyka każdego elementu
n+m
podczas filtrowania pod kątem przekątnych. Następnie sprawdza, czy na przekątnej jest więcej niż jeden unikalny element.źródło
Aksjomat, 121 bajtów
m musi być macierzą jakiegoś elementu, który pozwala ~ =; zagrać w golfa
źródło
Siatkówka , 148 bajtów
Wypróbuj online!
Matryca wejściowa N × M
jest najpierw konwertowany na macierz N × (N + M-1) przez wyrównanie przekątnych w ten sposób:
a następnie pierwsza kolumna jest wielokrotnie sprawdzana pod kątem pojedynczego unikalnego numeru i usuwana, jeśli tak jest. Matryca to Toeplitz, jeśli dane wyjściowe są puste.
źródło
MATL , 11 bajtów
Wypróbuj online!
Prosta metoda „konstruowania macierzy Toeplitza i porównania z nią”, której używa kilka pierwszych odpowiedzi, wydawała mi się nudna (i wygląda na to, że i tak byłby o 1 bajt dłużej). Wybrałem więc metodę „sprawdź, czy każda przekątna zawiera tylko jedną unikalną wartość”.
T&Xd
- Wyodrębnij przekątne wejścia i utwórz nową macierz z nimi jako kolumnami (wypełnienie zerami w razie potrzeby)"
- iteruj przez kolumny tego@Xz
- wciśnij zmienną iteracyjną (bieżącą kolumnę) i usuń z niej (wypełniające) zera&=
- kontrola równości transmisji - tworzy macierz ze wszystkimi 1 (prawda), jeśli wszystkie pozostałe wartości są sobie równe, w przeciwnym razie macierz zawiera kilka zer, co jest fałszemv
- połącz wartości wyników razem, aby utworzyć jeden końcowy wektor wyników, który jest albo prawdziwy (wszystkie 1), albo falsey (niektóre 0)źródło
R , 48 bajtów
Wypróbuj online!
źródło
Clojure, 94 bajty
źródło