diff --git a/exercises/061_coercions.zig b/exercises/061_coercions.zig index ccf3c9b..0ecf542 100644 --- a/exercises/061_coercions.zig +++ b/exercises/061_coercions.zig @@ -67,7 +67,7 @@ const print = @import("std").debug.print; pub fn main() void { var letter: u8 = 'A'; - const my_letter: ??? = &letter; + const my_letter: ?*[1]u8 = &letter; // ^^^^^^^ // Your type here. // Must coerce from &letter (which is a *u8). diff --git a/exercises/062_loop_expressions.zig b/exercises/062_loop_expressions.zig index f6b8771..8c37e28 100644 --- a/exercises/062_loop_expressions.zig +++ b/exercises/062_loop_expressions.zig @@ -47,7 +47,7 @@ pub fn main() void { // return it from the for loop. const current_lang: ?[]const u8 = for (langs) |lang| { if (lang.len == 3) break lang; - }; + } else null; if (current_lang) |cl| { print("Current language: {s}\n", .{cl}); diff --git a/exercises/063_labels.zig b/exercises/063_labels.zig index 79adfaa..a131101 100644 --- a/exercises/063_labels.zig +++ b/exercises/063_labels.zig @@ -128,8 +128,8 @@ pub fn main() void { // wanted for this Food. // // Please return this Food from the loop. - break; - }; + break food; + } else menu[0]; // ^ Oops! We forgot to return Mac & Cheese as the default // Food when the requested ingredients aren't found. diff --git a/exercises/064_builtins.zig b/exercises/064_builtins.zig index e91dfbe..ba3c8dc 100644 --- a/exercises/064_builtins.zig +++ b/exercises/064_builtins.zig @@ -63,7 +63,7 @@ pub fn main() void { // // If there was no overflow at all while adding 5 to a, what value would // 'my_result' hold? Write the answer in into 'expected_result'. - const expected_result: u8 = ???; + const expected_result: u8 = 18; print(". Without overflow: {b:0>8}. ", .{expected_result}); print("Furthermore, ", .{}); @@ -78,6 +78,6 @@ pub fn main() void { // Now it's your turn. See if you can fix this attempt to use // this builtin to reverse the bits of a u8 integer. const input: u8 = 0b11110000; - const tupni: u8 = @bitReverse(input, tupni); + const tupni: u8 = @bitReverse(input); print("{b:0>8} backwards is {b:0>8}.\n", .{ input, tupni }); } diff --git a/exercises/065_builtins2.zig b/exercises/065_builtins2.zig index 283aca5..a2dc705 100644 --- a/exercises/065_builtins2.zig +++ b/exercises/065_builtins2.zig @@ -58,7 +58,7 @@ pub fn main() void { // Oops! We cannot leave the 'me' and 'myself' fields // undefined. Please set them here: narcissus.me = &narcissus; - narcissus.??? = ???; + narcissus.myself = &narcissus; // This determines a "peer type" from three separate // references (they just happen to all be the same object). @@ -70,7 +70,7 @@ pub fn main() void { // // The fix for this is very subtle, but it makes a big // difference! - const Type2 = narcissus.fetchTheMostBeautifulType(); + const Type2 = Narcissus.fetchTheMostBeautifulType(); // Now we print a pithy statement about Narcissus. print("A {s} loves all {s}es. ", .{ @@ -109,15 +109,15 @@ pub fn main() void { // Please complete these 'if' statements so that the field // name will not be printed if the field is of type 'void' // (which is a zero-bit type that takes up no space at all!): - if (fields[0].??? != void) { + if (fields[0].type != void) { print(" {s}", .{@typeInfo(Narcissus).Struct.fields[0].name}); } - if (fields[1].??? != void) { + if (fields[1].type != void) { print(" {s}", .{@typeInfo(Narcissus).Struct.fields[1].name}); } - if (fields[2].??? != void) { + if (fields[2].type != void) { print(" {s}", .{@typeInfo(Narcissus).Struct.fields[2].name}); } diff --git a/exercises/066_comptime.zig b/exercises/066_comptime.zig index 9b07a2d..124b472 100644 --- a/exercises/066_comptime.zig +++ b/exercises/066_comptime.zig @@ -62,8 +62,8 @@ pub fn main() void { // types with specific sizes. The comptime numbers will be // coerced (if they'll fit!) into your chosen runtime types. // For this it is necessary to specify a size, e.g. 32 bit. - var var_int = 12345; - var var_float = 987.654; + var var_int: u32 = 12345; + var var_float: f32 = 987.654; // We can change what is stored at the areas set aside for // "var_int" and "var_float" in the running compiled program. diff --git a/exercises/067_comptime2.zig b/exercises/067_comptime2.zig index 6b9b14a..7867902 100644 --- a/exercises/067_comptime2.zig +++ b/exercises/067_comptime2.zig @@ -35,7 +35,7 @@ pub fn main() void { // In this contrived example, we've decided to allocate some // arrays using a variable count! But something's missing... // - var count = 0; + comptime var count = 0; count += 1; const a1: [count]u8 = .{'A'} ** count; @@ -60,5 +60,5 @@ pub fn main() void { // // Try uncommenting this line and playing around with it // (copy it, move it) to see what it does: - //@compileLog("Count at compile time: ", count); + // @compileLog("Count at compile time: ", count); } diff --git a/exercises/068_comptime3.zig b/exercises/068_comptime3.zig index 15b8997..1bd5fd1 100644 --- a/exercises/068_comptime3.zig +++ b/exercises/068_comptime3.zig @@ -43,7 +43,7 @@ const Schooner = struct { // // Please change this so that it sets a 0 scale to 1 // instead. - if (my_scale == 0) @compileError("Scale 1:0 is not valid!"); + if (my_scale == 0) my_scale = 1; self.scale = my_scale; self.hull_length /= my_scale; @@ -69,7 +69,7 @@ pub fn main() void { // Hey, we can't just pass this runtime variable as an // argument to the scaleMe() method. What would let us do // that? - var scale: u32 = undefined; + comptime var scale: u32 = undefined; scale = 32; // 1:32 scale diff --git a/exercises/069_comptime4.zig b/exercises/069_comptime4.zig index e090bb3..0263de0 100644 --- a/exercises/069_comptime4.zig +++ b/exercises/069_comptime4.zig @@ -42,8 +42,8 @@ pub fn main() void { // 2) Sets the size of the array of type T (which is the // sequence we're creating and returning). // -fn makeSequence(comptime T: type, ??? size: usize) [???]T { - var sequence: [???]T = undefined; +fn makeSequence(comptime T: type, comptime size: usize) [size]T { + var sequence: [size]T = undefined; var i: usize = 0; while (i < size) : (i += 1) { diff --git a/exercises/070_comptime5.zig b/exercises/070_comptime5.zig index afd4ae8..c6bc4bb 100644 --- a/exercises/070_comptime5.zig +++ b/exercises/070_comptime5.zig @@ -123,8 +123,8 @@ fn isADuck(possible_duck: anytype) bool { // Please make sure MyType has both waddle() and quack() // methods: const MyType = @TypeOf(possible_duck); - const walks_like_duck = ???; - const quacks_like_duck = ???; + const walks_like_duck = @hasDecl(MyType, "waddle"); + const quacks_like_duck = @hasDecl(MyType, "quack"); const is_duck = walks_like_duck and quacks_like_duck; diff --git a/exercises/071_comptime6.zig b/exercises/071_comptime6.zig index 7723291..d467184 100644 --- a/exercises/071_comptime6.zig +++ b/exercises/071_comptime6.zig @@ -40,7 +40,7 @@ pub fn main() void { const fields = @typeInfo(Narcissus).Struct.fields; - ??? { + inline for (fields) |field| { if (field.type != void) { print(" {s}", .{field.name}); } diff --git a/exercises/072_comptime7.zig b/exercises/072_comptime7.zig index 631e75b..1bdcc1a 100644 --- a/exercises/072_comptime7.zig +++ b/exercises/072_comptime7.zig @@ -35,7 +35,7 @@ pub fn main() void { // at compile time. // // Please fix this to loop once per "instruction": - ??? (i < instructions.len) : (???) { + inline while (i < instructions.len) : (i += 3) { // This gets the digit from the "instruction". Can you // figure out why we subtract '0' from it?