Kurzusok
/
Elm
Elm
/
Feladatok
/
Tisbury kincsvadászata
Tisbury kincsvadászata

Tisbury kincsvadászata

Tanulófeladat

Bevezetés

Tuple-ok

Az Elmben a tuple-ok két vagy három értéket tárolhatnak, és mindegyik érték bármilyen típusú lehet. Az Elmben a tuple-öket többnyire egyszerű, átmeneti típusokra használjuk. Ezért a tuple-ök legfeljebb 3 értéket tartalmazhatnak, és hogy még inkább erre ösztönözzenek, kényelmi függvényeket csak 2 értékhez biztosítanak. Bonyolultabb adatokhoz viszont jobb áttérni a rekordokra.

type alias IntStringTuple = (Int, String)

aTuple : IntStringTuple
aTuple = (123, "elements can be of differing types")

anotherTuple : (String, String)
anotherTuple = Tuple.pair "this time it's" "two strings"
    --> ("this time it's", "two strings")

Tuple.first aTuple
    --> 123

Tuple.second aTuple
    --> "elements can be of differing types"

A tuple-öket destrukturálni lehet kötésekben, tuple-mintaillesztéssel. A destrukturálás elvégezhető let kifejezésekben, függvénydeklarációkban és case utasításokban.

repeatString : (Int, String) -> Bool
repeatString aTuple =
let
    (aNumber, aString) = aTuple
in
    String.repeat aNumber aString

repeatStringAgain : (Int, String) -> Bool
repeatStringAgain (aNumber, aString) = String.repeat aNumber aString

has123 : (Int, String, Bool) -> Bool
has123 aTuple =
    case aTuple of
        (123, _, _) ->
            True
        (_, "123", _) ->
            True
        (_, _, True) ->
            True
        _ ->
            False

Utasítások

Aazra és Rui kalóztémájú kincsvadászatot tervez. Az egyik lista a térképi helyükkel együtt sorolja fel a kincseket, a másik pedig a helyszíneket.

Kincs Helyszín
Amethyst Octopus (1, F)
Angry Monkey Figurine (5, B)
Antique Glass Fishnet Float (3, D)
Brass Spyglass (4, B)
Carved Wooden Elephant (8, C)
Crystal Crab (6, A)
Glass Starfish (6, D)
Model Ship in Large Bottle (8, A)
Pirate Flag (7, F)
Robot Parrot (1, C)
Scrimshaw Whale's Tooth (1, F)
Silver Seahorse (4, E)
Vintage Pirate Hat (7, E)
Hely neve Helyszín Negyed
Seaside Cottages (C, 1) Blue
Aqua Lagoon (Island of Mystery) (F, 1) Yellow
Deserted Docks (A, 2) Blue
Spiky Rocks (D, 3) Yellow
Abandoned Lighthouse (B, 4) Blue
Hidden Spring (Island of Mystery) (E, 4) Yellow
Stormy Breakwater (B, 5) Purple
Old Schooner (A, 6) Purple
Tangled Seaweed Patch (D, 6) Orange
Quiet Inlet (Island of Mystery) (E, 7) Orange
Windswept Hilltop (Island of Mystery) (F, 7) Orange
Harbor Managers Office (A, 8) Purple
Foggy Seacave (C, 8) Purple

A játékosok bejárják a térképet, és útközben kincseket szednek fel. A kincsek és a helyszínek koordinátái szándékosan más formátumban vannak megadva, hogy ezzel is növeljék a kihívást. Emellett néhány különleges helyszín is akad, ahol bizonyos kincsek bizonyos más kincsekre cserélhetők, ami még egy csavart visz a játékba. A te feladatod, hogy olyan függvényeket írj, amelyek segítenek nekik a játékban.

1. Helyszínek átalakítása

Valósítsd meg a placeLocationToTreasureLocation függvényt, amely egy helyszínkoordinátát (például ('C', 1)) vesz át, és kincskoordinátává alakítja (például (1, 'C')).

placeLocationToTreasureLocation ('C', 1)
--> (1,'C')

2. Kincs- és helyszínkoordináták összehasonlítása

Valósítsd meg a treasureLocationMatchesPlaceLocation függvényt, amely egy PlaceLocation értéket (például ('C', 1)) vesz át, és igazat ad vissza, ha az megegyezik egy TreasureLocation értékkel (például (1, 'C')).

treasureLocationMatchesPlaceLocation ('C', 1) (1, 'C')
--> true

treasureLocationMatchesPlaceLocation ('C', 1) (2, 'C')
--> false

3. Kincs-koordináták megszámolása

Valósítsd meg a countPlaceTreasures függvényt, amely egy helyszínt (például ("Aqua Lagoon (Island of Mystery)", ('F', 1))) és a kincsek listáját veszi át, majd visszaadja, hány kincs található ott.

place = ("Aqua Lagoon (Island of Mystery)", ('F', 1))

countPlaceTreasures place treasures =
--> 2

4. Különleges helyszínek

Valósítsd meg a specialCaseSwapPossible függvényt, amely egy kincset (például ("Amethyst Octopus", (1, 'F'))) és egy helyszínt (például ("Seaside Cottages ", ('C', 1))) vesz át, és igazat ad vissza a következő kombinációkra:

  • A Brass Spyglass bármely más kincsre kicserélhető az Abandoned Lighthouse-nál
  • Az Amethyst Octopus a Crystal Crab-ra vagy a Glass Starfish-re cserélhető a Stormy Breakwater-nél
  • A Vintage Pirate Hat a Model Ship in Large Bottle-ra vagy az Antique Glass Fishnet Float-ra cserélhető a Harbor Managers Office-nál

Próbáld meg ezt a függvényt case kifejezéssel és egy ad hoc tuple-lel megvalósítani, ahelyett hogy elágazásokat használnál (ez elterjedt megoldás az Elmben).

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elm Exercism

Készen állsz elkezdeni a(z) Tisbury kincsvadászata 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.