Zadanie
Biorąc pod uwagę element otoki i nieoszarpaną macierz 3D, owiń górną, dolną i dookoła tablicę. Musisz obsługiwać zarówno dane znakowe, jak i liczbowe, ale opakowanie i teraźniejszość będą miały ten sam typ danych.
Przykład postaci
W przypadku danych o znakach możesz wybrać obsługę zarówno tablic 3D pojedynczych znaków, jak i tablic 2D ciągów znaków:
Biorąc pod uwagę tablicę znaków z 2 warstwami, 2 wierszami i 4 kolumnami
[[["Y","o","u","r"],
["g","i","f","t"]],
[["g","o","e","s"],
["h","e","r","e"]]]
i znak "."
, odpowiedz na 4-warstwową, 4-rzędową, 6-kolumnową tablicę znaków
[[[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".","Y","o","u","r","."],
[".","g","i","f","t","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".","g","o","e","s","."],
[".","h","e","r","e","."],
[".",".",".",".",".","."]],
[[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."],
[".",".",".",".",".","."]]]
lub biorąc pod uwagę tablicę z 2 wierszami i 2 kolumnami zawierającymi 4 znaki
[["Your",
"gift"],
["goes",
"here"]]
i znak "."
, odpowiedz 4-wierszowy, 4-kolumnowy zestaw 6-znakowych ciągów znaków
[["......",
"......",
"......",
"......"],
["......",
".Your.",
".gift.",
"......"],
["......",
".goes.",
".here.",
"......"],
["......",
"......",
"......",
"......"]]
Przykład liczbowy
Biorąc pod uwagę 2-warstwową, 2-rzędową, 2-kolumnową tablicę numeryczną
[[[1,2],
[3,4]],
[[5,6],
[7,8]]]`
i liczbę 0
, odpowiedz na 4-warstwową, 4-rzędową, 4-kolumnową tablicę numeryczną
[[[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]]]
Odpowiedzi:
J ,
1615 bajtówTo jest anonimowy czasownik. Wypróbuj online!
Dzięki Adám za 1 bajt!
Wyjaśnienie
źródło
h=.,,[
JavaScript (ES6), 97 bajtów
Gdzie
a
jest trójwymiarowa tablica ie
jest to opakowanie. Automatycznie konwertuje dwuwymiarową tablicę ciągów na trójwymiarową tablicę znaków. Alternatywna wersja dla whena
jest dwuwymiarową tablicą ciągów ie
jest znakiem, a chcesz zwrócić dwuwymiarową tablicę ciągów:źródło
e
.Oktawa,
2327 bajtówtablica:
a
padval:
p
Można go nazwać:
spróbuj (wklej!) w Octave Online
Uwaga: poprzednia odpowiedź zakładała domyślny padval
źródło
Python,
106104126 bajtówNazywany jako
w(gift, wrapping character)
. Może używać ciągu i notacji tablicowej. Wypróbuj online!źródło
Perl 6, 86 bajtów
Lambda, która jako argument przyjmuje tablicę 3D i znak zawijania.
źródło
Dyalog APL ,
31191312 bajtówPrawie transliteracja (31 bajtów) rozwiązania @ Zgarb .
Anonimowa funkcja. Lewy argument jest zawijany, prawy argument to prezent.
⊣h⍤1
h zastosowano, z lewym argumentem funkcji anonimowej, do kolumn⊣h⍤2
h zastosowano z lewym argumentem funkcji anonimowej do wierszyh←
h zastosowane do głównych komórek, tj. warstw argumentów funkcji anonimowej, gdzie h jest⍪
lewy argument był poprzedzony prawym argumentem⍪
uprzedzony do⊣
lewy argumentInnymi słowy, h jest funkcją, która otacza prawy argument (prezent) lewym argumentem (opakowanie). h jest następnie nakładany na warstwy prezentu, następnie na rzędy, a na końcu na kolumny.
Wypróbuj APL online!
To rozwiązanie Dyalog APL w wersji 16.0 (19 bajtów - dzięki uprzejmości @ngn ) obsługuje dowolną liczbę wymiarów:
⍵
prezent@(
umieszczone na1+
jeden plus⍳
wszystkie wskaźniki⍴⍵
kształt prezentu)⊢
w tablicy składającej się z⍺⍴⍨
opakowanie zmieniło kształt2+
dwa dodane do⍴⍵
kształt prezentuInnymi słowy, tworzymy tablicę złożoną całkowicie z elementów owijających, która w każdym wymiarze jest dwoma elementami większymi niż prezent, następnie umieszczamy prezent w tej tablicy (zastępując w ten sposób elementy opakowaniowe w tych pozycjach) z przesunięciem jednego z krawędzie, tj. w środku.
Mój własny wynalazek (-1 dzięki @ngn ):
Odnosi to 6-krotnie anonimowy ciąg funkcji, za każdym razem z opakowaniem jako lewym argumentem, a wynik poprzedniej aplikacji jako prawym argumentem (chociaż pierwszy raz będzie to niezmodyfikowany prezent):
(
anonimowy ciąg funkcji⌽
odwrotne kolumny2 3 1⍉
transpozycja wierszy do warstw, kolumn do rzędów, warstw do kolumn transpozycji,
opakowanie, a następnie prezent)⍣6
zastosowano sześć razyInnymi słowy, dodajemy warstwę owijki na górze tablicy, a następnie wypaczamy ją, aby następna strona została obrócona do pozycji górnej warstwy, gotowa do kolejnej rundy owijania. Czynność tę powtarza się sześć razy, a ostateczne wypaczenie przestawia wszystkie osie do pierwotnej kolejności.
Wypróbuj APL online!
źródło
05AB1E ,
343331 bajtówWypróbuj online! (string) lub Wypróbuj online! (liczbowy)
źródło
Rubinowy, 89 bajtów
Czy kiedykolwiek mówiłem, że jestem tu tylko po to, żeby uczyć się rubinu? :-)
źródło