Διαδρομές
/
Elm
Elm
/
Ασκήσεις
/
Κυνήγι θησαυρού στο Tisbury
Κυνήγι θησαυρού στο Tisbury

Κυνήγι θησαυρού στο Tisbury

Άσκηση εκμάθησης

Εισαγωγή

Πλειάδες

Οι πλειάδες στην Elm μπορούν να περιέχουν δύο ή τρεις τιμές, και κάθε τιμή μπορεί να έχει οποιονδήποτε τύπο. Στην Elm, οι πλειάδες χρησιμοποιούνται κυρίως για απλούς προσωρινούς τύπους. Γι' αυτόν τον λόγο οι πλειάδες έχουν το πολύ 3 τιμές, και ως ένα επιπλέον κίνητρο οι εύχρηστες συναρτήσεις παρέχονται μόνο για 2 τιμές. Για πιο σύνθετα δεδομένα, είναι καλύτερα να περάσεις σε records.

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"

Οι πλειάδες μπορούν να αποδομηθούν σε δεσμεύσεις χρησιμοποιώντας αντιστοίχιση προτύπων πλειάδας. Η αποδόμηση μπορεί να γίνει σε εκφράσεις let (έστω), σε δηλώσεις συναρτήσεων και σε εντολές case.

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

Οδηγίες

Ο Aazra και ο Rui σχεδιάζουν ένα κυνήγι θησαυρού με θέμα τους πειρατές. Υπάρχει μια λίστα με θησαυρούς και τις τοποθεσίες τους στον χάρτη, και μια άλλη λίστα με ονόματα τοποθεσιών και τις τοποθεσίες τους στον χάρτη.

Θησαυρός Τοποθεσία
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)
Όνομα τοποθεσίας Τοποθεσία Τεταρτημόριο
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

Οι παίκτες θα περιπλανηθούν στον χάρτη μαζεύοντας θησαυρούς στην πορεία. Οι τοποθεσίες των θησαυρών και των μέρων έχουν διαφορετική μορφή, για να προσθέσουν μια επιπλέον πρόκληση. Υπάρχουν επίσης κάποια ειδικά μέρη, όπου ορισμένοι θησαυροί μπορούν να ανταλλαχθούν με κάποιους άλλους, για να προσθέσουν μια επιπλέον ανατροπή στο παιχνίδι. Η δουλειά σου είναι να γράψεις συναρτήσεις που θα τους βοηθήσουν με το παιχνίδι τους.

1. Μετάτρεψε τις τοποθεσίες

Υλοποίησε τη συνάρτηση placeLocationToTreasureLocation που παίρνει μια τοποθεσία μέρους (όπως ('C', 1)) και τη μετατρέπει σε τοποθεσία θησαυρού (όπως (1, 'C')).

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

2. Σύγκρινε τοποθεσίες θησαυρού και μέρους

Υλοποίησε τη συνάρτηση treasureLocationMatchesPlaceLocation που παίρνει μια PlaceLocation (όπως ('C', 1)) και επιστρέφει την τιμή αληθής αν ταιριάζει με μια TreasureLocation (όπως (1, 'C')).

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

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

3. Μέτρησε τις τοποθεσίες θησαυρού

Υλοποίησε τη συνάρτηση countPlaceTreasures, που παίρνει ένα μέρος (όπως ("Aqua Lagoon (Island of Mystery)", ('F', 1))) και τη λίστα με τους θησαυρούς, και επιστρέφει τον αριθμό των θησαυρών που μπορούν να βρεθούν εκεί.

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

countPlaceTreasures place treasures =
--> 2

4. Ειδικά μέρη

Υλοποίησε τη συνάρτηση specialCaseSwapPossible, που παίρνει έναν θησαυρό (όπως ("Amethyst Octopus", (1, 'F'))) και ένα μέρος (όπως ("Seaside Cottages ", ('C', 1))), και επιστρέφει την τιμή αληθής για τους παρακάτω συνδυασμούς:

  • Το Brass Spyglass μπορεί να ανταλλαχθεί με οποιονδήποτε άλλο θησαυρό στο Abandoned Lighthouse
  • Το Amethyst Octopus μπορεί να ανταλλαχθεί με το Crystal Crab ή το Glass Starfish στο Stormy Breakwater
  • Το Vintage Pirate Hat μπορεί να ανταλλαχθεί με το Model Ship in Large Bottle ή το Antique Glass Fishnet Float στο Harbor Managers Office

Προσπάθησε να υλοποιήσεις αυτή τη συνάρτηση ως εντολή case με μια ad hoc πλειάδα, αντί να χρησιμοποιήσεις εντολές if (αυτό είναι ένα κοινό ιδίωμα στην Elm).

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Elm Exercism

Έτοιμος να ξεκινήσεις την άσκηση Κυνήγι θησαυρού στο Tisbury;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elm με 28 έννοιες110 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.