包装季节性礼物


21

任务

给定一个包装器元素和一个非锯齿状的3D数组,将数组顶部,底部和四周包裹起来。您必须同时处理字符数据和数字数据,但是包装器和当前数据将具有相同的数据类型。


角色示例

对于字符数据,您可以选择处理单个字符的3D数组或字符串的2D数组:

给定2层2行4列字符数组

[[["Y","o","u","r"],
  ["g","i","f","t"]],

  [["g","o","e","s"],
  ["h","e","r","e"]]]

和字符".",回答4层,4行,6列字符数组

[[[".",".",".",".",".","."],
  [".",".",".",".",".","."],
  [".",".",".",".",".","."],
  [".",".",".",".",".","."]],

 [[".",".",".",".",".","."],
  [".","Y","o","u","r","."],
  [".","g","i","f","t","."],
  [".",".",".",".",".","."]],

 [[".",".",".",".",".","."],
  [".","g","o","e","s","."],
  [".","h","e","r","e","."],
  [".",".",".",".",".","."]],

 [[".",".",".",".",".","."],
  [".",".",".",".",".","."],
  [".",".",".",".",".","."],
  [".",".",".",".",".","."]]]

或给出2行2列的4个字符的字符串数组

[["Your",
  "gift"],

 ["goes",
  "here"]]

和字符".",回答4行4列的6个字符的字符串数组

[["......",
  "......",
  "......",
  "......"],

 ["......",
  ".Your.",
  ".gift.",
  "......"],

 ["......",
  ".goes.",
  ".here.",
  "......"],

 ["......",
  "......",
  "......",
  "......"]]

数值示例

给定2层2行2列数字数组

