Para cada linha e depois coluna de uma matriz, podemos adicionar uma entrada extra com a soma das duas últimas entradas nessa linha ou coluna. Por exemplo, com a seguinte matriz de entrada:
[ 1 1 1 ]
[ 2 3 4 ]
A matriz resultante seria:
[ 1 1 1 2 ]
[ 2 3 4 7 ]
[ 3 4 5 9 ]
Dada uma entrada de um número inteiro N e uma matriz [X, Y] de tamanho pelo menos 2x2, execute os tempos de expansão N acima e produza o resultado. A matriz resultante sempre será do tamanho [X + N, Y + N].
Exemplos:
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
tempos do que repetir duasN
vezes?2*
(notação pós-fixada). Talvez deva ter um caractere embutido, é usado com frequência. Também2^
(quadrado). Mas eu estou ficando sem espaço de código :-)J, 19 bytes
Isso define um advérbio, que pega o número à esquerda e produz um verbo usando a matriz à direita. Para o segundo exemplo, ele fornece
Explicação
fonte
K, 23 bytes
Em ação:
Experimente aqui .
fonte
{x
e a finaly}
Geléia,
151312 bytes-1 byte por @Dennis
Como a resposta MATL do @ LuisMendo, isso transpõe o array antes de fazer a transformação ao longo de um eixo. Portanto, precisamos chamar a função 2 * n vezes.
Experimente aqui .
fonte
ES6, 134 bytes
Explicação:
fonte
Haskell, 67 bytes
Exemplo de uso:
Como funciona:
fonte
sudo apt-get install haskell-platform
e estou executando oghci
REPL, que me dá umPrelude>
prompt. Quando coloo%m=m++[o(+)(last m)$last$init m]
, recebo<interactive>:2:4: parse error on input '='
. Você pode me dar uma pequena cartilha executando isso de um arquivo de origem ou no REPL?o%m=...
linha (e somente essa linha) em um arquivo chamado, digamosfib-matrix.hs
. Em seguida, você pode usar o:l fib-matrix.hs
comandoghci
para carregar as definições e chamar a função principal, conforme descrito no meu exemplo de uso. - Ou uselet o%m=... in ( (!!). ... ) [[1,1,1]...] 3
.f=
na frente da segunda linha :,f=(!!).iterate...
salve as duas linhas em um arquivo e carregue-o vial: <filename.hs>
. Então você pode ligarf [[1,1,1],[2,3,4]] 3
, etc.CJam,
1716 bytesO formato de entrada é a matriz primeiro (como uma matriz 2D no estilo CJam) e o número de iterações posteriormente.
Teste aqui.
Explicação
Acontece que esta é a mesma solução que todos os outros:
fonte
Sério, 20 bytes
Leva a matriz (como uma lista 2D), então
N
. Produz uma lista 2D.Esta versão não funciona no intérprete online por algum motivo, mas funciona com esse commit pré-desafio .
Uma versão que funciona online, por 23 bytes:
Recebe a entrada na ordem oposta (
N
e depois na matriz).Experimente online!
Vou adicionar uma explicação depois de dormir um pouco. Trabalhar com erros de intérprete nunca é divertido.
fonte
Pitão,
1312 bytesExperimente online. Suíte de teste.
Usa o mesmo algoritmo para a maioria das respostas. Toma como entrada a matriz como uma matriz 2D na primeira linha e
n
na segunda linha.Explicação
fonte
Matlab, 60 bytes
Eu estava brincando com os métodos sofisticados de indexação do Matlab (ie
A(end+1,:)=sum...
) antes de concluir que, nesse caso raro, a concatenação simples é realmente mais barata no Matlab. Pena que tive que converter isso em uma função real. Também deve funcionar com o Octave.Suponho que este seja um excelente exemplo de como não criar algoritmos. Para A = 2x2, n = 1000, esse algoritmo já leva 5 segundos no meu laptop, n = 2000, são quase 50 segundos! (ou aproximadamente 30s se A for um
gpuArray
agradecimento ao meu fiel Quadro 1000M)fonte
f([0,1;2,3],1000)
f.m
. 2) Iniciaroctave
. 3) Coleload f.m; f([1,1,1;2,3,4],3)
no prompt do REPL - funciona para mim.Java, 2179 bytes
Apenas resolvi: - Este código está na linguagem Java.
fonte
{}
no topo da caixa de edição - isso fará esse prefixo automaticamente.Python, 103
105bytesFunção anônima pega a lista da lista e passa para a função recursiva
f
. A saída é transposta e depois passada paraf
novamente; a saída da segunda passagem é re-transposta. Saída é uma lista de tuplasEconomizou dois bytes graças a bakuriu
fonte
n>0
poderia ser simplesmenten
, já que você começa com um positivon
e quando atinge0
seu valor é falso.APL (Dyalog Classic) , 17 bytes
Experimente online!
fonte
Perl 6 ,
87 7371 bytesUso:
fonte
perl6
me dá alguns erros . Sou iniciante em perl - o que estou fazendo de errado?my &code = ->\c,\m{ … }
para deixar claro que ele->\c,\m{ … }
precisa ser substituído pelo código acima. Eu geralmente uso parâmetros de espaço reservado implícitos$_
ou@_
explícitos,$^a
porque eles tendem a ser mais curtos. Eu simplesmente não pensei nisso. Também certifique-se que você está usando uma nova versão suficiente ($*PERL.compiler.version !before 2015.12
)m:
e um espaço) Você também pode camelia msg diretamente