From 40959e21630c658511e431eb80cea8e197886187 Mon Sep 17 00:00:00 2001
From: CaribouJohn <john@heath.mx>
Date: Sun, 26 Jul 2020 16:26:30 +0100
Subject: [PATCH] completed exercises

---
 Cargo.lock                                    |  2 +-
 exercises/enums/enums1.rs                     | 12 +++++---
 exercises/enums/enums2.rs                     |  9 +++++-
 exercises/enums/enums3.rs                     | 19 +++++++++++-
 exercises/functions/functions1.rs             |  5 +++-
 exercises/functions/functions2.rs             |  3 +-
 exercises/functions/functions3.rs             |  4 +--
 exercises/functions/functions4.rs             |  3 +-
 exercises/functions/functions5.rs             |  3 +-
 exercises/if/if1.rs                           |  6 +++-
 exercises/if/if2.rs                           |  5 ++--
 exercises/macros/macros1.rs                   |  4 +--
 exercises/macros/macros2.rs                   |  3 +-
 exercises/macros/macros3.rs                   |  2 +-
 exercises/macros/macros4.rs                   |  3 +-
 exercises/modules/modules1.rs                 |  3 +-
 exercises/modules/modules2.rs                 |  5 ++--
 exercises/move_semantics/move_semantics1.rs   |  7 +++--
 exercises/move_semantics/move_semantics2.rs   | 29 +++++++++++--------
 exercises/move_semantics/move_semantics3.rs   |  3 +-
 exercises/move_semantics/move_semantics4.rs   |  6 ++--
 exercises/primitive_types/primitive_types1.rs |  3 +-
 exercises/primitive_types/primitive_types2.rs |  3 +-
 exercises/primitive_types/primitive_types3.rs |  3 +-
 exercises/primitive_types/primitive_types4.rs |  3 +-
 exercises/primitive_types/primitive_types5.rs |  3 +-
 exercises/primitive_types/primitive_types6.rs |  4 +--
 exercises/quiz1.rs                            |  9 +++++-
 exercises/quiz2.rs                            | 21 +++++++-------
 exercises/quiz3.rs                            |  4 +--
 exercises/quiz4.rs                            |  8 +++--
 exercises/strings/strings1.rs                 |  3 +-
 exercises/strings/strings2.rs                 |  3 +-
 exercises/structs/structs1.rs                 | 19 +++++++-----
 exercises/structs/structs2.rs                 |  8 +++--
 exercises/structs/structs3.rs                 | 15 ++++++----
 exercises/tests/tests1.rs                     |  4 +--
 exercises/tests/tests2.rs                     |  3 +-
 exercises/tests/tests3.rs                     |  3 +-
 exercises/variables/variables1.rs             |  3 +-
 exercises/variables/variables2.rs             |  3 +-
 exercises/variables/variables3.rs             |  3 +-
 exercises/variables/variables4.rs             |  3 +-
 exercises/variables/variables5.rs             |  3 +-
 exercises/variables/variables6.rs             |  3 +-
 45 files changed, 154 insertions(+), 119 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 52c8ed4..732a4b5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -592,7 +592,7 @@ dependencies = [
 
 [[package]]
 name = "rustlings"
-version = "3.0.0"
+version = "4.0.0"
 dependencies = [
  "assert_cmd 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/exercises/enums/enums1.rs b/exercises/enums/enums1.rs
index a2223d3..de1e443 100644
--- a/exercises/enums/enums1.rs
+++ b/exercises/enums/enums1.rs
@@ -1,16 +1,20 @@
 // enums1.rs
 // Make me compile! Execute `rustlings hint enums1` for hints!
 
-// I AM NOT DONE
-
 #[derive(Debug)]
 enum Message {
     // TODO: define a few types of messages as used below
+    Quit,
+    Echo(String),
+    Move,
+    ChangeColor {
+        color: String,
+    }
 }
 
 fn main() {
     println!("{:?}", Message::Quit);
-    println!("{:?}", Message::Echo);
+    println!("{:?}", Message::Echo("str".to_string()));
     println!("{:?}", Message::Move);
-    println!("{:?}", Message::ChangeColor);
+    println!("{:?}", Message::ChangeColor{color:"test".to_string()});
 }
diff --git a/exercises/enums/enums2.rs b/exercises/enums/enums2.rs
index 52ccb22..3fda824 100644
--- a/exercises/enums/enums2.rs
+++ b/exercises/enums/enums2.rs
@@ -1,11 +1,18 @@
 // enums2.rs
 // Make me compile! Execute `rustlings hint enums2` for hints!
 
-// I AM NOT DONE
 
 #[derive(Debug)]
 enum Message {
     // TODO: define the different variants used below
+    Move {
+        x:i32,
+        y:i32
+    },
+    Echo(String),
+    ChangeColor(i32,i32,i32),
+    Quit
+
 }
 
 impl Message {
diff --git a/exercises/enums/enums3.rs b/exercises/enums/enums3.rs
index 4b0be97..b13e724 100644
--- a/exercises/enums/enums3.rs
+++ b/exercises/enums/enums3.rs
@@ -1,10 +1,13 @@
 // enums3.rs
 // Address all the TODOs to make the tests pass!
 
-// I AM NOT DONE
 
 enum Message {
     // TODO: implement the message variant types based on their usage below
+    ChangeColor(u8,u8,u8),
+    Move(Point),
+    Echo (String),
+    Quit
 }
 
 struct Point {
@@ -37,6 +40,20 @@ impl State {
 
     fn process(&mut self, message: Message) {
         // TODO: create a match expression to process the different message variants
+        match message {
+            Message::Echo(test) => {
+                self.echo(test);
+            }
+            Message::ChangeColor(r,g,b) => {
+                self.change_color((r,g,b));
+            }
+            Message::Move(p) => {
+                self.move_position(p);
+            }
+            Message::Quit => {
+                self.quit();
+            }
+        }
     }
 }
 
diff --git a/exercises/functions/functions1.rs b/exercises/functions/functions1.rs
index 3112527..44cef48 100644
--- a/exercises/functions/functions1.rs
+++ b/exercises/functions/functions1.rs
@@ -1,7 +1,10 @@
 // functions1.rs
 // Make me compile! Execute `rustlings hint functions1` for hints :)
 
-// I AM NOT DONE
+
+fn call_me() -> i8 {
+    return 1;
+}
 
 fn main() {
     call_me();
diff --git a/exercises/functions/functions2.rs b/exercises/functions/functions2.rs
index 108ba38..331cfa9 100644
--- a/exercises/functions/functions2.rs
+++ b/exercises/functions/functions2.rs
@@ -1,13 +1,12 @@
 // functions2.rs
 // Make me compile! Execute `rustlings hint functions2` for hints :)
 
-// I AM NOT DONE
 
 fn main() {
     call_me(3);
 }
 
-fn call_me(num) {
+fn call_me(num:i8) {
     for i in 0..num {
         println!("Ring! Call number {}", i + 1);
     }
diff --git a/exercises/functions/functions3.rs b/exercises/functions/functions3.rs
index e3c1bf7..873a568 100644
--- a/exercises/functions/functions3.rs
+++ b/exercises/functions/functions3.rs
@@ -1,10 +1,10 @@
 // functions3.rs
 // Make me compile! Execute `rustlings hint functions3` for hints :)
 
-// I AM NOT DONE
 
 fn main() {
-    call_me();
+    let test:i8 = 100;
+    call_me(test.into());
 }
 
 fn call_me(num: i32) {
diff --git a/exercises/functions/functions4.rs b/exercises/functions/functions4.rs
index 58637e4..0c3c6c3 100644
--- a/exercises/functions/functions4.rs
+++ b/exercises/functions/functions4.rs
@@ -4,14 +4,13 @@
 // This store is having a sale where if the price is an even number, you get
 // 10 Rustbucks off, but if it's an odd number, it's 3 Rustbucks off.
 
-// I AM NOT DONE
 
 fn main() {
     let original_price = 51;
     println!("Your sale price is {}", sale_price(original_price));
 }
 
-fn sale_price(price: i32) -> {
+fn sale_price(price: i32) -> i32 {
     if is_even(price) {
         price - 10
     } else {
diff --git a/exercises/functions/functions5.rs b/exercises/functions/functions5.rs
index d22aa6c..ee79e79 100644
--- a/exercises/functions/functions5.rs
+++ b/exercises/functions/functions5.rs
@@ -1,7 +1,6 @@
 // functions5.rs
 // Make me compile! Execute `rustlings hint functions5` for hints :)
 
-// I AM NOT DONE
 
 fn main() {
     let answer = square(3);
@@ -9,5 +8,5 @@ fn main() {
 }
 
 fn square(num: i32) -> i32 {
-    num * num;
+    num * num
 }
diff --git a/exercises/if/if1.rs b/exercises/if/if1.rs
index 9086754..e42417e 100644
--- a/exercises/if/if1.rs
+++ b/exercises/if/if1.rs
@@ -1,6 +1,5 @@
 // if1.rs
 
-// I AM NOT DONE
 
 pub fn bigger(a: i32, b: i32) -> i32 {
     // Complete this function to return the bigger number!
@@ -8,6 +7,11 @@ pub fn bigger(a: i32, b: i32) -> i32 {
     // - another function call
     // - additional variables
     // Execute `rustlings hint if1` for hints
+    if( a >= b ) 
+    {
+        return a;
+    }
+    return b;
 }
 
 // Don't mind this for now :)
diff --git a/exercises/if/if2.rs b/exercises/if/if2.rs
index 80effbd..233b5ee 100644
--- a/exercises/if/if2.rs
+++ b/exercises/if/if2.rs
@@ -4,13 +4,14 @@
 // Step 2: Get the bar_for_fuzz and default_to_baz tests passing!
 // Execute the command `rustlings hint if2` if you want a hint :)
 
-// I AM NOT DONE
 
 pub fn fizz_if_foo(fizzish: &str) -> &str {
     if fizzish == "fizz" {
         "foo"
+    } else if(fizzish == "fuzz") {
+        "bar"
     } else {
-        1
+        "baz"
     }
 }
 
diff --git a/exercises/macros/macros1.rs b/exercises/macros/macros1.rs
index ed0dac8..4058037 100644
--- a/exercises/macros/macros1.rs
+++ b/exercises/macros/macros1.rs
@@ -1,8 +1,8 @@
 // macros1.rs
 // Make me compile! Execute `rustlings hint macros1` for hints :)
 
-// I AM NOT DONE
 
+#[macro_export]
 macro_rules! my_macro {
     () => {
         println!("Check out my macro!");
@@ -10,5 +10,5 @@ macro_rules! my_macro {
 }
 
 fn main() {
-    my_macro();
+    my_macro!();
 }
diff --git a/exercises/macros/macros2.rs b/exercises/macros/macros2.rs
index d0be123..6583dde 100644
--- a/exercises/macros/macros2.rs
+++ b/exercises/macros/macros2.rs
@@ -1,12 +1,11 @@
 // macros2.rs
 // Make me compile! Execute `rustlings hint macros2` for hints :)
 
-// I AM NOT DONE
-
 fn main() {
     my_macro!();
 }
 
+#[macro_export]
 macro_rules! my_macro {
     () => {
         println!("Check out my macro!");
diff --git a/exercises/macros/macros3.rs b/exercises/macros/macros3.rs
index 93a4311..1147edc 100644
--- a/exercises/macros/macros3.rs
+++ b/exercises/macros/macros3.rs
@@ -2,9 +2,9 @@
 // Make me compile, without taking the macro out of the module!
 // Execute `rustlings hint macros3` for hints :)
 
-// I AM NOT DONE
 
 mod macros {
+    #[macro_export]
     macro_rules! my_macro {
         () => {
             println!("Check out my macro!");
diff --git a/exercises/macros/macros4.rs b/exercises/macros/macros4.rs
index 3a74807..066048e 100644
--- a/exercises/macros/macros4.rs
+++ b/exercises/macros/macros4.rs
@@ -1,12 +1,11 @@
 // macros4.rs
 // Make me compile! Execute `rustlings hint macros4` for hints :)
 
-// I AM NOT DONE
 
 macro_rules! my_macro {
     () => {
         println!("Check out my macro!");
-    }
+    };
     ($val:expr) => {
         println!("Look at this other macro: {}", $val);
     }
diff --git a/exercises/modules/modules1.rs b/exercises/modules/modules1.rs
index 812dfee..c76b058 100644
--- a/exercises/modules/modules1.rs
+++ b/exercises/modules/modules1.rs
@@ -1,10 +1,9 @@
 // modules1.rs
 // Make me compile! Execute `rustlings hint modules1` for hints :)
 
-// I AM NOT DONE
 
 mod sausage_factory {
-    fn make_sausage() {
+    pub fn make_sausage() {
         println!("sausage!");
     }
 }
diff --git a/exercises/modules/modules2.rs b/exercises/modules/modules2.rs
index fde439d..00bb1a2 100644
--- a/exercises/modules/modules2.rs
+++ b/exercises/modules/modules2.rs
@@ -1,11 +1,10 @@
 // modules2.rs
 // Make me compile! Execute `rustlings hint modules2` for hints :)
 
-// I AM NOT DONE
 
 mod delicious_snacks {
-    use self::fruits::PEAR as fruit;
-    use self::veggies::CUCUMBER as veggie;
+    pub use self::fruits::PEAR as fruit;
+    pub use self::veggies::CUCUMBER as veggie;
 
     mod fruits {
         pub const PEAR: &'static str = "Pear";
diff --git a/exercises/move_semantics/move_semantics1.rs b/exercises/move_semantics/move_semantics1.rs
index e2f5876..4343986 100644
--- a/exercises/move_semantics/move_semantics1.rs
+++ b/exercises/move_semantics/move_semantics1.rs
@@ -1,12 +1,13 @@
 // move_semantics1.rs
 // Make me compile! Execute `rustlings hint move_semantics1` for hints :)
 
-// I AM NOT DONE
 
 fn main() {
-    let vec0 = Vec::new();
+    let mut vec0 = Vec::new();
+    vec0.push(99);
 
-    let vec1 = fill_vec(vec0);
+    println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0);
+    let mut vec1 = fill_vec(vec0);
 
     println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
 
diff --git a/exercises/move_semantics/move_semantics2.rs b/exercises/move_semantics/move_semantics2.rs
index bd21fbb..76b7319 100644
--- a/exercises/move_semantics/move_semantics2.rs
+++ b/exercises/move_semantics/move_semantics2.rs
@@ -2,27 +2,32 @@
 // Make me compile without changing line 13!
 // Execute `rustlings hint move_semantics2` for hints :)
 
-// I AM NOT DONE
 
 fn main() {
-    let vec0 = Vec::new();
+//    let vec0 = Vec::new();
+//    let mut vec1 = fill_vec(vec0.clone());
 
-    let mut vec1 = fill_vec(vec0);
-
-    // Do not change the following line!
+//  let  vec0 = Vec::new();
+    let mut vec0 = Vec::new();
+    vec0.push(99);
+    //let mut vec1 = fill_vec( vec0.clone() );
+//    let mut vec1 = fill_vec(&vec0);
+    let mut vec1 = fill_vec(&mut vec0);
+// Do not change the following line!
     println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0);
 
-    vec1.push(88);
+    vec0.push(88);
 
-    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
+    println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0);
+//    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
 }
 
-fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
-    let mut vec = vec;
-
+//fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
+//        let mut vec = vec;
+// fn fill_vec(vec: &Vec<i32>) -> Vec<i32> {
+//     let mut vec = vec.to_vec();
+fn fill_vec(vec: &mut Vec<i32>)  {
     vec.push(22);
     vec.push(44);
     vec.push(66);
-
-    vec
 }
diff --git a/exercises/move_semantics/move_semantics3.rs b/exercises/move_semantics/move_semantics3.rs
index 43fef74..38ae109 100644
--- a/exercises/move_semantics/move_semantics3.rs
+++ b/exercises/move_semantics/move_semantics3.rs
@@ -3,7 +3,6 @@
 // (no lines with multiple semicolons necessary!)
 // Execute `rustlings hint move_semantics3` for hints :)
 
-// I AM NOT DONE
 
 fn main() {
     let vec0 = Vec::new();
@@ -17,7 +16,7 @@ fn main() {
     println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
 }
 
-fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
+fn fill_vec(mut vec: Vec<i32>) -> Vec<i32> {
     vec.push(22);
     vec.push(44);
     vec.push(66);
diff --git a/exercises/move_semantics/move_semantics4.rs b/exercises/move_semantics/move_semantics4.rs
index a1c4a41..04a95b3 100644
--- a/exercises/move_semantics/move_semantics4.rs
+++ b/exercises/move_semantics/move_semantics4.rs
@@ -4,12 +4,10 @@
 // freshly created vector from fill_vec to its caller.
 // Execute `rustlings hint move_semantics4` for hints!
 
-// I AM NOT DONE
 
 fn main() {
-    let vec0 = Vec::new();
 
-    let mut vec1 = fill_vec(vec0);
+    let mut vec1 = fill_vec();
 
     println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
 
@@ -20,7 +18,7 @@ fn main() {
 
 // `fill_vec()` no longer take `vec: Vec<i32>` as argument
 fn fill_vec() -> Vec<i32> {
-    let mut vec = vec;
+    let mut vec = Vec::new();
 
     vec.push(22);
     vec.push(44);
diff --git a/exercises/primitive_types/primitive_types1.rs b/exercises/primitive_types/primitive_types1.rs
index 0912139..46856d8 100644
--- a/exercises/primitive_types/primitive_types1.rs
+++ b/exercises/primitive_types/primitive_types1.rs
@@ -2,7 +2,6 @@
 // Fill in the rest of the line that has code missing!
 // No hints, there's no tricks, just get used to typing these :)
 
-// I AM NOT DONE
 
 fn main() {
     // Booleans (`bool`)
@@ -12,7 +11,7 @@ fn main() {
         println!("Good morning!");
     }
 
-    let // Finish the rest of this line like the example! Or make it be false!
+    let is_evening =  !is_morning;// Finish the rest of this line like the example! Or make it be false!
     if is_evening {
         println!("Good evening!");
     }
diff --git a/exercises/primitive_types/primitive_types2.rs b/exercises/primitive_types/primitive_types2.rs
index 6576a4d..2e98615 100644
--- a/exercises/primitive_types/primitive_types2.rs
+++ b/exercises/primitive_types/primitive_types2.rs
@@ -2,7 +2,6 @@
 // Fill in the rest of the line that has code missing!
 // No hints, there's no tricks, just get used to typing these :)
 
-// I AM NOT DONE
 
 fn main() {
     // Characters (`char`)
@@ -16,7 +15,7 @@ fn main() {
         println!("Neither alphabetic nor numeric!");
     }
 
-    let // Finish this line like the example! What's your favorite character?
+    let your_character = '!';// Finish this line like the example! What's your favorite character?
     // Try a letter, try a number, try a special character, try a character
     // from a different language than your own, try an emoji!
     if your_character.is_alphabetic() {
diff --git a/exercises/primitive_types/primitive_types3.rs b/exercises/primitive_types/primitive_types3.rs
index dfd6351..42a8e1e 100644
--- a/exercises/primitive_types/primitive_types3.rs
+++ b/exercises/primitive_types/primitive_types3.rs
@@ -2,10 +2,9 @@
 // Create an array with at least 100 elements in it where the ??? is. 
 // Execute `rustlings hint primitive_types3` for hints!
 
-// I AM NOT DONE
 
 fn main() {
-    let a = ???
+    let a = [1; 101];
 
     if a.len() >= 100 {
         println!("Wow, that's a big array!");
diff --git a/exercises/primitive_types/primitive_types4.rs b/exercises/primitive_types/primitive_types4.rs
index 10b553e..df54dff 100644
--- a/exercises/primitive_types/primitive_types4.rs
+++ b/exercises/primitive_types/primitive_types4.rs
@@ -2,13 +2,12 @@
 // Get a slice out of Array a where the ??? is so that the test passes.
 // Execute `rustlings hint primitive_types4` for hints!!
 
-// I AM NOT DONE
 
 #[test]
 fn slice_out_of_array() {
     let a = [1, 2, 3, 4, 5];
 
-    let nice_slice = ???
+    let nice_slice = &a[1..4];
 
     assert_eq!([2, 3, 4], nice_slice)
 }
diff --git a/exercises/primitive_types/primitive_types5.rs b/exercises/primitive_types/primitive_types5.rs
index 680d8d2..7923c4b 100644
--- a/exercises/primitive_types/primitive_types5.rs
+++ b/exercises/primitive_types/primitive_types5.rs
@@ -2,11 +2,10 @@
 // Destructure the `cat` tuple so that the println will work.
 // Execute `rustlings hint primitive_types5` for hints!
 
-// I AM NOT DONE
 
 fn main() {
     let cat = ("Furry McFurson", 3.5);
-    let /* your pattern here */ = cat;
+    let (name,age)= cat;
 
     println!("{} is {} years old.", name, age);
 }
diff --git a/exercises/primitive_types/primitive_types6.rs b/exercises/primitive_types/primitive_types6.rs
index 2bc817e..ebe025a 100644
--- a/exercises/primitive_types/primitive_types6.rs
+++ b/exercises/primitive_types/primitive_types6.rs
@@ -3,9 +3,7 @@
 // You can put this right into the `println!` where the ??? is.
 // Execute `rustlings hint primitive_types6` for hints!
 
-// I AM NOT DONE
-
 fn main() {
     let numbers = (1, 2, 3);
-    println!("The second number is {}", ???);
+    println!("The second number is {}", numbers.2);
 }
diff --git a/exercises/quiz1.rs b/exercises/quiz1.rs
index 5c5c355..abd7abc 100644
--- a/exercises/quiz1.rs
+++ b/exercises/quiz1.rs
@@ -7,11 +7,18 @@
 // more than 40 at once, each apple only costs 1! Write a function that calculates
 // the price of an order of apples given the order amount. No hints this time!
 
-// I AM NOT DONE
 
 // Put your function here!
 // fn ..... {
 
+fn calculate_apple_price( weight: i32 ) -> i32 {
+    if( weight < 40 ) {
+        return weight * 2;
+    }
+    return weight ;
+}
+
+
 // Don't modify this function!
 #[test]
 fn verify_test() {
diff --git a/exercises/quiz2.rs b/exercises/quiz2.rs
index 8caeaa9..c6f2b79 100644
--- a/exercises/quiz2.rs
+++ b/exercises/quiz2.rs
@@ -7,7 +7,6 @@
 // you think each value is. That is, add either `string_slice` or `string`
 // before the parentheses on each line. If you're right, it will compile!
 
-// I AM NOT DONE
 
 fn string_slice(arg: &str) {
     println!("{}", arg);
@@ -17,14 +16,14 @@ fn string(arg: String) {
 }
 
 fn main() {
-    ("blue");
-    ("red".to_string());
-    (String::from("hi"));
-    ("rust is fun!".to_owned());
-    ("nice weather".into());
-    (format!("Interpolation {}", "Station"));
-    (&String::from("abc")[0..1]);
-    ("  hello there ".trim());
-    ("Happy Monday!".to_string().replace("Mon", "Tues"));
-    ("mY sHiFt KeY iS sTiCkY".to_lowercase());
+    string_slice("blue");
+    string("red".to_string());
+    string(String::from("hi"));
+    string("rust is fun!".to_owned());
+    string_slice("nice weather".into());
+    string(format!("Interpolation {}", "Station"));
+    string_slice(&String::from("abc")[0..1]);
+    string_slice("  hello there ".trim());
+    string("Happy Monday!".to_string().replace("Mon", "Tues"));
+    string("mY sHiFt KeY iS sTiCkY".to_lowercase());
 }
diff --git a/exercises/quiz3.rs b/exercises/quiz3.rs
index a0cd371..12db9b8 100644
--- a/exercises/quiz3.rs
+++ b/exercises/quiz3.rs
@@ -7,7 +7,6 @@
 // we expect to get when we call `times_two` with a negative number.
 // No hints, you can do this :)
 
-// I AM NOT DONE
 
 pub fn times_two(num: i32) -> i32 {
     num * 2
@@ -19,11 +18,12 @@ mod tests {
 
     #[test]
     fn returns_twice_of_positive_numbers() {
-        assert_eq!(times_two(4), ???);
+        assert_eq!(times_two(4), 8);
     }
 
     #[test]
     fn returns_twice_of_negative_numbers() {
         // TODO write an assert for `times_two(-4)`
+        assert_eq!(times_two(-4), -8);
     }
 }
diff --git a/exercises/quiz4.rs b/exercises/quiz4.rs
index 6c47480..8d472d7 100644
--- a/exercises/quiz4.rs
+++ b/exercises/quiz4.rs
@@ -4,8 +4,12 @@
 // - Macros
 
 // Write a macro that passes the quiz! No hints this time, you can do it!
-
-// I AM NOT DONE
+#[macro_export]
+macro_rules! my_macro{
+    ($s:literal) => {
+        format!("Hello {}",$s)
+    };
+}
 
 #[cfg(test)]
 mod tests {
diff --git a/exercises/strings/strings1.rs b/exercises/strings/strings1.rs
index 8090244..46cee98 100644
--- a/exercises/strings/strings1.rs
+++ b/exercises/strings/strings1.rs
@@ -2,7 +2,6 @@
 // Make me compile without changing the function signature!
 // Execute `rustlings hint strings1` for hints ;)
 
-// I AM NOT DONE
 
 fn main() {
     let answer = current_favorite_color();
@@ -10,5 +9,5 @@ fn main() {
 }
 
 fn current_favorite_color() -> String {
-    "blue"
+    String::from("blue")
 }
diff --git a/exercises/strings/strings2.rs b/exercises/strings/strings2.rs
index 5a2ce74..4200f69 100644
--- a/exercises/strings/strings2.rs
+++ b/exercises/strings/strings2.rs
@@ -2,11 +2,10 @@
 // Make me compile without changing the function signature!
 // Execute `rustlings hint strings2` for hints :)
 
-// I AM NOT DONE
 
 fn main() {
     let word = String::from("green"); // Try not changing this line :)
-    if is_a_color_word(word) {
+    if is_a_color_word(&word) {
         println!("That is a color word I know!");
     } else {
         println!("That is not a color word I know.");
diff --git a/exercises/structs/structs1.rs b/exercises/structs/structs1.rs
index 6d0b2f4..fcd55a8 100644
--- a/exercises/structs/structs1.rs
+++ b/exercises/structs/structs1.rs
@@ -1,17 +1,18 @@
 // structs1.rs
 // Address all the TODOs to make the tests pass!
 
-// I AM NOT DONE
 
 struct ColorClassicStruct {
-    // TODO: Something goes here
+    name: String,
+    hex: String
 }
 
-struct ColorTupleStruct(/* TODO: Something goes here */);
+struct ColorTupleStruct(String,String);
 
 #[derive(Debug)]
 struct UnitStruct;
 
+
 #[cfg(test)]
 mod tests {
     use super::*;
@@ -19,7 +20,10 @@ mod tests {
     #[test]
     fn classic_c_structs() {
         // TODO: Instantiate a classic c struct!
-        // let green =
+        let green = ColorClassicStruct {
+            name: String::from("green"),
+            hex: String::from("#00FF00")
+        };
 
         assert_eq!(green.name, "green");
         assert_eq!(green.hex, "#00FF00");
@@ -28,7 +32,7 @@ mod tests {
     #[test]
     fn tuple_structs() {
         // TODO: Instantiate a tuple struct!
-        // let green =
+        let green = ColorTupleStruct(String::from("green"),String::from("#00FF00"));
 
         assert_eq!(green.0, "green");
         assert_eq!(green.1, "#00FF00");
@@ -37,8 +41,9 @@ mod tests {
     #[test]
     fn unit_structs() {
         // TODO: Instantiate a unit struct!
-        // let unit_struct =
-        let message = format!("{:?}s are fun!", unit_struct);
+        let unit_struct = UnitStruct;
+
+        let message = format!("{:#?}s are fun!", unit_struct);
 
         assert_eq!(message, "UnitStructs are fun!");
     }
diff --git a/exercises/structs/structs2.rs b/exercises/structs/structs2.rs
index f9c6427..b3285ea 100644
--- a/exercises/structs/structs2.rs
+++ b/exercises/structs/structs2.rs
@@ -1,7 +1,6 @@
 // structs2.rs
 // Address all the TODOs to make the tests pass!
 
-// I AM NOT DONE
 
 #[derive(Debug)]
 struct Order {
@@ -34,7 +33,12 @@ mod tests {
     fn your_order() {
         let order_template = create_order_template();
         // TODO: Create your own order using the update syntax and template above!
-        // let your_order =
+        let your_order = Order {
+            name: String::from("Hacker in Rust"),
+            count: 1,
+            ..order_template
+        };
+
         assert_eq!(your_order.name, "Hacker in Rust");
         assert_eq!(your_order.year, order_template.year);
         assert_eq!(your_order.made_by_phone, order_template.made_by_phone);
diff --git a/exercises/structs/structs3.rs b/exercises/structs/structs3.rs
index 5503ce1..3b3b3a7 100644
--- a/exercises/structs/structs3.rs
+++ b/exercises/structs/structs3.rs
@@ -3,8 +3,6 @@
 // exercise we have defined the Package struct and we want to test some logic attached to it,
 // make the code compile and the tests pass! If you have issues execute `rustlings hint structs3`
 
-// I AM NOT DONE
-
 #[derive(Debug)]
 struct Package {
     sender_country: String,
@@ -16,17 +14,22 @@ impl Package {
     fn new(sender_country: String, recipient_country: String, weight_in_grams: i32) -> Package {
         if weight_in_grams <= 0 {
             // Something goes here...
+            panic!("Weight cannot be negative!");
         } else {
             return Package {sender_country, recipient_country, weight_in_grams};
         }
     }
 
-    fn is_international(&self) -> ??? {
-        // Something goes here...
+    fn is_international(&self) -> bool {
+        if self.sender_country != self.recipient_country {
+            return true
+        }
+        false
     }
 
-    fn get_fees(&self, cents_per_kg: i32) -> ??? {
+    fn get_fees(&self, cents_per_kg: i32) -> i32 {
         // Something goes here... (beware of grams to kg conversion)
+        self.weight_in_grams * cents_per_kg
     }
 }
 
@@ -58,7 +61,7 @@ mod tests {
         let sender_country = String::from("Spain");
         let recipient_country = String::from("Spain");
 
-        let cents_per_kg = ???;
+        let cents_per_kg = 3;
         
         let package = Package::new(sender_country, recipient_country, 1500);
         
diff --git a/exercises/tests/tests1.rs b/exercises/tests/tests1.rs
index 50586a1..2e981d4 100644
--- a/exercises/tests/tests1.rs
+++ b/exercises/tests/tests1.rs
@@ -6,12 +6,10 @@
 // This test has a problem with it -- make the test compile! Make the test
 // pass! Make the test fail! Execute `rustlings hint tests1` for hints :)
 
-// I AM NOT DONE
-
 #[cfg(test)]
 mod tests {
     #[test]
     fn you_can_assert() {
-        assert!();
+        assert!(1==1);
     }
 }
diff --git a/exercises/tests/tests2.rs b/exercises/tests/tests2.rs
index 0d981ad..f1d969f 100644
--- a/exercises/tests/tests2.rs
+++ b/exercises/tests/tests2.rs
@@ -2,12 +2,11 @@
 // This test has a problem with it -- make the test compile! Make the test
 // pass! Make the test fail! Execute `rustlings hint tests2` for hints :)
 
-// I AM NOT DONE
 
 #[cfg(test)]
 mod tests {
     #[test]
     fn you_can_assert_eq() {
-        assert_eq!();
+        assert_eq!(1==1,true);
     }
 }
diff --git a/exercises/tests/tests3.rs b/exercises/tests/tests3.rs
index 693b8aa..4c72926 100644
--- a/exercises/tests/tests3.rs
+++ b/exercises/tests/tests3.rs
@@ -4,7 +4,6 @@
 // we expect to get when we call `is_even(5)`.
 // Execute `rustlings hint tests3` for hints :)
 
-// I AM NOT DONE
 
 pub fn is_even(num: i32) -> bool {
     num % 2 == 0
@@ -16,6 +15,6 @@ mod tests {
 
     #[test]
     fn is_true_when_even() {
-        assert!();
+        assert!(is_even(2));
     }
 }
diff --git a/exercises/variables/variables1.rs b/exercises/variables/variables1.rs
index 4a3af73..149d5ce 100644
--- a/exercises/variables/variables1.rs
+++ b/exercises/variables/variables1.rs
@@ -6,9 +6,8 @@
 // even after you already figured it out. If you got everything working and
 // feel ready for the next exercise, remove the `I AM NOT DONE` comment below.
 
-// I AM NOT DONE
 
 fn main() {
-    x = 5;
+    let x = 5;
     println!("x has the value {}", x);
 }
diff --git a/exercises/variables/variables2.rs b/exercises/variables/variables2.rs
index 7774a8f..9cb5aa1 100644
--- a/exercises/variables/variables2.rs
+++ b/exercises/variables/variables2.rs
@@ -1,10 +1,9 @@
 // variables2.rs
 // Make me compile! Execute the command `rustlings hint variables2` if you want a hint :)
 
-// I AM NOT DONE
 
 fn main() {
-    let x;
+    let x: i8 = 100;
     if x == 10 {
         println!("Ten!");
     } else {
diff --git a/exercises/variables/variables3.rs b/exercises/variables/variables3.rs
index 30ec48f..3566ef2 100644
--- a/exercises/variables/variables3.rs
+++ b/exercises/variables/variables3.rs
@@ -1,10 +1,9 @@
 // variables3.rs
 // Make me compile! Execute the command `rustlings hint variables3` if you want a hint :)
 
-// I AM NOT DONE
 
 fn main() {
-    let x = 3;
+    let mut x = 3;
     println!("Number {}", x);
     x = 5; // don't change this line
     println!("Number {}", x);
diff --git a/exercises/variables/variables4.rs b/exercises/variables/variables4.rs
index 77f1e9a..facafd3 100644
--- a/exercises/variables/variables4.rs
+++ b/exercises/variables/variables4.rs
@@ -1,9 +1,8 @@
 // variables4.rs
 // Make me compile! Execute the command `rustlings hint variables4` if you want a hint :)
 
-// I AM NOT DONE
 
 fn main() {
-    let x: i32;
+    let x: i32 = 123;
     println!("Number {}", x);
 }
diff --git a/exercises/variables/variables5.rs b/exercises/variables/variables5.rs
index 5b2c2fa..a03f192 100644
--- a/exercises/variables/variables5.rs
+++ b/exercises/variables/variables5.rs
@@ -1,11 +1,10 @@
 // variables5.rs
 // Make me compile! Execute the command `rustlings hint variables5` if you want a hint :)
 
-// I AM NOT DONE
 
 fn main() {
     let number = "3"; // don't change this line
     println!("Number {}", number);
-    number = 3;
+    let number = 3;
     println!("Number {}", number);
 }
diff --git a/exercises/variables/variables6.rs b/exercises/variables/variables6.rs
index 9866691..1b64ff1 100644
--- a/exercises/variables/variables6.rs
+++ b/exercises/variables/variables6.rs
@@ -1,9 +1,8 @@
 // variables6.rs
 // Make me compile! Execute the command `rustlings hint variables6` if you want a hint :)
 
-// I AM NOT DONE
 
-const NUMBER = 3;
+const NUMBER:i8 = 3;
 fn main() {
     println!("Number {}", NUMBER);
 }