Für jede Zeile und Spalte einer Matrix können wir einen zusätzlichen Eintrag mit der Summe der letzten beiden Einträge in dieser Zeile oder Spalte hinzufügen. Zum Beispiel mit der folgenden Eingabematrix:
[ 1 1 1 ]
[ 2 3 4 ]
Die resultierende Matrix wäre:
[ 1 1 1 2 ]
[ 2 3 4 7 ]
[ 3 4 5 9 ]
Führen Sie bei einer Eingabe einer Ganzzahl N und einer Matrix [X, Y] mit einer Größe von mindestens 2x2 die obige Erweiterung N-mal durch und geben Sie das Ergebnis aus. Die resultierende Matrix hat immer die Größe [X + N, Y + N].
Beispiele:
Input: Output:
2, [ 0 0 ] [ 0 0 0 0 ]
[ 0 0 ] [ 0 0 0 0 ]
[ 0 0 0 0 ]
[ 0 0 0 0 ]
3, [ 1 1 1 ] [ 1 1 1 2 3 5 ]
[ 2 3 4 ] [ 2 3 4 7 11 18 ]
[ 3 4 5 9 14 23 ]
[ 5 7 9 16 25 41 ]
[ 8 11 14 25 39 64 ]
2N
Zeiten zu wiederholen, als zweimal zu wiederholenN
?2*
(Postfix-Notation). Vielleicht sollte es einen eingebauten Ein-Zeichen-Code haben, der häufig verwendet wird. Auch2^
(quadratisch). Aber mir geht der Code aus :-)J, 19 Bytes
Dies definiert ein Adverb, das die Zahl links nimmt und ein Verb erzeugt, das die Matrix rechts nimmt. Für das zweite Beispiel gibt es
Erläuterung
quelle
K, 23 Bytes
In Aktion:
Probieren Sie es hier aus .
quelle
{x
und dasy}
Jelly,
151312 Bytes-1 Byte von @Dennis
Wie bei der MATL-Antwort von @ LuisMendo wird das Array transponiert, bevor die Transformation entlang einer Achse ausgeführt wird. Daher müssen wir die Funktion 2 * n mal aufrufen.
Probieren Sie es hier aus .
quelle
ES6, 134 Bytes
Erläuterung:
quelle
Haskell, 67 Bytes
Anwendungsbeispiel:
Wie es funktioniert:
quelle
sudo apt-get install haskell-platform
undghci
führe die REPL aus, die mir einePrelude>
Aufforderung gibt. Wenn ich einfüge,o%m=m++[o(+)(last m)$last$init m]
bekomme ich<interactive>:2:4: parse error on input '='
. Können Sie mir eine kleine Einführung geben, die entweder aus einer Quelldatei oder in der REPL ausgeführt wird?o%m=...
Zeile (und nur diese Zeile) in eine Datei mit dem Namen, sagen wir malfib-matrix.hs
. Dann können Sie den:l fib-matrix.hs
Befehl in verwendenghci
, um die Definitionen zu laden und die Hauptfunktion aufzurufen, wie in meinem Verwendungsbeispiel beschrieben. - Oder benutzenlet o%m=... in ( (!!). ... ) [[1,1,1]...] 3
.f=
vor der zweiten Zeile hinzu:f=(!!).iterate...
speichere beide Zeilen in einer Datei und lade sie überl: <filename.hs>
. Dann können Sie anrufenf [[1,1,1],[2,3,4]] 3
, etc.CJam,
1716 BytesDas Eingabeformat ist zuerst die Matrix (als 2D-Array im CJam-Stil) und danach die Anzahl der Iterationen.
Teste es hier.
Erläuterung
Es stellt sich heraus, dass dies die gleiche Lösung ist wie die aller anderen:
quelle
Im Ernst, 20 Bytes
Übernimmt dann die Eingabe der Matrix (als 2D-Liste)
N
. Gibt eine 2D-Liste aus.Diese Version funktioniert aus irgendeinem Grund nicht mit dem Online-Interpreter, funktioniert jedoch mit diesem Pre-Challenge-Commit .
Eine online funktionierende Version für 23 Bytes:
Nimmt die Eingabe in umgekehrter Reihenfolge vor (
N
dann Matrix).Probieren Sie es online!
Ich werde eine Erklärung hinzufügen, nachdem ich eine Weile geschlafen habe. Das Umgehen von Interpreter-Fehlern macht niemals Spaß.
quelle
Pyth,
1312 BytesProbieren Sie es online aus. Testsuite.
Verwendet den gleichen Algorithmus für die meisten Antworten. Nimmt als Eingabe die Matrix als 2D-Array in der ersten Zeile und
n
in der zweiten Zeile.Erläuterung
quelle
Matlab, 60 Bytes
Ich habe zuerst mit Matlabs ausgefallenen Indizierungsmethoden rumgespielt,
A(end+1,:)=sum...
bevor ich herausgefunden habe, dass in diesem seltenen Fall eine einfache Verkettung in Matlab tatsächlich günstiger ist. Schade, dass ich dies in eine tatsächliche Funktion umwandeln musste. Sollte auch mit Octave funktionieren.Ich nehme an, dies ist ein hervorragendes Beispiel dafür, wie man keine Algorithmen erstellt. Für A = 2x2, n = 1000 dauert dieser Algorithmus auf meinem Laptop bereits 5 Sekunden, n = 2000 sind es fast 50 Sekunden! (oder ungefähr 30s, wenn A ein
gpuArray
Dank an meinen vertrauenswürdigen Quadro 1000M ist)quelle
f([0,1;2,3],1000)
f.m
. 2) Starten Sieoctave
. 3) Einfügenload f.m; f([1,1,1;2,3,4],3)
in die REPL-Eingabeaufforderung - funktioniert bei mir.Java, 2179 Bytes
Es ist einfach geklappt: - Dieser Code ist in Java-Sprache.
quelle
{}
oben im Bearbeitungsfeld auf. Dadurch wird das Präfix automatisch eingefügt.Python, 103
105BytesDie anonyme Funktion übernimmt die Liste der Listen und übergibt sie an die rekursive Funktion
f
. Die Ausgabe wird transponiert und dann an übergebenf
erneut weitergeleitet. Anschließend wird die Ausgabe des zweiten Durchgangs erneut transponiert. Die Ausgabe ist eine Liste von TupelnZwei Bytes dank Bakuriu gespeichert
quelle
n>0
könnte einfach seinn
, da man mit einem positiven anfängtn
und wenn man0
seinen wert erreicht falsch ist.APL (Dyalog Classic) , 17 Byte
Probieren Sie es online!
quelle
Perl 6 ,
87 7371 BytesVerwendung:
quelle
perl6
gibt mir einige Fehler . Ich bin ein Perl-Anfänger - was mache ich falsch?my &code = ->\c,\m{ … }
, dass deutlich wird, dass->\c,\m{ … }
der Code durch den obigen Code ersetzt werden muss. Normalerweise verwende ich implizite$_
oder@_
explizite Platzhalterparameter,$^a
da diese in der Regel kürzer sind. Ich habe nur nicht darüber nachgedacht.$*PERL.compiler.version !before 2015.12
m:
und ein Leerzeichen voranstellen ). Sie können