Gambarkan piramida keturunan (tambahan)

11

Tantangan

Diberi urutan bilangan bulat non-negatif, buat fungsi yang menghasilkan piramida turunan di mana anak-anak adalah jumlah dari kedua bilangan orang tua.

Hasilnya dikeluarkan sebagai string menggunakan tab \t.

Catatan: trailing tab pada setiap baris tidak diperlukan

1\t\t2\t\t3\n\t3\t\t5\t\n\t\t8\t\t results in 
1       2       3
    3       5   
        8       

Hasil opsional dapat dihasilkan sebagai array menggunakan posisi kosong sebagai ruang.

[[1,,2,,3],
[,3,,5,],
[,,8,,]]

Contoh:

4,5,7,3,4,2Output yang diberikan :

4       5       7       3       4       2
    9       12      10      7       6
        21      22      17      13
            43      39      30
                82      69
                    151

Aturan

  • Aturan standar berlaku
  • Input dapat berupa string menggunakan pemisah atau array apa pun
  • Baris dan tab baris baru / tertinggal diizinkan (tetapi tidak diperlukan sepanjang outputnya adalah piramida terbalik)

Uji Kasus

Input: 1,3,5

1       3       5
    4       8
        12


Input: 9,8,7,6,5

9       8       7       6       5
    17      15      13      11
        32      28      24
            60      52
                112


Input: 5,5,2,5

[[5,,5,,2,,5],
[,10,,7,,7,],
[,,17,,14,,],
[,,,31,,,]]

Input: 3,3,3

[[3,,3,,3],
[,6,,6,],
[,,12,,]]

Kriteria yang menang adalah


Catatan: Tantangan ini sangat dekat dengan Hasilkan segitiga Pascal . Perbedaannya adalah urutan awal kustom (pascal beralih dari 1 dan dalam mode ascendant, ini dari input dan dalam mode turunan).

Posting kotak pasir

Luis felipe De jesus Munoz
sumber
Agak terkait .
AdmBorkBork
non-negative integersapakah kita harus menangani 0? Ada beberapa kemungkinan bermain golf jika ruang kosong diisi dengan 0s.
JungHwan Min
Bisakah kita mengembalikan array dengan tab atau string / array kosong di posisi kosong?
Adám
2
"Memimpin / membuntuti baris dan tab baru diizinkan" - Bolehkah kami menyertakan hasil kosong di bagian bawah juga dalam keluaran array?
Jonathan Allan
1
@JonathanAllan mengikuti baris dan tab baru diizinkan
Adám

Jawaban:

4

APL (Dyalog Unicode) , 31 28 byte SBCS

Fungsi awalan Tacit. Menggunakan satu ruang sebagai penanda slot kosong. Mengembalikan daftar daftar angka / spasi.

⍳∘≢{∊(⍺⍴''),,∘' '¨2+/⍣⍺⊢⍵}¨⊂

Cobalah online!

⍳∘≢{... }¨⊂ menerapkan fungsi di bawah ini untuk masing-masing
yang ɩ ndices  dari  penghitungan dengan
seluruh argumen:

⊢⍵ menghasilkan argumen yang benar (input asli)

2+/⍣⍺ menerapkan jumlah berpasangan sebanyak yang ditunjukkan oleh argumen kiri

,∘' '¨ menambahkan spasi ke setiap nomor

(... ), tambahkan itu sebagai berikut:

  ⍺⍴'' elemen argumen kiri dari string kosong (diisi dengan spasi)

ϵ daftar (ratakan)

Adm
sumber
3

05AB1E , 15 byte

gFD„		ý'	N×ì,ü+

Cobalah online!

Emigna
sumber
Itu banyak ruang ... tab?
JungHwan Min
... atau nol spasi dan beberapa tab: p
Jonathan Allan
Memang, itu adalah tab :)
Emigna
3

Jelly ,  14  13 byte

14 -> 13 mengasumsikan trailing-only entry diperbolehkan dalam format output daftar; jika tidak saya akan kembali ke 14 ( bertanya )

+ƝƬK€z⁶Zṙ"JC$

Tautan monadik. Output adalah daftar daftar yang menggunakan karakter spasi sebagai spasi (termasuk entri spasi spasi tunggal saja).

Cobalah online! (termasuk catatan kaki untuk memperlihatkan struktur daftar karena menjalankan tautan monadik sebagai program lengkap akan mencetak hasil yang hancur secara implisit.)

Jonathan Allan
sumber
3

Sekam , 22 byte

zoΣ~+R"	"oJ"		"msNU¡Ẋ+

Cobalah online!

Penjelasan

