Definitionen
Der k- te Ring einer quadratischen Matrix der Größe N , wobei 1 ≤ k ≤ Decke (N / 2) die Liste ist, die durch die Elemente der k- ten und (N-k + 1) -ten Zeilen und Spalten gebildet wird, jedoch ohne die erstes und letztes k-1 Element.
Beispiel:
Matrix: 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 In Ringen getrennt: + ------------------- + | 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 | + ------------------- +
Der erste Ring von oben ist 1,2,3,4,5,1,4,8,3,4,5,6,7,3,8,6
, der zweite ist 7,8,9,5,9,1,2,7
und der dritte ist 6
.
Eine N x N- Matrix positiver Ganzzahlen ist (für die Zwecke dieser Herausforderung):
konkav, wenn alle ganzen Zahlen im k- ten Ring genau größer sind als die im (k + 1) -ten Ring, wobei k eine ganze Zahl zwischen 1 und N ist (die im ersten Ring sind größer als die im zweiten Ring) wiederum größer als die auf der dritten usw.). Beispiel:
4 5 6 4 7 -> weil 4,5,6,4,7,4,8,5,5,4,6,5,9,5,5,4 alle höher sind als 4 3 2 2 4 beliebig von 3,2,2,3,2,3,3,2, die alle höher als 1 sind 5 2 1 3 8 5 3 3 2 5 9 5 6 4 5
flach, wenn alle ganzen Zahlen in der Matrix gleich sind. Ein anderes Beispiel (vielleicht überflüssig):
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
konvex, wenn alle ganzen Zahlen im k- ten Ring genau niedriger sind als die im (k + 1) -ten Ring, wobei k eine ganze Zahl zwischen 1 und N ist (die im ersten Ring sind niedriger als die im zweiten Ring) wiederum niedriger als beim dritten usw.). Beispiel:
1 2 1 -> weil 1 und 2 beide kleiner als 6 sind 2 6 2 1 2 1
gemischt, wenn die Matrix keines der oben genannten Kriterien erfüllt. Beispiel:
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
Herausforderung
Bei einer quadratischen Matrix positiver Ganzzahlen mit einer Größe von mindestens 3 klassifizieren Sie diese gemäß den obigen Definitionen. Das heißt, Sie können einen von vier verschiedenen konsistenten Werten ausgeben, je nachdem, ob die Matrix konkav, flach, konvex oder gemischt ist.
Sie können in jeder Programmiersprache antreten und Eingaben und Ausgaben mit jeder Standardmethode und in jedem vernünftigen Format vornehmen. Beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind. Dies ist Codegolf , daher gewinnt die kürzeste Übermittlung (in Bytes) für jede Sprache .
Testfälle
Hier sind einige Beispiele zur Auswahl - ich habe aus jeder Kategorie 6 ausgewählt.
Konkav
[[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]]
Eben
[[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]]
Konvex
[[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]]
Gemischt
[[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]]
quelle
Antworten:
Java (JDK 10) ,
247232220 ByteProbieren Sie es online!
Ausgänge:
1
für "konkav"2
für "flat"3
für "konvex"4
für "gemischt"Ungolfed:
quelle
Jelly ,
18 1716 BytesIch glaube, es gibt viel Potenzial für diese Bemühungen, um herausgolfen zu werden
Ein monadischer Link, der eine Liste von Zahlenlisten akzeptiert, die eine Liste von ganzen Zahlen zurückgibt:
Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
L‘H
könnte durch die weniger effiziente, aber atomar kürzere ersetzt werdenJÆm
.Wie?
quelle
Python 2 ,
219216189176 BytesProbieren Sie es online!
Ausgänge
set([1]), set([0]), set([-1]),
oderFalse
für konkav, flach, konvex oder gemischt.Thx für: Satte 27 Bytes aus ein paar Optimierungen durch Ovs . Und danach noch 13 Bytes.
Das Listenverständnis
A
(aufgrund von ovs) erstellt eine Liste der Elemente jedes Rings, sortiert.Als nächstes vergleichen wir die Werte
max
undmin
zwischen benachbarten Ringen, indem wir uns die0
th- und-1
th-Elemente jeder sortierten Liste in A ansehen. Wenn beispielsweiseM
konkav ist,min
muss jeder äußere Ring größer sein alsmax
der des nächst innersten Rings ; und es folgt dann, dassmax
jeder äußere Ring auch größer sein wird alsmin
der nächst innerste Ring.Wenn
M
konkav, flach oder konvex ist, enthält die Menge diesermin/max
Vergleiche nur 1 Element von{-1, 0, 1}
; Wenn es gemischt ist, gibt es zwei oder mehr Elemente.quelle
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 Byte),A=()
von Ihrer Byteanzahl weggelassen ...A=()
while M: A+= (some expression)
.Gelee , 17 Bytes
Gibt 1 für konkav , 0 für flach , -1 für konvex und nichts für gemischt zurück .
Probieren Sie es online!
quelle
JavaScript (ES6), 168 Byte
Kehrt zurück:
-1
für wohnung0
für gemischt1
für konvex2
für konkavProbieren Sie es online!
Wie?
Minimum und Maximum bei jedem Ring
Wir berechnen das Minimum m und das Maximum M für jeden Ring.
Wir testen, ob sich eine Zelle auf einem bestimmten Ring befindet, indem wir den quadratischen Abstand vom Mittelpunkt der Matrix auf jeder Achse berechnen. Den absoluten Wert zu nehmen würde genauso gut funktionieren, aber das Quadrieren ist kürzer.
Eine Zelle bei (x, y) befindet sich auf dem n- ten Ring (0-indiziert, beginnend mit dem äußersten), wenn die folgende Formel falsch ist :
wo:
Beispiel: Befindet sich die Zelle (1, 2) im 2. Ring einer 6x6-Matrix?
Flaggen
Am Ende jeder Iteration vergleichen wir m und M mit dem Minimum p und dem Maximum P des vorherigen Rings und aktualisieren die Flag-Variable i entsprechend:
i |= 1
wenn m> Pi |= 2
wenn M <pAm Ende des Prozesses konvertieren wir den Endwert von i wie folgt:
quelle
K (ngn / k) ,
1007169 BytesProbieren Sie es online!
Gibt
1
= konkav,::
= flach,-1
= konvex,0
= gemischt zurück(
::
wird als Platzhalter für fehlende Werte in k verwendet)quelle
&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/*:'(|+:)\)'-1_(-1_1_+-1_1_)\
in Ordnung , 56 bytes
Basierend auf der Antwort von ngn .
Probieren Sie es online!
quelle
{&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/x)@.=i&|i:&/!2##x}
C ++ 17 (gcc) , 411 Bytes
Ein neuer Highscore! (Zum Zeitpunkt der Veröffentlichung zumindest) Na ja, es ist ein bisschen raffiniert, aber immer noch C ++.
Probieren Sie es online!
Lambda
C
nimmt astd::vector<std::vector<int>>
und gibt 1 für konkav, 2 für konvex, 3 für flach oder 0 für gemischt zurück.Eine besser lesbare Version des Codes mit beschreibenden Bezeichnern, Kommentaren,
R
->return
undI
->int
ausgeschriebenen usw .:quelle