Tracks
/
Rust
Rust
/
Exercises
/
Magazine Cutout
Magazine Cutout

Magazine Cutout

Learning Exercise

Introduction

Rust's entry API provides a view into a single entry in map, which may be either a HashMap or a BTreeMap. The entry may be either occupied or vacant, and the API provides methods to modify the contents of the entry.

Instructions

In this exercise you'll be using a HashMap, along with entry API methods, to solve a simple algorithm problem.

Given &[&str] representing the words of a magazine article, and &[&str] representing the words of a note you would like to send, can you compose your note by cutting words out of the magazine and pasting them into a letter?

Notes:

  • This implies physical cutting and pasting; the magazine needs to contain at least as many copies of each word as the note requires.
  • Capitalization matters; just because you're pasting together a note composed from words of a magazine doesn't mean you're willing to be ungrammatical.

You'll start with the following stubbed function signature:

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

Given the following input

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));

The function returns false since the magazine only contains one instance of "two" when the note requires two of them.

The following input will succeed:

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));

The function returns true since the magazine contains all the words that the note requires.

Edit via GitHub The link opens in a new window or tab
Rust Exercism

Ready to start Magazine Cutout?

Sign up to Exercism to learn and master Rust with 98 exercises, and real human mentoring, all for free.