المسارات
/
Elm
Elm
/
التمارين
/
البحث عن الكنز في Tisbury
البحث عن الكنز في Tisbury

البحث عن الكنز في Tisbury

تمرين تعلّمي

مقدمة

الصفوف

يمكن للصفوف في Elm أن تحمل قيمتين أو ثلاث قيم، ويمكن أن تكون كل قيمة من أي نوع. وفي Elm، تُستخدم الصفوف غالبًا لأنواع مؤقتة بسيطة. ولهذا السبب لا تحمل الصفوف أكثر من 3 قيم، وكمزيد من التشجيع لا تُوفَّر دوال مساعدة إلا لقيمتين. أما للبيانات الأكثر تعقيدًا، فمن الأفضل الانتقال إلى السجلات.

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)) وتُرجع true إذا كان مطابقًا لـ 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)))، وتُرجع true في التركيبات التالية:

  • يمكن مبادلة 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 مع زوج مرتّب مخصّص، بدلًا من استخدام الجمل الشرطية if (وهذا أسلوب شائع في Elm).

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elm Exercism

مستعد لبدء البحث عن الكنز في Tisbury؟

سجّل في Exercism لتتعلّم وتتقن Elm عبر 28 مفهومًا110 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.