Pengantar:
(Sumber: Wikipedia )
Ketika kita melihat pelangi ia akan selalu memiliki warna dari atas ke bawah:
Merah; jeruk; kuning; hijau; biru; nila; violet
Jika kita melihat masing-masing cincin, cincin merah tentu saja lebih besar dari cincin ungu.
Selain itu, juga dimungkinkan untuk memiliki dua atau bahkan tiga pelangi secara bersamaan.
Semua gabungan di atas akan digunakan dalam tantangan ini:
Tantangan:
Diberikan daftar bilangan bulat dengan ukuran persis 7, di mana setiap nilai menunjukkan partikel warna yang tersedia untuk membentuk pelangi (di mana indeks terbesar menunjukkan merah dan indeks terkecil ditunjukkan ungu), menampilkan jumlah pelangi yang dapat dibentuk.
Satu integer-pelangi harus memiliki setidaknya 3x violet, 4x indigo, 5x biru, 6x hijau, 7x kuning, 8x oranye, 9x merah. Pelangi kedua di atasnya bahkan akan lebih besar dari cincin merah pelangi pertama (termasuk satu ruang di antara mereka), sehingga diperlukan setidaknya 11x violet, 12x indigo, 13x biru, 14x hijau, 15x kuning, 16x oranye , 17x merah sebagai tambahan dari apa yang digunakan pelangi pertama. Pelangi ketiga akan mulai pada 19x violet lagi.
Contoh:
Input-list: [15,20,18,33,24,29,41]
Output:2
Mengapa? Kami memiliki 15x violet, dan kami membutuhkan setidaknya 3 + 11 = 14 untuk dua pelangi. Kami memiliki 20 nila dan kami membutuhkan setidaknya 4 + 12 = 16 untuk dua pelangi. Dll. Kami memiliki cukup warna untuk dua pelangi, tetapi tidak cukup untuk membentuk tiga pelangi, jadi hasilnya adalah 2
.
Aturan tantangan:
- Bilangan bulat dalam larik input dijamin non-negatif (
>= 0
). - Input-list dijamin ukurannya persis 7.
- Ketika tidak ada pelangi dapat terbentuk, kami menghasilkan
0
. - Format input dan output fleksibel. Dapat berupa daftar atau array bilangan desimal, bisa diambil dari STDIN. Output dapat berupa pengembalian dari suatu fungsi dalam tipe output yang masuk akal, atau dicetak langsung ke STDOUT.
Jumlah minimum warna yang dibutuhkan untuk n
jumlah pelangi:
Amount of Rainbows Minimum amount per color
0 [0,0,0,0,0,0,0]
1 [3,4,5,6,7,8,9]
2 [14,16,18,20,22,24,26]
3 [33,36,39,42,45,48,51]
4 [60,64,68,72,76,80,84]
5 [95,100,105,110,115,120,125]
etc...
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Input: [15,20,18,33,24,29,41]
Output: 2
Input: [3,4,5,6,7,8,9]
Output: 1
Input: [9,8,7,6,5,4,3]
Output: 0
Input: [100,100,100,100,100,100,100]
Output: 4
Input: [53,58,90,42,111,57,66]
Output: 3
Input: [0,0,0,0,0,0,0]
Output: 0
Input: [95,100,105,110,115,120,125]
Output: 5
Input: [39525,41278,39333,44444,39502,39599,39699]
Output: 98
0,0,0,0,0,0,0
tepi :( (tidak cocok dengan logika 1-celah)Jawaban:
Pyth , 14 byte
Suite uji!
Bagaimana?
Algortihm
Pertama, mari kita turunkan rumus yang mendasari jawaban ini. Mari kita sebut fungsi yang memberikan jumlah yang diperlukan dari partikel warna , di mana adalah jumlah lapisan dan adalah indeks warna, berbasis 0. Pertama, kita perhatikan bahwa untuk layer (di mana adalah 1-diindeks, dalam hal ini), kita membutuhkan partikel warna . Dengan mengingat hal ini, kami menjumlahkan hasil dari setiap untuk setiap layer :n i n th n L ( n , i ) = i + 3 + 8 ( n - 1 ) L ( k , i ) kC( n , i ) n saya nth n L ( n , i ) = i + 3 + 8 ( n - 1 ) L ( k , i ) k
C ( n , i ) = ( i + 3 ) n
Oleh karena itu, kita sekarang tahu bahwa jumlah maksimum lapisan yang mungkin, sebut saja , harus memenuhi ketimpangan , di mana adalah elemen dari daftar input.C ( k , i ) ≤ I i I i i thk C( k , saya ) ≤ Isaya sayasaya sayath
Penerapan
Ini mengimplementasikan fungsi , dan iterates ( ) di atas daftar input, dengan menjadi indeks (berbasis 0) dan menjadi elemen. Untuk setiap nilai, pencarian program pertama yang positif bilangan bulat yang (negasi logis dari , kondisi kita menyimpulkan sebelumnya), kemudian menemukan hasil minimum dan menurunkannya. Dengan cara ini, bukan mencari integer tertinggi yang tidak memenuhi kondisi, kita mencari terendah yang tidak dan kurangi satu dari itu untuk menebus offset dari 1.k b T b < C ( T , i ) C ( T , i ) ≤ bC k b T b < C( T, saya ) C( T, i ) ≤ b
.e
sumber
Python 2 ,
6461 byteCobalah online!
Setiap warna pelangi digunakan
(3+i)+n*8
untuk layern
dan warnai
(0 = ungu, dll.)Oleh karena itu total untuk x lapisan adalah:
(3*i)*x + 8*x*(x+1)
.Kami hanya menyelesaikan untuk n, dan mengambil nilai minimum.
Diselamatkan:
sumber
05AB1E ,
181716 byteTerima kasih -1 byte ke Magic Octopus Mm
Cobalah online!
Jumlah warna yang dibutuhkan untuk n pelangi adalah n (4n + [-1, 0, 1, 2, 3, 4, 5]) .
sumber
[ND4*6Ý<+*¹›1å#N
bekerja tetapi saya tidak tahu mengapa. -1 byte.N>
itu-- karena kamu pernah melakukannya¾>
sebelumnya.JavaScript (ES6), 49 byte
Cobalah online!
Bagaimana?
Tetapi untuk tujuan bermain golf, kita mulai dengan
n === undefined
dan menggunakan nilai negatifn
sesudahnya. Iterasi pertama selalu berhasil karena sisi kanan ketidaksetaraan dievaluasiNaN
. Oleh karena itu, tes bermakna pertama adalah yang kedua dengann == -1
.sumber
Jelly , 18 byte
Cobalah online!
Gunakan penjelasan dalam jawaban OkAB's 05AB1E.
sumber
Excel VBA, 78 byte
Fungsi anonim yang mengambil input dari kisaran
[A1:G1]
dan keluaran ke jendela langsung VBE.sumber
Arang , 21 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan: Langsung menghitung jumlah pelangi yang mungkin dengan setiap warna dengan formula yang saya peroleh sendiri-sendiri tetapi ternyata sama dengan formula @ TField.
sumber
JavaScript (Node.js) , 54 byte
Port jawaban @TFeld
Cobalah online!
sumber
Jelly , 14 byte
Ini sulit!
Tautan monadik yang menerima daftar tujuh bilangan bulat yang menghasilkan bilangan bulat, jumlah pelangi yang mungkin.
Cobalah online! Atau lihat test-suite .
Bagaimana?
Sayangnya setiap metode naif tampaknya mengambil 16 byte, salah satu metode tersebut adalah
Ṃɓ_J×¥H÷‘H<¬Ȧð€S
, namun ternyata metode yang digunakan di sini jauh lebih efisien dan juga lebih pendek!Metode ini membangun lebih dari cukup tumpukan pelangi saat jumlah partikel, termasuk pita ultra-violet , dan menambahkan 1 untuk setiap tumpukan yang mungkin.
Tes untuk itu menjadi mungkin adalah untuk memeriksa bahwa hanya ada satu band TIDAK mungkin mengingat kita membutuhkan beberapa partikel band ultra-violet tetapi diberikan nol.
sumber
§ỊS
!05AB1E , 14 byte
Cobalah online!
Algoritma Pyth ⟶ Algoritma 05AB1E
Ada banyak metode yang bisa dicoba untuk menyelesaikan tantangan ini di 05AB1E, jadi saya mencoba beberapa dari mereka dan ini ternyata yang terpendek. Mengadaptasi formula yang disebutkan di atas dari jawaban Pyth saya, mengingat bahwa 05AB1E menggunakan pengindeksan 1, kita dapat membangun fungsi kita sebagai berikut:
Perhatikan bahwa kesetaraan ini tidak tepat (tapi saya saat ini tidak tahu cara untuk menyatakan ini secara lebih formal) dan bahwa solusi untuk persamaan ini akan menghasilkan angka floating-point, tapi kami memperbaikinya dengan menggunakan pembagian lantai daripada pembagian yang tepat kemudian. Bagaimanapun, untuk melanjutkan argumen kami, sebagian besar dari Anda mungkin sangat akrab dengan solusi dari persamaan seperti itu , jadi di sini kita memilikinya:
Persisnya hubungan yang diterapkan oleh jawaban ini.
sumber
C ++,
127125 byteDicukur 2 byte berkat Kevin Cruijssen.
Cobalah online!
Fungsi mengambil array C-style dari tujuh int dan mengembalikan sebuah int.
Penjelasan:
sumber
for(int c=0;c<7;c++){int q=c-1;q=(std::sqrt(q*q+16*x[c])-q)/8;o=o>q?q:o;}
untuk ini:for(int c=0,q;c<7;c++,o=o>q?q:o)q=(std::sqrt(--c*c-c+16*x[++c]))/8;
. Juga, bisakah Anda memberikan tautan TIO dengan kode uji?