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



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)




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


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

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!



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!


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



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

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.


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

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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.