diff --git a/build.zig b/build.zig index ea47f11..058adae 100644 --- a/build.zig +++ b/build.zig @@ -913,7 +913,7 @@ const exercises = [_]Exercise{ }, .{ .main_file = "076_sentinels.zig", - .output = "Array:123056. Many-item pointer:123.", + .output = "Array:[ 1 2 3 0 5 6 ]. Many-item pointer:[ 1 2 3 ]. Array:[ 30 31 32 20 34 35 ]. Many-item pointer:[ 30 31 32 ].", }, .{ .main_file = "077_sentinels2.zig", diff --git a/exercises/076_sentinels.zig b/exercises/076_sentinels.zig index 357bd95..c95b5da 100644 --- a/exercises/076_sentinels.zig +++ b/exercises/076_sentinels.zig @@ -48,22 +48,33 @@ pub fn main() void { // And here's a zero-terminated many-item pointer: const ptr: [*:0]u32 = &nums; - // For fun, let's replace the value at position 3 with the - // sentinel value 0. This seems kind of naughty. - nums[3] = 0; + // Just to show not everything must be zero-terminated, here + // is a space-terminated array of u8 values 👾: + var space = [_:' ']u8{ '0', '1', '2', '3', '4', '5' }; - // So now we have a zero-terminated array and a many-item - // pointer that reference the same data: a sequence of - // numbers that both ends in and CONTAINS the sentinel value. + // And here's a space-terminated many-item pointer: + const spaceptr: [*:' ']u8 = &space; + + // For fun, let's replace the value at position 3 with the + // sentinel value. This seems kind of naughty. + nums[3] = 0; + space[3] = ' '; + + // Now we have a zero-terminated array, a space-terminated + // array, and a couple of many-item pointers that reference + // the same data: sequences of numbers that both end in and + // CONTAIN the sentinel value. // // Attempting to loop through and print both of these should // demonstrate how they are similar and different. // // (It turns out that the array prints completely, including - // the sentinel 0 in the middle. The many-item pointer stops + // the sentinel in the middle. The many-item pointer stops // at the first sentinel value.) printSequence(nums); printSequence(ptr); + printSequence(space); + printSequence(spaceptr); print("\n", .{}); } @@ -79,27 +90,27 @@ fn printSequence(my_seq: anytype) void { // depending on which type of my_seq was passed in: switch (my_typeinfo) { .Array => { - print("Array:", .{}); + print("Array:[", .{}); // Loop through the items in my_seq. for (???) |s| { - print("{}", .{s}); + print(" {x}", .{s}); } }, .Pointer => { // Check this out - it's pretty cool: const my_sentinel = sentinel(@TypeOf(my_seq)); - print("Many-item pointer:", .{}); + print("Many-item pointer:[", .{}); // Loop through the items in my_seq until we hit the // sentinel value. var i: usize = 0; while (??? != my_sentinel) { - print("{}", .{my_seq[i]}); + print(" {x}", .{my_seq[i]}); i += 1; } }, else => unreachable, } - print(". ", .{}); + print(" ]. ", .{}); } diff --git a/patches/patches/076_sentinels.patch b/patches/patches/076_sentinels.patch index cbfae31..111072c 100644 --- a/patches/patches/076_sentinels.patch +++ b/patches/patches/076_sentinels.patch @@ -1,12 +1,12 @@ --- exercises/076_sentinels.zig 2023-10-03 22:15:22.125574535 +0200 +++ answers/076_sentinels.zig 2023-10-05 20:04:07.186102649 +0200 @@ -82,7 +82,7 @@ - print("Array:", .{}); + print("Array:[", .{}); // Loop through the items in my_seq. - for (???) |s| { + for (my_seq) |s| { - print("{}", .{s}); + print(" {x}", .{s}); } }, @@ -94,7 +94,7 @@ @@ -15,6 +15,6 @@ var i: usize = 0; - while (??? != my_sentinel) { + while (my_seq[i] != my_sentinel) { - print("{}", .{my_seq[i]}); + print(" {x}", .{my_seq[i]}); i += 1; }