diff --git a/exercises/001_hello.zig b/exercises/001_hello.zig index 7f40b92..93a0cfb 100644 --- a/exercises/001_hello.zig +++ b/exercises/001_hello.zig @@ -16,6 +16,6 @@ // const std = @import("std"); -fn main() void { +pub fn main() void { std.debug.print("Hello world!\n", .{}); } diff --git a/exercises/002_std.zig b/exercises/002_std.zig index 8cc3792..5916c7c 100644 --- a/exercises/002_std.zig +++ b/exercises/002_std.zig @@ -11,7 +11,7 @@ // Please complete the import below: // -??? = @import("std"); +const std = @import("std"); pub fn main() void { std.debug.print("Standard Library.\n", .{}); diff --git a/exercises/003_assignment.zig b/exercises/003_assignment.zig index 10ba8cb..ed05855 100644 --- a/exercises/003_assignment.zig +++ b/exercises/003_assignment.zig @@ -34,12 +34,12 @@ const std = @import("std"); pub fn main() void { - const n: u8 = 50; + var n: u16 = 50; n = n + 5; - const pi: u8 = 314159; + const pi: u32 = 314159; - const negative_eleven: u8 = -11; + const negative_eleven: i8 = -11; // There are no errors in the next line, just explanation: // Perhaps you noticed before that the print function takes two diff --git a/exercises/004_arrays.zig b/exercises/004_arrays.zig index 88fcc78..b6756bb 100644 --- a/exercises/004_arrays.zig +++ b/exercises/004_arrays.zig @@ -27,7 +27,7 @@ pub fn main() void { // (Problem 1) // This "const" is going to cause a problem later - can you see what it is? // How do we fix it? - const some_primes = [_]u8{ 1, 3, 5, 7, 11, 13, 17, 19 }; + var some_primes = [_]u8{ 1, 3, 5, 7, 11, 13, 17, 19 }; // Individual values can be set with '[]' notation. // Example: This line changes the first prime to 2 (which is correct): @@ -40,11 +40,11 @@ pub fn main() void { // (Problem 2) // Looks like we need to complete this expression. Use the example // above to set "fourth" to the fourth element of the some_primes array: - const fourth = some_primes[???]; + const fourth = some_primes[3]; // (Problem 3) // Use the len property to get the length of the array: - const length = some_primes.???; + const length = some_primes.len; std.debug.print("First: {}, Fourth: {}, Length: {}\n", .{ first, fourth, length, diff --git a/exercises/005_arrays2.zig b/exercises/005_arrays2.zig index 07b9abe..e170266 100644 --- a/exercises/005_arrays2.zig +++ b/exercises/005_arrays2.zig @@ -21,12 +21,12 @@ pub fn main() void { // (Problem 1) // Please set this array concatenating the two arrays above. // It should result in: 1 3 3 7 - const leet = ???; + const leet = le ++ et; // (Problem 2) // Please set this array using repetition. // It should result in: 1 0 0 1 1 0 0 1 1 0 0 1 - const bit_pattern_unit = [_]u8{ ??? }; + const bit_pattern_unit = [_]u8{ 1, 0, 0, 1 }; const bit_pattern: [3 * bit_pattern_unit.len]u8 = @bitCast(@as([3][bit_pattern_unit.len]u8, @splat(bit_pattern_unit))); // Okay, that's all of the problems. Let's see the results. diff --git a/exercises/006_strings.zig b/exercises/006_strings.zig index 08977de..eb3a8f6 100644 --- a/exercises/006_strings.zig +++ b/exercises/006_strings.zig @@ -24,14 +24,14 @@ pub fn main() void { // (Problem 1) // Use array square bracket syntax to get the letter 'd' from // the string "stardust" above. - const d: u8 = ziggy[???]; + const d: u8 = ziggy[4]; // (Problem 2) // Use the array concatenation '++' operator to make "Major Tom". // (You'll need to add a space as well!) const major = "Major"; const tom = "Tom"; - const major_tom = major ??? tom; + const major_tom = major ++ " " ++ tom; // That's all the problems. Let's see our results: std.debug.print("d={u} {s}\n", .{ d, major_tom }); diff --git a/exercises/007_strings2.zig b/exercises/007_strings2.zig index 6350be1..74cb752 100644 --- a/exercises/007_strings2.zig +++ b/exercises/007_strings2.zig @@ -15,9 +15,9 @@ const std = @import("std"); pub fn main() void { const lyrics = - 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 ; std.debug.print("{s}\n", .{lyrics}); diff --git a/exercises/008_quiz.zig b/exercises/008_quiz.zig index 5a81fb2..dff4da3 100644 --- a/exercises/008_quiz.zig +++ b/exercises/008_quiz.zig @@ -19,7 +19,7 @@ pub fn main() void { // the idiomatic type to use for array indexing. // // There IS a problem on this line, but 'usize' isn't it. - const x: usize = 1; + var x: usize = 1; // Note: When you want to declare memory (an array in this // case) without putting anything in it, you can set it to @@ -33,10 +33,10 @@ pub fn main() void { lang[0] = letters[x]; x = 3; - lang[???] = letters[x]; + lang[1] = letters[x]; - x = ???; - lang[2] = letters[???]; + x = 5; + lang[2] = letters[x]; // We want to "Program in Zig!" of course: std.debug.print("Program in {s}!\n", .{lang}); diff --git a/exercises/009_if.zig b/exercises/009_if.zig index e167104..68bf04b 100644 --- a/exercises/009_if.zig +++ b/exercises/009_if.zig @@ -24,7 +24,7 @@ pub fn main() void { const foo = 42; // Please fix this condition: - if (foo) { + if (foo == 42) { // We want our program to print this message! std.debug.print("Foo is 42!\n", .{}); } else { diff --git a/exercises/010_if2.zig b/exercises/010_if2.zig index f0ffb43..7bbc01c 100644 --- a/exercises/010_if2.zig +++ b/exercises/010_if2.zig @@ -10,7 +10,7 @@ pub fn main() void { // Please use an if...else expression to set "price". // If discount is true, the price should be $17, otherwise $20: - const price: u8 = if ???; + const price: u8 = if (discount) 17 else 20; std.debug.print("With the discount, the price is ${}.\n", .{price}); } diff --git a/exercises/011_while.zig b/exercises/011_while.zig index 674d904..f04fcbe 100644 --- a/exercises/011_while.zig +++ b/exercises/011_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 (n != 1024) { // Print the current number std.debug.print("{} ", .{n}); diff --git a/exercises/012_while2.zig b/exercises/012_while2.zig index c9905aa..6f8e168 100644 --- a/exercises/012_while2.zig +++ b/exercises/012_while2.zig @@ -25,7 +25,7 @@ pub fn main() void { // Please set the continue expression so that we get the desired // results in the print statement below. - while (n < 1000) : ??? { + while (n < 1000) : (n *= 2) { // Print the current number std.debug.print("{} ", .{n}); } diff --git a/exercises/013_while3.zig b/exercises/013_while3.zig index 52d5ebd..715a6d1 100644 --- a/exercises/013_while3.zig +++ b/exercises/013_while3.zig @@ -24,8 +24,8 @@ pub fn main() void { 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) continue; + if (n % 5 == 0) continue; std.debug.print("{} ", .{n}); } diff --git a/exercises/014_while4.zig b/exercises/014_while4.zig index 95aecb0..dfd48fc 100644 --- a/exercises/014_while4.zig +++ b/exercises/014_while4.zig @@ -18,7 +18,7 @@ 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 (???) ???; + if (n == 4) break; } // Result: we want n=4 diff --git a/exercises/015_for.zig b/exercises/015_for.zig index 0ee8e7d..e6b9729 100644 --- a/exercises/015_for.zig +++ b/exercises/015_for.zig @@ -15,7 +15,7 @@ pub fn main() void { std.debug.print("A Dramatic Story: ", .{}); - for (???) |???| { + for (story) |scene| { if (scene == 'h') std.debug.print(":-) ", .{}); if (scene == 's') std.debug.print(":-( ", .{}); if (scene == 'n') std.debug.print(":-| ", .{}); diff --git a/exercises/016_for2.zig b/exercises/016_for2.zig index 6fb7844..eaab65f 100644 --- a/exercises/016_for2.zig +++ b/exercises/016_for2.zig @@ -25,7 +25,7 @@ pub fn main() void { // the value of the place as a power of two for each bit. // // See if you can figure out the missing pieces: - for (bits, ???) |bit, ???| { + for (bits, 0..) |bit, i| { // Note that we convert the usize i to a u32 with // @intCast(), a builtin function just like @import(). // We'll learn about these properly in a later exercise. diff --git a/exercises/017_quiz2.zig b/exercises/017_quiz2.zig index 6f32c2e..4ad3ca7 100644 --- a/exercises/017_quiz2.zig +++ b/exercises/017_quiz2.zig @@ -9,18 +9,18 @@ // Let's go from 1 to 16. This has been started for you, but there // are some problems. :-( // -const std = import standard library; +const std = @import("std"); -function main() void { +pub fn main() void { var i: u8 = 1; const stop_at: u8 = 16; // What kind of loop is this? A 'for' or a 'while'? - ??? (i <= stop_at) : (i += 1) { + while (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)) { - std.debug.print("{}", .{???}); + std.debug.print("{}", .{i}); } std.debug.print(", ", .{}); } diff --git a/exercises/018_functions.zig b/exercises/018_functions.zig index 1f78438..c9cc6c5 100644 --- a/exercises/018_functions.zig +++ b/exercises/018_functions.zig @@ -25,6 +25,6 @@ pub fn main() void { // We're just missing a couple things. One thing we're NOT missing is the // keyword "pub", which is not needed here. Can you guess why? // -??? deepThought() ??? { +fn deepThought() u8 { return 42; // Number courtesy Douglas Adams } diff --git a/exercises/019_functions2.zig b/exercises/019_functions2.zig index 5a76c7b..de90b87 100644 --- a/exercises/019_functions2.zig +++ b/exercises/019_functions2.zig @@ -22,7 +22,7 @@ pub fn main() void { // You'll need to figure out the parameter name and type that we're // expecting. The output type has already been specified for you. // -fn twoToThe(???) u32 { +fn twoToThe(my_number: u32) u32 { return std.math.pow(u32, 2, my_number); // std.math.pow(type, a, b) takes a numeric type and two // numbers of that type (or that can coerce to that type) and diff --git a/exercises/020_quiz3.zig b/exercises/020_quiz3.zig index 571628e..2284999 100644 --- a/exercises/020_quiz3.zig +++ b/exercises/020_quiz3.zig @@ -21,8 +21,8 @@ pub fn main() void { // // This function prints, but does not return anything. // -fn printPowersOfTwo(numbers: [4]u16) ??? { - loop (numbers) |n| { +fn printPowersOfTwo(numbers: [4]u16) void { + for (numbers) |n| { std.debug.print("{} ", .{twoToThe(n)}); } } @@ -31,13 +31,13 @@ fn printPowersOfTwo(numbers: [4]u16) ??? { // exercise. But don't be fooled! This one does the math without the aid // of the standard library! // -fn twoToThe(number: u16) ??? { +fn twoToThe(number: u16) u16 { var n: u16 = 0; var total: u16 = 1; - loop (n < number) : (n += 1) { + while (n < number) : (n += 1) { total *= 2; } - return ???; + return total; } diff --git a/exercises/021_errors.zig b/exercises/021_errors.zig index 7afeace..a6670b1 100644 --- a/exercises/021_errors.zig +++ b/exercises/021_errors.zig @@ -9,7 +9,7 @@ // "TooSmall". Please add it where needed! const MyNumberError = error{ TooBig, - ???, + TooSmall, TooFour, }; @@ -26,7 +26,7 @@ pub fn main() void { if (number_error == MyNumberError.TooBig) { std.debug.print(">4. ", .{}); } - if (???) { + if (number_error == MyNumberError.TooSmall) { std.debug.print("<4. ", .{}); } if (number_error == MyNumberError.TooFour) { diff --git a/exercises/022_errors2.zig b/exercises/022_errors2.zig index 1d513b3..0d4bb73 100644 --- a/exercises/022_errors2.zig +++ b/exercises/022_errors2.zig @@ -19,7 +19,7 @@ const std = @import("std"); const MyNumberError = error{TooSmall}; pub fn main() void { - var my_number: ??? = 5; + var my_number: MyNumberError!u8 = 5; // Looks like my_number will need to either store a number OR // an error. Can you set the type correctly above? diff --git a/exercises/023_errors3.zig b/exercises/023_errors3.zig index 195f21a..f538a2d 100644 --- a/exercises/023_errors3.zig +++ b/exercises/023_errors3.zig @@ -12,14 +12,14 @@ const MyNumberError = error{TooSmall}; pub fn main() void { const a: u32 = addTwenty(44) catch 22; - const b: u32 = addTwenty(4) ??? 22; + const b: u32 = addTwenty(4) catch 22; std.debug.print("a={}, b={}\n", .{ a, b }); } // Please provide the return type from this function. // Hint: it'll be an error union. -fn addTwenty(n: u32) ??? { +fn addTwenty(n: u32) !u32 { if (n < 5) { return MyNumberError.TooSmall; } else {