عثرت على مجموعة من علماء الرياضيات الذين يغنّون ويكتبون الأغاني أيضًا. لقد ألّفوا أغنية لكل عدد من أعدادهم المفضلة، وكما يمكنك أن تتخيل، لديهم الكثير من الأعداد المفضلة (مثل 0 أو 73 أو 6174).
أنت متشوّق لسماع الأغنية الخاصة بعددك المفضل، لكن مع كل هذه الأغاني التي عليك تصفّحها، قد يستغرق العثور على الأغنية المناسبة بعض الوقت. لحسن الحظ، رتّبوا أغانيهم في قائمة تشغيل مرتّبة حسب العنوان، وهو ببساطة العدد الذي تدور حوله الأغنية.
تدرك أنه يمكنك استخدام خوارزمية البحث الثنائي للعثور على أغنية بسرعة انطلاقًا من عنوانها.
مهمتك هي تنفيذ خوارزمية بحث ثنائي.
تعثر خوارزمية البحث الثنائي على عنصر في مصفوفة عبر تقسيمها إلى نصفين مرارًا، مع الاحتفاظ فقط بالنصف الذي يحتوي على العنصر الذي نبحث عنه. وهي تتيح لنا تضييق المواضع المحتملة لعنصرنا بسرعة حتى نجده، أو حتى نستبعد جميع المواضع الممكنة.
لا يعمل البحث الثنائي إلا عندما تكون المصفوفة مرتبة.
تبدو الخوارزمية هكذا:
إليك مثال:
لنفترض أننا نبحث عن العدد 23 في المصفوفة المرتبة التالية: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32].[23].Haskell تدعم أنواعًا كثيرة من المصفوفات. يستخدم هذا التمرين مصفوفات غير قابلة للتغيير، ومعلبة، وغير صارمة من Data.Array. يمكنك قراءة المزيد عن استخدام هذه المصفوفات في:
كإضافة اختيارية لهذا التمرين، حاول أن تجعل الدالة find تعمل مع مصفوفات بأي حدود، مثل المصفوفات التي لا يلزم أن يكون فيها الفهرس الأول 0.
سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.