Diberikan daftar dengan angka, tampilkan rentang seperti ini:
Input: [0, 5, 0]
akan menjadi [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
.
Ini memetakan rentang melalui array, jadi pertama-tama kita harus membuat rentang [0, 5]
, yaitu [0, 1, 2, 3, 4, 5]
. Setelah itu, kami menggunakan 5
untuk membuat rentang [5, 0]
. Di tambahkan pada kisaran kami sebelumnya, ini memberi kami:
[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
Mari kita amati test case dengan dua digit yang sama di samping satu sama lain:
[3, 5, 5, 3], ranges:
[3, 5] = 3, 4, 5
[5, 5] = 5 (actually [5, 5] due to overlapping)
[5, 3] = 5, 4, 3
Jadi ini akan memberi kita [3, 4, 5, 5, 4, 3]
.
Beberapa test case lainnya:
[1, 9] > [1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, -10] > [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
[3, 0, 0, -3] > [3, 2, 1, 0, 0, -1, -2, -3]
[1, 3, 5, 7, 5, 3, 1, -1, -3] > [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3]
Input akan selalu memiliki setidaknya 2 bilangan bulat.
Jawaban terpendek menang!
code-golf
array-manipulation
Lamaro
sumber
sumber
Jawaban:
05AB1E, 1 byte
Cobalah online!
Bagaimana itu bekerja
Ini built-in.
sumber
Javascript,
999593 byte46 byte mati terima kasih @Neil .sumber
y<b?b-y:y-b||1
. Simpan byte lain dengan menggunakany>b||y-b&&-1
.y<b?-1:y>b
masih lebih baik.JavaScript (SpiderMonkey 30+),
8176 byteDiuji di Firefox 44. Menggunakan kemampuan menghancurkan argumen ES6 yang luar biasa dan pemahaman array ES7 (yang sayangnya telah dihapus dari spesifikasi ES7).
sumber
[3, 0, 0, -3]
. Saya memperbaiki RangeError dan menyelamatkan 10 byte tetapi tetap tidak berhasil:([n,...a],z=[n])=>z.concat([for(i of a)for(j of[...Array((r=n<i)?i-n-1:n-i-1),0])i=r?++n:--n])
([n,...a])=>[n].concat([for(i of a)for(j of[...Array((r=n<i)?i-n:n-i)])i=r?++n:--n])
tentu saja.JavaScript (ES6) 66
72Fungsi rekursif yang berulang kali menambahkan nilai di dalam array untuk mengisi kesenjangan antara angka yang dekat
Uji
sumber
C, 120 + 12 = 132 byte
Contoh panggilan:
Tes langsung pada ideone .
sumber
Python 2, 77 byte
Cobalah online
Terima kasih kepada Neil, DenkerAffe, dan Erwan karena menunjukkan perbaikan yang saya lewatkan
sumber
+1
itu tidak perlu?lambda n:n[0:1]+sum([range(x,y,[1,-1][y+1<x])[1:]+[y]for(x,y)in zip(n,n[1:])],[])
? menghemat beberapa byte.[1,-1][y+1<x]
dengan2*(y>x)-1
(juga saya tidak mengerti mengapa Anda menggunakany<=x
dan tidak hanyay<x
)n[0:1]
setara dengann[:1]
.Perl, 47 byte
Termasuk +3 untuk
-p
(kode mengandung$'
spasi dan-
juga hitungan)Berikan daftar angka pada STDIN:
fluctuating.pl
:Variabel sementara dan semua tanda kurung ini terasa ...
sumber
$'
Anda sebutkan tidak ada dalam kode ...Haskell,
6355 byteContoh penggunaan:
g [3,5,5,3]
->[3,4,5,5,4,3]
.Ini modifikasi dari jawaban saya untuk tantangan terkait . Sekali lagi, pekerjaan utama dilakukan dengan menggabungkan daftar dari
a
atas keb-1
dan daria
bawah keb+1
(di mana satu daftar akan kosong) dan panggilan rekursif. Untuk menangania==b
kasus di mana kedua daftar kosong, kami menambahkan[a|a==b]
yang mengevaluasi ke[a]
jikaa==b
dan[]
sebaliknya.sumber
R,
868275 bytedisimpan 4 byte menggunakan rep bukan rep.int (golf kode bukan kinerja!) menyimpan 7 byte lainnya dengan menggunakan pencocokan parsial bawaan saat menggunakan
$
(dan mengecilkan definisi fungsi menjadi 1 barissumber
(y=...)
bukan(y<-...)
juga valid, dan satu byte lebih sedikit.Ruby,
11682 byteGolf pertama saya.
Sunting: Terima kasih manatwork untuk saran yang luar biasa.
sumber
map
's blok kode bisa mengambil array sebagai beberapa parameter:->n{o,*m=n;o=[o];m.zip(n).map{|t,u|o+=u==t ?[u]:(u<t ?[*u+1..t]:[*t..u-1].reverse)};o}
. Golf pertama yang bagus.[[u],[*u+1..t],[*t..u-1].reverse][t<=>u]
.Japt , 12 byte
Disimpan 16 byte berkat @ETHproductions !
Uji secara online
sumber
Perl 6, 94 byte
Saya tidak terlalu senang dengan ini sekarang, saya mungkin akan mengambil gambar lain nanti
sumber
PHP 5.4, 86 byte
Ini dimaksudkan untuk digunakan sebagai file yang disertakan, yang mengembalikan hasilnya.
Nilai dilewatkan sebagai parameter baris perintah.
Tidak persis cantik atau apa pun, tetapi melakukan pekerjaan.
sumber
Python 3 , 76 byte
Upaya pertama pada jawaban Python. Ide dasarnya adalah untuk berulang kali mengidentifikasi pasangan dalam urutan di mana perbedaannya lebih besar dari langkah dan memasukkan satu (dan hanya satu) elemen tambahan untuk menyelesaikan urutan di arah yang benar. Ulangi sampai semua perbedaan antara elemen berturut-turut adalah antara +1 dan -1.
Cobalah online!
sumber
Lua, 156 Bytes
Fungsi yang mengambil array dalam parameter dan mengembalikan array yang diperluas.
Tidak terseret dan penjelasan
Untuk kemudahan penggunaan, Anda dapat menggunakan fungsi berikut untuk mencetak array yang dikembalikan oleh
f()
.Saat menguji kiriman ini, Anda dapat menyebutnya seperti:
sumber
Mathcad, 62 "byte"
Karena Mathcad menggunakan "papan tulis" 2D dan operator khusus (misalnya, operator penjumlahan, operator integral), dan menyimpan dalam format XML, lembar kerja yang sebenarnya mungkin berisi beberapa ratus (atau lebih) karakter. Untuk keperluan Code Golf, saya telah mengambil "byte byte" Mathcad untuk menjadi jumlah karakter atau operator yang harus dimasukkan pengguna untuk membuat lembar kerja.
Mengubah definisi fungsi menjadi program lurus, dan mengganti variabel pertama dengan nama karakter tunggal, memberikan total 62 "byte". Dengan fungsi, menggunakan karakter tunggal daripada nama lengkap, ini meningkat menjadi 65 "byte" untuk definisi dan 4 "byte" untuk setiap panggilan (dengan asumsi bahwa pembuatan daftar itu sendiri tidak termasuk dalam byte keseluruhan count (Menggunakan tabel bawaan Mathcad adalah cara lain untuk memasukkan daftar).
sumber
PHP, 144 byte
Tampilan meledak Input / panggilan fungsi KeluaranIni berantakan dan tebal, dan saya akan mencoba mengoptimalkannya nanti. Ini menciptakan
range()
dari setiap pasangan pasangan nilai yang berdekatan, lalu menjahitnya bersama-sama (setelahpop
mengakhiri kumulatif sebelumnyaArray
).sumber
Perl6, 21
.join adalah kependekan dari $ _. gabung
Tes (rakudo)
Keluaran
sumber
Jelly , 10 byte
Cobalah online!
sumber
R , 74 byte
Solusi R. lainnya
Cobalah online!
sumber