Загорніть сезонний подарунок


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 числовий масив 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


Який вихід є прийнятним. Потрібно, щоб це була структура даних з тривимірного масиву або це текстовий вихід прийнятний
Rohan Jhunjhunwala

@RohanJhunjhunwala Ви можете вільно обирати представлення, але формати введення та виведення повинні бути однаковими.
Adám

Відповіді:


8

J , 16 15 байт

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

Це анонімне дієслово. Спробуйте в Інтернеті!

Дякуємо Адаму за 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=.,,[
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]

Де aтривимірний масив і eє обгортка. Автоматично перетворює двовимірний масив рядків у тривимірний масив символів. Альтернативна версія, коли 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.
Адам

@ 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

за замовчуванням функціональна панель на 0
rahnema1

@ rahnema1 Отже, що робити, якщо прокладка дорівнює 42, або "Z"?
Адам

О ... відповідь оновлена, включаючи 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 Gotcha, я неправильно інтерпретував (хе-хе) специфікацію. Зараз трохи довше, але насправді це працює правильно> repl.it/Eu4M/4
TidB

Нічого собі, тепер ви вийшли за межі специфікацій, вам не потрібно було обробляти справу зі змішаними типами даних.
Адам

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-масив і обгортаючий символ як аргументи.

  • Спочатку створюється тривимірний вихідний масив правильного розміру, заповнений символом обгортки.
  • Потім він використовує синтаксис фрагмента масиву, щоб призначити значення вихідного масиву правильним слотам нового масиву одним махом.

3

Діялог АПЛ , 31 19 13 12 байт

Майже транслітерація розчину @ Zgarb (31 байт) .

Анонімна функція. Лівий аргумент обгортає, правий аргумент - подарунок.

h1h2(h←⍪⍪⊣)

⊣h⍤1 h застосовано з лівим аргументом анонімної функції до стовпців

⊣h⍤2 h застосовано з лівим аргументом анонімної функції до рядків

h← h застосовується до основних комірок, тобто шарів аргументів анонімної функції, де h є

лівий аргумент випереджав праворуч

претендував на

лівий аргумент

Іншими словами, h - функція, яка оточує правий аргумент (подарунок) лівим аргументом (обгорткою). h застосовується до шарів подарунка, потім до рядків і, нарешті, до стовпців цього.

СпробуйтеAPL онлайн!


Це рішення Dyalog APL версії 16.0 (19 байт - люб’язно @ngn ) обробляє будь-яку кількість вимірів:

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

подарунок

@( розміщений на

1+ один плюс

всі показники

⍴⍵ форма подарунка

)⊢ в масиві, що складається з

⍺⍴⍨ обгортку переробили у форму

2+ два додано до

⍴⍵ форма подарунка

Іншими словами, ми створюємо масив повністю з елементів обгортки, який у кожному вимірі є на два елементи більшим, ніж подарунок, потім розміщуємо подарунок у цей масив (таким чином замінюючи обгорткові елементи в цих положеннях) на зміщення одного від одного краї, тобто в центрі.


Мій власний винахід (-1 завдяки @ngn ):

(⌽2 3 1⍉,)⍣6

Це стосується анонімного тренінгу функцій 6 разів, кожен раз із обгорткою як лівим аргументом, а результат попередньої програми як аргумент праворуч (хоча перший раз навколо нього буде немодифікований подарунок):

( анонімний потяг функцій

зворотні стовпці з

2 3 1⍉ перенесення рядків до шарів, стовпців до рядків, переміщення шарів до стовпців

, обгортка з подарунком

)⍣6 застосовується шість разів

Іншими словами, ми додаємо шар обгортки у верхній частині масиву, потім обмотуємо його так, щоб наступна сторона поверталася у положення верхнього шару, готова до чергового раунду обгортання. Це повторюється шість разів, остаточне викривлення переставляє всі осі за початковим порядком.

СпробуйтеAPL онлайн!



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}

Чи я колись казав вам, що я тільки тут, щоб вивчити рубін? :-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.