قصاصة مجلة

قصاصة مجلة

تمرين تعلّمي

مقدمة

يوفر API للمدخل في Rust إطلالة على مدخل واحد في خريطة، قد تكون إما HashMap أو BTreeMap. قد يكون المدخل مشغولاً أو فارغاً، ويوفر API للمدخل طُرقاً لتعديل محتويات المدخل.

التعليمات

في هذا التمرين ستستخدم HashMap، إلى جانب طرق entry في API، لحل مسألة خوارزمية بسيطة.

بالنظر إلى &[&str] يمثل كلمات مقالة في مجلة، و&[&str] يمثل كلمات ملاحظة تريد إرسالها، هل يمكنك تركيب ملاحظتك بقص كلمات من المجلة ولصقها في رسالة؟

ملاحظات:

  • هذا يعني القص واللصق الفعلي؛ يجب أن تحتوي المجلة على عدد من نسخ كل كلمة لا يقل عمّا تتطلبه الملاحظة.
  • كتابة الأحرف الكبيرة مهمة؛ فمجرد أنك تلصق معًا ملاحظة مكوّنة من كلمات مجلة لا يعني أنك مستعد لأن تكون جملتك غير صحيحة نحويًا.

ستبدأ بتوقيع الدالة الأولي التالي:

pub fn can_construct_note(magazine: &[&str], note: &[&str]) -> bool {
    todo!()
}

مع المدخل التالي

let magazine = "two times three is not four".split_whitespace().collect::<Vec<&str>>();
let note = "two times two is four".split_whitespace().collect::<Vec<&str>>();
assert!(!can_construct_note(&magazine, &note));

تُرجع الدالة false لأن المجلة تحتوي على نسخة واحدة فقط من "two" بينما تتطلب الملاحظة نسختين منها.

سينجح المدخل التالي:

let magazine = "Astronomer Amy Mainzer spent hours chatting with Leonardo DiCaprio for Netflix's 'Don't Look Up'".split_whitespace().collect::<Vec<&str>>();
let note = "Amy Mainzer chatting with Leonardo DiCaprio"
    .split_whitespace()
    .collect::<Vec<&str>>();
assert!(can_construct_note(&magazine, &note));

تُرجع الدالة true لأن المجلة تحتوي على كل الكلمات التي تتطلبها الملاحظة.

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

مستعد لبدء قصاصة مجلة؟

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