Skip to content

Commit cd5e731

Browse files
author
danpetry
committed
Do most of the rustlings
1 parent b199aa0 commit cd5e731

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+114
-76
lines changed

exercises/error_handling/errors1.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
// this function to have.
77
// Scroll down for hints!!!
88

9-
pub fn generate_nametag_text(name: String) -> Option<String> {
9+
pub fn generate_nametag_text(name: String) -> Result<String, String> {
1010
if name.len() > 0 {
11-
Some(format!("Hi! My name is {}", name))
11+
Ok(format!("Hi! My name is {}", name))
1212
} else {
1313
// Empty names aren't allowed.
14-
None
14+
Err(format!("`name` was empty; it must be nonempty."))
1515
}
1616
}
1717

@@ -26,7 +26,7 @@ mod tests {
2626
fn generates_nametag_text_for_a_nonempty_name() {
2727
assert_eq!(
2828
generate_nametag_text("Beyoncé".into()),
29-
Some("Hi! My name is Beyoncé".into())
29+
Ok("Hi! My name is Beyoncé".into())
3030
);
3131
}
3232

exercises/error_handling/errors2.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@ use std::num::ParseIntError;
2121
pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
2222
let processing_fee = 1;
2323
let cost_per_item = 5;
24+
//let qty = item_quantity.parse::<i32>()?;
2425
let qty = item_quantity.parse::<i32>();
25-
26-
Ok(qty * cost_per_item + processing_fee)
26+
match qty {
27+
Ok(qty) => Ok(qty * cost_per_item + processing_fee),
28+
Err(e) => Err(e),
29+
}
30+
//Ok(qty * cost_per_item + processing_fee)
2731
}
2832

2933
#[cfg(test)]

exercises/error_handling/errors3.rs

+14-7
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,21 @@ fn main() {
1010
let mut tokens = 100;
1111
let pretend_user_input = "8";
1212

13-
let cost = total_cost(pretend_user_input)?;
14-
15-
if cost > tokens {
16-
println!("You can't afford that many!");
17-
} else {
18-
tokens -= cost;
19-
println!("You now have {} tokens.", tokens);
13+
let cost = total_cost(pretend_user_input);
14+
15+
match cost {
16+
Ok(cost) => {
17+
if cost > tokens {
18+
println!("You can't afford that many!");
19+
} else {
20+
tokens -= cost;
21+
println!("You now have {} tokens.", tokens);
22+
}
23+
}
24+
Err(e) => println!("bad input"),
2025
}
26+
27+
2128
}
2229

2330
pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {

exercises/error_handling/errorsn.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ use std::fmt;
2020
use std::io;
2121

2222
// PositiveNonzeroInteger is a struct defined below the tests.
23-
fn read_and_validate(b: &mut io::BufRead) -> Result<PositiveNonzeroInteger, ???> {
23+
fn read_and_validate(b: &mut io::BufRead) -> Result<PositiveNonzeroInteger, Box<error::Error>> {
2424
let mut line = String::new();
25-
b.read_line(&mut line);
26-
let num: i64 = line.trim().parse();
27-
let answer = PositiveNonzeroInteger::new(num);
28-
answer
25+
b.read_line(&mut line)?;
26+
let num: i64 = line.trim().parse()?;
27+
let answer = PositiveNonzeroInteger::new(num)?;
28+
Ok(answer)
2929
}
3030

3131
// This is a test helper function that turns a &str into a BufReader.

exercises/error_handling/option1.rs

+11-5
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,17 @@
77
fn main() {
88
let mut list = vec![3];
99

10-
let last = list.pop().unwrap();
11-
println!("The last item in the list is {:?}", last);
12-
13-
let second_to_last = list.pop().unwrap();
14-
println!("The second-to-last item in the list is {:?}", second_to_last);
10+
let last = list.pop();
11+
match last {
12+
Some(el) => println!("The last item in the list is {:?}", el),
13+
None => println!("Nothing in the list!"),
14+
}
15+
16+
let second_to_last = list.pop();
17+
match second_to_last {
18+
Some(el) => println!("The second-to-last item in the list is {:?}", el),
19+
None => println!("Nothing in the list!"),
20+
}
1521
}
1622

1723

exercises/error_handling/result1.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ enum CreationError {
1212

1313
impl PositiveNonzeroInteger {
1414
fn new(value: i64) -> Result<PositiveNonzeroInteger, CreationError> {
15-
Ok(PositiveNonzeroInteger(value as u64))
15+
match value {
16+
0 => Err(CreationError::Zero),
17+
x if x < 0 => Err(CreationError::Negative),
18+
_ => Ok(PositiveNonzeroInteger(value as u64)),
19+
}
1620
}
1721
}
1822

exercises/functions/functions1.rs

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ fn main() {
88

99

1010

11+
fn call_me() {
12+
}
1113

1214

1315

exercises/functions/functions2.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ fn main() {
55
call_me(3);
66
}
77

8-
fn call_me(num) {
8+
fn call_me(num: i8) {
99
for i in 0..num {
1010
println!("Ring! Call number {}", i + 1);
1111
}

exercises/functions/functions3.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Make me compile! Scroll down for hints :)
33

44
fn main() {
5-
call_me();
5+
call_me(32);
66
}
77

88
fn call_me(num: i32) {

exercises/functions/functions4.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fn main() {
99
println!("Your sale price is {}", sale_price(original_price));
1010
}
1111

12-
fn sale_price(price: i32) -> {
12+
fn sale_price(price: i32) -> i32 {
1313
if is_even(price) {
1414
price - 10
1515
} else {

exercises/functions/functions5.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ fn main() {
77
}
88

99
fn square(num: i32) -> i32 {
10-
num * num;
10+
num * num
1111
}
1212

1313

exercises/if/if1.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// if1.rs
22

33
pub fn bigger(a: i32, b:i32) -> i32 {
4+
if (a > b) {a} else {b}
45
// Complete this function to return the bigger number!
56
// Do not use:
67
// - return

exercises/macros/macros1.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ macro_rules! my_macro {
88
}
99

1010
fn main() {
11-
my_macro();
11+
my_macro!();
1212
}
1313

1414

exercises/macros/macros2.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
// macros2.rs
22
// Make me compile! Scroll down for hints :)
33

4-
fn main() {
5-
my_macro!();
6-
}
7-
84
macro_rules! my_macro {
95
() => {
106
println!("Check out my macro!");
117
};
128
}
9+
fn main() {
10+
my_macro!();
11+
}
12+
1313

1414

1515

exercises/macros/macros3.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// macros3.rs
22
// Make me compile, without taking the macro out of the module! Scroll down for hints :)
33

4+
#[macro_use]
45
mod macros {
56
macro_rules! my_macro {
67
() => {

exercises/macros/macros4.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
macro_rules! my_macro {
55
() => {
66
println!("Check out my macro!");
7-
}
7+
};
88
($val:expr) => {
99
println!("Look at this other macro: {}", $val);
1010
}

exercises/modules/modules1.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Make me compile! Scroll down for hints :)
33

44
mod sausage_factory {
5-
fn make_sausage() {
5+
pub fn make_sausage() {
66
println!("sausage!");
77
}
88
}

exercises/modules/modules2.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// Make me compile! Scroll down for hints :)
33

44
mod delicious_snacks {
5-
use self::fruits::PEAR as fruit;
6-
use self::veggies::CUCUMBER as veggie;
5+
pub use self::fruits::PEAR as fruit;
6+
pub use self::veggies::CUCUMBER as veggie;
77

88
mod fruits {
99
pub const PEAR: &'static str = "Pear";

exercises/move_semantics/move_semantics1.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
fn main() {
55
let vec0 = Vec::new();
66

7-
let vec1 = fill_vec(vec0);
7+
let mut vec1 = fill_vec(vec0);
88

99
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
1010

exercises/move_semantics/move_semantics2.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,28 @@
22
// Make me compile without changing line 10! Scroll down for hints :)
33

44
fn main() {
5-
let vec0 = Vec::new();
5+
let mut vec0 = Vec::new();
66

7-
let mut vec1 = fill_vec(vec0);
7+
//let mut vec1 = fill_vec(&vec0);
8+
fill_vec(&mut vec0);
89

910
// Do not change the following line!
1011
println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0);
1112

12-
vec1.push(88);
13+
//vec1.push(88);
1314

14-
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
15+
//println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
1516

1617
}
1718

18-
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
19-
let mut vec = vec;
19+
fn fill_vec(vec: &mut Vec<i32>) {
20+
//let/letmut vec = vec;
2021

2122
vec.push(22);
2223
vec.push(44);
2324
vec.push(66);
2425

25-
vec
26+
//vec
2627
}
2728

2829

exercises/move_semantics/move_semantics3.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ fn main() {
1616

1717
}
1818

19-
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
19+
fn fill_vec(mut vec: Vec<i32>) -> Vec<i32> {
2020
vec.push(22);
2121
vec.push(44);
2222
vec.push(66);

exercises/move_semantics/move_semantics4.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
// freshly created vector from fill_vec to its caller. Scroll for hints!
55

66
fn main() {
7-
let vec0 = Vec::new();
7+
//let vec0 = Vec::new();
88

9-
let mut vec1 = fill_vec(vec0);
9+
let mut vec1 = fill_vec();
1010

1111
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
1212

@@ -16,8 +16,8 @@ fn main() {
1616

1717
}
1818

19-
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
20-
let mut vec = vec;
19+
fn fill_vec() -> Vec<i32> {
20+
let mut vec = Vec::new();
2121

2222
vec.push(22);
2323
vec.push(44);

exercises/primitive_types/primitive_types1.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ fn main() {
1010
println!("Good morning!");
1111
}
1212

13-
let // Finish the rest of this line like the example! Or make it be false!
13+
let is_evening = false; // Finish the rest of this line like the example! Or make it be false!
1414
if is_evening {
1515
println!("Good evening!");
1616
}

exercises/primitive_types/primitive_types2.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ fn main() {
1414
println!("Neither alphabetic nor numeric!");
1515
}
1616

17-
let // Finish this line like the example! What's your favorite character?
17+
let your_character = '%'; // Finish this line like the example! What's your favorite character?
1818
// Try a letter, try a number, try a special character, try a character
1919
// from a different language than your own, try an emoji!
2020
if your_character.is_alphabetic() {

exercises/primitive_types/primitive_types3.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// Scroll down for hints!
44

55
fn main() {
6-
let a = ???
6+
let a = [3,4,5];
77

88
if a.len() >= 100 {
99
println!("Wow, that's a big array!");

exercises/primitive_types/primitive_types4.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
fn main() {
66
let a = [1, 2, 3, 4, 5];
77

8-
let nice_slice = ???
8+
let nice_slice = &a[1..5];
99

1010
if nice_slice == [2, 3, 4] {
1111
println!("Nice slice!");

exercises/primitive_types/primitive_types5.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
fn main() {
66
let cat = ("Furry McFurson", 3.5);
7-
let /* your pattern here */ = cat;
7+
let (name, age) = cat;
88

99
println!("{} is {} years old.", name, age);
1010
}

exercises/primitive_types/primitive_types6.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
fn main() {
77
let numbers = (1, 2, 3);
8-
println!("The second number is {}", ???);
8+
println!("The second number is {}", numbers.2);
99
}
1010

1111

exercises/strings/strings1.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ fn main() {
77
}
88

99
fn current_favorite_color() -> String {
10-
"blue"
10+
"blue".to_string()
1111
}
1212

1313

exercises/strings/strings2.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
fn main() {
55
let word = String::from("green"); // Try not changing this line :)
6-
if is_a_color_word(word) {
6+
if is_a_color_word(&word) {
77
println!("That is a color word I know!");
88
} else {
99
println!("That is not a color word I know.");

0 commit comments

Comments
 (0)