Tarea
Dado un elemento envoltorio y una matriz 3D no irregular, envuelva la matriz en la parte superior, inferior y completa. Debe manejar los datos numéricos y de caracteres, pero el contenedor y el presente tendrán el mismo tipo de datos.
Ejemplo de personaje
Para los datos de caracteres, puede elegir manejar matrices 3D de caracteres individuales o matrices 2D de cadenas:
Dada la matriz de caracteres de 2 capas, 2 filas y 4 columnas
[[["Y","o","u","r"],
["g","i","f","t"]],
[["g","o","e","s"],
["h","e","r","e"]]]
y el carácter "."
, responda la matriz de caracteres de 4 capas, 4 filas y 6 columnas
[[[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".","Y","o","u","r","."],
[".","g","i","f","t","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".","g","o","e","s","."],
[".","h","e","r","e","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."]]]
o dada la matriz de 2 filas y 2 columnas de cadenas de 4 caracteres
[["Your",
"gift"],
["goes",
"here"]]
y el carácter "."
, responda la matriz de 4 filas y 4 columnas de cadenas de 6 caracteres
[["......",
"......",
"......",
"......"],
["......",
".Your.",
".gift.",
"......"],
["......",
".goes.",
".here.",
"......"],
["......",
"......",
"......",
"......"]]
Ejemplo numérico
Dada la matriz numérica de 2 capas, 2 filas y 2 columnas
[[[1,2],
[3,4]],
[[5,6],
[7,8]]]`
y el número 0
, responda la matriz numérica de 4 capas, 4 filas, 4 columnas
[[[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]]]
Respuestas:
J ,
1615 bytesEste es un verbo anónimo. Pruébalo en línea!
¡Gracias a Adám por 1 byte!
Explicación
fuente
h=.,,[
JavaScript (ES6), 97 bytes
¿Dónde
a
está la matriz tridimensional ye
es el contenedor? Convierte automáticamente una matriz bidimensional de cadenas en una matriz tridimensional de caracteres. Versión alternativa para cuandoa
es una matriz bidimensional de cadenas ye
es un carácter y desea devolver una matriz bidimensional de cadenas:fuente
e
.Octava,
2327 bytesmatriz:
a
padval:
p
Se puede llamar como:
pruébalo (pégalo) en Octave Online
nota: la respuesta anterior asumió el padval predeterminado
fuente
Python,
106104126 bytesLlamado como
w(gift, wrapping character)
. Puede usar la cadena y la notación de matriz. Pruébalo en línea!fuente
Perl 6, 86 bytes
Una lambda que toma la matriz 3D y el carácter envolvente como argumentos.
fuente
Dyalog APL ,
31191312 bytesCasi una transliteración (31 bytes) de la solución de @ Zgarb .
Una función anónima. El argumento izquierdo es envolvente, el argumento derecho es un regalo.
⊣h⍤1
h aplicado, con el argumento izquierdo de la función anónima, a las columnas de⊣h⍤2
h aplicado, con el argumento izquierdo de la función anónima, a las filas deh←
h aplicado a las celdas principales, es decir, las capas de los argumentos de la función anónima, donde h es⍪
el argumento izquierdo antepuso al argumento derecho⍪
antepuesto a⊣
el argumento izquierdoEn otras palabras, h es una función que rodea su argumento derecho (el regalo) con su argumento izquierdo (el contenedor). h luego se aplica a las capas del regalo, luego a las filas de eso y finalmente a las columnas de eso.
TryAPL en línea!
Esta solución Dyalog APL versión 16.0 (19 bytes - cortesía de @ngn ) maneja cualquier cantidad de dimensiones:
⍵
el don@(
colocado en1+
uno más⍳
todos los índices de⍴⍵
la forma del regalo)⊢
en la matriz que consiste en⍺⍴⍨
la envoltura se reformó a la forma2+
dos añadidos a⍴⍵
la forma del regaloEn otras palabras, creamos una matriz completamente de elementos envolventes, que en cada dimensión son dos elementos más grandes que el regalo, luego colocamos el regalo en esa matriz (reemplazando así los elementos envolventes en esas posiciones) en un desplazamiento de uno del bordes, es decir, en el centro.
Mi propio invento (-1 gracias a @ngn ):
Esto aplica un tren de funciones anónimo 6 veces, cada vez con el contenedor como argumento izquierdo, y el resultado de la aplicación anterior como argumento correcto (aunque la primera vez será el regalo sin modificar):
(
un tren de funciones anónimo⌽
columnas inversas de2 3 1⍉
la transposición de filas a capas, columnas a filas, capas a columnas de,
el envoltorio seguido del regalo)⍣6
aplicado seis vecesEn otras palabras, agregamos una capa de envoltura en la parte superior de la matriz, luego la deformamos para que el siguiente lado gire a la posición de la capa superior, listo para otra ronda de envoltura. Esto se repite seis veces, con la deformación final reposicionando todos los ejes al orden original.
TryAPL en línea!
fuente
05AB1E ,
343331 bytesPruébalo en línea! (cadena) o Pruébelo en línea! (numérico)
fuente
Ruby, 89 bytes
¿Te he dicho alguna vez que solo estoy aquí para aprender rubí? :-)
fuente