Kurzusok
/
Elm
Elm
/
Feladatok
/
El kell kapnod mindet!
El kell kapnod mindet!

El kell kapnod mindet!

Tanulófeladat

Bevezetés

Halmaz

A Set a az a típusú egyedi értékek sorozata. Az értékeknek a comparable típusba kell tartozniuk (Int, Float, Time, Char, String, valamint összehasonlítható típusokból álló tuple-ok vagy listák).

A listákat és a halmazokat a Set.toList és a Set.fromList segítségével alakíthatod át egymásba. A Set belső felépítése miatt garantált, hogy a Set.fromList segítségével kapott lista rendezett lesz.

Set.fromList [2, 3, 3, 3, 1, 1, 2]
    --> Set.fromList [1, 2, 3]

Set.toList (Set.fromList [2, 3, 3, 3, 1, 1, 2])
    --> [1, 2, 3]

A Set.empty, a Set.singleton, a Set.insert és a Set.remove segítségével halmazokat hozhatsz létre és tölthetsz fel.

Set.empty
    --> Set.fromList []

Set.singleton "hi"
    --> Set.fromList ["hi"]

eightyEight = Set.singleton 88

Set.insert 88 eightyEight
    --> Set.fromList [88]

Set.insert 89 eightyEight
    --> Set.fromList [88, 89]

Set.remove 88 eightyEight
    --> Set.fromList []

Set.remove 89 eightyEight
    --> Set.fromList [88]

A halmaz tartalmát a Set.member, a Set.isEmpty és a Set.size függvénnyel kérdezheted le.

Set.member 88 eightyEight
    --> True

Set.isEmpty eightyEight
    --> False

Set.size eightyEight
    --> 1

A halmazok a Set.union, a Set.intersect és a Set.diff függvénnyel kombinálhatók.

a = Set.fromList [1, 10, 100]
b = Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Set.union a b
    --> Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]

Set.intersect a b
    --> Set.fromList [1, 10]

Set.diff a b
    --> Set.fromList [100]

Set.diff b a
    --> Set.fromList [2, 3, 4, 5, 6, 7, 8, 9]

A halmazokat szűrheted és particionálhatod.

even n = modBy 2 n == 0

Set.filter even b
    --> Set.fromList [2, 4, 6, 8, 10]

Set.partition even b
    --> (Set.fromList [2, 4, 6, 8, 10], Set.fromList [1, 3, 5, 7, 9])

Utasítások

Úgy tűnik, a Blorkemon™️ kártyák iránti nosztalgiád egyáltalán nem lankad, sőt, újra elkezdted gyűjteni őket, és a barátaidat is ráveszed, hogy csatlakozzanak hozzád.

Ebben a feladatban a Card-okból álló gyűjteményt a Set Card típus reprezentálja, hiszen a duplikált kártyák nem fontosak, amikor a célod megszerezni az összes létező kártyát.

1. Indíts el egy gyűjteményt

Szeretnéd, ha a barátaid is beszállnának a Blorkemon™️-őrületbe, és erre a legjobb mód, ha elindítod a gyűjteményüket azzal, hogy adsz nekik egy kártyát.

Valósítsd meg a newCollection függvényt, amely egy kártyát gyűjteménnyé alakít.

newCollection "Newthree"
    --> Set.fromList ["Newthree"]

2. Növeld a gyűjteményt

Amint van egy gyűjteményed, az önálló életre kel, és növekednie kell.

Valósítsd meg az addCard függvényt, amely egy Card-ot és egy gyűjteményt kap, és egy Tuple-t ad vissza két értékkel: egy Bool-t, amely megmutatja, hogy a Card már benne volt-e a gyűjteményben, és a gyűjteményt a hozzáadott kártyával.

addCard "Scientuna" (Set.fromList ["Newthree"])
    --> (False, Set.fromList ["Newthree", "Scientuna"])

3. Kezdj el kereskedni

Most, hogy a barátaid megint Blorkemon™️-őrültek, ezt kihasználva növelheted a saját gyűjteményedet kártyacserékkel.

Nem minden csere éri meg, és nem is minden csere lehetséges egyáltalán. Nem cserélhetsz el olyan kártyát, amivel nem rendelkezel, és nem is érdemes olyan kártyát elcserélned, amely már megvan.

Valósítsd meg a tradeCard függvényt, amely a két elcserélendő kártyát (a tiédet és az övékét) és a jelenlegi gyűjteményedet kapja. A visszatérési érték egy Tuple két értékkel: egy Bool, amely megmondja, hogy a csere lehetséges-e és megéri-e, valamint a gyűjtemény, amelyhez a csere végrehajtása után jutnál (még akkor is, ha valójában nem lehetséges).

tradeCard "Scientuna" "Newthree" (Set.fromList ["Scientuna"])
    --> (True, Set.fromList ["Newthree"])

4. Mindegyikből csak egy lehet

Találsz egy régi kártyakészletet a bolhapiacon. Rendezned kell a kártyákat, és el kell távolítanod a duplikátumokat, hogy össze tudd hasonlítani a listát a gyűjteményeddel.

Valósítsd meg a removeDuplicates függvényt, amely rendezi a kártyák listáját, és a rendezett, egyedi kártyák listáját adja vissza.

removeDuplicates ["Newthree", "Newthree", "Newthree", "Scientuna"]
    --> ["Newthree", "Scientuna"]

5. Kártyák, amikkel ők nem rendelkeznek

Itt az idő, hogy büszke lehess a gyűjteményedre.

Valósítsd meg az extraCards függvényt, amely a te gyűjteményedet és egy másik gyűjteményt kap, és visszaadja azon kártyák számát, amelyekkel a másik gyűjtemény nem rendelkezik.

extraCards (Set.fromList ["Scientuna"]) (Set.fromList ["Newthree", "Scientuna"])
    --> 0

6. Kártyák, amikkel mindannyian rendelkeznek

Te és a Blorkemon™️-rajongó barátaid összegyűltök, és azon tanakodtok, melyik kártyák a leggyakoribbak.

Valósítsd meg a boringCards függvényt, amely gyűjtemények listáját kapja, és visszaadja azon rendezett kártyák listáját, amelyek minden gyűjteményben megtalálhatók.

boringCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
    --> ["Scientuna"]

7. Az összes kártya

Neked és a barátaidnak együtt megvan az összes Blorkemon™️ kártya?

Valósítsd meg a totalCards függvényt, amely gyűjtemények listáját kapja, és visszaadja az összes gyűjteményben található különböző kártyák teljes számát.

totalCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
    --> 2

8. Fényes kártyák a győzelemért

A unokaöcséd hamarosan meglátogat, és szeretnél lenyűgözni őt. A gyerekek szeretik a fényes dolgokat, ugye? A Blorkemon™️ kártyák fényesek is lehetnek!

Valósítsd meg a splitShinyCards függvényt, amely egy gyűjteményt kap, és egy Tuple-t ad vissza két rendezett kártyalistával: az egyikben az összes "Shiny"-vel kezdődő kártya, a másikban a többi kártya.

splitShinyCards (Set.fromList ["Newthree", "Scientuna", "Shiny Scientuna"])
    --> (["Shiny Scientuna"], ["Newthree", "Scientuna"])
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elm Exercism

Készen állsz elkezdeni a(z) El kell kapnod mindet! feladatot?

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