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
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.
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')
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
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
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:
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).
Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.