Definicje
K p pierścienia kwadratowej macierzy o rozmiarze N , gdzie 1 ≤ k ≤ sufitu (N / 2) lista tworzą pierwiastków z k th i (N-k + 1), TH wierszy i kolumn, ale bez pierwszy i ostatni element k-1 .
Przykład:
Matryca: 1 2 3 4 5 6 7 8 9 1 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 Ograniczone w pierścieniach: + ------------------- + | 1 2 3 4 5 | | + ----------- + | | 6 | 7 8 9 | 1 | | | + --- + | | | 8 | 7 | 6 | 5 | 4 | | | + --- + | | | 3 | 2 1 9 | 8 | | + ----------- + | | 7 6 5 4 3 | + ------------------- +
Pierwszy pierścień powyższego jest 1,2,3,4,5,1,4,8,3,4,5,6,7,3,8,6
, drugi jest, 7,8,9,5,9,1,2,7
a trzeci jest 6
.
N o N macierzy liczb naturalnych jest (dla celów tego wyzwania)
wklęsła , gdy wszystkie liczby całkowite na k -tego pierścienia jest bezwzględnie większy niż na (k + 1) XX pierścień, gdzie k jest dowolną liczbą całkowitą pomiędzy 1 i N (tych, w pierwszym sygnale są większe niż te, na sekundę, co jest z kolei większe niż te na trzecim itd.). Przykład:
4 5 6 4 7 -> ponieważ 4,5,6,4,7,4,8,5,5,4,6,5,9,5,5,4 są wyższe niż 4 3 2 2 4 dowolne z 3,2,2,3,2,3,3,2, które są wyższe niż 1 5 2 1 3 8 5 3 3 2 5 9 5 6 4 5
płaskie, jeśli wszystkie liczby całkowite w macierzy są równe. Kolejny przykład (być może zbędny):
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
wypukły , jeżeli wszystkie liczby całkowite na k p pierścienia są ściśle niższe niż na (k + 1) XX pierścień, gdzie k jest dowolną liczbą całkowitą pomiędzy 1 i N (ci pierwszego pierścienia jest mniejsza, niż na drugim, które są z kolei niższe niż te na trzecim itd.). Przykład:
1 2 1 -> ponieważ oba 1 i 2 są mniejsze niż 6 2 6 2 1 2 1
mieszane, jeśli matryca nie spełnia żadnego z powyższych kryteriów. Przykład:
3 3 3 3 3 3 2 2 2 3 3 2 3 2 3 3 2 2 2 3 3 3 3 3 3
Wyzwanie
Biorąc pod uwagę kwadratową macierz dodatnich liczb całkowitych o wielkości co najmniej 3 , sklasyfikuj ją zgodnie z powyższymi definicjami. Oznacza to, że wyprowadza jedną z czterech różnych spójnych wartości na podstawie tego, czy macierz jest wklęsła, płaska, wypukła czy mieszana.
Możesz konkurować w dowolnym języku programowania i odbierać dane wejściowe i dostarczać dane wyjściowe dowolną standardową metodą w dowolnym rozsądnym formacie, zwracając uwagę, że te luki są domyślnie zabronione. To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach) dla każdego języka .
Przypadki testowe
Oto kilka przykładów do wyboru - wybrałem 6 z każdej kategorii.
Wklęsły
[[3, 3, 3], [3, 1, 3], [3, 3, 3]]
[[2, 3, 4], [5, 1, 6], [7, 8, 9]]
[[19, 34, 45], [34, 12, 14], [13, 13, 13]]
[[3, 4, 3, 4], [4, 2, 1, 3], [3, 1, 2, 4], [4, 3, 4, 3]]
[[4, 5, 6, 4, 7], [4, 3, 2, 2, 4], [5, 2, 1, 3, 8], [5, 3, 3, 2, 5], [9, 5, 6, 4, 5]]
[[7, 7, 7, 7, 7], [7, 6, 6, 6, 7], [7, 6, 5, 6, 7], [7, 6, 6, 6, 7], [7, 7, 7, 7, 7]]
Mieszkanie
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[2, 2, 2], [2, 2, 2], [2, 2, 2]]
[[8, 8, 8], [8, 8, 8], [8, 8, 8]]
[[120, 120, 120], [120, 120, 120], [120, 120, 120]]
[[10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10]]
[[5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5]]
Wypukły
[[1, 2, 1], [2, 6, 2], [1, 2, 1]]
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
[[19, 34, 45], [34, 76, 14], [13, 6, 13]]
[[3, 3, 3, 3], [3, 4, 4, 3], [3, 4, 4, 3], [3, 3, 3, 3]]
[[192, 19, 8, 6], [48, 324, 434, 29], [56, 292, 334, 8], [3, 4, 23, 23]]
[[291, 48, 7, 5], [47, 324, 454, 30], [58, 292, 374, 4], [9, 2, 53, 291]]
Mieszany
[[1, 2, 3], [4, 5, 9], [6, 7, 8]]
[[10, 14, 21], [100, 8, 3], [29, 2, 19]]
[[5, 5, 5, 5], [5, 4, 4, 5], [5, 4, 6, 5], [5, 5, 5, 5]]
[[3, 3, 3, 3], [3, 1, 2, 3], [3, 3, 2, 3], [3, 3, 3, 3]]
[[12, 14, 15, 16], [12, 18, 18, 16], [12, 11, 11, 16], [12, 14, 15, 16]]
[[5, 5, 5, 5, 5], [5, 4, 4, 4, 5], [5, 4, 6, 4, 5], [5, 4, 4, 4, 5], [5, 5, 5, 5, 5]]
źródło
Odpowiedzi:
Java (JDK 10) ,
247232220 bajtówWypróbuj online!
Wyjścia:
1
dla „wklęsłych”2
dla „płaskiego”3
dla „wypukłego”4
dla „mieszanych”Nie golfowany:
źródło
Galaretka ,
18 1716 bajtówUważam, że istnieje duży potencjał, aby ten wysiłek został wyeliminowany
Monadyczny link akceptujący listę list liczb, który zwraca listę liczb całkowitych:
Wypróbuj online!Lub zobacz pakiet testowy .
L‘H
można zastąpić mniej wydajnym, ale atomowo krótszymJÆm
.W jaki sposób?
źródło
Python 2 ,
219216189176 bajtówWypróbuj online!
Wyjścia
set([1]), set([0]), set([-1]),
lub odpowiednioFalse
wklęsłe, płaskie, wypukłe lub mieszane.Dzięki za: Aż 27 bajtów z kilku optymalizacji przez ovs . A potem kolejne 13 bajtów.
A
Zrozumienie listy (ze względu na ovs) tworzy listę elementów każdego posortowanego pierścienia.Następnie porównujemy wartości
max
imin
między sąsiadującymi pierścieniami, patrząc na elementy0
th i-1
th każdej listy posortowanej w A. Zauważ, że jeśli na przykładM
jest wklęsły,min
każdy pierścień zewnętrzny musi być większy niżmax
następnego pierścienia najbardziej wysuniętego do środka ; a następnie wynika, żemax
każdy pierścień zewnętrzny będzie także większy niżmin
następnego pierścienia najbardziej wewnętrznego.Jeśli
M
jest wklęsły, płaski lub wypukły, zestaw tychmin/max
porównań będzie zawierał tylko 1 element{-1, 0, 1}
; jeśli jest mieszany, będą dwa lub więcej elementów.źródło
while M:k=M[0]+M[-1];M=M[1:-1];A+=sorted(k+[i.pop(j)for j in[0,-1]for i in M]),
(174 bajtów),A=()
liczbę bajtów ...A=()
while M: A+= (some expression)
.Galaretka , 17 bajtów
Zwraca 1 dla wklęsłego , 0 dla płaskiego , -1 dla wypukłego i nic dla mieszanego .
Wypróbuj online!
źródło
JavaScript (ES6), 168 bajtów
Zwroty:
-1
na mieszkanie0
dla mieszanych1
dla wypukłych2
na wklęsłeWypróbuj online!
W jaki sposób?
Minimum i maksimum na każdym pierścieniu
Obliczamy minimalną mi maksymalną M dla każdego pierścienia.
Sprawdzamy, czy komórka znajduje się na danym pierścieniu, obliczając kwadratową odległość od środka matrycy na każdej osi. Przyjmowanie wartości bezwzględnej również by działało, ale kwadratowanie jest krótsze.
Komórka w (x, y) znajduje się na n-tym pierścieniu (indeksowany od 0, zaczynając od skrajnego), jeśli następująca formuła jest fałszywa :
gdzie:
Przykład: czy komórka (1, 2) na drugim pierścieniu matrycy 6x6?
Flagi
Na końcu każdej iteracji porównujemy m i M z minimalnym p i maksymalnym P poprzedniego pierścienia i odpowiednio aktualizujemy zmienną flagi i :
i |= 1
jeśli m> Pi |= 2
jeśli M <pNa koniec procesu przekształcamy końcową wartość i w następujący sposób:
źródło
K (ngn / k) ,
1007169 bajtówWypróbuj online!
zwraca
1
= wklęsły,::
= płaski,-1
= wypukły,0
= mieszany(
::
służy jako symbol zastępczy dla brakujących wartości w k)źródło
&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/*:'(|+:)\)'-1_(-1_1_+-1_1_)\
ok , 56 bajtów
Na podstawie odpowiedzi ngn .
Wypróbuj online!
źródło
{&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/x)@.=i&|i:&/!2##x}
C ++ 17 (gcc) , 411 bajtów
Nowy najlepszy wynik! (przynajmniej w momencie publikowania) No cóż, to trochę fajne, ale wciąż C ++.
Wypróbuj online!
Lambda
C
bierzestd::vector<std::vector<int>>
i zwraca 1 dla wklęsłego, 2 dla wypukłego, 3 dla płaskiego lub 0 dla mieszanego.Bardziej czytelna wersja kodu, zawierająca opisowe identyfikatory, komentarze,
R
->return
iI
->int
spisane itp .:źródło