From b9b89737fca7cc80b7d1b1527445e0ec71b25dda Mon Sep 17 00:00:00 2001 From: Dave Gauer Date: Wed, 6 Jan 2021 17:41:53 -0500 Subject: [PATCH] Added first quiz --- 03_assignment.zig | 4 ++-- 04_arrays.zig | 24 +++++++++++++----------- 08_quiz.zig | 34 ++++++++++++++++++++++++++++++++++ ziglings | 1 + 4 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 08_quiz.zig diff --git a/03_assignment.zig b/03_assignment.zig index 6280833..2c4c15a 100644 --- a/03_assignment.zig +++ b/03_assignment.zig @@ -24,7 +24,7 @@ pub fn main() void { // Perhaps you noticed before that the print function takes two // parameters. Now it will make more sense: the first parameter // is a string. The string may contain placeholders '{}', and the - // second parameter is an anonymous struct (data structure) - // with values to be printed in place of the placeholders. + // 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}); } diff --git a/04_arrays.zig b/04_arrays.zig index 2e3c208..a509800 100644 --- a/04_arrays.zig +++ b/04_arrays.zig @@ -1,26 +1,28 @@ // -// Let's learn some array basics. Arrays literals are declared with: +// Let's learn some array basics. Arrays are declared with: // -// [size]{ values }; +// const foo [size] = [size]{ values }; // // When Zig can infer the size of the array, you can use '_' for the -// size like so: +// size. You can also let Zig infer the type of the value so the +// declaration is much less verbose. // -// [_]{ values }; +// const foo = [_]{ values }; // const std = @import("std"); pub fn main() void { - const some_primes = [_]u8{ 2, 3, 5, 7, 11, 13, 17, 19 }; - // Array values are accessed using square bracket '[]' notation. - // - // (Note that when Zig can infer the type (u8 in this case) of a - // value, we don't have to manually specify it.) - // + const some_primes = [_]u8{ 1, 3, 5, 7, 11, 13, 17, 19 }; + + // Individual values can be set with '[]' notation. Let's fix + // the first prime (it should be 2!): + some_primes[0] = 2; + + // Individual values can also be accessed with '[]' notation. const first = some_primes[0]; - // Looks like we need to complete this expression: + // Looks like we need to complete this expression (like 'first'): const fourth = ???; // Use '.len' to get the length of the array: diff --git a/08_quiz.zig b/08_quiz.zig new file mode 100644 index 0000000..e23f856 --- /dev/null +++ b/08_quiz.zig @@ -0,0 +1,34 @@ +// +// Quiz time! Let's see if you can fix this whole program. +// +// This is meant to be challenging. +// +// Let the compiler tell you what's wrong. +// +// Start at the top. +// +const std = @import("std"); + +pub fn main() void { + // What is this nonsense? :-) + const letters = "YZhifg"; + + const x: u8 = 1; + + // This is something you haven't seen before: declaring an array + // without putting anything in it. There is no error here: + var lang: [3]u8 = undefined; + + // The following lines attempt to put 'Z', 'i', and 'g' into the + // 'lang' array we just created. + lang[0] = letters[x]; + + x = 3; + lang[???] = letters[x]; + + x = ???; + lang[2] = letters[???]; + + // We want to "Program in Zig!" of course: + std.debug.print("Program in {}!\n", .{lang}); +} diff --git a/ziglings b/ziglings index 98f8a50..7825cf6 100755 --- a/ziglings +++ b/ziglings @@ -72,6 +72,7 @@ check_it 04_arrays.zig "Fourth: 7, Length: 8" "There are two things to complete check_it 05_arrays2.zig "LEET: 1337, Bits: 100110011001" "Fill in the two arrays." check_it 06_strings.zig "d=d ha ha ha Major Tom" "Each '???' needs something filled in." check_it 07_strings2.zig "Ziggy" "Please fix the lyrics!" +check_it 08_quiz.zig "Program in Zig" "See if you can fix the program!" echo echo " __ __ _ "