Daftar angka disebut meningkat secara monoton (atau tidak menurun) adalah setiap elemen lebih besar dari atau sama dengan elemen sebelumnya.
Misalnya, 1, 1, 2, 4, 5, 5, 5, 8, 10, 11, 14, 14
meningkat secara monoton.
Dengan daftar bilangan bulat positif yang meningkat secara monoton yang memiliki jumlah tempat kosong yang dilambangkan secara acak ?
, isi tempat kosong dengan bilangan bulat positif sehingga sebanyak mungkin bilangan bulat unik yang ada dalam daftar, namun jumlahnya terus meningkat secara monoton.
Mungkin ada beberapa cara untuk mencapai ini. Apa pun valid.
Keluarkan daftar yang dihasilkan.
Misalnya , jika inputnya adalah
?, 1, ?, 1, 2, ?, 4, 5, 5, 5, ?, ?, ?, ?, 8, 10, 11, ?, 14, 14, ?, ?
dijamin bahwa tanpa tempat kosong daftar akan meningkat secara monoton
1, 1, 2, 4, 5, 5, 5, 8, 10, 11, 14, 14
dan tugas Anda adalah untuk menetapkan bilangan bulat positif untuk masing
?
- masing untuk memaksimalkan jumlah bilangan bulat yang berbeda dalam daftar sambil menjaganya agar tidak bertambah.Satu tugas yang tidak valid adalah
1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 8, 10, 11, 14, 14, 14, 14, 14
karena, meskipun tidak menurun, ia hanya memiliki satu bilangan bulat yang lebih unik daripada input, yaitu
3
.Dalam contoh ini adalah mungkin untuk memasukkan enam bilangan bulat positif unik dan menjaga daftar tidak bertambah.
Beberapa cara yang mungkin adalah:1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 7, 8, 8, 8, 10, 11, 12, 14, 14, 15, 16 1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 5, 6, 6, 7, 8, 10, 11, 13, 14, 14, 20, 200
Salah satu dari ini (dan banyak lainnya) akan menjadi output yang valid.
Semua tempat kosong harus diisi.
Tidak ada batas atas pada bilangan bulat yang dapat dimasukkan. Tidak apa-apa jika bilangan bulat yang sangat besar dicetak dalam notasi ilmiah.
Nol bukan bilangan bulat positif dan tidak boleh dimasukkan.
Di tempat ?
Anda dapat menggunakan nilai yang konsisten yang bukan bilangan bulat positif, seperti 0
, -1
, null
, False
, atau ""
.
Kode terpendek dalam byte menang.
Lebih banyak contoh
[input]
[one possible output] (a "*" means it is the only possible output)
2, 4, 10
2, 4, 10 *
1, ?, 3
1, 2, 3 *
1, ?, 4
1, 2, 4
{empty list}
{empty list} *
8
8 *
?
42
?, ?, ?
271, 828, 1729
?, 1
1, 1 *
?, 2
1, 2 *
?, 3
1, 3
45, ?
45, 314159265359
1, ?, ?, ?, 1
1, 1, 1, 1, 1 *
3, ?, ?, ?, ?, 30
3, 7, 10, 23, 29, 30
1, ?, 2, ?, 3, ?, 4
1, 1, 2, 3, 3, 3, 4
1, ?, 3, ?, 5, ?, 7
1, 2, 3, 4, 5, 6, 7 *
1, ?, 3, ?, 5, ?, ?, 7
1, 2, 3, 4, 5, 6, 7, 7
1, ?, ?, ?, ?, 2, ?, ?, ?, ?, 4, ?, 4, ?, ?, 6
1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 6
98, ?, ?, ?, 102, ?, 104
98, 99, 100, 101, 102, 103, 104 *
sumber
Jawaban:
Haskell , 41 byte
f
mengambil daftar dan mengembalikan daftar, dengan 0 mewakili?
s.Pada dasarnya, daftar pemindaian pertama dari kiri, menggantikan 0s dengan satu lebih dari elemen sebelumnya (atau 0 di awal); kemudian pindai dari kanan mengurangi elemen terlalu besar untuk sama dengan yang ada di kanan mereka.
Cobalah online! (dengan pembungkus untuk mengkonversi
?
s.)sumber
Mathematica, 84 byte
Fungsi murni mengambil daftar sebagai argumen, di mana titik-titik kosong dilambangkan dengan
Null
(seperti dalam{1, Null, Null, 2, Null}
) atau dihapus sama sekali (seperti dalam{1, , , 2, }
), dan mengembalikan daftar yang sesuai (dalam hal ini,{1, 2, 2, 2, 3}
).Ternyata saya menggunakan algoritma yang sama seperti pada jawaban Haskell Ørjan Johansen : pertama ganti setiap
Null
satu lebih dari angka di sebelah kirinya (//.{a___,b_,,c___}:>{a,b,b+1,c}
), kemudian ganti angka yang terlalu besar dengan angka di sebelah kanannya (//.{a___,b_,c_,d___}/;b>c:>{a,c,c,d}
). Untuk menangani kemungkinanNull
s di awal daftar, kita mulai dengan menambahkan a0
({0,##}&@@#
), melakukan algoritma, lalu menghapus yang awal0
(Rest
).Ya, saya memilih
Null
sebagai gantiX
atau sesuatu seperti itu untuk menyimpan secara harfiah satu byte dalam kode (kode yang seharusnya berada di antara komab_,,c___
).sumber
?, 2
. Saya menduga Anda kemudian akan menghasilkan2, 2
bukan yang benar1, 2
.C 160
Ini tidak akan pernah menang tetapi:
Dibutuhkan daftar dari argumen baris perintah.
sumber
05AB1E ,
312313 byteDisimpan 10 byte berkat Grimy
Cobalah online!
Penjelasan
sumber
}}
bisa]
menghemat 2 byte; danõ-)R
dapat)˜R
menyimpan byte tambahan.Pip ,
252321 byteMengambil input sebagai beberapa argumen baris perintah yang dipisahkan oleh spasi. Keluaran daftar hasil satu nomor per baris. Cobalah online! (Saya telah memperdaya banyak argumen baris perintah karena akan merepotkan menambahkan 25 argumen pada TIO, tetapi itu juga berfungsi seperti yang diiklankan.)
Penjelasan
Kami melanjutkan dalam dua operan. Pertama, kami mengganti setiap proses
?
s dalam input dengan urutan mulai dari nomor sebelumnya dalam daftar dan bertambah satu setiap kali:Kemudian kita mengulanginya lagi; untuk setiap nomor, kami mencetak minimum dan semua nomor di sebelah kanannya. Ini membawa angka terlalu tinggi untuk menjaga monotonitas.
sumber
Python 2 dengan NumPy, 163 byte
Disimpan 8 byte berkat @wythagoras
Nol digunakan untuk menandai tempat kosong
Lebih mudah dibaca dengan komentar:
sumber
if l[a]>l[b]:l[a]=l[b]
bisal[a]=min(l[a],l[b])
dan kemudian bisa di garis sebelum itu. Juga, ini berarti bahwa seluruh baris dapat diletakkan setelahwhile
. Dan saya pikirl=input()
danl=[1]+l
bisal=[1]+input()
(Juga, secara umum: Jika Anda menggunakan dua tingkat lekukan, Anda bisa menggunakan spasi dan tab alih-alih spasi dan dua spasi di Python 2 (lihat codegolf.stackexchange.com/a/58 ) )len(z)-i:f(z[i-1],z[i]);i+=1
ketika memulai dengan i = 1.PHP,
9577716968 bytemengambil input dari argumen baris perintah, mencetak daftar yang dipisahkan spasi. Jalankan dengan
-nr
.kerusakan
$n
benar untuk string apa pun kecuali string kosong dan"0"
.$n>0
adalah kebenaran untuk angka positif - dan string yang mengandungnya.sumber
Perl 6 , 97 byte
Input adalah daftar nilai, atau string yang dipisahkan spasi, tempat
?
digunakan untuk menggantikan nilai yang akan diganti.Output adalah string yang dipisahkan spasi dengan spasi tambahan.
Cobalah
Diperluas:
sumber
$"
bukannya' '
mencukur byte. Apakah itu berhasil di sini?$!
. ($/
ada tetapi digunakan untuk$1
→$/[1]
dan$<a>
→$/{ qw< a > }
)JavaScript (ES6), 65 byte
Karena saya ingin menggunakannya
reduceRight
. Penjelasan: Yangmap
menggantikan setiap nilai falsy dengan satu lebih dari nilai sebelumnya, lalureduceRight
bekerja kembali dari akhir memastikan bahwa tidak ada nilai yang melebihi nilai berikut.sumber
Q, 63 byte
{1_(|){if[y>min x;y-:1];x,y}/[(|){if[y=0;y:1+-1#x];x,y}/[0,x]]}
Pada dasarnya algoritma yang sama dengan jawaban Hasrell Ørjan Johansen .
Penggunaan min vs last digunakan untuk menyimpan satu byte, karena dapat mengasumsikan elemen terakhir adalah elemen min yang diberikan semacam array yang menurun.
sumber
TI-Basic (TI-84 Plus CE), 81 byte
Sebuah port sederhana dari jawaban Haskell Ørjan Johansen untuk TI-Basic. Menggunakan 0 sebagai nilai nol. Mengambil input dari L 1 .
Penjelasan:
sumber
Java 8,
199164 byteMemodifikasi array input alih-alih mengembalikan yang baru untuk menghemat byte.
Gunakan
0
bukan?
.Cobalah online.
Penjelasan:
sumber
Python 2 ,
144124119 byteCobalah online!
Gunakan
0
bukan?
sumber
b=filter(abs,l[n:])
sama denganb=l[n:]
?JavaScript (ES6), 59
Suatu fungsi dengan array integer sebagai input. Bintik kosong ditandai dengan
0
Uji
sumber
C # (.NET Core) , 182 byte
Menggunakan strategi yang sama dengan Ørjan Johansen.
Menggunakan 0 pada daftar input untuk menandai var yang tidak dikenal.
Cobalah online!
sumber
Perl 5
-p
, 99 byteCobalah online!
sumber