Herausforderung:
Füllen Sie die Matrix mit einer quadratischen Eingangsmatrix A auf allen vier Seiten mit einer Zeile und einer Spalte auf.
- Der Wert jedes Elements in der oberen und unteren Zeile sollte die Summe der Elemente in jeder entsprechenden Spalte sein.
- Der Wert jedes Elements in der linken und rechten Spalte sollte die Summe der Elemente in jeder entsprechenden Zeile sein.
- Der Wert der Elemente in der oberen linken und unteren rechten Ecke sollte die Summe der Elemente in der Diagonale sein
- Der Wert der Elemente in der oberen rechten und unteren linken Ecke sollte die Summe der Elemente in der Antidiagonale sein.
Beispiel:
A =
1 5 3
3 2 4
2 5 5
Output:
8 6 12 12 7
9 1 5 3 9
9 3 2 4 9
12 2 5 5 12
7 6 12 12 8
Erläuterung:
Die Elemente oben links und unten rechts sind die Summe der Diagonalen 1 + 2 + 5 = 8 . Die Elemente oben rechts und unten links sind die Summe der Antidiagonalen 2 + 2 + 3 = 7 .
Die obere und untere Reihe (mit Ausnahme der Ecken) ist die Summe der Spalten in A : 1 + 3 + 2 = 6 , 5 + 2 + 5 = 12 und 3 + 4 + 5 = 12 . In ähnlicher Weise sind die linke und rechte Spalte (mit Ausnahme der Ecken) die Summe jeder der Reihen von A : 1 + 5 + 3 = 9 , 3 + 2 + 4 = 9 und 2 + 5 + 5 = 12 .
Eingang:
- Eine nicht leere quadratische Matrix mit nicht negativen ganzen Zahlen.
- Optionales Format
Ausgabe:
- Die Matrix wird wie oben beschrieben aufgefüllt
- Optionales Format, muss jedoch mit dem Eingabeformat identisch sein
Testfälle:
Verwenden Sie die Übermittlungen in dieser Challenge, wenn Sie das Eingabeformat (zum Beispiel [[1, 5],[0, 2]]
) in ein geeigneteres Format konvertieren möchten .
0
----------------
0 0 0
0 0 0
0 0 0
1 5
0 2
----------------
3 1 7 5
6 1 5 6
2 0 2 2
5 1 7 3
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
----------------
65 65 65 65 65 65 65
65 17 24 1 8 15 65
65 23 5 7 14 16 65
65 4 6 13 20 22 65
65 10 12 19 21 3 65
65 11 18 25 2 9 65
65 65 65 65 65 65 65
15 1 2 12
4 10 9 7
8 6 5 11
3 13 14 0
----------------
30 30 30 30 30 30
30 15 1 2 12 30
30 4 10 9 7 30
30 8 6 5 11 30
30 3 13 14 0 30
30 30 30 30 30 30
Das ist Code-Golf , also gewinnt die kürzeste Lösung in jeder Sprache . Erklärungen sind ausdrücklich erwünscht.
quelle
Antworten:
Oktave , 64 Bytes
Vielen Dank an Tom Carpenter für das Speichern von 4 Bytes und das Korrigieren eines Fehlers, den ich im Originalcode hatte!
Probieren Sie es online!
Erläuterung:
Beachten Sie, dass ich das geschrieben habe, lange nachdem ich die Herausforderung gepostet habe.
quelle
Gelee , 27 Bytes
Probieren Sie es online!
quelle
MATL ,
2726 BytesProbieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
APL (Dyalog) , 37 Bytes
Probieren Sie es online!
1 1∘⍉
diagonal (beide Achsen in eine zusammenfalten)d←
Speichern Sie diese Funktion als d und wenden Sie sie auf das Argument an+⌿
Stellen Sie die Spaltensummen vorand∘⌽,
voranstellen d auf das umgekehrte Argument angewendet(
…)⍪
Legen Sie folgendes aufeinander:+/,⊢,+/
Zeilensummen, das unveränderte Argument Zeilensummen(
…)⍪
Legen Sie folgendes aufeinander:d,+⌿,d∘⌽
angewendet auf das Argument, Spaltensummen, d angewendet auf das umgekehrte Argumentquelle
Gelee , 26 Bytes
Probieren Sie es online!
Sieht überraschend anders aus als Eriks Lösung .
Ich habe es endlich geschafft zu verstehen, wie es
¦
funktioniert (durch Debuggen von Jellys Code, lol). Schade, dass es in meinem Fall eines erfordert, um damit€
zu arbeitenÇ
.Erläuterung
Der Code verwendet drei Links. Der erste Hilfslink füllt einen Vektor mit seiner Summe an beiden Enden auf, der zweite Hilfslink fixiert zwei Ecken der Matrix und der Hauptlink ruft diese entsprechend auf.
quelle
Python 3 , 155 Bytes
Dies ist der Vorschlag von @LeakyNun, der 54 Bytes einspart . Ich habe es dann selbst ein bisschen golfen.
Probieren Sie es online!
Anfangslösung - Python 3 , 216 Bytes
Probieren Sie es online!
quelle
Python 2 ,
268250184174 Bytes10 Dank an Stewie Griffin
Probieren Sie es online!
Einige Erklärungen Die Eingabe wird als Matrix hochgeladen. Zuerst berechnet der Code die Summe jeder Spalte und jeder Zeile mit numpy.sum. Dann berechnet es die Summe der Diagonalen mit numpy.trace. Danach erhält es die andere Diagonale, indem es die Matrix von links nach rechts dreht. Schließlich werden numpy.vstack und numpy.hstack verwendet, um die Teile zusammenzukleben.
quelle
R, 129 Bytes
Eine anonyme Funktion, die eine quadratische Matrix als Eingabe verwendet. Ich werde eine Erklärung posten, wenn Interesse besteht.
quelle
PHP , 211 Bytes
Probieren Sie es online!
Erweitert
quelle
Python 3 , 125 Bytes
Probieren Sie es online!
Leicht ungolfed:
Hierbei werden als Numpy-Array formatierte Eingaben verwendet. Anschließend wird mit den Indizierungswerkzeugen
np.c_
undnp.r_
ein neues Array in einem Durchgang erstellt .np.trace
undnp.sum
werden verwendet, um die Summen entlang der Diagonalen bzw. überall sonst zu berechnen.T
wird verwendet, um die Transponierung vor und nach dem Verketten der Summen vorzunehmen, da dies kürzer ist, als alle Arrays zweidimensional zu machen und zu verwendennp.r_
.m[::-1]
Speichert Bytes im Vergleich zurot90(m)
oderfliplr(m)
zum Auffinden der Spur für die zweite Diagonale.quelle
JavaScript (ES6), 170 Byte
Ein- und Ausgabe ist ein 2D-Array von Zahlen.
Erklärt
Testschnipsel
Die Eingabe / Ausgabe wurde mit Zeilenumbrüchen und Tabulatoren formatiert.
quelle
LOGO , 198 Bytes
Die Funktion
f
nimmt eine Matrix als 2D-Liste auf und gibt die resultierende Matrix aus.g
ist Helferfunktion.quelle