Rutas
/
Elm
Elm
/
Ejercicios
/
La búsqueda del tesoro de Tisbury
La búsqueda del tesoro de Tisbury

La búsqueda del tesoro de Tisbury

Ejercicio de aprendizaje

Introducción

Tuplas

Las tuplas en Elm pueden contener dos o tres valores, y cada valor puede ser de cualquier tipo. En Elm, las tuplas se usan sobre todo para tipos transitorios simples. Por este motivo, las tuplas tienen un máximo de 3 valores y, como incentivo adicional, solo se proporcionan funciones de conveniencia para 2 valores. Para datos más complejos, lo mejor es pasarse a los registros.

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"

Las tuplas se pueden desestructurar en enlaces usando la coincidencia de patrones de tuplas. La desestructuración puede hacerse en expresiones let, declaraciones de funciones e instrucciones 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

Instrucciones

Aazra y Rui están diseñando una búsqueda del tesoro con temática pirata. Hay un array de tesoros con sus ubicaciones en el mapa y otro array de nombres de lugares con sus ubicaciones en el mapa.

Tesoro Ubicació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)
Nombre del lugar Ubicación Cuadrante
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

Los jugadores viajarán por el mapa recogiendo tesoros a medida que avancen. Las ubicaciones de los tesoros y de los lugares tienen formatos diferentes, para añadir un desafío extra. También hay algunos lugares especiales, donde ciertos tesoros se pueden intercambiar por otros, para añadir un giro extra al juego. Tu tarea es escribir funciones que les ayuden con su juego.

1. Convierte ubicaciones

Implementa la función placeLocationToTreasureLocation, que recibe una ubicación de lugar (como ('C', 1)) y la convierte en una ubicación de tesoro (como (1, 'C')).

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

2. Compara ubicaciones de tesoros y lugares

Implementa la función treasureLocationMatchesPlaceLocation, que recibe una PlaceLocation (como ('C', 1)) y devuelve true si coincide con una TreasureLocation (como (1, 'C')).

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

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

3. Cuenta ubicaciones de tesoros

Implementa la función countPlaceTreasures, que recibe un lugar (como ("Aqua Lagoon (Island of Mystery)", ('F', 1))) y el array de tesoros, y devuelve el número de tesoros que se pueden encontrar allí.

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

countPlaceTreasures place treasures =
--> 2

4. Lugares especiales

Implementa la función specialCaseSwapPossible, que recibe un tesoro (como ("Amethyst Octopus", (1, 'F'))) y un lugar (como ("Seaside Cottages ", ('C', 1))) y devuelve true para las siguientes combinaciones:

  • El Brass Spyglass se puede intercambiar por cualquier otro tesoro en el Abandoned Lighthouse
  • El Amethyst Octopus se puede intercambiar por el Crystal Crab o la Glass Starfish en el Stormy Breakwater
  • El Vintage Pirate Hat se puede intercambiar por el Model Ship in Large Bottle o el Antique Glass Fishnet Float en la Harbor Managers Office

Intenta implementar esta función como una instrucción case con una tupla ad hoc, en lugar de usar instrucciones if (es un patrón común en Elm).

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Elm Exercism

¿Listo para empezar La búsqueda del tesoro de Tisbury?

Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.