From 97ae27435b3782ddbde69fccc5f40caee5dda2cd Mon Sep 17 00:00:00 2001
From: Will Clardy
Date: Mon, 15 Feb 2021 16:55:19 -0500
Subject: [PATCH 1/3] Manually apply `zig fmt` style to comments
---
exercises/09_if.zig | 2 +-
exercises/11_while.zig | 2 +-
exercises/13_while3.zig | 4 ++--
exercises/14_while4.zig | 4 ++--
exercises/18_functions.zig | 2 +-
exercises/19_functions2.zig | 2 +-
exercises/30_switch.zig | 2 --
7 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/exercises/09_if.zig b/exercises/09_if.zig
index a472e48..284563d 100644
--- a/exercises/09_if.zig
+++ b/exercises/09_if.zig
@@ -11,7 +11,7 @@
//
// a == b means "a equals b"
// a < b means "a is less than b"
-// a !=b means "a does not equal b"
+// a != b means "a does not equal b"
//
// The important thing about Zig's "if" is that it *only* accepts
// boolean values. It won't coerce numbers or other types of data
diff --git a/exercises/11_while.zig b/exercises/11_while.zig
index 4c4fc4f..9693593 100644
--- a/exercises/11_while.zig
+++ b/exercises/11_while.zig
@@ -13,7 +13,7 @@
// a == b means "a equals b"
// a < b means "a is less than b"
// a > b means "a is greater than b"
-// a !=b means "a does not equal b"
+// a != b means "a does not equal b"
//
const std = @import("std");
diff --git a/exercises/13_while3.zig b/exercises/13_while3.zig
index 3ff42ff..778dbba 100644
--- a/exercises/13_while3.zig
+++ b/exercises/13_while3.zig
@@ -5,9 +5,9 @@
//
// Example:
//
-// while (condition) : (continue expression){
+// while (condition) : (continue expression) {
//
-// if(other condition) continue;
+// if (other condition) continue;
//
// }
//
diff --git a/exercises/14_while4.zig b/exercises/14_while4.zig
index a28b9a9..c8dfc2e 100644
--- a/exercises/14_while4.zig
+++ b/exercises/14_while4.zig
@@ -1,9 +1,9 @@
//
// You can force a loop to exit immediately with a "break" statement:
//
-// while (condition) : (continue expression){
+// while (condition) : (continue expression) {
//
-// if(other condition) break;
+// if (other condition) break;
//
// }
//
diff --git a/exercises/18_functions.zig b/exercises/18_functions.zig
index bda90cd..2dbb8eb 100644
--- a/exercises/18_functions.zig
+++ b/exercises/18_functions.zig
@@ -3,7 +3,7 @@
// writing one of our own:
//
// fn foo(n: u8) u8 {
-// return n+1;
+// return n + 1;
// }
//
// The foo() function above takes a number "n" and returns a number that is
diff --git a/exercises/19_functions2.zig b/exercises/19_functions2.zig
index 99319c3..c323be8 100644
--- a/exercises/19_functions2.zig
+++ b/exercises/19_functions2.zig
@@ -3,7 +3,7 @@
// example that takes two parameters. As you can see, parameters
// are declared just like any other types ("name": "type"):
//
-// fn myFunction( number: u8, is_lucky: bool ) {
+// fn myFunction(number: u8, is_lucky: bool) {
// ...
// }
//
diff --git a/exercises/30_switch.zig b/exercises/30_switch.zig
index b10ad14..451060e 100644
--- a/exercises/30_switch.zig
+++ b/exercises/30_switch.zig
@@ -22,8 +22,6 @@
// return GameError.TooManyPlayers;
// }
//
-//
-//
const std = @import("std");
pub fn main() void {
From 238beb4a2d3c2eacbb21bba03dcfcf1db3ec3dcb Mon Sep 17 00:00:00 2001
From: Will Clardy
Date: Mon, 15 Feb 2021 16:55:44 -0500
Subject: [PATCH 2/3] Apply `zig fmt` to exercises
---
exercises/01_hello.zig | 3 +--
exercises/03_assignment.zig | 4 ++--
exercises/04_arrays.zig | 5 +++--
exercises/06_strings.zig | 5 ++---
exercises/07_strings2.zig | 6 +++---
exercises/10_if2.zig | 1 -
exercises/11_while.zig | 2 +-
exercises/13_while3.zig | 6 +++---
exercises/14_while4.zig | 4 ++--
exercises/15_for.zig | 7 +++----
exercises/17_quiz2.zig | 4 ++--
exercises/18_functions.zig | 3 +--
exercises/19_functions2.zig | 3 +--
exercises/20_quiz3.zig | 6 ++----
exercises/21_errors.zig | 10 +++++-----
exercises/22_errors2.zig | 3 +--
exercises/23_errors3.zig | 6 +++---
exercises/24_errors4.zig | 13 +++++++------
exercises/25_errors5.zig | 6 ++----
exercises/28_defer2.zig | 16 ++++++++++++----
exercises/29_errdefer.zig | 9 ++++-----
exercises/30_switch.zig | 20 ++++++++++----------
exercises/31_switch2.zig | 18 +++++++++---------
exercises/32_unreachable.zig | 14 ++++++++++----
exercises/33_iferror.zig | 8 ++++----
exercises/34_quiz4.zig | 4 ++--
exercises/35_enums.zig | 20 +++++++++++++-------
exercises/36_enums2.zig | 18 +++++++++---------
exercises/37_structs.zig | 10 +++++-----
exercises/38_structs2.zig | 17 +++++++++--------
exercises/39_pointers.zig | 6 +++---
exercises/40_pointers2.zig | 4 ++--
exercises/41_pointers3.zig | 6 +++---
exercises/42_pointers4.zig | 1 -
exercises/43_pointers5.zig | 19 +++++++++----------
exercises/44_quiz5.zig | 6 +++---
exercises/45_optionals.zig | 3 +--
37 files changed, 152 insertions(+), 144 deletions(-)
diff --git a/exercises/01_hello.zig b/exercises/01_hello.zig
index 8d26940..d2093c7 100644
--- a/exercises/01_hello.zig
+++ b/exercises/01_hello.zig
@@ -2,7 +2,7 @@
// Oh no! This program is supposed to print "Hello world!" but it needs
// your help!
//
-//
+//
// Zig functions are private by default but the main() function should
// be public.
//
@@ -19,4 +19,3 @@ const std = @import("std");
fn main() void {
std.debug.print("Hello world!\n", .{});
}
-
diff --git a/exercises/03_assignment.zig b/exercises/03_assignment.zig
index 3775afc..6a4364b 100644
--- a/exercises/03_assignment.zig
+++ b/exercises/03_assignment.zig
@@ -24,7 +24,7 @@
// const bar: u16 = 2000;
//
// You can do just about any combination of these that you can think of:
-//
+//
// u32 can hold 0 to 4,294,967,295
// i64 can hold −9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
//
@@ -47,5 +47,5 @@ pub fn main() void {
// is a string. The string may contain placeholders '{}', and the
// second parameter is an "anonymous list literal" (don't worry
// about this for now!) with the values to be printed.
- std.debug.print("{} {} {}\n", .{n, pi, negative_eleven});
+ std.debug.print("{} {} {}\n", .{ n, pi, negative_eleven });
}
diff --git a/exercises/04_arrays.zig b/exercises/04_arrays.zig
index c1e9fd9..88fcc78 100644
--- a/exercises/04_arrays.zig
+++ b/exercises/04_arrays.zig
@@ -46,6 +46,7 @@ pub fn main() void {
// Use the len property to get the length of the array:
const length = some_primes.???;
- std.debug.print("First: {}, Fourth: {}, Length: {}\n",
- .{first, fourth, length});
+ std.debug.print("First: {}, Fourth: {}, Length: {}\n", .{
+ first, fourth, length,
+ });
}
diff --git a/exercises/06_strings.zig b/exercises/06_strings.zig
index 1d3da1a..a58b9ef 100644
--- a/exercises/06_strings.zig
+++ b/exercises/06_strings.zig
@@ -1,6 +1,6 @@
//
// Now that we've learned about arrays, we can talk about strings.
-//
+//
// We've already seen Zig string literals: "Hello world.\n"
//
// Zig stores strings as arrays of bytes.
@@ -33,8 +33,7 @@ pub fn main() void {
const major_tom = major ??? tom;
// That's all the problems. Let's see our results:
- std.debug.print("d={u} {s}{s}\n",.{d, laugh, major_tom});
- //
+ std.debug.print("d={u} {s}{s}\n", .{ d, laugh, major_tom });
// Keen eyes will notice that we've put 'u' and 's' inside the '{}'
// placeholders in the format string above. This tells the
// print() function to format the values as a UTF-8 character and
diff --git a/exercises/07_strings2.zig b/exercises/07_strings2.zig
index f0bbf99..6350be1 100644
--- a/exercises/07_strings2.zig
+++ b/exercises/07_strings2.zig
@@ -8,17 +8,17 @@
// \\Line One
// \\Line Two
// ;
-//
+//
// See if you can make this program print some song lyrics.
//
const std = @import("std");
pub fn main() void {
- const lyrics =
+ const lyrics =
Ziggy played guitar
Jamming good with Andrew Kelley
And the Spiders from Mars
;
- std.debug.print("{s}\n",.{lyrics});
+ std.debug.print("{s}\n", .{lyrics});
}
diff --git a/exercises/10_if2.zig b/exercises/10_if2.zig
index ba9c2df..d0c8cac 100644
--- a/exercises/10_if2.zig
+++ b/exercises/10_if2.zig
@@ -14,4 +14,3 @@ pub fn main() void {
std.debug.print("With the discount, the price is ${}.\n", .{price});
}
-
diff --git a/exercises/11_while.zig b/exercises/11_while.zig
index 9693593..674d904 100644
--- a/exercises/11_while.zig
+++ b/exercises/11_while.zig
@@ -21,7 +21,7 @@ pub fn main() void {
var n: u32 = 2;
// Please use a condition that is true UNTIL "n" reaches 1024:
- while ( ??? ){
+ while (???) {
// Print the current number
std.debug.print("{} ", .{n});
diff --git a/exercises/13_while3.zig b/exercises/13_while3.zig
index 778dbba..4cccf62 100644
--- a/exercises/13_while3.zig
+++ b/exercises/13_while3.zig
@@ -21,11 +21,11 @@ pub fn main() void {
// I want to print every number between 1 and 20 that is NOT
// divisible by 3 or 5.
- while (n <= 20) : (n+=1) {
+ while (n <= 20) : (n += 1) {
// The '%' symbol is the "modulo" operator and it
// returns the remainder after division.
- if(n % 3 == 0) ???;
- if(n % 5 == 0) ???;
+ if (n % 3 == 0) ???;
+ if (n % 5 == 0) ???;
std.debug.print("{} ", .{n});
}
diff --git a/exercises/14_while4.zig b/exercises/14_while4.zig
index c8dfc2e..7b2714e 100644
--- a/exercises/14_while4.zig
+++ b/exercises/14_while4.zig
@@ -17,8 +17,8 @@ pub fn main() void {
// Oh dear! This while loop will go forever!?
// Please fix this so the print statement below gives the desired output.
- while (true) : (n+=1) {
- if(???) ???;
+ while (true) : (n += 1) {
+ if (???) ???;
}
// Result: we want n=4
diff --git a/exercises/15_for.zig b/exercises/15_for.zig
index 652478b..2ce930e 100644
--- a/exercises/15_for.zig
+++ b/exercises/15_for.zig
@@ -16,13 +16,12 @@ pub fn main() void {
std.debug.print("A Dramatic Story: ", .{});
for (???) |???| {
- if(scene == 'h') std.debug.print(":-) ", .{});
- if(scene == 's') std.debug.print(":-( ", .{});
- if(scene == 'n') std.debug.print(":-| ", .{});
+ if (scene == 'h') std.debug.print(":-) ", .{});
+ if (scene == 's') std.debug.print(":-( ", .{});
+ if (scene == 'n') std.debug.print(":-| ", .{});
}
std.debug.print("The End.\n", .{});
}
-//
// Note that "for" loops also work on things called "slices"
// which we'll see later.
diff --git a/exercises/17_quiz2.zig b/exercises/17_quiz2.zig
index 339f733..7de7010 100644
--- a/exercises/17_quiz2.zig
+++ b/exercises/17_quiz2.zig
@@ -19,10 +19,10 @@ function main() void {
??? (i <= stop_at) : (i += 1) {
if (i % 3 == 0) std.debug.print("Fizz", .{});
if (i % 5 == 0) std.debug.print("Buzz", .{});
- if ( !(i % 3 == 0) and !(i % 5 == 0) ) {
+ if (!(i % 3 == 0) and !(i % 5 == 0)) {
std.debug.print("{}", .{???});
}
std.debug.print(", ", .{});
}
- std.debug.print("\n",.{});
+ std.debug.print("\n", .{});
}
diff --git a/exercises/18_functions.zig b/exercises/18_functions.zig
index 2dbb8eb..51be2cd 100644
--- a/exercises/18_functions.zig
+++ b/exercises/18_functions.zig
@@ -19,11 +19,10 @@ const std = @import("std");
pub fn main() void {
// The new function deepThought() should return the number 42. See below.
const answer: u8 = deepThought();
-
+
std.debug.print("Answer to the Ultimate Question: {}\n", .{answer});
}
-//
// Please define the deepThought() function below.
//
// We're just missing a couple things. One thing we're NOT missing is the
diff --git a/exercises/19_functions2.zig b/exercises/19_functions2.zig
index c323be8..00f33c5 100644
--- a/exercises/19_functions2.zig
+++ b/exercises/19_functions2.zig
@@ -7,7 +7,7 @@
// ...
// }
//
-const std = @import( "std" );
+const std = @import("std");
pub fn main() void {
std.debug.print("Powers of two: {} {} {} {}\n", .{
@@ -18,7 +18,6 @@ pub fn main() void {
});
}
-//
// Please give this function the correct input parameter(s).
// You'll need to figure out the parameter name and type that we're
// expecting. The output type has already been specified for you.
diff --git a/exercises/20_quiz3.zig b/exercises/20_quiz3.zig
index e18ef37..651af8c 100644
--- a/exercises/20_quiz3.zig
+++ b/exercises/20_quiz3.zig
@@ -5,16 +5,15 @@
//
// Both of these are simply labeled "loop" below.
//
-const std = @import( "std" );
+const std = @import("std");
pub fn main() void {
- const my_numbers = [4]u16{ 5,6,7,8 };
+ const my_numbers = [4]u16{ 5, 6, 7, 8 };
printPowersOfTwo(my_numbers);
std.debug.print("\n", .{});
}
-//
// You won't see this every day: a function that takes an array with
// exactly four u16 numbers. This is not how you would normally pass
// an array to a function. We'll learn about slices and pointers in
@@ -28,7 +27,6 @@ fn printPowersOfTwo(numbers: [4]u16) ??? {
}
}
-//
// This function bears a striking resemblance to twoToThe() in the last
// exercise. But don't be fooled! This one does the math without the aid
// of the standard library!
diff --git a/exercises/21_errors.zig b/exercises/21_errors.zig
index 7714c4b..cbb5ac8 100644
--- a/exercises/21_errors.zig
+++ b/exercises/21_errors.zig
@@ -4,7 +4,7 @@
// In Zig, an error is a value. Errors are named so we can identify
// things that can go wrong. Errors are created in "error sets", which
// are just a collection of named errors.
-//
+//
// We have the start of an error set, but we're missing the condition
// "TooSmall". Please add it where needed!
const MyNumberError = error{
@@ -16,13 +16,13 @@ const MyNumberError = error{
const std = @import("std");
pub fn main() void {
- var nums = [_]u8{2,3,4,5,6};
+ var nums = [_]u8{ 2, 3, 4, 5, 6 };
for (nums) |n| {
std.debug.print("{}", .{n});
const number_error = numberFail(n);
-
+
if (number_error == MyNumberError.TooBig) {
std.debug.print(">4. ", .{});
}
@@ -40,7 +40,7 @@ pub fn main() void {
// Notice how this function can return any member of the MyNumberError
// error set.
fn numberFail(n: u8) MyNumberError {
- if(n > 4) return MyNumberError.TooBig;
- if(n < 4) return MyNumberError.TooSmall; // <---- this one is free!
+ if (n > 4) return MyNumberError.TooBig;
+ if (n < 4) return MyNumberError.TooSmall; // <---- this one is free!
return MyNumberError.TooFour;
}
diff --git a/exercises/22_errors2.zig b/exercises/22_errors2.zig
index 7675d2d..fa0eafa 100644
--- a/exercises/22_errors2.zig
+++ b/exercises/22_errors2.zig
@@ -16,7 +16,7 @@
//
const std = @import("std");
-const MyNumberError = error{ TooSmall };
+const MyNumberError = error{TooSmall};
pub fn main() void {
var my_number: ??? = 5;
@@ -27,4 +27,3 @@ pub fn main() void {
std.debug.print("I compiled!", .{});
}
-
diff --git a/exercises/23_errors3.zig b/exercises/23_errors3.zig
index 6060bf1..a465737 100644
--- a/exercises/23_errors3.zig
+++ b/exercises/23_errors3.zig
@@ -8,13 +8,13 @@
//
const std = @import("std");
-const MyNumberError = error{ TooSmall };
+const MyNumberError = error{TooSmall};
pub fn main() void {
var a: u32 = addTwenty(44) catch 22;
- var b: u32 = addTwenty(4) ??? 22;
+ var b: u32 = addTwenty(4) ??? 22;
- std.debug.print("a={}, b={}", .{a,b});
+ std.debug.print("a={}, b={}", .{ a, b });
}
// Please provide the return type from this function.
diff --git a/exercises/24_errors4.zig b/exercises/24_errors4.zig
index b60cc2d..560b129 100644
--- a/exercises/24_errors4.zig
+++ b/exercises/24_errors4.zig
@@ -23,9 +23,9 @@ pub fn main() void {
// that makeJustRight() returns a error union (for now).
var a: u32 = makeJustRight(44) catch 0;
var b: u32 = makeJustRight(14) catch 0;
- var c: u32 = makeJustRight(4) catch 0;
+ var c: u32 = makeJustRight(4) catch 0;
- std.debug.print("a={}, b={}, c={}", .{a,b,c});
+ std.debug.print("a={}, b={}, c={}", .{ a, b, c });
}
// In this silly example we've split the responsibility of making
@@ -37,7 +37,9 @@ pub fn main() void {
// detectProblems() Returns the number or an error.
//
fn makeJustRight(n: u32) MyNumberError!u32 {
- return fixTooBig(n) catch |err| { return err; };
+ return fixTooBig(n) catch |err| {
+ return err;
+ };
}
fn fixTooBig(n: u32) MyNumberError!u32 {
@@ -45,14 +47,14 @@ fn fixTooBig(n: u32) MyNumberError!u32 {
if (err == MyNumberError.TooBig) {
return 20;
}
-
+
return err;
};
}
fn fixTooSmall(n: u32) MyNumberError!u32 {
// Oh dear, this is missing a lot! But don't worry, it's nearly
- // identical to fixTooBig() above.
+ // identical to fixTooBig() above.
//
// If we get a TooSmall error, we should return 10.
// If we get any other error, we should return that error.
@@ -65,4 +67,3 @@ fn detectProblems(n: u32) MyNumberError!u32 {
if (n > 20) return MyNumberError.TooBig;
return n;
}
-
diff --git a/exercises/25_errors5.zig b/exercises/25_errors5.zig
index 8b702cf..5119dcf 100644
--- a/exercises/25_errors5.zig
+++ b/exercises/25_errors5.zig
@@ -17,13 +17,12 @@ const MyNumberError = error{
pub fn main() void {
var a: u32 = addFive(44) catch 0;
var b: u32 = addFive(14) catch 0;
- var c: u32 = addFive(4) catch 0;
+ var c: u32 = addFive(4) catch 0;
- std.debug.print("a={}, b={}, c={}", .{a,b,c});
+ std.debug.print("a={}, b={}, c={}", .{ a, b, c });
}
fn addFive(n: u32) MyNumberError!u32 {
- //
// This function needs to return any error which might come back from detect().
// Please use a "try" statement rather than a "catch".
//
@@ -37,4 +36,3 @@ fn detect(n: u32) MyNumberError!u32 {
if (n > 20) return MyNumberError.TooBig;
return n;
}
-
diff --git a/exercises/28_defer2.zig b/exercises/28_defer2.zig
index 5c991da..6943012 100644
--- a/exercises/28_defer2.zig
+++ b/exercises/28_defer2.zig
@@ -9,7 +9,6 @@ pub fn main() void {
for (animals) |a| printAnimal(a);
-
std.debug.print("done.\n", .{});
}
@@ -21,9 +20,18 @@ fn printAnimal(animal: u8) void {
std.debug.print(") ", .{}); // <---- how!?
- if (animal == 'g'){ std.debug.print("Goat", .{}); return; }
- if (animal == 'c'){ std.debug.print("Cat", .{}); return; }
- if (animal == 'd'){ std.debug.print("Dog", .{}); return; }
+ if (animal == 'g') {
+ std.debug.print("Goat", .{});
+ return;
+ }
+ if (animal == 'c') {
+ std.debug.print("Cat", .{});
+ return;
+ }
+ if (animal == 'd') {
+ std.debug.print("Dog", .{});
+ return;
+ }
std.debug.print("Unknown", .{});
}
diff --git a/exercises/29_errdefer.zig b/exercises/29_errdefer.zig
index cd2158d..f43c738 100644
--- a/exercises/29_errdefer.zig
+++ b/exercises/29_errdefer.zig
@@ -15,7 +15,6 @@
//
const std = @import("std");
-//
var counter: u32 = 0;
const MyErr = error{ GetFail, IncFail };
@@ -25,8 +24,8 @@ pub fn main() void {
var a: u32 = makeNumber() catch return;
var b: u32 = makeNumber() catch return;
- std.debug.print("Numbers: {}, {}\n", .{a,b});
-}
+ std.debug.print("Numbers: {}, {}\n", .{ a, b });
+}
fn makeNumber() MyErr!u32 {
std.debug.print("Getting number...", .{});
@@ -35,7 +34,7 @@ fn makeNumber() MyErr!u32 {
// function exits with an error:
std.debug.print("failed!\n", .{});
- var num = try getNumber(); // <-- This could fail!
+ var num = try getNumber(); // <-- This could fail!
num = try increaseNumber(num); // <-- This could ALSO fail!
@@ -52,7 +51,7 @@ fn getNumber() MyErr!u32 {
fn increaseNumber(n: u32) MyErr!u32 {
// I fail after the first time you run me!
if (counter > 0) return MyErr.IncFail;
-
+
// Sneaky, weird global stuff.
counter += 1;
diff --git a/exercises/30_switch.zig b/exercises/30_switch.zig
index 451060e..cb983f5 100644
--- a/exercises/30_switch.zig
+++ b/exercises/30_switch.zig
@@ -21,7 +21,7 @@
// alert();
// return GameError.TooManyPlayers;
// }
-//
+//
const std = @import("std");
pub fn main() void {
@@ -29,15 +29,15 @@ pub fn main() void {
for (lang_chars) |c| {
switch (c) {
- 1 => std.debug.print("A", .{}),
- 2 => std.debug.print("B", .{}),
- 3 => std.debug.print("C", .{}),
- 4 => std.debug.print("D", .{}),
- 5 => std.debug.print("E", .{}),
- 6 => std.debug.print("F", .{}),
- 7 => std.debug.print("G", .{}),
- 8 => std.debug.print("H", .{}),
- 9 => std.debug.print("I", .{}),
+ 1 => std.debug.print("A", .{}),
+ 2 => std.debug.print("B", .{}),
+ 3 => std.debug.print("C", .{}),
+ 4 => std.debug.print("D", .{}),
+ 5 => std.debug.print("E", .{}),
+ 6 => std.debug.print("F", .{}),
+ 7 => std.debug.print("G", .{}),
+ 8 => std.debug.print("H", .{}),
+ 9 => std.debug.print("I", .{}),
10 => std.debug.print("J", .{}),
// ... we don't need everything in between ...
25 => std.debug.print("Y", .{}),
diff --git a/exercises/31_switch2.zig b/exercises/31_switch2.zig
index 138b809..b7680b4 100644
--- a/exercises/31_switch2.zig
+++ b/exercises/31_switch2.zig
@@ -16,15 +16,15 @@ pub fn main() void {
for (lang_chars) |c| {
var real_char: u8 = switch (c) {
- 1 => 'A',
- 2 => 'B',
- 3 => 'C',
- 4 => 'D',
- 5 => 'E',
- 6 => 'F',
- 7 => 'G',
- 8 => 'H',
- 9 => 'I',
+ 1 => 'A',
+ 2 => 'B',
+ 3 => 'C',
+ 4 => 'D',
+ 5 => 'E',
+ 6 => 'F',
+ 7 => 'G',
+ 8 => 'H',
+ 9 => 'I',
10 => 'J',
// ...
25 => 'Y',
diff --git a/exercises/32_unreachable.zig b/exercises/32_unreachable.zig
index c81efac..ffc35a4 100644
--- a/exercises/32_unreachable.zig
+++ b/exercises/32_unreachable.zig
@@ -16,7 +16,7 @@
//
// WE know there are only three operations but Zig doesn't. Use the
// unreachable statement to make the switch complete. Or ELSE. :-)
-//
+//
const std = @import("std");
pub fn main() void {
@@ -26,9 +26,15 @@ pub fn main() void {
for (operations) |op| {
switch (op) {
- 1 => { current_value += 1; },
- 2 => { current_value -= 1; },
- 3 => { current_value *= current_value; },
+ 1 => {
+ current_value += 1;
+ },
+ 2 => {
+ current_value -= 1;
+ },
+ 3 => {
+ current_value *= current_value;
+ },
}
std.debug.print("{} ", .{current_value});
diff --git a/exercises/33_iferror.zig b/exercises/33_iferror.zig
index ed92e94..67777a9 100644
--- a/exercises/33_iferror.zig
+++ b/exercises/33_iferror.zig
@@ -23,7 +23,7 @@ const MyNumberError = error{
const std = @import("std");
pub fn main() void {
- var nums = [_]u8{2,3,4,5,6};
+ var nums = [_]u8{ 2, 3, 4, 5, 6 };
for (nums) |num| {
std.debug.print("{}", .{num});
@@ -32,7 +32,7 @@ pub fn main() void {
if (n) |value| {
std.debug.print("=4. ", .{});
} else |err| switch (err) {
- MyNumberError.TooBig => std.debug.print(">4. ", .{}),
+ MyNumberError.TooBig => std.debug.print(">4. ", .{}),
// Please add a match for TooSmall here and have it print: "<4. "
}
}
@@ -43,7 +43,7 @@ pub fn main() void {
// This time we'll have numberMaybeFail() return an error union rather
// than a straight error.
fn numberMaybeFail(n: u8) MyNumberError!u8 {
- if(n > 4) return MyNumberError.TooBig;
- if(n < 4) return MyNumberError.TooSmall;
+ if (n > 4) return MyNumberError.TooBig;
+ if (n < 4) return MyNumberError.TooSmall;
return n;
}
diff --git a/exercises/34_quiz4.zig b/exercises/34_quiz4.zig
index 43734b7..6b0e3fc 100644
--- a/exercises/34_quiz4.zig
+++ b/exercises/34_quiz4.zig
@@ -7,7 +7,7 @@
//
const std = @import("std");
-const NumError = error{ IllegalNumber };
+const NumError = error{IllegalNumber};
pub fn main() void {
const stdout = std.io.getStdOut().writer();
@@ -19,6 +19,6 @@ pub fn main() void {
// Just don't modify this function. It's "perfect" the way it is. :-)
fn getNumber() NumError!u32 {
- if( false ) return NumError.IllegalNumber;
+ if (false) return NumError.IllegalNumber;
return 42;
}
diff --git a/exercises/35_enums.zig b/exercises/35_enums.zig
index cf455a4..1825f52 100644
--- a/exercises/35_enums.zig
+++ b/exercises/35_enums.zig
@@ -6,7 +6,7 @@
// 1. Having to remember op codes by number is no good.
// 2. We had to use "unreachable" because Zig had no way of knowing
// how many valid op codes there were.
-//
+//
// An "enum" is a Zig construct that lets you give names to numeric
// values and store them in a set. They look a lot like error sets:
//
@@ -16,11 +16,11 @@
//
// Let's use an enum in place of the numbers we were using in the
// previous version!
-//
+//
const std = @import("std");
// Please complete the enum!
-const Ops = enum{ ??? };
+const Ops = enum { ??? };
pub fn main() void {
const operations = [_]Ops{
@@ -29,16 +29,22 @@ pub fn main() void {
Ops.inc,
Ops.pow,
Ops.dec,
- Ops.dec
+ Ops.dec,
};
var current_value: u32 = 0;
for (operations) |op| {
switch (op) {
- Ops.inc => { current_value += 1; },
- Ops.dec => { current_value -= 1; },
- Ops.pow => { current_value *= current_value; },
+ Ops.inc => {
+ current_value += 1;
+ },
+ Ops.dec => {
+ current_value -= 1;
+ },
+ Ops.pow => {
+ current_value *= current_value;
+ },
// No "else" needed! Why is that?
}
diff --git a/exercises/36_enums2.zig b/exercises/36_enums2.zig
index 2e04415..650abef 100644
--- a/exercises/36_enums2.zig
+++ b/exercises/36_enums2.zig
@@ -16,7 +16,7 @@ const std = @import("std");
// Zig lets us write integers in hexadecimal format:
//
-// 0xf (is the value 15 in hex)
+// 0xf (is the value 15 in hex)
//
// Web browsers let us specify colors using a hexadecimal
// number where each byte represents the brightness of the
@@ -26,10 +26,10 @@ const std = @import("std");
// #RRGGBB
//
// Please define and use a pure blue value Color:
-const Color = enum(u32){
- red = 0xff0000,
+const Color = enum(u32) {
+ red = 0xff0000,
green = 0x00ff00,
- blue = ???,
+ blue = ???,
};
pub fn main() void {
@@ -53,9 +53,9 @@ pub fn main() void {
\\ Green
\\ Blue
\\
- , .{
- @enumToInt(Color.red),
- @enumToInt(Color.green),
- @enumToInt(???), // Oops! We're missing something!
- });
+ , .{
+ @enumToInt(Color.red),
+ @enumToInt(Color.green),
+ @enumToInt(???), // Oops! We're missing something!
+ });
}
diff --git a/exercises/37_structs.zig b/exercises/37_structs.zig
index dd4b633..37989c0 100644
--- a/exercises/37_structs.zig
+++ b/exercises/37_structs.zig
@@ -23,7 +23,7 @@
const std = @import("std");
// We'll use an enum to specify the character class.
-const Class = enum{
+const Class = enum {
wizard,
thief,
bard,
@@ -32,7 +32,7 @@ const Class = enum{
// Please add a new property to this struct called "health" and make
// it a u8 integer type.
-const Character = struct{
+const Character = struct {
class: Class,
gold: u32,
experience: u32,
@@ -41,8 +41,8 @@ const Character = struct{
pub fn main() void {
// Please initialize Glorp with 100 health.
var glorp_the_wise = Character{
- .class = Class.wizard,
- .gold = 20,
+ .class = Class.wizard,
+ .gold = 20,
.experience = 10,
};
@@ -54,6 +54,6 @@ pub fn main() void {
std.debug.print("Your wizard has {} health and {} gold.", .{
glorp_the_wise.health,
- glorp_the_wise.gold
+ glorp_the_wise.gold,
});
}
diff --git a/exercises/38_structs2.zig b/exercises/38_structs2.zig
index b6def93..b0db022 100644
--- a/exercises/38_structs2.zig
+++ b/exercises/38_structs2.zig
@@ -2,20 +2,20 @@
// Grouping values in structs is not merely convenient. It also allows
// us to treat the values as a single item when storing them, passing
// them to functions, etc.
-//
+//
// This exercise demonstrates how we can store structs in an array and
// how doing so lets us print them all (both) using a loop.
//
const std = @import("std");
-const Class = enum{
+const Class = enum {
wizard,
thief,
bard,
warrior,
};
-const Character = struct{
+const Character = struct {
class: Class,
gold: u32,
health: u8,
@@ -27,9 +27,9 @@ pub fn main() void {
// Glorp the Wise
chars[0] = Character{
- .class = Class.wizard,
- .gold = 20,
- .health = 100,
+ .class = Class.wizard,
+ .gold = 20,
+ .health = 100,
.experience = 10,
};
@@ -45,7 +45,8 @@ pub fn main() void {
// Printing all RPG characters in a loop:
for (chars) |c, num| {
- std.debug.print("Character {} - G:{} H:{} XP:{}\n",
- .{num+1, c.gold, c.health, c.experience});
+ std.debug.print("Character {} - G:{} H:{} XP:{}\n", .{
+ num + 1, c.gold, c.health, c.experience,
+ });
}
}
diff --git a/exercises/39_pointers.zig b/exercises/39_pointers.zig
index 25b56c6..40b145c 100644
--- a/exercises/39_pointers.zig
+++ b/exercises/39_pointers.zig
@@ -3,7 +3,7 @@
//
// var foo: u8 = 5; // foo is 5
// var bar: *u8 = &foo; // bar is a pointer
-//
+//
// What is a pointer? It's a reference to a value. In this example
// bar is a reference to the memory space that current contains the
// value 5.
@@ -16,7 +16,7 @@
// &foo a reference to foo
// bar a pointer to the value at foo
// bar.* the value 5 (the dereferenced value "at" bar)
-//
+//
// We'll see why pointers are useful in a moment. For now, see if you
// can make this example work!
//
@@ -32,5 +32,5 @@ pub fn main() void {
// (See the "cheatsheet" above for ideas.)
num2 = ???;
- std.debug.print("num1: {}, num2: {}\n", .{num1, num2});
+ std.debug.print("num1: {}, num2: {}\n", .{ num1, num2 });
}
diff --git a/exercises/40_pointers2.zig b/exercises/40_pointers2.zig
index b046dc1..43dd2c3 100644
--- a/exercises/40_pointers2.zig
+++ b/exercises/40_pointers2.zig
@@ -6,7 +6,7 @@
//
// var foo: u8 = 5;
// const bar: u8 = 5;
-//
+//
// Then:
//
// &foo is of type "*u8"
@@ -23,5 +23,5 @@ pub fn main() void {
const a: u8 = 12;
const b: *u8 = &a; // fix this!
- std.debug.print("a: {}, b: {}\n", .{a, b.*});
+ std.debug.print("a: {}, b: {}\n", .{ a, b.* });
}
diff --git a/exercises/41_pointers3.zig b/exercises/41_pointers3.zig
index 21a43bd..9e2bcc6 100644
--- a/exercises/41_pointers3.zig
+++ b/exercises/41_pointers3.zig
@@ -16,7 +16,7 @@
// var p4: *u8 = &unlocked;
// const p5: *const u8 = &unlocked;
// var p6: *const u8 = &unlocked;
-//
+//
// Here p3 and p4 can both be used to change the value they point to but
// p3 cannot point at anything else.
// What's interesting is that p5 and p6 act like p1 and p2, but point to
@@ -32,10 +32,10 @@ pub fn main() void {
// Please define pointer "p" so that it can point to EITHER foo or
// bar AND change the value it points to!
??? p: ??? = undefined;
-
+
p = &foo;
p.* += 1;
p = &bar;
p.* += 1;
- std.debug.print("foo={}, bar={}\n", .{foo, bar});
+ std.debug.print("foo={}, bar={}\n", .{ foo, bar });
}
diff --git a/exercises/42_pointers4.zig b/exercises/42_pointers4.zig
index e6b8964..261dbc1 100644
--- a/exercises/42_pointers4.zig
+++ b/exercises/42_pointers4.zig
@@ -12,7 +12,6 @@ pub fn main() void {
makeFive(&num);
std.debug.print("num: {}, ", .{num});
-
// Now something interesting. Let's pass a reference to a
// specific array value:
makeFive(&more_nums[2]);
diff --git a/exercises/43_pointers5.zig b/exercises/43_pointers5.zig
index dc178ec..cb94189 100644
--- a/exercises/43_pointers5.zig
+++ b/exercises/43_pointers5.zig
@@ -34,33 +34,32 @@
//
const std = @import("std");
-const Class = enum{
+const Class = enum {
wizard,
thief,
bard,
warrior,
};
-const Character = struct{
+const Character = struct {
class: Class,
gold: u32,
- health: u8 = 100, // <--- You can also fields a default value!
+ health: u8 = 100, // <--- You can also provide fields a default value!
experience: u32,
};
pub fn main() void {
var glorp = Character{
- .class = Class.wizard,
- .gold = 10,
+ .class = Class.wizard,
+ .gold = 10,
.experience = 20,
};
// FIX ME!
// Please pass our Character "glorp" to printCharacter():
- printCharacter( ??? );
+ printCharacter(???);
}
-
// Note how this function's "c" parameter is a pointer to a Character struct.
fn printCharacter(c: *Character) void {
@@ -68,9 +67,9 @@ fn printCharacter(c: *Character) void {
// don't have to write the full enum name. Zig understands that ".wizard"
// means "Class.wizard" when we switch on a Class enum value:
const class_name = switch (c.class) {
- .wizard => "Wizard",
- .thief => "Thief",
- .bard => "Bard",
+ .wizard => "Wizard",
+ .thief => "Thief",
+ .bard => "Bard",
.warrior => "Warrior",
};
diff --git a/exercises/44_quiz5.zig b/exercises/44_quiz5.zig
index 6ec0da9..88e0ff7 100644
--- a/exercises/44_quiz5.zig
+++ b/exercises/44_quiz5.zig
@@ -4,13 +4,13 @@
//
// Are holding hands
// By holding tails."
-//
+//
// from Holding Hands
// by Lenore M. Link
-//
+//
const std = @import("std"); // single quotes
-const Elephant = struct{
+const Elephant = struct {
letter: u8,
tail: *Elephant = undefined,
visited: bool = false,
diff --git a/exercises/45_optionals.zig b/exercises/45_optionals.zig
index 815ba75..1327e4c 100644
--- a/exercises/45_optionals.zig
+++ b/exercises/45_optionals.zig
@@ -31,7 +31,7 @@ pub fn main() void {
// integer value from deepThought() OR the number 42:
var answer: u8 = result;
- std.debug.print("The Ultimate Answer: {}.\n",.{answer});
+ std.debug.print("The Ultimate Answer: {}.\n", .{answer});
}
fn deepThought() ?u8 {
@@ -39,7 +39,6 @@ fn deepThought() ?u8 {
// But we'll leave this as-is. Sorry Deep Thought.
return null;
}
-//
// Blast from the past:
//
// Optionals are a lot like error union types which can either
From bbe93b1f12ae60258a6322e8ec2212fd072b777a Mon Sep 17 00:00:00 2001
From: Will Clardy
Date: Mon, 15 Feb 2021 17:13:55 -0500
Subject: [PATCH 3/3] Add remaining patch files
---
patches/patches/03_assignment.patch | 13 ++++++++++++-
patches/patches/04_arrays.patch | 13 ++++++++++++-
patches/patches/05_arrays2.patch | 9 ++++++++-
patches/patches/06_strings.patch | 13 ++++++++++++-
patches/patches/07_strings2.patch | 9 ++++++++-
patches/patches/08_quiz.patch | 15 ++++++++++++++-
patches/patches/09_if.patch | 5 ++++-
patches/patches/10_if2.patch | 5 ++++-
patches/patches/11_while.patch | 5 ++++-
patches/patches/12_while2.patch | 5 ++++-
patches/patches/13_while3.patch | 7 ++++++-
patches/patches/14_while4.patch | 5 ++++-
patches/patches/15_for.patch | 5 ++++-
patches/patches/16_for2.patch | 5 ++++-
patches/patches/17_quiz2.patch | 17 ++++++++++++++++-
patches/patches/18_functions.patch | 5 ++++-
patches/patches/19_functions2.patch | 5 ++++-
patches/patches/20_quiz3.patch | 19 ++++++++++++++++++-
patches/patches/21_errors.patch | 9 ++++++++-
patches/patches/22_errors2.patch | 5 ++++-
patches/patches/23_errors3.patch | 9 ++++++++-
patches/patches/24_errors4.patch | 11 ++++++++++-
patches/patches/25_errors5.patch | 5 ++++-
patches/patches/26_hello2.patch | 5 ++++-
patches/patches/27_defer.patch | 5 ++++-
patches/patches/28_defer2.patch | 5 ++++-
patches/patches/29_errdefer.patch | 5 ++++-
patches/patches/30_switch.patch | 3 ++-
patches/patches/31_switch2.patch | 3 ++-
patches/patches/32_unreachable.patch | 3 ++-
patches/patches/33_iferror.patch | 3 ++-
patches/patches/34_quiz4.patch | 9 ++++++++-
patches/patches/35_enums.patch | 5 ++++-
patches/patches/36_enums2.patch | 13 ++++++++++++-
patches/patches/37_structs.patch | 5 ++++-
patches/patches/38_structs2.patch | 8 +++++++-
patches/patches/39_pointers.patch | 5 ++++-
patches/patches/40_pointers2.patch | 5 ++++-
patches/patches/41_pointers3.patch | 5 ++++-
patches/patches/42_pointers4.patch | 5 ++++-
patches/patches/43_pointers5.patch | 5 ++++-
patches/patches/44_quiz5.patch | 5 ++++-
patches/patches/45_optionals.patch | 5 ++++-
43 files changed, 263 insertions(+), 43 deletions(-)
diff --git a/patches/patches/03_assignment.patch b/patches/patches/03_assignment.patch
index 8b13789..bef4b24 100644
--- a/patches/patches/03_assignment.patch
+++ b/patches/patches/03_assignment.patch
@@ -1 +1,12 @@
-
+37c37
+< const n: u8 = 50;
+---
+> var n: u8 = 50;
+40c40
+< const pi: u8 = 314159;
+---
+> const pi: u32 = 314159;
+42c42
+< const negative_eleven: u8 = -11;
+---
+> const negative_eleven: i8 = -11;
diff --git a/patches/patches/04_arrays.patch b/patches/patches/04_arrays.patch
index 8b13789..c6f9de3 100644
--- a/patches/patches/04_arrays.patch
+++ b/patches/patches/04_arrays.patch
@@ -1 +1,12 @@
-
+30c30
+< const some_primes = [_]u8{ 1, 3, 5, 7, 11, 13, 17, 19 };
+---
+> var some_primes = [_]u8{ 1, 3, 5, 7, 11, 13, 17, 19 };
+43c43
+< const fourth = some_primes[???];
+---
+> const fourth = some_primes[3];
+47c47
+< const length = some_primes.???;
+---
+> const length = some_primes.len;
diff --git a/patches/patches/05_arrays2.patch b/patches/patches/05_arrays2.patch
index 8b13789..1e7b6b1 100644
--- a/patches/patches/05_arrays2.patch
+++ b/patches/patches/05_arrays2.patch
@@ -1 +1,8 @@
-
+23c23
+< const leet = ???;
+---
+> const leet = le ++ et;
+28c28
+< const bit_pattern = [_]u8{ ??? } ** 3;
+---
+> const bit_pattern = [_]u8{ 1, 0, 0, 1 } ** 3;
diff --git a/patches/patches/06_strings.patch b/patches/patches/06_strings.patch
index 8b13789..040a73c 100644
--- a/patches/patches/06_strings.patch
+++ b/patches/patches/06_strings.patch
@@ -1 +1,12 @@
-
+22c22
+< const d: u8 = ziggy[???];
+---
+> const d: u8 = ziggy[4];
+26c26
+< const laugh = "ha " ???;
+---
+> const laugh = "ha " ** 3;
+33c33
+< const major_tom = major ??? tom;
+---
+> const major_tom = major ++ " " ++ tom;
diff --git a/patches/patches/07_strings2.patch b/patches/patches/07_strings2.patch
index 8b13789..34cd053 100644
--- a/patches/patches/07_strings2.patch
+++ b/patches/patches/07_strings2.patch
@@ -1 +1,8 @@
-
+18,20c18,20
+< Ziggy played guitar
+< Jamming good with Andrew Kelley
+< And the Spiders from Mars
+---
+> \\Ziggy played guitar
+> \\Jamming good with Andrew Kelley
+> \\And the Spiders from Mars
diff --git a/patches/patches/08_quiz.patch b/patches/patches/08_quiz.patch
index 8b13789..3d35a5a 100644
--- a/patches/patches/08_quiz.patch
+++ b/patches/patches/08_quiz.patch
@@ -1 +1,14 @@
-
+16c16
+< const x: u8 = 1;
+---
+> var x: u8 = 1;
+27c27
+< lang[???] = letters[x];
+---
+> lang[1] = letters[x];
+29,30c29,30
+< x = ???;
+< lang[2] = letters[???];
+---
+> x = 5;
+> lang[2] = letters[x];
diff --git a/patches/patches/09_if.patch b/patches/patches/09_if.patch
index 8b13789..46579ad 100644
--- a/patches/patches/09_if.patch
+++ b/patches/patches/09_if.patch
@@ -1 +1,4 @@
-
+26c26
+< if (foo) {
+---
+> if (foo == 1) {
diff --git a/patches/patches/10_if2.patch b/patches/patches/10_if2.patch
index 8b13789..e78f644 100644
--- a/patches/patches/10_if2.patch
+++ b/patches/patches/10_if2.patch
@@ -1 +1,4 @@
-
+13c13
+< var price: u8 = if ???;
+---
+> var price: u8 = if (discount) 17 else 20;
diff --git a/patches/patches/11_while.patch b/patches/patches/11_while.patch
index 8b13789..a892191 100644
--- a/patches/patches/11_while.patch
+++ b/patches/patches/11_while.patch
@@ -1 +1,4 @@
-
+24c24
+< while (???) {
+---
+> while (n < 1024) {
diff --git a/patches/patches/12_while2.patch b/patches/patches/12_while2.patch
index 8b13789..29ae763 100644
--- a/patches/patches/12_while2.patch
+++ b/patches/patches/12_while2.patch
@@ -1 +1,4 @@
-
+28c28
+< while (n < 1000) : ??? {
+---
+> while (n < 1000) : (n *= 2) {
diff --git a/patches/patches/13_while3.patch b/patches/patches/13_while3.patch
index 8b13789..b0172da 100644
--- a/patches/patches/13_while3.patch
+++ b/patches/patches/13_while3.patch
@@ -1 +1,6 @@
-
+27,28c27,28
+< if (n % 3 == 0) ???;
+< if (n % 5 == 0) ???;
+---
+> if (n % 3 == 0) continue;
+> if (n % 5 == 0) continue;
diff --git a/patches/patches/14_while4.patch b/patches/patches/14_while4.patch
index 8b13789..fb67587 100644
--- a/patches/patches/14_while4.patch
+++ b/patches/patches/14_while4.patch
@@ -1 +1,4 @@
-
+21c21
+< if (???) ???;
+---
+> if (n == 4) break;
diff --git a/patches/patches/15_for.patch b/patches/patches/15_for.patch
index 8b13789..e937221 100644
--- a/patches/patches/15_for.patch
+++ b/patches/patches/15_for.patch
@@ -1 +1,4 @@
-
+18c18
+< for (???) |???| {
+---
+> for (story) |scene| {
diff --git a/patches/patches/16_for2.patch b/patches/patches/16_for2.patch
index 8b13789..5aba37f 100644
--- a/patches/patches/16_for2.patch
+++ b/patches/patches/16_for2.patch
@@ -1 +1,4 @@
-
+27c27
+< for (bits) |bit, ???| {
+---
+> for (bits) |bit, i| {
diff --git a/patches/patches/17_quiz2.patch b/patches/patches/17_quiz2.patch
index 8b13789..b46dab6 100644
--- a/patches/patches/17_quiz2.patch
+++ b/patches/patches/17_quiz2.patch
@@ -1 +1,16 @@
-
+12c12
+< const std = import standard library;
+---
+> const std = @import("std");
+14c14
+< function main() void {
+---
+> pub fn main() void {
+19c19
+< ??? (i <= stop_at) : (i += 1) {
+---
+> while (i <= stop_at) : (i += 1) {
+23c23
+< std.debug.print("{}", .{???});
+---
+> std.debug.print("{}", .{i});
diff --git a/patches/patches/18_functions.patch b/patches/patches/18_functions.patch
index 8b13789..dd3f2f6 100644
--- a/patches/patches/18_functions.patch
+++ b/patches/patches/18_functions.patch
@@ -1 +1,4 @@
-
+31c31
+< ??? deepThought() ??? {
+---
+> fn deepThought() u8 {
diff --git a/patches/patches/19_functions2.patch b/patches/patches/19_functions2.patch
index 8b13789..254889a 100644
--- a/patches/patches/19_functions2.patch
+++ b/patches/patches/19_functions2.patch
@@ -1 +1,4 @@
-
+25c25
+< fn twoToThe(???) u32 {
+---
+> fn twoToThe(my_number: u32) u32 {
diff --git a/patches/patches/20_quiz3.patch b/patches/patches/20_quiz3.patch
index 8b13789..6a00d31 100644
--- a/patches/patches/20_quiz3.patch
+++ b/patches/patches/20_quiz3.patch
@@ -1 +1,18 @@
-
+24,25c24,25
+< fn printPowersOfTwo(numbers: [4]u16) ??? {
+< loop (numbers) |n| {
+---
+> fn printPowersOfTwo(numbers: [4]u16) void {
+> for (numbers) |n| {
+34c34
+< fn twoToThe(number: u16) ??? {
+---
+> fn twoToThe(number: u16) u16 {
+38c38
+< loop (n < number) : (n += 1) {
+---
+> while (n < number) : (n += 1) {
+42c42
+< return ???;
+---
+> return total;
diff --git a/patches/patches/21_errors.patch b/patches/patches/21_errors.patch
index 8b13789..b37b3c8 100644
--- a/patches/patches/21_errors.patch
+++ b/patches/patches/21_errors.patch
@@ -1 +1,8 @@
-
+12c12
+< ???,
+---
+> TooSmall,
+29c29
+< if (???) {
+---
+> if (number_error == MyNumberError.TooSmall) {
diff --git a/patches/patches/22_errors2.patch b/patches/patches/22_errors2.patch
index 8b13789..0501159 100644
--- a/patches/patches/22_errors2.patch
+++ b/patches/patches/22_errors2.patch
@@ -1 +1,4 @@
-
+22c22
+< var my_number: ??? = 5;
+---
+> var my_number: MyNumberError!u8 = 5;
diff --git a/patches/patches/23_errors3.patch b/patches/patches/23_errors3.patch
index 8b13789..a850116 100644
--- a/patches/patches/23_errors3.patch
+++ b/patches/patches/23_errors3.patch
@@ -1 +1,8 @@
-
+15c15
+< var b: u32 = addTwenty(4) ??? 22;
+---
+> var b: u32 = addTwenty(4) catch 22;
+22c22
+< fn addTwenty(n: u32) ??? {
+---
+> fn addTwenty(n: u32) MyNumberError!u32 {
diff --git a/patches/patches/24_errors4.patch b/patches/patches/24_errors4.patch
index 8b13789..bb3fc8f 100644
--- a/patches/patches/24_errors4.patch
+++ b/patches/patches/24_errors4.patch
@@ -1 +1,10 @@
-
+62c62,68
+< return detectProblems(n) ???
+---
+> return detectProblems(n) catch |err| {
+> if (err == MyNumberError.TooSmall) {
+> return 10;
+> }
+>
+> return err;
+> };
diff --git a/patches/patches/25_errors5.patch b/patches/patches/25_errors5.patch
index 8b13789..8aa59d4 100644
--- a/patches/patches/25_errors5.patch
+++ b/patches/patches/25_errors5.patch
@@ -1 +1,4 @@
-
+29c29
+< var x = detect(n);
+---
+> var x = try detect(n);
diff --git a/patches/patches/26_hello2.patch b/patches/patches/26_hello2.patch
index 8b13789..0065da5 100644
--- a/patches/patches/26_hello2.patch
+++ b/patches/patches/26_hello2.patch
@@ -1 +1,4 @@
-
+22c22
+< stdout.print("Hello world!\n", .{});
+---
+> try stdout.print("Hello world!\n", .{});
diff --git a/patches/patches/27_defer.patch b/patches/patches/27_defer.patch
index 8b13789..6ff7f98 100644
--- a/patches/patches/27_defer.patch
+++ b/patches/patches/27_defer.patch
@@ -1 +1,4 @@
-
+23c23
+< std.debug.print("Two\n", .{});
+---
+> defer std.debug.print("Two\n", .{});
diff --git a/patches/patches/28_defer2.patch b/patches/patches/28_defer2.patch
index 8b13789..c042c45 100644
--- a/patches/patches/28_defer2.patch
+++ b/patches/patches/28_defer2.patch
@@ -1 +1,4 @@
-
+21c21
+< std.debug.print(") ", .{}); // <---- how!?
+---
+> defer std.debug.print(") ", .{}); // <---- how!?
diff --git a/patches/patches/29_errdefer.patch b/patches/patches/29_errdefer.patch
index 8b13789..f93c56f 100644
--- a/patches/patches/29_errdefer.patch
+++ b/patches/patches/29_errdefer.patch
@@ -1 +1,4 @@
-
+35c34
+< std.debug.print("failed!\n", .{});
+---
+> errdefer std.debug.print("failed!\n", .{});
diff --git a/patches/patches/30_switch.patch b/patches/patches/30_switch.patch
index 8b13789..05cbe1a 100644
--- a/patches/patches/30_switch.patch
+++ b/patches/patches/30_switch.patch
@@ -1 +1,2 @@
-
+48a49
+> else => std.debug.print("?", .{}),
diff --git a/patches/patches/31_switch2.patch b/patches/patches/31_switch2.patch
index 8b13789..f786762 100644
--- a/patches/patches/31_switch2.patch
+++ b/patches/patches/31_switch2.patch
@@ -1 +1,2 @@
-
+33a34
+> else => '!',
diff --git a/patches/patches/32_unreachable.patch b/patches/patches/32_unreachable.patch
index 8b13789..0883932 100644
--- a/patches/patches/32_unreachable.patch
+++ b/patches/patches/32_unreachable.patch
@@ -1 +1,2 @@
-
+37a38
+> else => unreachable,
diff --git a/patches/patches/33_iferror.patch b/patches/patches/33_iferror.patch
index 8b13789..62904db 100644
--- a/patches/patches/33_iferror.patch
+++ b/patches/patches/33_iferror.patch
@@ -1 +1,2 @@
-
+36a37
+> MyNumberError.TooSmall => std.debug.print("<4. ", .{}),
diff --git a/patches/patches/34_quiz4.patch b/patches/patches/34_quiz4.patch
index 8b13789..b259352 100644
--- a/patches/patches/34_quiz4.patch
+++ b/patches/patches/34_quiz4.patch
@@ -1 +1,8 @@
-
+12c12
+< pub fn main() void {
+---
+> pub fn main() !void {
+15c15
+< const my_num: u32 = getNumber();
+---
+> const my_num: u32 = try getNumber();
diff --git a/patches/patches/35_enums.patch b/patches/patches/35_enums.patch
index 8b13789..ed2344b 100644
--- a/patches/patches/35_enums.patch
+++ b/patches/patches/35_enums.patch
@@ -1 +1,4 @@
-
+23c23
+< const Ops = enum { ??? };
+---
+> const Ops = enum { dec, inc, pow };
diff --git a/patches/patches/36_enums2.patch b/patches/patches/36_enums2.patch
index 8b13789..54a7094 100644
--- a/patches/patches/36_enums2.patch
+++ b/patches/patches/36_enums2.patch
@@ -1 +1,12 @@
-
+32c32
+< blue = ???,
+---
+> blue = 0x0000ff,
+54c54
+< \\ Blue
+---
+> \\ Blue
+59c59
+< @enumToInt(???), // Oops! We're missing something!
+---
+> @enumToInt(Color.blue), // Oops! We're missing something!
diff --git a/patches/patches/37_structs.patch b/patches/patches/37_structs.patch
index 8b13789..c26510d 100644
--- a/patches/patches/37_structs.patch
+++ b/patches/patches/37_structs.patch
@@ -1 +1,4 @@
-
+38a39
+> health: u8,
+46a48
+> .health = 100,
diff --git a/patches/patches/38_structs2.patch b/patches/patches/38_structs2.patch
index 8b13789..5d0d188 100644
--- a/patches/patches/38_structs2.patch
+++ b/patches/patches/38_structs2.patch
@@ -1 +1,7 @@
-
+44a45,50
+> chars[1] = Character{
+> .class = Class.bard,
+> .gold = 10,
+> .health = 100,
+> .experience = 20,
+> };
diff --git a/patches/patches/39_pointers.patch b/patches/patches/39_pointers.patch
index 8b13789..57d67e5 100644
--- a/patches/patches/39_pointers.patch
+++ b/patches/patches/39_pointers.patch
@@ -1 +1,4 @@
-
+33c33
+< num2 = ???;
+---
+> num2 = num1_pointer.*;
diff --git a/patches/patches/40_pointers2.patch b/patches/patches/40_pointers2.patch
index 8b13789..a69cb20 100644
--- a/patches/patches/40_pointers2.patch
+++ b/patches/patches/40_pointers2.patch
@@ -1 +1,4 @@
-
+24c24
+< const b: *u8 = &a; // fix this!
+---
+> const b: *const u8 = &a; // fix this!
diff --git a/patches/patches/41_pointers3.patch b/patches/patches/41_pointers3.patch
index 8b13789..02f7744 100644
--- a/patches/patches/41_pointers3.patch
+++ b/patches/patches/41_pointers3.patch
@@ -1 +1,4 @@
-
+34c34
+< ??? p: ??? = undefined;
+---
+> var p: *u8 = undefined;
diff --git a/patches/patches/42_pointers4.patch b/patches/patches/42_pointers4.patch
index 8b13789..29ca2d0 100644
--- a/patches/patches/42_pointers4.patch
+++ b/patches/patches/42_pointers4.patch
@@ -1 +1,4 @@
-
+31c31
+< ??? = 5; // fix me!
+---
+> x.* = 5; // fix me!
diff --git a/patches/patches/43_pointers5.patch b/patches/patches/43_pointers5.patch
index 8b13789..8a73551 100644
--- a/patches/patches/43_pointers5.patch
+++ b/patches/patches/43_pointers5.patch
@@ -1 +1,4 @@
-
+60c60
+< printCharacter(???);
+---
+> printCharacter(&glorp);
diff --git a/patches/patches/44_quiz5.patch b/patches/patches/44_quiz5.patch
index 8b13789..44d4451 100644
--- a/patches/patches/44_quiz5.patch
+++ b/patches/patches/44_quiz5.patch
@@ -1 +1,4 @@
-
+21a22
+> var elephantB = Elephant{ .letter = 'B' };
+27a29
+> elephantB.tail = &elephantC;
diff --git a/patches/patches/45_optionals.patch b/patches/patches/45_optionals.patch
index 8b13789..c945b5a 100644
--- a/patches/patches/45_optionals.patch
+++ b/patches/patches/45_optionals.patch
@@ -1 +1,4 @@
-
+32c32
+< var answer: u8 = result;
+---
+> var answer: u8 = result orelse 42;