Sezonluk bir hediye verin


21

Görev

Bir sarıcı eleman ve pürüzlü olmayan bir 3D dizisi verildiğinde, dizinin üst, alt ve etrafını sarın. Hem karakter hem de sayısal verileri işlemelisiniz, ancak paketleyici ve hediye aynı veri türüne sahip olur.


Karakter örneği

Karakter verileri için, ya tek karakterli 3D dizileri ya da dizelerin 2D dizilerini kullanmayı seçebilirsiniz:

2 kat, 2 satır, 4 sütun karakter dizisi göz önüne alındığında

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

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

ve karakter ".", 4 kat, 4 satır, 6 sütun karakter dizisini cevaplayın.

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

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

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

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

veya 2 satır, 4 karakterli dizelerin 2 sütun dizisini verilen

[["Your",
  "gift"],

 ["goes",
  "here"]]

ve karakter ".", 4 satır, 6 karakterli dizelerin 4 sütun dizisini cevaplayın.

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

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

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

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

Sayısal örnek

2 kat, 2 satır, 2 sütun sayısal dizi göz önüne alındığında

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

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

ve sayı 0, 4 katman, 4 satır, 4 sütun nümerik diziyi cevaplayın.

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

Sarılacak her "hediye elemanı" nın uzunluğunun aynı olduğunu varsayabilir miyiz?
XavCo7

@ XavCo7 Evet yapabilirsiniz.
Adam


Ne tür bir çıktı kabul edilebilir. Üç boyutlu bir dizinin veri yapısı mı olmalı yoksa metin çıktısı kabul edilebilir mi
Rohan Jhunjhunwala

@RohanJhunjhunwala Temsilciliği özgürce seçebilirsiniz, ancak giriş ve çıkış formatları aynı olmalıdır.
17’de

Yanıtlar:


8

J , 16 15 bayt

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

Bu isimsiz bir fiildir. Çevrimiçi deneyin!

Adám'a 1 bayt için teşekkürler!

açıklama

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

Eğer bir byte kaydedilemedih=.,,[
Adam

4

JavaScript (ES6), 97 bayt

(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Üç boyutlu dizi ve esarıcı nerede . İki boyutlu bir dizi dizisini otomatik olarak üç boyutlu bir karakter dizisine dönüştürür. Ne zaman için alternatif sürüm aiki boyutlu bir dizi dizisidir ve ebir karakterdir ve iki boyutlu bir dizi dizisi döndürmek istersiniz:

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

Sayısal olarak başarısız olmuş gibi görünüyor e.
21

@ Adám Ah, üzgünüm, soruyu yanlış anlamış olabilirim.
Neil

@ Adám Yeni sürüm, neyse ki aynı bayt sayısı, rastgele öğelerin üç boyutlu dizileri üzerinde çalışır (dizeleri otomatik olarak karakter dizilerine dönüştürür).
Neil,

3

Octave, 23 27 bayt

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

dizi: a
padval:p

Olarak adlandırılabilir:

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

dene (yapıştır!) Octave Online'da

not: önceki cevap varsayılan değer olarak kabul edildi


Bu, yalnızca tek bir argümanı (dizi) kabul ettiği anlaşılıyor. Kaydırma karakterini / numarasını nereden alıyor?
16'da

fonksiyon
panelini

@ rahnema1 Peki ya dolgusu 42, ya da "Z" ise?
AdAm

Oh ... cevap PADVAL dahil güncellendi
rahnema1

1
+1 Bunun için bir yerleşik olduğuna şaşırdım.
21’de

3

Python, 106 104 126 bayt

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

Denir w(gift, wrapping character). Dize ve dizi gösterimini kullanabilir. Çevrimiçi deneyin!


Bunun repl.it'de nasıl çalıştırılacağını çözemedim. Bir link oluşturabilir misiniz?
Saat


Teşekkürler. Sayısal başarısız gibi görünüyor .
39'da

@ Adám Gotcha, spesifikasyonu yanlış yorumladım (hehe). Şimdi biraz daha uzun, ama aslında doğru çalışıyor> repl.it/Eu4M/4
TidB

Vay canına, şimdi özelliklerin ötesine geçtiniz, karışık veri tipleri durumuyla ilgilenmenize gerek yoktu.
Aralık'ta

3

Perl 6, 86 bayt

->\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}

3B diziyi ve sarma karakterini argüman olarak alan bir lambda.

  • Önce, sarma karakteriyle dolu, doğru boyutta bir 3D çıktı dizisi yaratır.
  • Ardından, orijinal dizinin değerlerini tek bir baskın halinde yeni dizinin doğru yuvalarına atamak için dizi dilimi sözdizimini kullanır.

3

Dyalog APL , 31 19 13 12 bayt

Neredeyse @ Zgarb'ın çözümünün çevirisi (31 bayt) .

Anonim bir işlev. Sol argüman sarma, sağ argüman hediyedir.

h1h2(h←⍪⍪⊣)

⊣h⍤1 h , anonim işlevin sol argümanıyla, sütunlarına uygulanır.

⊣h⍤2 h , adsız işlevin sol argümanıyla satırlarına uygulanır.

h← h burada, anonim fonksiyon argümanlarının tabakaları, yani ana hücrelere tatbik h olan

sol argüman sağ argümana hazırlandı

için hazır

sol argüman

Başka bir deyişle, h , sağ argümanını (armağan) sol argümanıyla (sarıcı) çevreleyen bir fonksiyondur. h , hediyenin katmanlarına, ardından satırlarına ve son olarak da sütunlarına uygulanır.

TryAPL çevrimiçi!


Bu Dyalog APL sürüm 16.0 çözümü (19 bayt - @ngn'in izniyle ) herhangi bir sayıda boyutu ele alır:

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

hediye

@( yerleştirildi

1+ bir artı

tüm endeksleri

⍴⍵ hediye şekli

)⊢ oluşan dizide

⍺⍴⍨ sarıcı şekle yeniden şekillendiriyor

2+ iki kişi eklendi

⍴⍵ hediye şekli

Başka bir deyişle, her boyutta armağandan iki eleman daha büyük olan tamamıyla sargı elemanlarından oluşan bir dizi yaratırız, sonra armağanı ardı ardına armağan olarak bu arsaya yerleştiririz (böylece sargı elemanlarını bu konumlardaki yerine) kenarlar, yani merkezde.


Kendi icatım ( @ngn sayesinde -1 ):

(⌽2 3 1⍉,)⍣6

Bu, her defasında sarıcı sol argüman olarak ve bir önceki uygulamanın doğru argüman olarak sonucunu veren anonim bir fonksiyon treni uygular (ilk defa değiştirilmemiş hediye olmasına rağmen).

( anonim bir fonksiyon treni

sütunlarını ters çevir

2 3 1⍉ satırlar-katmanlar, sütunlar-satırlar, katmanlar-sütunlar transpozisyonu

, sarıcı hediye izledi

)⍣6 altı kez uygulandı

Başka bir deyişle, dizinin üstüne bir sarmalayıcı katmanı ekleriz, sonra bir sonraki tarafın başka bir sarmalama turuna hazır olacak şekilde üst tabaka konumuna döndürülecek şekilde bükün. Bu, altı kez tekrarlanır, son çözgü tüm eksenleri orijinal sıraya göre yeniden konumlandırır.

TryAPL çevrimiçi!



1

Ruby, 89 bayt

->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}

Sana daha önce sadece ruby ​​öğrenmek için geldiğimi söylemiş miydim? :-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.