계절 선물 포장


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","."],
  [".",".",".",".",".","."]],

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

또는 4 문자 문자열의 2 행, 2 열 배열이 주어지면

[["Your",
  "gift"],

 ["goes",
  "here"]]

그리고 문자 "."는 6 개의 문자열로 구성된 4 개의 행, 4 개의 열 배열에 응답합니다.

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

 ["......",
  ".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

@ XavCo7 그렇습니다.
Adám


어떤 종류의 출력이 허용되는지. 그것은 세 D 어레이의 자료 구조이거나 텍스트 출력을 받아 들일 필요
로한 Jhunjhunwala

@RohanJhunjhunwala 자유롭게 표현을 선택할 수 있지만 입력 및 출력 형식은 동일해야합니다.
Adám

답변:


8

J , 16 15 바이트

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

이것은 익명의 동사입니다. 온라인으로 사용해보십시오!

1 바이트의 Adám에 감사합니다!

설명

[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=.,,[
Adám

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]

a3 차원 배열은 어디에 e있고 래퍼입니다. 2 차원 문자열 배열을 3 차원 문자 배열로 자동 변환합니다. when a에 대한 대체 버전 은 2 차원 문자열 배열이며 e문자이며 2 차원 문자열 배열을 리턴하려고합니다.

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

numeric에서 실패한 것 같습니다 e.
Adám

@ Adám Ah, 죄송합니다. 질문을 오해했을 수도 있습니다.
Neil

@ Adám 다행히도 동일한 바이트 수의 새로운 버전은 임의의 요소로 구성된 3 차원 배열에서 작동합니다 (문자열을 문자 배열로 자동 변환).
Neil

3

옥타브, 23 27 바이트

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

정렬: a
패드 :p

다음과 같이 호출 할 수 있습니다.

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

시도 (붙여 넣기!) Octave Online

참고 : 이전 답변은 기본 padval로 가정


단일 인수 (배열) 만 허용하는 것처럼 보입니다. 랩핑 문자 / 번호는 어디서 얻습니까?
smls

기본적으로 기능 패드는 0에 의해
rahnema1

@ rahnema1 그렇다면 패딩이 42 또는 "Z"이면 어떻게됩니까?
Adám

아 ... 대답은 PADVAL을 포함하여 업데이트
rahnema1

1
+1 정확히 내장 된 것이 놀랍습니다.
Adám

3

파이썬 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에서 이것을 실행하는 방법을 알 수 없었습니다. 링크를 만들 수 있습니까?
Adám


감사. 숫자가 실패한 것 같습니다 .
Adám

@ Adám Gotcha, 나는 사양을 잘못 해석했다. 약간 더 길지만 실제로 제대로 작동합니다.> repl.it/Eu4M/4
TidB

와우, 이제 스펙을 넘어서서, 혼합 된 데이터 유형의 경우를 처리 할 필요가 없었습니다.
Adám

3

펄 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 배열을 취하고 문자를 인수로 감싸는 람다.

  • 먼저 래핑 문자로 채워진 올바른 크기의 3D 출력 배열을 만듭니다.
  • 그런 다음 배열 슬라이스 구문을 사용하여 원본 배열의 값을 새 배열의 올바른 슬롯에 할당합니다.

3

Dyalog APL , 31 19 13 12 바이트

@Zgarb 솔루션 의 음역 (31 바이트) .

익명의 기능. 왼쪽 주장은 포장이고, 오른쪽 주장은 선물입니다.

h1h2(h←⍪⍪⊣)

⊣h⍤1 h 는 익명 함수의 왼쪽 인수와 함께

⊣h⍤2 h 는 익명 함수의 왼쪽 인수와 함께

h← h 는 주요 셀, 즉 익명 함수 인수의 계층에 적용됩니다. 여기서 h

왼쪽 인수 앞에 오른쪽 인수

접두사

왼쪽 논쟁

다시 말해, h 는 오른쪽 인수 (선물)와 왼쪽 인수 (랩퍼)를 둘러싸는 함수입니다. 그런 다음 h 는 선물의 레이어, 그 행, 마지막으로 그 열에 적용됩니다.

TryAPL 온라인!


이 Dyalog APL 버전 16.0 솔루션 (19 바이트 – @ngn 제공 )은 모든 차원을 처리합니다.

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

선물

@( 에 배치

1+ 하나 더하기

모든 지수

⍴⍵ 선물의 모양

)⊢ 배열로 구성된

⍺⍴⍨ 래퍼가 모양으로 재구성

2+ 두개 추가

⍴⍵ 선물의 모양

다시 말해, 모든 차원에서 선물보다 두 개의 요소가 더 큰 래퍼 요소로 구성된 배열을 만든 다음 선물을 해당 배열에 배치합니다 (따라서 해당 위치의 래핑 요소를 대체 함). 가장자리, 즉 중앙.


내 자신의 발명품 (-1 @ngn 덕분에 ) :

(⌽2 3 1⍉,)⍣6

이것은 매번 래퍼를 왼쪽 인수로하고 이전 응용 프로그램의 결과를 오른쪽 인수로 사용하여 익명 함수 트레인을 6 번 적용합니다 (처음으로 수정되지 않은 선물이더라도).

( 익명의 함수 기차

반대 열

2 3 1⍉ 행에서 레이어로, 열에서 행으로, 레이어에서 열로의 전치

, 포장지와 선물

)⍣6 여섯 번 적용

다시 말해, 배열 상단에 래퍼 레이어를 추가 한 후 다음면이 맨 위 레이어 위치로 회전하여 다른 래핑을 준비 할 수 있도록 워프합니다. 이 과정은 6 번 반복되며, 최종 워핑은 모든 축을 원래 순서로 재배치합니다.

TryAPL 온라인!



1

루비, 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}

루비를 배우기 위해 내가 여기 있다고 말한 적이 있습니까? :-)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.