J € `ị⁸Ṃ €
ṙJṙ € Ṃ €
ṙJṙ «/ Argument: 1D-Array (z)
J [1,2,3, ..., len (z)]
ṙ Drehe z um jeden der oben genannten Beträge (aktuelles Array ist 2D)
Ṗ Entfernen Sie das letzte Array
«/ Um ein [implizit vektorisiertes] Minimum reduzieren
Probieren Sie es online!
Überprüfen Sie alle auf einmal! (leicht verändert)
Ich bin mir ziemlich sicher, dass Dennis das übertreiben kann.
Wie es funktioniert
Der Algorithmus ist ziemlich kompliziert. Beobachten wir, was dies bewirkt [4,2,2,5].
Erstens verwenden wir Jzu erhalten [1,2,3,4]. Beachten Sie, dass Jelly die 1-Indexierung verwendet.
Dann sehen wir ṙ. Es werden zwei Argumente benötigt: ein Array und eine Ganzzahl. Das Array wird um den durch die Ganzzahl angegebenen Betrag nach links gedreht. Hier ṙsehen Sie [4,2,2,5]links und [1,2,3,4]rechts (mehr dazu im Tutorial ). In Jelly werden Befehle implizit vektorisiert. Daher wird dieser Befehl für jedes einzelne Element auf der rechten Seite ausgeführt, weshalb wir ein 2D-Array erstellen würden:
Daher [4,2,2,5]ṙ[1,2,3,4]wird [[4,2,2,5]ṙ1,[4,2,2,5]ṙ2,[4,2,2,5]ṙ3,[4,2,2,5]ṙ4], was wird:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2],
[4,2,2,5]]
Beachten Sie, dass sich die ursprünglichen Elemente in der letzten Zeile befinden, da wir in dieser Zeile um einen Betrag nach links gedreht haben, der der Länge des Arrays entspricht. Aus diesem Grund Ṗentfernen wir als Nächstes diese Zeile, sodass die Spalten die Auflistungen von sind Die Elemente des Arrays, die sich nicht am aktuellen Index befinden:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2]]
Die folgende Operation «/ist ebenfalls ziemlich kompliziert. Erstens wird «das Minimum der beiden links und rechts angezeigten Zahlen zurückgegeben. Zum Beispiel 5«3kehrt zurück 3. Wenn nun die beiden Argumente Arrays sind, würde es vektorisieren, wie ich oben gesagt habe. Was das heißt es [1,5,2,3]«[4,1,5,2]würde das werden [1«4,5«1,2«5,3«2]was ist [1,1,2,2]. Nun /ist reduce, was bedeutet , dass wir den Betrieb über jede Zeile bis zum Ende tun. Zum Beispiel [1,2,3,4]+/würde werden ((1+2)+3)+4, was die Summe des Arrays ist [1,2,3,4].
Wenn wir also «/auf das gerade erhaltene 2D-Array anwenden , erhalten wir:
([2,2,5,4]«[2,5,4,2])«[5,4,2,2]
was aufgrund der Vektorisierung äquivalent wäre zu:
[2«2«5,2«5«4,5«4«2,4«2«2]
Dies berechnet das Minimum jedes Arrays ohne das Element am Index.
[4 3 2 2 5]ausgegeben werden?