Anda telah diberi sekantong Skittles. Semua orang tahu bahwa untuk paling menghargai rasa yang berbeda, Anda perlu memutar di antara rasa.
Dasar-dasar:
- Anda hanya bisa makan 1 skittle pada satu waktu
- Urutan yang Anda makan skittle Anda harus berkala.
- Setiap periode tidak dapat mengandung rasa tertentu lebih dari sekali.
- Tas Anda hanya memiliki begitu banyak skittles. Anda tidak bisa makan lebih banyak rasa skittle tertentu daripada yang terlihat di tas Anda.
- Anda ingin makan skittles sebanyak yang Anda bisa (itu tidak selalu mungkin)
Contoh:
Katakanlah Anda mulai dengan 3 skittle Merah, 2 Biru, dan 3 Hijau:
R B G R B G R G Invalid: The last R must be followed by a B, not a G
R B G R B G R Valid, but sub-optimal
R R R Valid, but sub-optimal
R G B R G B R G Valid and optimal
G R B G R B G R Also valid and optimal (there are multiple good solutions)
Input output
- Anda diberikan daftar bilangan bulat positif yang tidak kosong untuk jumlah warna. (Contoh di atas adalah
[3,2,3]
). - Anda harus mengembalikan daftar berisi pemesanan yang valid dan optimal.
- Alih-alih menggunakan warna, Anda akan menggunakan indeks dari daftar input. (Contoh keluaran terakhir di atas adalah
[2,0,1,2,0,1,2,0]
). - Output Anda mungkin 0-diindeks atau 1-diindeks. Contoh saya akan diindeks 0
Uji Kasus
1 0
4 0 0 0 0
4 1 0 0 0 0
3 1 0 1 0 or 0 0 0
5 2 2 0 1 2 0 1 2 0
2 3 5 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2
2 4 5 2 1 2 1 2 1 2 1 2
3 4 5 2 1 0 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2 0 1 2
1 1 1 1 1 6 5 0 1 2 3 4 5 (lots of other solutions)
1 1 1 1 1 8 5 5 5 5 5 5 5 5
2 4 6 8 3 2 1 3 2 1 3 2 1 3 2 1 3 2
Ini adalah kode-golf , jadi buat solusi Anda sesingkat mungkin dalam bahasa favorit Anda!
Jawaban:
JavaScript (ES6),
177175 byteDiformat dan dikomentari
Formula yang digunakan
Di bawah ini adalah tabel yang menunjukkan bagaimana rumus
F(i, j) = minimum(value[j], value[i] + 1)
bekerja, di sini dengani = 0
dan inputnya[ 5, 2, 2 ]
.Rumus ini dapat diartikan sebagai berikut: untuk setiap jenis Skittle, kami dapat memilih tidak lebih dari jumlah jenis yang paling sedikit tersedia ditambah satu.
Uji kasus
Tampilkan cuplikan kode
sumber
m
berada di akhir "loop" yang diinduksi golf atau hanya seberapa JS?m=0
sini adalah golf-induced, karena saya tidak peduli tentang nilai awal dari loop ini (itu akan ditimpa pula). Inisialisasim
ada yang mudah.[1,2,3].reduce((x, y) => x+y, 10)
di JS akan beradareduce(lambda x,y: x+y, [1,2,3], 10)
di Python (saya pikir), keduanya menghasilkan16
.Jelly , 22 byte
Pengindeksan berbasis 1.
Cobalah online!
Bagaimana?
Ulangi setiap awalan indeks yang diurutkan berdasarkan nilai menurun sekali lagi daripada yang dapat dicapai dengan kantung skittle yang diberikan, kemudian hapus skittle atau skittle terakhir dari masing-masing yang diperlukan untuk membuatnya dapat dicapai, dan kembalikan yang dengan skittles paling banyak .
Angka yang harus dihapus dari satu pengulangan periodik tambahan hanyalah angka dengan jumlah minimum di awalan itu.
sumber
Python3,
174172167 BytesIde
Diberikan misalnya 3 Merah, 2 Biru, dan 3 skittles Hijau yang bisa diatur dalam kotak, diurutkan berdasarkan warna dan jumlah:
Jika seseorang mencoba untuk makan skittles secara tepat, setidaknya dia bisa makan skittle i * c, di mana c adalah jumlah skittle di kolom ke-r, misalnya untuk i = 2 orang setidaknya bisa makan 6 skittle.
Satu-satunya hal yang harus dilakukan adalah menghitung berapa banyak skittles tambahan yang bisa dimakan dalam periode yang tidak lengkap.
Golf
Berkomentar
Cobalah online!
Sunting: Diganti
(i+1)
dengan-~i
untuk menyimpan 2 byte.Sunting: -5 bytes berkat Dead Possum
sumber
sum(1for e in b if e[0]>c)
menjadisum(c<e[0]for e in b)
. Ini akan mengkonversi True ke 1 secara implisit dan menghemat 5 byte