[[[1,2],
  [3,4]],

 [[5,6],
  [7,8]]]`

和数字0,回答4层,4行,4列数字数组

[[[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]]]

我们可以假设要包装的每个“礼物元素”的长度相同吗?
XavCo7 '16

@ XavCo7是的,可以。
2013年


什么样的输出是可以接受的。需要它是三维数组的数据结构还是文本输出可接受
Rohan Jhunjhunwala

@RohanJhunjhunwala您可以自由选择表示形式,但是输入和输出格式必须相同。
亚当

Answers:


8

J16 15字节

[h"2[h"1 h=.,,[

这是一个匿名动词。在线尝试!

感谢Adám提供1个字节!

说明

[h"2[h"1 h=.,,[  Wrapper is x, present is y.
            ,    Prepend x to y
             ,   then append
              [  x.
                 This gives x y x, and the wrapper automatically spreads to form 2D slices.
         h=.     Save the above operation (not its result) to h.
    [h"1         Apply h to x and every 2D slice of the previous result.
[h"2             Apply h to x and every 1D slice of the result of that.

无法保存一个字节用h=.,,[
亚当

4

JavaScript(ES6),97个字节

(a,e)=>[c=[,,...b=a[0]].fill(d=[,,...b[0]].fill(e)),...a.map(a=>[d,...a.map(a=>[e,...a,e]),d]),c]

a三维数组e是哪里,包装是哪里。自动将字符串的二维数组转换为字符的三维数组。when的替代版本a是一个二维字符串数组,并且e是一个字符,您想返回一个二维字符串数组:

(a,e)=>[c=[,,...a[0]].fill(d=e.repeat(a[0][0].length+2)),...a.map(b=>[c,...b.map(s=>e+s+e),d]),c]

看来这对数字失败e
2013年

@Adám啊,对不起,我可能误解了这个问题。
尼尔,

@Adám幸运的是,新版本的字节数相同,可用于任意元素的三维数组(将字符串自动转换为字符数组)。
尼尔

3

八度,23 27字节

@(a,p)padarray(a,[1 1 1],p)

数组:a
padval:p

它可以被称为:

(@(a,p)padarray(a,[1 1 1],p))([1 2;3 4],40)

Octave Online上尝试(粘贴!)

注意:先前的答案假定为默认padval


看起来它只接受一个参数(数组)。它从哪里获得换行符/数字?
smls '16

默认情况下,功能板为0
rahnema1 '16

@ rahnema1那么如果填充为42或“ Z”怎么办?
2013年

噢...答案已更新,包括PADVAL
rahnema1'1

1
+1我很惊讶有一个内置的功能。
亚当

3

Python,第106个 104 126字节

def w(g,c):x=len(g[0][0])+2;k=[[c*x]*(len(g[0])+2)];return k+[[c*x,*[c+"".join(str(k)for k in j)+c for j in i],c*x]for i in g]+k

称为w(gift, wrapping character)。可以使用字符串和数组符号。在线尝试!


我不知道如何在repl.it上运行它。您可以创建一个链接吗?
2013年

@Adámrepl.it/ Eu4M/1
TidB

谢谢。看起来数值失败。
2013年

@AdámGotcha,我误解了规范。现在稍长一些,但实际上可以正常工作> repl.it/Eu4M/4
TidB

哇,现在您超出了规范,您无需处理混合数据类型的情况。
2013年

3

Perl 6,86位元组

->\a,\w{my @z=[[w xx a[0;0]+2]xx a[0]+2]xx a+2;@z[1..a;1..a[0];1..a[0;0]]=a[*;*;*];@z}

一个以3D数组和换行符作为参数的lambda。

  • 它首先创建正确大小的3D输出数组,并用换行符填充。
  • 然后,它使用数组切片语法,一口气将原始数组的值分配到新数组的正确插槽中。

3

Dyalog APL31 19 13 12 字节

@Zgarb解决方案的几乎音译(31个字节)。

匿名函数。左争论是包装,右争论是礼物。

h1h2(h←⍪⍪⊣)

⊣h⍤1 h使用匿名函数的left参数应用于

⊣h⍤2 用匿名函数的left参数将h应用于

h← h应用于主要单元,即匿名函数的参数层,其中h

左参数在右参数之前

前置于

左参数

换句话说,h是一个函数,其右参数(礼物)与左参数(包装器)包围在一起。然后,将h应用于礼物的图层,然后应用于礼物的行,最后应用于礼物的列。

在线尝试APL!


此Dyalog APL版本16.0解决方案(19字节– @ngn提供)可处理任意多个尺寸:

{⍵@(1+⍳⍴⍵)⊢⍺⍴⍨2+⍴⍵}

礼物

@( 放在

1+ 一加

的所有指数

⍴⍵ 礼物的形状

)⊢ 在由以下组成的数组中

⍺⍴⍨ 包装纸改制成形状

2+ 两个添加到

⍴⍵ 礼物的形状

换句话说,我们创建了一个完全由包装器元素组成的数组,该包装器元素在每个维度上比礼物的尺寸大两个元素,然后将礼物放置到该数组中(从而替换那些位置的包装器元素),其偏移量为边缘,即在中心。


我自己的发明(感谢@ngn -1 ):

(⌽2 3 1⍉,)⍣6

这将应用一次匿名函数训练6次,每次将包装器作为左参数,并将上一个应用程序的结果作为右参数(尽管第一次是未经修改的礼物):

( 匿名功能训练

的反向栏

2 3 1⍉ 行到层,列到行,层到列的换位

, 包装物和礼物

)⍣6 申请六次

换句话说,我们在数组的顶部添加了一层包装器,然后将其扭曲以使下一层旋转到顶层位置,为下一轮包装做准备。重复六次,最后的翘曲将所有轴重新定位到原始顺序。

在线尝试APL!



1

Ruby,89个字节

->a,b{(w=[[z=b*2+a[0][0].tr('^|',b)]*(2+a[0].size)])+a.map{|x|[z]+x.map{|y|b+y+b}+[z]}+w}

我曾经告诉过你我只是在这里学习红宝石吗?:-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.