z(Σ~+R" "(J"  "ms))NU¡Ẋ+  -- example input: [1,2,3]
                     ¡    -- infinitely do and collect in list
                      Ẋ+  -- | sum adjacent
                          -- : [[1,2,3],[3,5],[8],[],[],...
                    U     -- keep up until first repetition: [[1,2,3],[3,5],[8],[]]
z(                )N      -- zip with natural numbers under (example on 1 [1,2,3])
   ~+    (       )        -- | join arguments modified by
     R" "                 -- | | replicate tab: " "
               ms         -- | | show each: ["1","2","3"]
          J"  "           -- | | join with 2 tabs: ["1","  ","2","  ","3"]
                          -- | : [" ","1","  ","2","  ","3"]
  Σ                       -- | concatenate: " 1  2  3"
                          -- : [" 1  2  3","  3  5","   8"]
ბიმო
sumber
2

JavaScript (ES6), 73 byte

Kode sumber yang aneh ... Pokoknya, itu !

Termasuk spasi putih terkemuka dan tertinggal.

f=(a,p=`
`)=>p+a.join`		`+(1/(y=a.shift())?f(a.map(x=>y+(y=x)),p+`	`):'')

Cobalah online!

Arnauld
sumber
2

Python 3 , 101 93 80 byte

Disimpan 7 byte ( map(str,x)bukan for indan init y as '') dan menyingkirkan baris baru ( x and[bukan print(), terima kasih kepada Jo King .

Disimpan 13 byte ( [*map(sum,zip(x,x[1:]))]bukan [x[j]+x[j+1]for j in range(len(x)-1)]) berkat ovs .

f=lambda x,y='':x and[y+'		'.join(map(str,x))]+f([*map(sum,zip(x,x[1:]))],y+'	')

Cobalah online!

Emigna
sumber
@ovs: Ah, keren. Seharusnya aku sadar bisa memetakan jumlahnya. Terima kasih!
Emigna
1

Retina , 35 byte

+¶<`\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

Cobalah online! Penjelasan:

+

Ulangi sampai buffer berhenti berubah,

¶<`

Cetak isi buffer sebelum substitusi, dengan baris baru tambahan, dan

\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

Ganti satu nomor dengan sepasang tab, tetapi angka diikuti oleh nomor lain dengan tab, jumlah, dan tab lainnya.

Neil
sumber
1

C (dentang) , 112 byte

j,k;f(*i,c){for(j=c+1;--j;puts("")){for(k=c-j;k--;)printf("\t");for(;++k<j;i[k]+=i[k+1])printf("%d\t\t",i[k]);}}

Cobalah online!

ErikF
sumber
Sarankan putchar(9)alih-alihprintf("\t")
ceilingcat
1

Merah , 151 byte

func[b][m: length? b repeat n m[loop n - 1[prin"^-"]print replace/all
form b" ""^-^-"c: copy[]repeat i -1 + length? b[append c b/(i) + b/(i + 1)]b: c]]

Cobalah online!

Lebih mudah dibaca:

f: func [ b ] [
    m: length? b
    repeat n m [
        loop n - 1 [ prin tab ]
        print replace/all form b " " rejoin [ tab tab ]
        c: copy []
        repeat i (length? b) - 1 [
            append c b/(i) + b/(i + 1)
        ]
        b: c
    ]
]
Galen Ivanov
sumber
1

Perl 6 , 50 48 byte

{$_,{say "	"x$++~.join("		");$_[1..*]Z+@$_}...0}

Cobalah online!

Blok kode anonim yang mengambil daftar bilangan bulat dan mencetak piramida terbalik.

Jo King
sumber
1

C # (Visual C # Compiler) , 163 byte

b=>{var s="";var c=b.Length;for(int i=0;i<c;i++){for(int z=0;z<i;z++)s+="\t";for(int x=0;x<c-i;x++){s+=b[x]+"\t\t";b[x]=x==c-i-1?0:b[x]+b[x+1];}s+="\n";}return s;}

Cobalah online!

Dapat dibaca:

b =>    {
            var s = "";
            var c = b.Length;
            for (int i = 0; i < c; i++)
            {
                for (int z = 0; z < i; z++)
                    s += "\t";
                for (int x = 0; x < c - i; x++)
                {
                    s += b[x] + "\t\t";
                    b[x] = x == c - i - 1 ? 0 : b[x] + b[x + 1];
                }
                s += "\n";
            }
            return s;
        }
Hyarus
sumber
1

Japt -Rx , 20 18 byte

Baris kedua termasuk tab tambahan.

Nc¡=ä+
Ëq' ² iEç'  

Cobalah


Penjelasan

                  :Implicit input of array U
N                 :The array of inputs (NOT the input array)
 c                :Concatenate
  ¡               :  Map U
    ä+            :    Consecutive sums of U
   =              :    Reassign to U for next iteration
\n                :Reassign the resulting 2D-array to U
Ë                 :Map each array at index E
 q                :  Join with
  '\t             :   Tab
     ²            :   Repeated twice
       i          :  Prepend
          '\t     :   Tab
         ç        :   Repeated
        E         :   E times
                  :Implicitly join with newlines, trim (not strictly necessary) and output.
Shaggy
sumber