Kurzusok
/
Julia
Julia
/
Feladatok
/
Kevert gyümölcslevek
Kevert gyümölcslevek

Kevert gyümölcslevek

Tanulófeladat

Bevezetés

Alapvetően kétféle ciklus létezik:

  1. Ismétlés addig, amíg egy feltétel teljesül.
  2. Végigiterálás egy gyűjtemény elemein.

Mindkettő lehetséges Juliában, bár a második talán gyakoribb.

A while ciklus

Azokra a nyitott végű problémákra, ahol előre nem tudjuk, hányszor megyünk körbe a cikluson, a Julia a while ciklust kínálja.

Az alapforma meglehetősen egyszerű:

while condition
    do_something()
end

Ebben az esetben a program addig járja körbe a ciklust, amíg a condition már nem true.

Kétféleképpen lehet idő előtt kilépni a ciklusból:

  • A break hatására a ciklus kilép, és a végrehajtás a ciklus end utáni sorban folytatódik.
  • A return x leállítja az aktuális függvény végrehajtását, és az x visszatérési értéket visszaadja a hívónak.

Ezekkel a lehetőségekkel néha kényelmes egy „végtelen” ciklust létrehozni a while true ... end segítségével, majd a ciklustörzsben talált leállási feltételre bízni, hogy az kiváltsa a break vagy return utasítást.

Ciklus egy gyűjtemény elemein

A legegyszerűbb példa egy tartományon való végigiterálás.

Ha valamit tízszer szeretnénk elvégezni:

for n in 1:10
    do_something(n)
end

Ha az aktuális iteráció nem teljesít valamilyen feltételt, a continue segítségével azonnal átugorhatunk a következő iterációra:

for n in 1:10
    if is_useless(n)
        continue
    end
    
    # we decided this iteration could be useful
    do_something_slow(n)
end

Rövidebb formában az if blokk helyettesíthető ezzel: is_useless(n) && continue.

Sok más gyűjteménytípuson is végig lehet iterálni: egy tömb elemein, egy string karakterein, egy szótár kulcsain...

Az eddigi példák az 1:10 tartományon iterálnak, ahol az érték egyben a ciklus indexe is.

Általánosabban előfordulhat, hogy nemcsak az értékre, hanem az indexre is szükség van. Erre az eachindex() függvény szolgál, például így: for i in eachindex(my_array) ... end.

Utasítások

A barátod, Li Mei egy gyümölcslébárt vezet, ahol finom, kevert gyümölcsleveket árul. Te gyakori vendég vagy a boltjában, és rájöttél, hogy megkönnyíthetnéd a barátod életét. Úgy döntesz, hogy a programozási tudásodat bevetve segítesz Li Mei-nak a munkájában.

1. Határozd meg, mennyi ideig tart megkeverni egy gyümölcslevet

Li Mei szeret előre megmondani a vendégeinek, mennyit kell várniuk a menüből rendelt gyümölcsléjükre. Nehezen jegyzi meg a pontos számokat, mert a gyümölcslevek megkeverése különböző ideig tart. A "Pure Strawberry Joy" 0,5 percet vesz igénybe, az "Energizer" és a "Green Garden" 1,5 percet, a "Tropical Island" 3 percet, az "All or Nothing" pedig 5 percet. Minden más italnál (például az akciós ajánlatoknál) 2,5 perces elkészítési idővel számolhatsz.

Hogy segíts a barátodnak, írj egy time_to_mix_juice függvényt, amely argumentumként egy gyümölcslevet kap a menüből, és visszaadja, hány percig tart megkeverni azt az italt.

julia> time_to_mix_juice("Tropical Island")
3

julia> time_to_mix_juice("Berries & Lime")
2.5

2. Töltsd fel a limécikkek készletét

Li Mei sok kreációja tartalmaz limécikket, akár összetevőként, akár a díszítés részeként. Ezért amikor reggel elkezdi a műszakot, gondoskodnia kell róla, hogy a limécikkek tárolója tele legyen a nap hátralévő részére.

Készítsd el a limes_to_cut függvényt, amely megkapja, hány limécikket kell Li Mei-nak felvágni, valamint egy tömböt, amely a kéznél lévő egész lime-ok készletét képviseli. Egy "small" lime-ból 6 limécikket, egy "medium" lime-ból 8 limécikket, egy "large" lime-ból pedig 10 limécikket tud kivágni. A lime-okat mindig abban a sorrendben vágja fel, ahogy a listában szerepelnek, az első elemmel kezdve. Addig folytatja, amíg el nem éri a szükséges cikkek számát, vagy amíg el nem fogynak a lime-ok.

Li Mei szeretné előre tudni, hány lime-ot kell felvágni. A limes_to_cut függvény adja vissza, hány lime-ot kell felvágni.

julia> limes_to_cut(25, ["small", "small", "large", "medium", "small"])
4

3. Sorold fel, mennyi ideig tart megkeverni a sorban álló rendeléseket

Li Mei szereti nyomon követni, mennyi ideig tart megkeverni azokat a rendeléseket, amelyekre a vendégek várnak.

Készítsd el az order_times függvényt, amely megkapja a rendelések sorát, és visszaad egy vektort az elkeverési időkkel.

julia> order_times(["Energizer", "Tropical Island"])
[1.5, 3.0]

4. Fejezd be a műszakot

Li Mei mindig délután 3-ig dolgozik. Utána az alkalmazottja, Dmitry veszi át a munkát. Gyakran előfordul, hogy Li Mei műszakjának végén vannak olyan italok, amelyeket már megrendeltek, de még nem készültek el. Ekkor Dmitry készíti el a maradék gyümölcsleveket.

Hogy könnyebb legyen az átadás, készítsd el a remaining_orders függvényt, amely megkapja a Li Mei műszakjából hátralévő percek számát, valamint a megrendelt, de még el nem készített gyümölcslevek tömbjét. A függvény azokat a rendeléseket adja vissza, amelyeket Li Mei a munkanapja vége előtt már nem tud elkezdeni elkészíteni.

A műszakból hátralévő idő mindig nagyobb lesz, mint 0. Az elkészítendő gyümölcslevek tömbje soha nem lesz üres. A rendeléseket ráadásul abban a sorrendben készítik el, ahogy a tömbben szerepelnek. Ha Li Mei elkezd megkeverni egy bizonyos gyümölcslevet, mindig be is fejezi, még akkor is, ha kicsit tovább kell dolgoznia. Ha nem marad olyan rendelés, amellyel Dmitry-nak foglalkoznia kell, akkor üres vektort kell visszaadni.

julia> remaining_orders(5, ["Energizer", "All or Nothing", "Green Garden"])
["Green Garden"]
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Julia Exercism

Készen állsz elkezdeni a(z) Kevert gyümölcslevek feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Julia nyelvet 35 fogalom128 feladat segítségével, valódi emberi mentorálással, mindez ingyen.