Tarefa
Dado um elemento de invólucro e uma matriz 3D não irregular, envolva a matriz na parte superior, inferior e geral. Você deve manipular dados de caracteres e numéricos, mas o wrapper e o presente terão o mesmo tipo de dados.
Exemplo de personagem
Para dados de caracteres, você pode optar por manipular matrizes 3D de caracteres únicos ou matrizes 2D de cadeias de caracteres:
Dada a matriz de caracteres de 2 camadas, 2 linhas e 4 colunas
[[["Y","o","u","r"],
["g","i","f","t"]],
[["g","o","e","s"],
["h","e","r","e"]]]
e o caractere "."
, responda à matriz de caracteres de 4 camadas, 4 linhas e 6 colunas
[[[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".","Y","o","u","r","."],
[".","g","i","f","t","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".","g","o","e","s","."],
[".","h","e","r","e","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."]]]
ou com a matriz de 2 linhas e 2 colunas de cadeias de caracteres de 4 caracteres
[["Your",
"gift"],
["goes",
"here"]]
e o caractere "."
, responda a matriz de 4 linhas e 4 colunas de sequências de 6 caracteres
[["......",
"......",
"......",
"......"],
["......",
".Your.",
".gift.",
"......"],
["......",
".goes.",
".here.",
"......"],
["......",
"......",
"......",
"......"]]
Exemplo numérico
Dada a matriz numérica de 2 camadas, 2 linhas e 2 colunas
[[[1,2],
[3,4]],
[[5,6],
[7,8]]]`
e o número 0
, responda à matriz numérica de 4 camadas, 4 linhas e 4 colunas
[[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]],
[[0,0,0,0],
[0,1,2,0],
[0,3,4,0],
[0,0,0,0]],
[[0,0,0,0],
[0,5,6,0],
[0,7,8,0],
[0,0,0,0]],
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]]
Respostas:
J ,
1615 bytesEste é um verbo anônimo. Experimente online!
Obrigado a Adám por 1 byte!
Explicação
fonte
h=.,,[
JavaScript (ES6), 97 bytes
Onde
a
está a matriz tridimensional ee
o invólucro. Converte automaticamente uma matriz bidimensional de seqüências de caracteres em uma matriz tridimensional de caracteres. Versão alternativa para quandoa
é uma matriz bidimensional de cadeias ee
é um caractere e você deseja retornar uma matriz bidimensional de cadeias:fonte
e
.Oitava,
2327 bytesmatriz:
a
padval:
p
Pode ser chamado como:
tente (cole!) no Octave Online
nota: resposta anterior assumida padval padrão
fonte
Python,
106104126 bytesChamado como
w(gift, wrapping character)
. Pode usar a string e a notação da matriz. Experimente online!fonte
Perl 6, 86 bytes
Um lambda que usa a matriz 3D e o caractere de quebra automática como argumentos.
fonte
Dyalog APL ,
31191312 bytesQuase uma transliteração (31 bytes) da solução do @ Zgarb .
Uma função anônima. O argumento da esquerda está encerrando, o argumento da direita é presente.
⊣h⍤1
h aplicado, com o argumento esquerdo da função anônima, às colunas de⊣h⍤2
h aplicado, com o argumento esquerdo da função anônima, às linhas deh←
h aplicado às células principais, isto é, as camadas dos argumentos da função anônima, onde h é⍪
o argumento da esquerda precedido pelo argumento da direita⍪
anexado a⊣
o argumento da esquerdaEm outras palavras, h é uma função que envolve o argumento correto (o presente) com o argumento esquerdo (o invólucro). h é então aplicado às camadas do presente, depois às linhas e, finalmente, às colunas.
TryAPL online!
Esta solução Dyalog APL versão 16.0 (19 bytes - cortesia de @ngn ) lida com qualquer número de dimensões:
⍵
o presente@(
colocado em1+
um mais⍳
todos os índices de⍴⍵
a forma do presente)⊢
na matriz que consiste em⍺⍴⍨
o invólucro reformulado para a forma2+
dois adicionados a⍴⍵
a forma do presenteEm outras palavras, criamos uma matriz inteiramente de elementos de invólucro, que em todas as dimensões são dois elementos maiores que o presente, em seguida, colocamos o presente nessa matriz (substituindo assim os elementos de invólucro nessas posições) em um deslocamento de um do bordas, ou seja, no centro.
Minha própria invenção (-1 graças a @ngn ):
Isso aplica um trem de função anônimo 6 vezes, sempre com o wrapper como argumento à esquerda e o resultado do aplicativo anterior como argumento à direita (embora a primeira vez seja o presente não modificado):
(
um trem de função anônimo⌽
colunas reversas de2 3 1⍉
a transposição de linhas para camadas, colunas para linhas, camadas para colunas de,
o invólucro seguido pelo presente)⍣6
aplicado seis vezesEm outras palavras, adicionamos uma camada de invólucro na parte superior da matriz e, em seguida, deformamos para que o próximo lado seja girado na posição da camada superior, pronto para outra rodada de embrulho. Isso é repetido seis vezes, com a deformação final reposicionando todos os eixos na ordem original.
TryAPL online!
fonte
05AB1E ,
343331 bytesExperimente online! (string) ou Experimente online! (numérico)
fonte
Ruby, 89 bytes
Já te disse que só estou aqui para aprender rubi? :-)
fonte