عثرت على مجموعة من علماء الرياضيات الذين يغنّون ويكتبون الأغاني أيضًا. لقد ألّفوا أغنية لكل عدد من أعدادهم المفضلة، وكما يمكنك أن تتخيل، لديهم الكثير من الأعداد المفضلة (مثل 0 أو 73 أو 6174).
أنت متشوّق لسماع الأغنية الخاصة بعددك المفضل، لكن مع كل هذه الأغاني التي عليك تصفّحها، قد يستغرق العثور على الأغنية المناسبة بعض الوقت. لحسن الحظ، رتّبوا أغانيهم في قائمة تشغيل مرتّبة حسب العنوان، وهو ببساطة العدد الذي تدور حوله الأغنية.
تدرك أنه يمكنك استخدام خوارزمية البحث الثنائي للعثور على أغنية بسرعة انطلاقًا من عنوانها.
مهمتك هي تنفيذ خوارزمية بحث ثنائي.
تعثر خوارزمية البحث الثنائي على عنصر في مصفوفة عبر تقسيمها إلى نصفين مرارًا، مع الاحتفاظ فقط بالنصف الذي يحتوي على العنصر الذي نبحث عنه. وهي تتيح لنا تضييق المواضع المحتملة لعنصرنا بسرعة حتى نجده، أو حتى نستبعد جميع المواضع الممكنة.
لا يعمل البحث الثنائي إلا عندما تكون المصفوفة مرتبة.
تبدو الخوارزمية هكذا:
إليك مثال:
لنفترض أننا نبحث عن العدد 23 في المصفوفة المرتبة التالية: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32].[23].توفر Rust بالفعل في مكتبتها القياسية دالة البحث الثنائي. في هذا التمرين، لا ينبغي أن تستخدم هذه الدالة، بل استخدم أدوات أساسية أخرى بدلًا منها.
هل جعلت الاختبارات تنجح والكود نظيفًا؟ إذا أردت، فهناك بعض الأمور الإضافية التي يمكنك تجربتها.
find لديك تعمل فقط مع شرائح من الأعداد، لكن نظام الأنواع في Rust مرن بما يكفي لإنشاء دالة find تعمل على كل الشرائح التي تحتوي على عناصر يمكن ترتيبها.find هذه أن تعمل ليس فقط على الشرائح، بل في الوقت نفسه أيضًا على Vec أو Array.لتشغيل اختبارات النقاط الإضافية، أزل علامة #[ignore] ونفّذ الاختبارات مع ميزة generic، هكذا:
$ cargo test --features generic
ثم شاركنا أفكارك في تعليق على الحل المُرسَل. هل جعلت هذه التجربة الكود أفضل؟ أسوأ؟ هل تعلمت منها شيئًا؟
سجّل في Exercism لتتعلّم وتتقن Rust عبر 99 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.