Anda harus menulis sebuah program atau fungsi yang memberikan daftar bilangan bulat positif mengalikan setiap elemen dengan bilangan bulat positif terkecil yang mungkin untuk membuat daftar yang semakin meningkat.
Misalnya jika inputnya adalah
5 4 12 1 3
multiplikasi akan menjadi
5*1=5 4*2=8 12*1=12 1*13=13 3*5=15
dan output akan menjadi daftar yang meningkat
5 8 12 13 15
Memasukkan
- Daftar bilangan bulat positif yang mengandung setidaknya 1 elemen
Keluaran
- Daftar bilangan bulat positif
Contohnya
9 => 9
1 2 => 1 2
2 1 => 2 3
7 3 => 7 9
1 1 1 1 => 1 2 3 4
5 4 12 1 3 => 5 8 12 13 15
3 3 3 8 16 => 3 6 9 16 32
6 5 4 3 2 1 => 6 10 12 15 16 17
9 4 6 6 5 78 12 88 => 9 12 18 24 25 78 84 88
8 9 41 5 12 3 5 6 => 8 9 41 45 48 51 55 60
15 8 12 47 22 15 4 66 72 15 3 4 => 15 16 24 47 66 75 76 132 144 150 153 156
Ini adalah kode golf sehingga program atau fungsi terpendek menang.
Fakta menyenangkan: elemen terakhir dari input untuk input N, N-1, ... ,1
tampaknya menjadi (N+1)th
elemen dari urutan A007952 . Jika Anda menemukan bukti, Anda dapat memasukkannya dalam jawaban golf Anda atau mempostingnya sebagai komentar.
code-golf
math
number
arithmetic
randomra
sumber
sumber
Jawaban:
Jelly ,
65 byteJawaban Jelly pertama
sebelum @ Dennis bangun dan mengalahkan sayaCobalah online!Penjelasan
Terima kasih kepada @ Dennis untuk -1 byte.
sumber
:‘×µ\
menghemat satu byte.JavaScript (ES6), 28
Sunting Seperti yang disarankan oleh @Patrick Roberts,
p
bisa menjadi parameter yang tidak diinisialisasi. Jumlah byte yang sama tetapi hindari menggunakan variabel globalUJI
sumber
f=a=>a.map(n=>a+=n-a%n,a=0)
. Tapi ini bukan algoritme saya (konyol saya) jadi saya akan tetap milik saya apa adanya dan memperbaiki arossPython 2,
6764 bytePertama-tama coba kode-golf, jadi tipsnya sangat dihargai.
sumber
print l
alih - alihreturn l
menyimpan byte lain. Pekerjaan yang baik!PHP,
55464241 byteMenggunakan penyandian ISO 8859-1.
Jalankan seperti ini (
-d
ditambahkan hanya untuk estetika):~ß
untuk menghasilkan spasi.sumber
$a+0
dengan+$a
. Selain itu, Anda dapat mengasumsikan bahwa input tidak akan pernah memiliki0
, jadi, Anda dapat mengganti$a+0&&print
dengan hanya+$a&print
. Bahkan, Anda bahkan bisa melakukannya$a&print
, karena di PHP"0" == 0 == 0.0 == false
. Tetapi mungkin tidak diperlukan jika Anda hanya menggunakanecho
, saya pikir.and
tidak akan bekerja (sebagai lawan dari logika), juga tidak akan bekerja dengan cara ini. Karena saya mengambil masukan dari CLI, argumen pertama adalah-
, yang ingin saya tangkap alih-alih mencetak nol. Cobaphp -r 'print_r($argv);' foo
. Disimpan 1 byte dengan saran pertama Anda, terima kasih.for(;$a=$argv[++$i];)echo$l+=$a-$l%$a,' ';
? Panjangnya 42 byte dan melewatkan elemen pertama.a^A
, tetapi itu akan menumpahkan terlalu banyak peringatan (peringatan tidak dapat diabaikan). Itu tidak akan mengubah bytecount dengan cara apa pun, tetapi surelly terlihat berbeda.Haskell (
302825 byte)Versi yang diperluas
Penjelasan
scanl1
memungkinkan Anda untuk melipat daftar dan mengakumulasikan semua nilai antara ke dalam daftar lain. Ini adalah spesialisasiscanl
, yang memiliki jenis berikut:Oleh karena itu, yang kita butuhkan adalah fungsi yang sesuai yang mengambil dua elemen terakhir dari daftar kami (
acc
dalam versi yang diperluas) dan yang kami ingin proses (next
dalam versi yang diperluas) dan mengembalikan nomor yang sesuai.Kita dapat dengan mudah menurunkan angka ini dengan membagi akumulator melalui yang berikutnya dan mendasarkan hasilnya.
div
mengurus itu. Setelah itu, kita hanya perlu menambahkan1
untuk memastikan bahwa daftar tersebut benar-benar meningkat (dan kita tidak berakhir dengan0
).sumber
( ... )
dengan$ ...
dan saya pikir Anda telah menghitung baris baru akhir yang dapat dihilangkan:,scanl1$\x y->y*div x y+y
24 byte.(...)
vs$
, karena$\
akan diuraikan sebagai operator dan saya akan membutuhkan satu ruang setelah$
.scanl1(...)
merupakan fungsi tanpa nama. Mengenai$
vs()
.: Anda benar, kesalahan saya.C ++,
636057 bytePekerjaan di tempat diberikan rentang
[first, last)
. Awalnya ditulis sebagai varian templat, tapi itu lebih lama:Versi diperpanjang
sumber
CJam, 13 byte
Masukan sebagai daftar gaya-CJam. Output dipisahkan linefeed.
Uji di sini.
Penjelasan
Nilai akhir ditinggalkan di tumpukan dan dicetak secara otomatis di akhir.
sumber
Mathematica,
3632 byteUji
sumber
Perl, 17 + 3 = 20 byte
Membutuhkan
-p
dan-l
menandai:Penjelasan:
sumber
Python (3.5),
6362 byteUji
Solusi sebelumnya
beberapa solusi rekursif tetapi lebih besar
sumber
r+=[…]
, Anda dapat menggunakanr+=…,
r=[0]
parameter defaultr
menjadi nonlocalBrachylog , 12 byte
Cukup aneh mencoba untuk mengalikan setiap variabel dengan angka akan mulai mencoba mengalikan dengan 2 dan bukan 0 atau 1. Ini tampaknya bekerja dan mengalahkan kedua implementasi Brachylog lainnya
Penjelasan
Cobalah online!
sumber
Brachylog , 54 byte
Penjelasan
sumber
Pyth, 11
Test Suite
Apakah pengurangan kumulatif, pengurangan yang mengembalikan semua nilai perantara, dimulai dengan
0
. Karena input dijamin hanya mengandung bilangan bulat positif, ini tidak masalah. Di setiap langkah, kami mengambil nilai lama, membaginya dengan nilai baru dan menambahkan1
, lalu kami mengalikannya dengan nilai baru.sumber
C, 79 byte
Tidak disatukan
sumber
p=p/x*x+x
bekerjaPowerShell, 26 byte
Mengambil input sebagai array eksplisit, mis .
> .\sort-by-multiplying.ps1 @(6,5,4,3,2,1)
Via$args[0]
.Kami kemudian untuk mengulanginya dengan
|%{...}
dan setiap iterasi melakukan sihir . Nah, hanya bercanda, kami menggunakan trik modulo yang sama dengan jawaban lain (props ke @aross karena saya melihatnya di sana dulu).Parens enkapsulasi
(...)
memastikan bahwa hasil operasi matematika ditempatkan pada pipa, dan dengan demikian output. Jika kita membiarkannya, tidak ada yang akan dihasilkan karena$l
variabel dikumpulkan sampah setelah eksekusi selesai.Contoh
sumber
Japt, 11 byte
Uji secara online!
Bagaimana itu bekerja
sumber
05AB1E , 11 byte
Kode:
Cobalah online!
Penjelasan:
Menggunakan pengodean CP-1252.
sumber
Minkolang 0,15 , 17 byte
Coba di sini!
Penjelasan
Pada dasarnya, register menyimpan anggota terbaru dari daftar naik dan ini dibagi dengan input dan bertambah untuk mendapatkan pengali untuk anggota berikutnya. Fitur toroidal bidang kode Minkolang berarti bahwa loop secara horizontal tanpa perlu
()
atau[]
loop.sumber
Brachylog , 21 byte
Cobalah online!
Menggunakan jumlah nilai input sebagai batas atas untuk koefisien C. Cukup lambat, time out pada TIO untuk panjang daftar input melebihi 5 atau 6 (juga tergantung pada jumlah nilai). Tapi tidak selambat versi asli saya, yang membutuhkan daftar kecil hingga 3 elemen, dengan nilai kecil, untuk tidak kehabisan waktu:
21 byte
Cobalah online!
sumber
C (gcc) , 37 byte
Cobalah online!
sumber
Python 2 , 53 byte
Cobalah online!
k*x>y
menyiratkank>y/x
; jadi yang terkecilk
bisa adalahk=floor(y/x)+1
. Karena dalam Python 2.7, pembagian integer sudah diambil sepertifloor
, kita inginkank=y/x+1
, dank*x = (y/x+1)*x = y/x*x+x
.sumber
Oracle SQL 11.2, 210 byte
Tidak bermain golf
sumber
Chez Scheme (140 Bytes)
Versi Golf:
Versi Tidak Serigala:
Cobalah secara Online!
sumber
* m(car l)
bisa*(car l)m
.K (oK) , 11 byte
Cobalah online!
sumber