Penambahan Piramida Terbalik adalah proses mengambil daftar angka dan menambahkannya secara berurutan hingga Anda mencapai satu angka.
Ketika diberi nomor 2, 1, 1
proses berikut terjadi:
2 1 1
3 2
5
Ini berakhir dengan angka 5
.
TUGAS ANDA
Diberikan sisi kanan Piramida Terbalik (Naik), tulis program atau fungsi yang akan mengembalikan daftar asli.
Tantangan Ekstra Baru : Coba lakukan ini kurang dari O (n ^ 2)
CONTOH
f([5, 2, 1]) => [2, 1, 1]
f([84,42,21,10,2]) => [4,7,3,8,2]
CATATAN: Piramida Terbalik tidak akan pernah kosong dan akan selalu terdiri dari bilangan bulat positif SAJA.
code-golf
math
fastest-algorithm
algorithm
Rengekan
sumber
sumber
Try doing this in less than O(n)
tentunya tidak mungkin untuk mengalokasikan array berukuran n atau mengubah O (n) item di dalamnya lebih cepat daripada O (n) kompleksitas?Jawaban:
JavaScript (ES6),
62 58 4946 byteDisimpan 3 byte berkat @Oliver
Mengembalikan daftar sebagai string yang dipisahkan koma.
Cobalah online!
Berkomentar
sumber
Haskell , 22 byte
Cobalah online!
sumber
Haskell, 42 byte
Cobalah online!
sumber
TI-BASIC, 54 byte
Input adalah daftar sisi kanan segitiga
Ans
, seperti yang dijelaskan dalam tantangan.Output adalah baris atas dari segitiga tersebut.
Contoh:
Penjelasan:
Solusi ini menyalahgunakan fakta bahwa segitiga terbentuk menggunakan sisi kanan segitiga saat awal berakhir dengan perubahan pada setiap elemen.
Dengan kata lain,
menjadi:
Dengan demikian, daftar yang dihasilkan adalah sisi kanan dari segitiga baru ini, yang dapat dibentuk dengan mengatur elemen terakhir ke indeks panjang daftar induknya dalam daftar yang dihasilkan.
Catatan: TI-BASIC adalah bahasa tokenized. Jumlah karakter tidak sama dengan jumlah byte.
sumber
Jelly , 6 byte
Tautan monadik yang menerima daftar bilangan bulat yang menghasilkan daftar bilangan bulat.
Cobalah online!
Bagaimana?
Bangun seluruh segitiga lalu ekstrak elemen yang diperlukan.
sumber
U
s bukannyaṚ
!IƬUZḢA
akan bekerja dengan pertanyaan yang diberikan juga; Saya ingin tahu apakah ada byte yang disimpan di suatu tempat ...ạƝƬZṪ€
bekerja juga tetapi sekali lagi enam.MathGolf ,
1411 byteCobalah online!
Penjelasan
sumber
Python 2 , 56 byte
Fungsi rekursif menerima daftar bilangan bulat positif yang mengembalikan daftar bilangan bulat non-negatif.
Cobalah online!
sumber
Jelly , 5 byte
Cobalah online!
Kita dapat mengasumsikan seluruh piramida itu positif, jadi kita bisa menggunakan operasi && alih-alih operasi "benar".
sumber
Pari/GP, 36 bytes
Based on @Lynn's comment:
Pari/GP has a built-in for the Pascal matrix, and its inverse is exactly the matrix we need:
Try it online!
sumber
R,
6967 bytesTry it online!
Returns a column vector.
-2 bytes thanks to Kirill L.
Also based on Lynn's comment:
It's longer than the other R answer, but it was an interesting approach to take and try to golf.
sumber
Javascript (ES6), 127 bytes
Original code
Oh, I lost like... a lot... to the previous answer...
sumber
Wolfram Language (Mathematica), 57 bytes
Try it online!
sumber
05AB1E,
1211 bytesPort of @JonathanAllan's Jelly answer, although I'm jelly about Jelly's more convenient builtins in this case. ;)
-1 byte thanks to @Emigna.
Try it online or verify all test cases.
Explanation:
sumber
R.¥.Γ¥}¨
by starting from the list whose delta is the input.R,
55635553 bytesTry it online!
-2 bytes thanks to Giuseppe.
sumber
Perl 6, 37 bytes
Try it online!
Repeatedly reduces by elementwise subtraction, and then returns the last number of each list in reverse.
Explanation:
sumber
Python 2, 78 bytes
Try it online!
sumber
C# (Visual C# Interactive Compiler), 164 bytes
Try it online!
sumber
Charcoal, 19 bytes
Try it online! Link is to verbose version of code. Explanation:
Loop once for each term in the original list.
Print the last term in the list, but move the cursor to the beginning of the previous line, so that the terms are output in reverse order.
Compute the deltas, inserting a dummy value at the beginning so that we can use an operation that doesn't change the length of the list.
sumber
APL+WIN, 34 or 28 bytes
Try it online! Courtesy of Dyalog Classic
Prompts for right side vector.
or implementing @Lynn's approach:
Try it online!Courtesy of Dyalog Classic
Prompts for right side vector.
sumber
Attache, 29 bytes
Try it online!
Simply iterates the
Delta
function until its empty. Much shorter than the very verbosePeriodicSteps
solution...sumber
C, 76 bytes
input :
(*a = pointer to array, n = last element's index of that array)
output :
return int* = output
Explanation
going from right side to up, as the last elements are same in both input and output the loop inside function simply finds next higher numbers in the triangle gradually reaching to the top leaving the answer intact in the end.
ungolfed(from C++)
sumber
Japt,
119 bytesTry it
2 bytes saved thanks to Oliver.
1211 bytesTry it
1 byte saved thanks to Oliver.
sumber
y(f)
is bad enough, but completely forgetting the newline is unforgivable! Will update shortly. Thanks :)Julia 0.6, 44 bytes
Try it online!
Same iterative principle as my R answer.
Julia 0.6, 55 bytes
Try it online!
@Lynn's algorithm (inverse of Pascal matrix multiplied by input).
sumber