diff --git a/exercises/065_builtins2.zig b/exercises/065_builtins2.zig index eb8f3aa..78cd23b 100644 --- a/exercises/065_builtins2.zig +++ b/exercises/065_builtins2.zig @@ -93,36 +93,25 @@ pub fn main() void { print("He has room in his heart for:", .{}); - // A StructFields array - const fields = @typeInfo(Narcissus).@"struct".fields; + // `field_names` is a slice of strings and it holds the names of the struct's fields + // `field_types` is a slice of strings and it holds the types of the struct's fields, + // it is guaranteed to be the same length as `field_names` + const field_names = @typeInfo(Narcissus).@"struct".field_names; + const field_types = @typeInfo(Narcissus).@"struct".field_types; - // 'fields' is a slice of StructFields. Here's the declaration: - // - // pub const StructField = struct { - // name: [:0]const u8, // Don't worry about `:0` yet! - // type: type, - // default_value_ptr: ?*const anyopaque, - // is_comptime: bool, - // alignment: comptime_int, - // - // defaultValue() ?sf.type // Function that loads the - // // field's default value from - // // `default_value_ptr` - // }; - // // 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) { - print(" {s}", .{fields[0].name}); + if (field_???[???] != void) { + print(" {s}", .{field_???[???]}); } - if (fields[1].??? != void) { - print(" {s}", .{fields[1].name}); + if (field_???[???] != void) { + print(" {s}", .{field_???[???]}); } - if (fields[2].??? != void) { - print(" {s}", .{fields[2].name}); + if (field_???[???] != void) { + print(" {s}", .{field_???[???]}); } // Yuck, look at all that repeated code above! I don't know diff --git a/patches/patches/065_builtins2.patch b/patches/patches/065_builtins2.patch index 89fd652..c011646 100644 --- a/patches/patches/065_builtins2.patch +++ b/patches/patches/065_builtins2.patch @@ -1,5 +1,5 @@ ---- exercises/065_builtins2.zig 2026-02-27 13:10:36 -+++ answers/065_builtins2.zig 2026-02-27 13:10:52 +--- exercises/065_builtins2.zig 2026-06-01 15:33:16.617432671 +0200 ++++ answers/065_builtins2.zig 2026-06-01 15:33:31.104018108 +0200 @@ -58,7 +58,7 @@ // Oops! We cannot leave the 'me' and 'myself' fields // undefined. Please set them here: @@ -18,22 +18,26 @@ // Now we print a pithy statement about Narcissus. print("A {s} loves all {s}es. ", .{ -@@ -113,15 +113,15 @@ +@@ -102,16 +102,16 @@ // 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}", .{fields[0].name}); +- if (field_???[???] != void) { +- print(" {s}", .{field_???[???]}); ++ if (field_types[0] != void) { ++ print(" {s}", .{field_names[0]}); } -- if (fields[1].??? != void) { -+ if (fields[1].type != void) { - print(" {s}", .{fields[1].name}); +- if (field_???[???] != void) { +- print(" {s}", .{field_???[???]}); ++ if (field_types[1] != void) { ++ print(" {s}", .{field_names[1]}); } -- if (fields[2].??? != void) { -+ if (fields[2].type != void) { - print(" {s}", .{fields[2].name}); +- if (field_???[???] != void) { +- print(" {s}", .{field_???[???]}); ++ if (field_types[2] != void) { ++ print(" {s}", .{field_names[2]}); } + // Yuck, look at all that repeated code above! I don't know