Pour chaque ligne puis colonne d'une matrice, nous pouvons ajouter une entrée supplémentaire avec la somme des deux dernières entrées de cette ligne ou colonne. Par exemple avec la matrice d'entrée suivante:
[ 1 1 1 ]
[ 2 3 4 ]
La matrice résultante serait:
[ 1 1 1 2 ]
[ 2 3 4 7 ]
[ 3 4 5 9 ]
Étant donné une entrée d'un entier N et une matrice [X, Y] de taille au moins 2x2, effectuez l'expansion N ci-dessus et sortez le résultat. La matrice résultante sera toujours de taille [X + N, Y + N].
Exemples:
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
temps que de boucler deuxN
fois?2*
(notation postfixée). Peut-être qu'il devrait avoir un caractère intégré, il est souvent utilisé. Aussi2^
(carré). Mais je manque d'espace de code :-)J, 19 octets
Cela définit un adverbe, qui prend le nombre à sa gauche, et produit un verbe prenant la matrice à sa droite. Pour le deuxième exemple, il donne
Explication
la source
K, 23 octets
En action:
Essayez-le ici .
la source
{x
y}
Gelée,
151312 octets-1 octet par @Dennis
Comme la réponse MATL de @ LuisMendo, cela transpose le tableau avant de faire la transformation le long d'un axe. Par conséquent, nous devons appeler la fonction 2 * n fois.
Essayez-le ici .
la source
ES6, 134 octets
Explication:
la source
Haskell, 67 octets
Exemple d'utilisation:
Comment ça marche:
la source
sudo apt-get install haskell-platform
et exécute leghci
REPL qui me donne unePrelude>
invite. Quand je colle,o%m=m++[o(+)(last m)$last$init m]
je reçois<interactive>:2:4: parse error on input '='
. Pouvez-vous me donner une petite introduction soit en exécutant cela à partir d'un fichier source ou dans le REPL?o%m=...
ligne (et seulement cette ligne) dans un fichier appelé, disonsfib-matrix.hs
. Ensuite, vous pouvez utiliser la:l fib-matrix.hs
commande inghci
pour charger les définitions et appeler la fonction principale comme décrit dans mon exemple d'utilisation. - Ou utiliserlet o%m=... in ( (!!). ... ) [[1,1,1]...] 3
.f=
devant la deuxième ligne :,f=(!!).iterate...
enregistrez les deux lignes dans un fichier et chargez-le vial: <filename.hs>
. Ensuite, vous pouvez appelerf [[1,1,1],[2,3,4]] 3
, etc.CJam,
1716 octetsLe format d'entrée est la matrice en premier (sous forme de tableau 2D de type CJam) et le nombre d'itérations par la suite.
Testez-le ici.
Explication
Il s'avère que c'est la même solution que tout le monde:
la source
Sérieusement, 20 octets
Prend alors la matrice (comme une liste 2D)
N
. Génère une liste 2D.Cette version ne fonctionne pas sur l'interpréteur en ligne pour une raison quelconque, mais fonctionne avec cette validation préalable au défi .
Une version qui fonctionne en ligne, pour 23 octets:
Prend l'entrée dans l'ordre opposé (
N
, puis matrice).Essayez-le en ligne!
J'ajouterai une explication après un peu de sommeil. Travailler autour des bogues de l'interpréteur n'est jamais amusant.
la source
Pyth,
1312 octetsEssayez-le en ligne. Suite de tests.
Utilise le même algorithme pour la plupart des réponses. Prend en entrée la matrice comme un tableau 2D sur la première ligne et
n
sur la deuxième ligne.Explication
la source
Matlab, 60 octets
J'étais d'abord en train de jouer avec les méthodes d'indexation sophistiquées de Matlab (c'est-à-dire
A(end+1,:)=sum...
) avant de penser que dans ce cas rare, la concaténation simple est en fait moins chère dans Matlab. Dommage que j'ai dû convertir cela en une fonction réelle. Devrait également fonctionner avec Octave.Je suppose que c'est un excellent exemple de la façon de ne pas créer d'algorithmes. Pour A = 2x2, n = 1000 cet algorithme prend déjà 5 secondes sur mon portable, n = 2000 c'est presque 50 secondes! (ou environ 30s si A est un
gpuArray
merci à mon fidèle Quadro 1000M)la source
f([0,1;2,3],1000)
f.m
. 2) Commencezoctave
. 3) Collerload f.m; f([1,1,1;2,3,4],3)
dans l'invite REPL - fonctionne pour moi.Java, 2179 octets
Juste travaillé: - Ce code est en langage Java.
la source
{}
en haut de la zone d'édition - cela fera automatiquement ce préfixe.Python, 103
105octetsLa fonction anonyme prend la liste des listes et passe à la fonction récursive
f
. La sortie est transposée puisf
repassée, puis la sortie du second go est re-transposée. La sortie est une liste de tuplesSauvegardé deux octets grâce à Bakuriu
la source
n>0
pourrait simplement l'êtren
, puisque vous commencez avec un positifn
et que lorsque vous atteignez0
sa valeur est faux.APL (Dyalog Classic) , 17 octets
Essayez-le en ligne!
la source
Perl 6 ,
87 7371 octetsUsage:
la source
perl6
me donne quelques erreurs . Je suis un novice en Perl - que fais-je de mal?my &code = ->\c,\m{ … }
pour indiquer clairement que les->\c,\m{ … }
besoins doivent être remplacés par le code ci-dessus. J'utilise généralement un paramètre d'espace réservé implicite$_
ou@_
explicite,$^a
car il a tendance à être plus court. Je n'y ai tout simplement pas pensé. Assurez-vous également que vous utilisez une version suffisamment récente ($*PERL.compiler.version !before 2015.12
)m:
et un espace) Vous pouvez également msg camelia directement