Arka fon
Fransa'da, ve muhtemelen Avrupa Birliği, satılmaya hazır herhangi gıda geri kalanında gerekir yılında, ambalajının üzerinde bu oluştururlar maddeler listesinde ağırlık yüzdesi azalan sırayla . Bununla birlikte, kesin yüzdesi , belirtilen olmak zorunda değildir sürece bileşen kaplama üzerinde bir metin ya da görüntü ile vurgulanır.
Örneğin, fesleğen domates sosu, sadece büyük kırmızı domatesler ve güzel fesleğen yaprakları ambalajında gösteren, aşağıdaki belirtilere sahiptir:
İçindekiler: Domates% 80, adet soğan, fesleğen% 1.4, deniz tuzu, sarımsak püresi, çiğ şeker kamışı, sızma zeytinyağı, karabiber.
Kulağa lezzetli geliyor, ama… tam olarak ne kadar soğan yiyeceğim ?
Meydan okuma
Azalan sıradaki ağırlık yüzdelerinin bir listesi göz önüne alındığında, nihayetinde eksik, tarifte bulunabilecek asgari ve azami ağırlık yüzdelerinin tam bir listesini çıkar .
- Bir işlev veya tam bir program yazabilirsiniz.
- Giriş herhangi bir makul biçimde (örneğin, sayı veya karakter dizileri listesinin dizisi) olabilir. Kesirli değerler en az bir ondalık basamağa desteklenmelidir. Eksik bir ağırlık yüzdesi (bir tutarlı ve kesin bir şekilde temsil edilebilir
0
,'?'
ya danull
örneğin,). Sen girdi daima geçerli bir reçeteye ilişkilendirilir (varsayabiliriz[70]
ve[∅, ∅, 50]
örneğin geçersiz edilir). - Çıkış herhangi bir makul biçimde (örneğin, minimal ve maksimal ağırlık yüzdeleri ya da çifti tek bir liste her ikisi için bir dizi) olabilir. Minimum ve maksimum yüzdeler herhangi bir sırada olabilir (
[min, max]
ve[max, min]
her ikisi de kabul edilebilir). Tam ağırlık yüzdelerinin, diğer yüzdelere göre farklı şekilde işlenmesi gerekmez ve eşit minimum ve maksimum değerlerle temsil edilebilir.
Kod-golf için standart kurallar geçerlidir: kodunuzu yazarken, makarna tabağım soğuyor, bu yüzden en kısa sürede gönderim kazanıyor.
Örnekler
Bu problem ilk bakışta göründüğünden daha zor olduğu için, işte birkaç vakanın adım adım çözümü.
[40, ∅, ∅]
Sırasıyla x
ve y
iki eksik yüzdeyi arayalım .
- Çünkü% 40'taki ilk bileşenden sonra geliyor,%
x
40'tan fazla olamaz.[40, [?, 40], [?, ?]]
- İki eksik yüzeyin toplamı her zaman% 60'tır. Sonuç olarak:
- Eğer
x
kendi alan maksimum değer, ardındany
da alır az = 20% 40% - bu nedenle% 60 değeri.[40, [?, 40], [20, ?]]
- Eğer
x
onun alır minimum değer, ardındany
da alır maksimal değer. Fakatx
bundan daha düşük olamazy
, bu durumda,x
=y
=% 60/2 =% 30.[40, [30, 40], [20, 30]]
- Eğer
[70, ∅, ∅, 5, ∅]
En sırasıyla diyelim x
, y
ve z
üç kayıp yüzdeleri.
- Minimum ve maksimum yüzdeler
z
mutlaka% 0 ile% 5 arasındadır.z
Bir an için = 0% varsayalım . İki eksik yüzeyin toplamı her zaman% 25'tir. Sonuç olarak:[70, [?, ?], [?, ?], 5, [0, 5]]
- Eğer
y
kendi alan en az bir değer,% 5, sonrax
da sürer maksimum = 20% 5% - bu nedenle% 25 değeri.[70, [?, 20], [5, ?], 5, [0, 5]]
- Eğer
y
onun alır maksimal değer, ardındanx
da alır minimum değerini. Fakatx
bundan daha düşük olamazy
, bu durumda,x
=y
=% 25/2 =% 12,5.[70, [12.5, 20], [5, 12.5], 5, [0, 5]]
- Eğer
- Şimdi
z
% = 5 olduğunu kabul edersek her şeyin yolunda olduğunu doğrulayalım . İki eksik yüzeyin toplamı her zaman% 20'dir. Sonuç olarak:- Eğer
y
kendi alan en az bir değer,% 5, sonrax
da sürer maksimum = 15% 5% - bu nedenle% 20 değeri. Bu dava daha önce hesaplanan aralıklara dahil edilmiştir. - Eğer
y
onun alır maksimal değer, ardındanx
da alır minimum değerini. Fakatx
bundan daha düşük olamazy
, bu durumda,x
=y
= 20% / 2 = 10%. Bu dava için önceden hesaplanmış olan aralığa zaten dahil edilmiştiry
, ancak için değildirx
.[70, [10, 20], [5, 12.5], 5, [0, 5]]
- Eğer
Test durumları
Input: [∅]
Output: [100]
Input: [70, 30]
Output: [70, 30]
Input: [70, ∅, ∅]
Output: [70, [15, 30], [0, 15]]
Input: [40, ∅, ∅]
Output: [40, [30, 40], [20, 30]]
Input: [∅, ∅, 10]
Output: [[45, 80], [10, 45], 10]
Input: [70, ∅, ∅, ∅]
Output: [70, [10, 30], [0, 15], [0, 10]]
Input: [70, ∅, ∅, 5, ∅]
Output: [70, [10, 20], [5, 12.5], 5, [0, 5]]
Input: [30, ∅, ∅, ∅, 10, ∅, ∅, 5, ∅, ∅]
Output: [30, [10, 25], [10, 17.5], [10, 15], 10, [5, 10], [5, 10], 5, [0, 5], [0, 5]]
[40, ∅, ∅]
ve [70, ∅, ∅, 5, ∅]
biraz daha net yapmak şeyler. Test davalarına bakmadan, şu anki durum böyle olmayan bir zorluk net olmalı. Bunu doğru bir şekilde anlarsam [40, ∅, ∅]
:% 100 için bu daha fazlasına bölünmüş% 60 daha gereklidir ∅
. Birincisi ∅
30 veya daha yüksek olmalıdır (aksi halde ikincisi ∅
bunun üzerinde olacaktır, bu sırada sırayla mümkün olmamalıdır). Ek olarak, yukarıda olamaz 40
, yani ilk ∅
olur [30,40]
ve ikinci olur [(100-40-40=)20, (100-40-30=)30]
.
[min,max]
/ [max,min]
veya karışık izin verilir?
[min,max]
ve [max,min]
sınırda kabul edilebilir, ancak belirsiz sonuçlara yol açamadığından , tamam olduğunu söyleyebilirim.
[70, 12, 11, 5, 2]
ikinci örnek için çalışmıyor ? İşe yararsa, asgari x
olandan daha az olacaktır 12.5
.