-
+
+
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
diff --git a/buildkite.yml b/buildkite.yml
deleted file mode 100644
index 91a0753c..00000000
--- a/buildkite.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-steps:
- - label: "Test with stable"
- command: rustup run stable cargo test
- - label: "Test with beta"
- command: rustup run beta cargo test
diff --git a/default_out.txt b/default_out.txt
index 05267591..b90d1e3a 100644
--- a/default_out.txt
+++ b/default_out.txt
@@ -1,19 +1,25 @@
Thanks for installing Rustlings!
-Is this your first time?
+Is this your first time? Don't worry, Rustlings was made for beginners! We are
+going to teach you a lot of things about Rust, but before we can get
+started, here's a couple of notes about how Rustlings operates:
-Let's make sure you're up to speed:
-- You have Rust installed, preferably via `rustup`
-- You have `~/.cargo/bin` added to your PATH variable
-- You have cloned this repository (https://github.com/rust-lang/rustlings)
-- You have installed Rust language support for your editor
-- You have locally installed the `rustlings` command by running an
- installation script or manually executing:
+1. The central concept behind Rustlings is that you solve exercises. These
+ exercises usually have some sort of syntax error in them, which will cause
+ them to fail compilation or testing. Sometimes there's a logic error instead
+ of a syntax error. No matter what error, it's your job to find it and fix it!
+ You'll know when you fixed it because then, the exercise will compile and
+ Rustlings will be able to move on to the next exercise.
+2. If you run Rustlings in watch mode (which we recommend), it'll automatically
+ start with the first exercise. Don't get confused by an error message popping
+ up as soon as you run Rustlings! This is part of the exercise that you're
+ supposed to solve, so open the exercise file in an editor and start your
+ detective work!
+3. If you're stuck on an exercise, there is a helpful hint you can view by typing
+ 'hint' (in watch mode), or running `rustlings hint myexercise`.
+4. If an exercise doesn't make sense to you, feel free to open an issue on GitHub!
+ (https://github.com/rust-lang/rustlings/issues/new). We look at every issue,
+ and sometimes, other learners do too so you can help each other out!
-cargo install --force --path .
-
-If you've done all of this (or even most of it), congrats! You're ready
-to start working with Rust.
-
-To get started, run `rustlings watch` in order to get the first exercise.
-Make sure to have your editor open!
+Got all that? Great! To get started, run `rustlings watch` in order to get the first
+exercise. Make sure to have your editor open!
diff --git a/exercises/README.md b/exercises/README.md
new file mode 100644
index 00000000..0c715247
--- /dev/null
+++ b/exercises/README.md
@@ -0,0 +1,24 @@
+# Exercise to Book Chapter mapping
+
+| Exercise | Book Chapter |
+|------------------------|--------------|
+| variables | §3.1 |
+| functions | §3.3 |
+| if | §3.5 |
+| move_semantics | §4.1 |
+| primitive_types | §4.3 |
+| structs | §5.1 |
+| enums | §6 |
+| modules | §7.2 |
+| collections | §8.1 |
+| strings | §8.2 |
+| error_handling | §9 |
+| generics | §10 |
+| option | §10.1 |
+| traits | §10.2 |
+| tests | §11.1 |
+| standard_library_types | §13.2 |
+| threads | §16.1 |
+| macros | §19.6 |
+| clippy | n/a |
+| conversions | n/a |
diff --git a/exercises/clippy/README.md b/exercises/clippy/README.md
index 60a12fe5..55438af6 100644
--- a/exercises/clippy/README.md
+++ b/exercises/clippy/README.md
@@ -1,8 +1,10 @@
-### Clippy
+# Clippy
The Clippy tool is a collection of lints to analyze your code so you can catch common mistakes and improve your Rust code.
If you used the installation script for Rustlings, Clippy should be already installed.
If not you can install it manually via `rustup component add clippy`.
-For more information about Clippy lints, please see [their documentation page](https://rust-lang.github.io/rust-clippy/master/).
+## Further information
+
+- [GitHub Repository](https://github.com/rust-lang/rust-clippy).
diff --git a/exercises/collections/README.md b/exercises/collections/README.md
new file mode 100644
index 00000000..0291bc87
--- /dev/null
+++ b/exercises/collections/README.md
@@ -0,0 +1,22 @@
+# Collections
+
+Rust’s standard library includes a number of very useful data
+structures called collections. Most other data types represent one
+specific value, but collections can contain multiple values. Unlike
+the built-in array and tuple types, the data these collections point
+to is stored on the heap, which means the amount of data does not need
+to be known at compile time and can grow or shrink as the program
+runs.
+
+This exercise will get you familiar with two fundamental data
+structures that are used very often in Rust programs:
+
+* A *vector* allows you to store a variable number of values next to
+ each other.
+* A *hash map* allows you to associate a value with a particular key.
+ You may also know this by the names [*unordered map* in C++](https://en.cppreference.com/w/cpp/container/unordered_map),
+ [*dictionary* in Python](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) or an *associative array* in other languages.
+
+## Further information
+
+- [Storing Lists of Values with Vectors](https://doc.rust-lang.org/stable/book/ch08-01-vectors.html)
diff --git a/exercises/collections/hashmap1.rs b/exercises/collections/hashmap1.rs
new file mode 100644
index 00000000..64b5a7f3
--- /dev/null
+++ b/exercises/collections/hashmap1.rs
@@ -0,0 +1,44 @@
+// hashmap1.rs
+// A basket of fruits in the form of a hash map needs to be defined.
+// The key represents the name of the fruit and the value represents
+// how many of that particular fruit is in the basket. You have to put
+// at least three different types of fruits (e.g apple, banana, mango)
+// in the basket and the total count of all the fruits should be at
+// least five.
+//
+// Make me compile and pass the tests!
+//
+// Execute the command `rustlings hint hashmap1` if you need
+// hints.
+
+// I AM NOT DONE
+
+use std::collections::HashMap;
+
+fn fruit_basket() -> HashMap