Herausforderung:
Ausgehend von einer NxN-Matrix, in der und eine von acht verschiedenen 'Faltungsoptionen' , wird ein 2D-Array / eine 2D-Liste mit den subtrahierten Werten ausgegeben.
Die acht Faltoptionen sind: von links nach rechts; rechts nach links; oben nach unten; unten nach oben; von oben nach unten rechts; von rechts nach links; von links nach rechts; von unten nach oben.
Schritt für Schritt Beispiele:
Eingabematrix:
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1], (a'th row in the explanation below)
[ 1,25, 0,75]]
Mit der Faltoption von oben nach unten geben wir Folgendes als Ergebnis aus:
[[ 1,-7,-5,-3],
[ 0,22,-5,68]]
Warum? Wir falten von oben nach unten. Da die Matrixdimensionen gleichmäßig sind, müssen wir keine mittlere Ebene beibehalten, wie sie ist. Die -te Zeile wird von der -ten Zeile subtrahiert (wäre -te Zeile für ungeradzahlige Matrizen gewesen); so wird . Die -te Zeile wird dann von der -ten Zeile subtrahiert (wäre -te Zeile für ungeradzahlige Matrizen gewesen); so wird .[1, 1, 1, 1]
[1-0, 1-8, 1-6, 1-4]
[1, -7, -5, -3]
[1, 25, 0, 75]
[1-1, 25-3, 0-5, 75-7]
[0, 22, -5, 68]
Mit der Faltoption von rechts nach links unten (mit der gleichen Eingabematrix oben) geben wir stattdessen Folgendes als Ergebnis aus:
[[-74, 2, 1, 7],
[ 0, 7, 6],
[-24, 1],
[ 1]]
Mit folgenden klappbaren Subtraktionen:
[[1-75, 3-1, 5-4, 7],
[ 0-0, 8-1, 6],
[1-25, 1],
[ 1]]
Herausforderungsregeln:
- Sie können acht verschiedene Buchstaben
[A-Za-z]
oder verschiedene Zahlen im Bereich für die . Zahlen oder sind wahrscheinlich die gebräuchlichsten Optionen. Wenn Sie jedoch für einige intelligente Berechnungen unterschiedliche Zahlen innerhalb des Bereichs verwenden möchten, können Sie dies tun. Bitte geben Sie an, welche Falzoptionen Sie in Ihrer Antwort verwendet haben. - Die Eingangsmatrix ist immer eine quadratische NxN-Matrix, sodass Sie keine rechteckigen NxM-Matrizen verarbeiten müssen. wird auch immer mindestens 2 sein, da eine leere oder 1x1-Matrix nicht gefaltet werden kann.
- Die Eingabe der Matrix enthält immer nicht negative Zahlen im Bereich (die Zahlen in der Ausgabe liegen daher im Bereich ).
- Bei der (anti-) diagonalen Faltung oder der vertikalen / horizontalen Faltung mit ungeraden Abmessungen bleibt die mittlere "Schicht" unverändert.
- I / O ist flexibel. Kann ein 2D-Array / eine Liste von ganzen Zahlen sein; Kann als durch Leerzeichen und Zeilenumbrüche getrennte Zeichenfolge zurückgegeben oder gedruckt werden. Sie können die Eingabematrix ändern und die Zahlen ersetzen, die weg sein sollen,
null
oder eine Zahl außerhalb des[-999, 999]
Bereichs, um anzuzeigen, dass sie weg sind. usw. usw.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Eingangsmatrix 1:
Input-matrix (for the following eight test cases):
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1],
[ 1,25, 0,75]]
Input-folding option: left-to-right
Output: [[2,6],[-2,4],[0,0],[-25,74]]
Input-folding option: right-to-left
Output: [[-6,-2],[-4,2],[0,0],[-74,25]]
Input-folding option: top-to-bottom
Output: [[1,-7,-5,-3],[0,22,-5,68]]
Input-folding option: bottom-to-top
Output: [[0,-22,5,-68],[-1,7,5,3]]
Input-folding option: topleft-to-bottomright
Output: [[7],[6,-1],[1,-7,-2],[1,24,0,74]]
Input-folding option: topright-to-bottomleft
Output: [[1],[-3,8],[-4,-5,1],[-6,21,-1,75]]
Input-folding option: bottomleft-to-topright
Output: [[1,3,4,6],[8,5,-21],[1,1],[75]]
Input-folding option: bottomright-to-topleft
Output: [[-74,2,1,7],[0,7,6],[-24,1],[1]]
Eingangsmatrix 2:
Input-matrix (for the following eight test cases):
[[17, 4, 3],
[ 8, 1,11],
[11, 9, 7]]
Input-folding option: left-to-right
Output: [[4,-14],[1,3],[9,-4]]
Input-folding option: right-to-left
Output: [[14,4],[-3,1],[4,9]]
Input-folding option: top-to-bottom
Output: [[8,1,11],[-6,5,4]]
Input-folding option: bottom-to-top
Output: [[6,-5,-4],[8,1,11]]
Input-folding option: topleft-to-bottomright
Output: [[3],[1,7],[11,1,-10]]
Input-folding option: topright-to-bottomleft
Output: [[17],[4,1],[8,-2,7]]
Input-folding option: bottomleft-to-topright
Output: [[17,-4,-8],[1,2],[7]]
Input-folding option: bottomright-to-topleft
Output: [[10,-7,3],[-1,1],[11]]
A-Za-z
oder eine beliebige Ganzzahl im Bereich verwenden[-999,999]
, sodass die Reihenfolge keine Rolle spielt. Tut mir leid, aber Sie müssen die richtige Falte basierend auf der Eingabe ausgeben, sodass die Ausgabe aller acht nicht zulässig ist.Antworten:
Oktave ,
256248244248 BytesProbieren Sie es online!
-2 Bytes (und ein bisschen Aufräumen) dank Luis Mendo
+2 Bytes aufgrund der Korrektur für TB
1-indizierte Operationen für Werte von b von 1-8:
Das bereitete mir Kopfschmerzen, ich werde es später richtig golfen
quelle
rows(a)
stattdessen vorsize(a,2)
Jelly ,
3934 BytesMöglicherweise ist weiteres Golfen möglich, indem einige der beiden "Funktionen" kombiniert werden.
... yep: -5 danke an NickKennedy!
Probieren Sie es online!
Eine dyadische Verknüpfung, die eine Ganzzahl (die Anweisung) und eine Liste von Zahlenlisten (die Matrix) akzeptiert.
Wie?
Der Link erzeugt Jelly Code, der dann mit M als Eingabe ausgewertet wird ...
Jede der acht Optionen ist dann:
Diese (mit Ausnahme von
0
und4
) wenden jeweils eine Transformation auf dieM
Verwendung vonZ
(transponieren),Ṛ
(umkehren) undU
(jeweils umkehren) an. dann eine von zwei Funktionen (siehe unten), dann die Umkehrung der Setup-Transformation (falls vorhanden) mit der Umkehrung des Codes.Die zwei inneren Funktionen sind:
quelle
JavaScript (ES6),
149 ... 133128 Bytes(matrix)(d)
NaN
Probieren Sie es online!
Kommentiert
quelle
Jelly ,
7134 BytesProbieren Sie es online!
Test Suite
Ein volles Programm. Richtiges Argument ist die Matrix. Das linke Argument gibt die Art der Falte an:
Umgeschrieben, um 5-Bit-Bijektiv-Binärdaten als Eingabe zu verwenden. Beachten Sie, dass das oben angegebene Programm für mehrere Falzungen nicht wiederholt werden kann.
quelle
Oktave ,
482 Bytes, 459 BytesDie Eingaben zur Entscheidung der Faltrichtung sind:
1) von links nach rechts
2) von unten nach oben
3) von rechts nach links
4) von oben nach unten
5) von tr nach bl
6) von br nach tl
7) von bl nach tr
8) von tl nach br
Jeder Anruf Generiert nur die angegebene Falte und nicht alle (was wahrscheinlich weniger Bytes erfordern würde). Das größte Problem ist, dass ich in diesem Fall nicht herausfinden kann, wie die Faltungen 1-4 und 5-8 in derselben Schleife platziert werden. Aber mindestens Oktave hat gut aussehende Matrizen.
Probieren Sie es online!
Die Unterdrückung der Ausgabe kostet Byte. Ignorieren Sie daher alles, was nicht die return-Anweisung ist (ans =).
quelle
Kohle ,
7877 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Verwendet die folgenden Faltoptionen:
Gefaltete Werte werden durch leere Zeichenfolgen ersetzt. Erläuterung:
Drehen Sie das Array viermal.
Falten Sie das Array bei Bedarf horizontal.
Falten Sie das Array bei Bedarf diagonal.
Geben Sie das Array aus, sobald es wieder in seine ursprüngliche Ausrichtung gedreht wurde.
quelle