From e0259f43a726f61da14686de802021fcdb9aacd0 Mon Sep 17 00:00:00 2001 From: Chris Boesch Date: Fri, 3 Apr 2026 13:35:56 +0200 Subject: [PATCH] Insert space for additional async exercises --- build.zig | 64 ++++++++++------- exercises/090_async7.zig | 2 +- exercises/091_async8.zig | 69 +++++++++++++------ ...{092_interfaces.zig => 095_interfaces.zig} | 0 .../{093_hello_c.zig => 096_hello_c.zig} | 0 exercises/{094_c_math.zig => 097_c_math.zig} | 0 exercises/{095_for3.zig => 098_for3.zig} | 0 ...location.zig => 099_memory_allocation.zig} | 0 ...ipulation.zig => 100_bit_manipulation.zig} | 0 ...ulation2.zig => 101_bit_manipulation2.zig} | 0 ...{099_formatting.zig => 102_formatting.zig} | 0 exercises/{100_for4.zig => 103_for4.zig} | 0 exercises/{101_for5.zig => 104_for5.zig} | 0 .../{102_testing.zig => 105_testing.zig} | 0 ..._tokenization.zig => 106_tokenization.zig} | 0 .../{104_threading.zig => 107_threading.zig} | 0 ...{105_threading2.zig => 108_threading2.zig} | 0 exercises/{106_files.zig => 109_files.zig} | 0 exercises/{107_files2.zig => 110_files2.zig} | 0 ...eled_switch.zig => 111_labeled_switch.zig} | 0 .../{109_vectors.zig => 112_vectors.zig} | 0 exercises/{110_quiz9.zig => 113_quiz9.zig} | 0 exercises/{111_packed.zig => 114_packed.zig} | 0 .../{112_packed2.zig => 115_packed2.zig} | 0 patches/patches/091_async8.patch | 11 +++ ..._interfaces.patch => 095_interfaces.patch} | 4 +- .../{093_hello_c.patch => 096_hello_c.patch} | 4 +- patches/patches/097_bit_manipulation.patch | 11 --- .../{094_c_math.patch => 097_c_math.patch} | 4 +- .../{095_for3.patch => 098_for3.patch} | 4 +- ...tion.patch => 099_memory_allocation.patch} | 4 +- patches/patches/100_bit_manipulation.patch | 11 +++ ...ion2.patch => 101_bit_manipulation2.patch} | 4 +- ..._formatting.patch => 102_formatting.patch} | 4 +- .../{100_for4.patch => 103_for4.patch} | 4 +- .../{101_for5.patch => 104_for5.patch} | 4 +- .../{102_testing.patch => 105_testing.patch} | 4 +- ...enization.patch => 106_tokenization.patch} | 4 +- ...04_threading.patch => 107_threading.patch} | 4 +- ..._threading2.patch => 108_threading2.patch} | 4 +- .../{106_files.patch => 109_files.patch} | 4 +- .../{107_files2.patch => 110_files2.patch} | 4 +- ..._switch.patch => 111_labeled_switch.patch} | 6 +- .../{109_vectors.patch => 112_vectors.patch} | 4 +- .../{110_quiz9.patch => 113_quiz9.patch} | 16 ++--- .../{111_packed.patch => 114_packed.patch} | 4 +- .../{112_packed2.patch => 115_packed2.patch} | 4 +- 47 files changed, 156 insertions(+), 106 deletions(-) rename exercises/{092_interfaces.zig => 095_interfaces.zig} (100%) rename exercises/{093_hello_c.zig => 096_hello_c.zig} (100%) rename exercises/{094_c_math.zig => 097_c_math.zig} (100%) rename exercises/{095_for3.zig => 098_for3.zig} (100%) rename exercises/{096_memory_allocation.zig => 099_memory_allocation.zig} (100%) rename exercises/{097_bit_manipulation.zig => 100_bit_manipulation.zig} (100%) rename exercises/{098_bit_manipulation2.zig => 101_bit_manipulation2.zig} (100%) rename exercises/{099_formatting.zig => 102_formatting.zig} (100%) rename exercises/{100_for4.zig => 103_for4.zig} (100%) rename exercises/{101_for5.zig => 104_for5.zig} (100%) rename exercises/{102_testing.zig => 105_testing.zig} (100%) rename exercises/{103_tokenization.zig => 106_tokenization.zig} (100%) rename exercises/{104_threading.zig => 107_threading.zig} (100%) rename exercises/{105_threading2.zig => 108_threading2.zig} (100%) rename exercises/{106_files.zig => 109_files.zig} (100%) rename exercises/{107_files2.zig => 110_files2.zig} (100%) rename exercises/{108_labeled_switch.zig => 111_labeled_switch.zig} (100%) rename exercises/{109_vectors.zig => 112_vectors.zig} (100%) rename exercises/{110_quiz9.zig => 113_quiz9.zig} (100%) rename exercises/{111_packed.zig => 114_packed.zig} (100%) rename exercises/{112_packed2.zig => 115_packed2.zig} (100%) create mode 100644 patches/patches/091_async8.patch rename patches/patches/{092_interfaces.patch => 095_interfaces.patch} (62%) rename patches/patches/{093_hello_c.patch => 096_hello_c.patch} (73%) delete mode 100644 patches/patches/097_bit_manipulation.patch rename patches/patches/{094_c_math.patch => 097_c_math.patch} (52%) rename patches/patches/{095_for3.patch => 098_for3.patch} (80%) rename patches/patches/{096_memory_allocation.patch => 099_memory_allocation.patch} (64%) create mode 100644 patches/patches/100_bit_manipulation.patch rename patches/patches/{098_bit_manipulation2.patch => 101_bit_manipulation2.patch} (55%) rename patches/patches/{099_formatting.patch => 102_formatting.patch} (71%) rename patches/patches/{100_for4.patch => 103_for4.patch} (71%) rename patches/patches/{101_for5.patch => 104_for5.patch} (72%) rename patches/patches/{102_testing.patch => 105_testing.patch} (81%) rename patches/patches/{103_tokenization.patch => 106_tokenization.patch} (64%) rename patches/patches/{104_threading.patch => 107_threading.patch} (82%) rename patches/patches/{105_threading2.patch => 108_threading2.patch} (73%) rename patches/patches/{106_files.patch => 109_files.patch} (84%) rename patches/patches/{107_files2.patch => 110_files2.patch} (89%) rename patches/patches/{108_labeled_switch.patch => 111_labeled_switch.patch} (83%) rename patches/patches/{109_vectors.patch => 112_vectors.patch} (70%) rename patches/patches/{110_quiz9.patch => 113_quiz9.patch} (87%) rename patches/patches/{111_packed.patch => 114_packed.patch} (91%) rename patches/patches/{112_packed2.patch => 115_packed2.patch} (87%) diff --git a/build.zig b/build.zig index 3dc0520..5e5d3de 100644 --- a/build.zig +++ b/build.zig @@ -1153,17 +1153,29 @@ const exercises = [_]Exercise{ }, .{ .main_file = "090_async7.zig", - .output = "Counter: 400 (expected: 400)", + .output = "Counter: 400", }, .{ .main_file = "091_async8.zig", - .output = "ABCDEF", - .skip = true, - .skip_hint = "async has not been implemented in the current compiler version.", + .output = "Sum of 1..10 = 55", }, - .{ - .main_file = "092_interfaces.zig", + .main_file = "092_async9.zig", + .output = "", + .skip = true, + }, + .{ + .main_file = "093_async10.zig", + .output = "", + .skip = true, + }, + .{ + .main_file = "094_async_quiz.zig", + .output = "", + .skip = true, + }, + .{ + .main_file = "095_interfaces.zig", .output = \\Daily Insect Report: \\Ant is alive. @@ -1172,33 +1184,33 @@ const exercises = [_]Exercise{ , // pay attention to the comma }, .{ - .main_file = "093_hello_c.zig", + .main_file = "096_hello_c.zig", .output = "Hello C from Zig! - C result is 17 chars written.", .link_libc = true, }, .{ - .main_file = "094_c_math.zig", + .main_file = "097_c_math.zig", .output = "The normalized angle of 765.2 degrees is 45.2 degrees.", .link_libc = true, }, .{ - .main_file = "095_for3.zig", + .main_file = "098_for3.zig", .output = "1 2 4 7 8 11 13 14 16 17 19\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15", }, .{ - .main_file = "096_memory_allocation.zig", + .main_file = "099_memory_allocation.zig", .output = "Running Average: 0.30 0.25 0.20 0.18 0.22", }, .{ - .main_file = "097_bit_manipulation.zig", + .main_file = "100_bit_manipulation.zig", .output = "x = 1011; y = 1101", }, .{ - .main_file = "098_bit_manipulation2.zig", + .main_file = "101_bit_manipulation2.zig", .output = "Is this a pangram? true!", }, .{ - .main_file = "099_formatting.zig", + .main_file = "102_formatting.zig", .output = \\ \\ X | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @@ -1235,11 +1247,11 @@ const exercises = [_]Exercise{ , }, .{ - .main_file = "100_for4.zig", + .main_file = "103_for4.zig", .output = "Arrays match!", }, .{ - .main_file = "101_for5.zig", + .main_file = "104_for5.zig", .output = \\1. Wizard (Gold: 25, XP: 40) \\2. Bard (Gold: 11, XP: 17) @@ -1248,12 +1260,12 @@ const exercises = [_]Exercise{ , // pay attention to the comma }, .{ - .main_file = "102_testing.zig", + .main_file = "105_testing.zig", .output = "", .kind = .@"test", }, .{ - .main_file = "103_tokenization.zig", + .main_file = "106_tokenization.zig", .output = \\My \\name @@ -1274,7 +1286,7 @@ const exercises = [_]Exercise{ , // pay attention to the comma }, .{ - .main_file = "104_threading.zig", + .main_file = "107_threading.zig", .output = \\Starting work... \\thread 1: started. @@ -1288,32 +1300,32 @@ const exercises = [_]Exercise{ , // pay attention to the comma }, .{ - .main_file = "105_threading2.zig", + .main_file = "108_threading2.zig", .output = "PI ≈ 3.14159265", }, .{ - .main_file = "106_files.zig", + .main_file = "109_files.zig", .output = "Successfully wrote 18 bytes.", }, .{ - .main_file = "107_files2.zig", + .main_file = "110_files2.zig", .output = \\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \\Successfully Read 18 bytes: It's zigling time! , // pay attention to the comma }, .{ - .main_file = "108_labeled_switch.zig", + .main_file = "111_labeled_switch.zig", .output = "The pull request has been merged.", }, .{ - .main_file = "109_vectors.zig", + .main_file = "112_vectors.zig", .output = \\Max difference (old fn): 0.014 \\Max difference (new fn): 0.014 , // pay attention to the comma }, - .{ .main_file = "110_quiz9.zig", .output = + .{ .main_file = "113_quiz9.zig", .output = \\Toggle pins with XOR on PORTB \\----------------------------- \\ 1100 // (initial state of PORTB) @@ -1345,11 +1357,11 @@ const exercises = [_]Exercise{ \\= 0110 }, .{ - .main_file = "111_packed.zig", + .main_file = "114_packed.zig", .output = "", }, .{ - .main_file = "112_packed2.zig", + .main_file = "115_packed2.zig", .output = "", }, .{ diff --git a/exercises/090_async7.zig b/exercises/090_async7.zig index f914aef..bfe6ffd 100644 --- a/exercises/090_async7.zig +++ b/exercises/090_async7.zig @@ -42,7 +42,7 @@ pub fn main(init: std.process.Init) !void { try group.await(io); - print("Counter: {} (expected: 400)\n", .{state.counter}); + print("Counter: {}\n", .{state.counter}); } fn increment(io: std.Io, state: *SharedState, times: u32) void { diff --git a/exercises/091_async8.zig b/exercises/091_async8.zig index cd9c975..10921c3 100644 --- a/exercises/091_async8.zig +++ b/exercises/091_async8.zig @@ -1,35 +1,62 @@ // -// You have doubtless noticed that 'suspend' requires a block -// expression like so: +// Tasks often need to communicate! Io provides Queue for this — +// a bounded, thread-safe channel for passing data between tasks: // -// suspend {} +// var backing: [16]u32 = undefined; +// var queue: std.Io.Queue(u32) = .init(&backing); // -// The suspend block executes when a function suspends. To get -// sense for when this happens, please make the following -// program print the string +// // Producer task: +// try queue.putOne(io, value); // blocks if queue is full // -// "ABCDEF" +// // Consumer task: +// const val = try queue.getOne(io); // blocks if queue is empty // -const print = @import("std").debug.print; +// When the producer is done, it calls queue.close(io) to signal +// that no more data is coming. After that, getOne() will return +// error.Closed once the queue is drained. +// +// This is the classic producer/consumer pattern — one task +// generates work, another processes it, and the queue handles +// all the synchronization automatically. +// +// Fix this program: the producer sends numbers 1..10, the +// consumer sums them up. The expected sum is 55. +// +const std = @import("std"); +const print = std.debug.print; -pub fn main() void { - print("A", .{}); +pub fn main(init: std.process.Init) !void { + const io = init.io; - var frame = async suspendable(); + var backing: [4]u32 = undefined; + var queue: std.Io.Queue(u32) = .init(&backing); - print("X", .{}); + var group: std.Io.Group = .init; - resume frame; + group.async(io, producer, .{ io, &queue }); + group.async(io, consumer, .{ io, &queue }); - print("F", .{}); + try group.await(io); } -fn suspendable() void { - print("X", .{}); - - suspend { - print("X", .{}); +fn producer(io: std.Io, queue: *std.Io.Queue(u32)) void { + // Send numbers 1 through 10 into the queue. + for (1..11) |i| { + // What Queue method sends a single element, blocking if full? + queue.???(io, @intCast(i)) catch return; } - - print("X", .{}); + // Signal that we're done sending. + queue.close(io); +} + +fn consumer(io: std.Io, queue: *std.Io.Queue(u32)) void { + var sum: u32 = 0; + while (true) { + const value = queue.getOne(io) catch |err| switch (err) { + error.Closed => break, + error.Canceled => return, + }; + sum += value; + } + print("Sum of 1..10 = {}\n", .{sum}); } diff --git a/exercises/092_interfaces.zig b/exercises/095_interfaces.zig similarity index 100% rename from exercises/092_interfaces.zig rename to exercises/095_interfaces.zig diff --git a/exercises/093_hello_c.zig b/exercises/096_hello_c.zig similarity index 100% rename from exercises/093_hello_c.zig rename to exercises/096_hello_c.zig diff --git a/exercises/094_c_math.zig b/exercises/097_c_math.zig similarity index 100% rename from exercises/094_c_math.zig rename to exercises/097_c_math.zig diff --git a/exercises/095_for3.zig b/exercises/098_for3.zig similarity index 100% rename from exercises/095_for3.zig rename to exercises/098_for3.zig diff --git a/exercises/096_memory_allocation.zig b/exercises/099_memory_allocation.zig similarity index 100% rename from exercises/096_memory_allocation.zig rename to exercises/099_memory_allocation.zig diff --git a/exercises/097_bit_manipulation.zig b/exercises/100_bit_manipulation.zig similarity index 100% rename from exercises/097_bit_manipulation.zig rename to exercises/100_bit_manipulation.zig diff --git a/exercises/098_bit_manipulation2.zig b/exercises/101_bit_manipulation2.zig similarity index 100% rename from exercises/098_bit_manipulation2.zig rename to exercises/101_bit_manipulation2.zig diff --git a/exercises/099_formatting.zig b/exercises/102_formatting.zig similarity index 100% rename from exercises/099_formatting.zig rename to exercises/102_formatting.zig diff --git a/exercises/100_for4.zig b/exercises/103_for4.zig similarity index 100% rename from exercises/100_for4.zig rename to exercises/103_for4.zig diff --git a/exercises/101_for5.zig b/exercises/104_for5.zig similarity index 100% rename from exercises/101_for5.zig rename to exercises/104_for5.zig diff --git a/exercises/102_testing.zig b/exercises/105_testing.zig similarity index 100% rename from exercises/102_testing.zig rename to exercises/105_testing.zig diff --git a/exercises/103_tokenization.zig b/exercises/106_tokenization.zig similarity index 100% rename from exercises/103_tokenization.zig rename to exercises/106_tokenization.zig diff --git a/exercises/104_threading.zig b/exercises/107_threading.zig similarity index 100% rename from exercises/104_threading.zig rename to exercises/107_threading.zig diff --git a/exercises/105_threading2.zig b/exercises/108_threading2.zig similarity index 100% rename from exercises/105_threading2.zig rename to exercises/108_threading2.zig diff --git a/exercises/106_files.zig b/exercises/109_files.zig similarity index 100% rename from exercises/106_files.zig rename to exercises/109_files.zig diff --git a/exercises/107_files2.zig b/exercises/110_files2.zig similarity index 100% rename from exercises/107_files2.zig rename to exercises/110_files2.zig diff --git a/exercises/108_labeled_switch.zig b/exercises/111_labeled_switch.zig similarity index 100% rename from exercises/108_labeled_switch.zig rename to exercises/111_labeled_switch.zig diff --git a/exercises/109_vectors.zig b/exercises/112_vectors.zig similarity index 100% rename from exercises/109_vectors.zig rename to exercises/112_vectors.zig diff --git a/exercises/110_quiz9.zig b/exercises/113_quiz9.zig similarity index 100% rename from exercises/110_quiz9.zig rename to exercises/113_quiz9.zig diff --git a/exercises/111_packed.zig b/exercises/114_packed.zig similarity index 100% rename from exercises/111_packed.zig rename to exercises/114_packed.zig diff --git a/exercises/112_packed2.zig b/exercises/115_packed2.zig similarity index 100% rename from exercises/112_packed2.zig rename to exercises/115_packed2.zig diff --git a/patches/patches/091_async8.patch b/patches/patches/091_async8.patch new file mode 100644 index 0000000..865292f --- /dev/null +++ b/patches/patches/091_async8.patch @@ -0,0 +1,11 @@ +--- exercises/091_async8.zig 2026-04-02 10:49:27.925721496 +0200 ++++ answers/091_async8.zig 2026-04-02 10:49:31.694795212 +0200 +@@ -43,7 +43,7 @@ + // Send numbers 1 through 10 into the queue. + for (1..11) |i| { + // What Queue method sends a single element, blocking if full? +- queue.???(io, @intCast(i)) catch return; ++ queue.putOne(io, @intCast(i)) catch return; + } + // Signal that we're done sending. + queue.close(io); diff --git a/patches/patches/092_interfaces.patch b/patches/patches/095_interfaces.patch similarity index 62% rename from patches/patches/092_interfaces.patch rename to patches/patches/095_interfaces.patch index 36d8784..cb5fd62 100644 --- a/patches/patches/092_interfaces.patch +++ b/patches/patches/095_interfaces.patch @@ -1,5 +1,5 @@ ---- exercises/092_interfaces.zig 2023-10-03 22:15:22.125574535 +0200 -+++ answers/092_interfaces.zig 2023-10-05 20:04:07.259437354 +0200 +--- exercises/095_interfaces.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/095_interfaces.zig 2026-04-03 13:09:13.722917764 +0200 @@ -106,7 +106,7 @@ for (my_insects) |insect| { // Almost done! We want to print() each insect with a diff --git a/patches/patches/093_hello_c.patch b/patches/patches/096_hello_c.patch similarity index 73% rename from patches/patches/093_hello_c.patch rename to patches/patches/096_hello_c.patch index fe1f853..f5fe06f 100644 --- a/patches/patches/093_hello_c.patch +++ b/patches/patches/096_hello_c.patch @@ -1,5 +1,5 @@ ---- exercises/093_hello_c.zig 2023-10-03 22:15:22.125574535 +0200 -+++ answers/093_hello_c.zig 2023-10-05 20:04:07.262770750 +0200 +--- exercises/096_hello_c.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/096_hello_c.zig 2026-04-03 13:09:26.195163128 +0200 @@ -54,7 +54,7 @@ // // In this exercise we use 'write' to output 17 chars, diff --git a/patches/patches/097_bit_manipulation.patch b/patches/patches/097_bit_manipulation.patch deleted file mode 100644 index 19ba876..0000000 --- a/patches/patches/097_bit_manipulation.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- exercises/097_bit_manipulation.zig 2025-05-12 21:25:03.395385743 +0200 -+++ answers/097_bit_manipulation.zig 2025-05-12 21:22:57.472986976 +0200 -@@ -80,7 +80,7 @@ - y ^= x; - - // What must be written here? -- ???; -+ x ^= y; - - print("x = {b}; y = {b}\n", .{ x, y }); - } diff --git a/patches/patches/094_c_math.patch b/patches/patches/097_c_math.patch similarity index 52% rename from patches/patches/094_c_math.patch rename to patches/patches/097_c_math.patch index f8c7620..917fe6b 100644 --- a/patches/patches/094_c_math.patch +++ b/patches/patches/097_c_math.patch @@ -1,5 +1,5 @@ ---- exercises/094_c_math.zig 2024-02-28 12:50:35.789939935 +0100 -+++ answers/094_c_math.zig 2024-02-28 12:53:57.910309471 +0100 +--- exercises/097_c_math.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/097_c_math.zig 2026-04-03 13:09:32.059278502 +0200 @@ -26,7 +26,7 @@ const c = @cImport({ diff --git a/patches/patches/095_for3.patch b/patches/patches/098_for3.patch similarity index 80% rename from patches/patches/095_for3.patch rename to patches/patches/098_for3.patch index a158b31..c280bc6 100644 --- a/patches/patches/095_for3.patch +++ b/patches/patches/098_for3.patch @@ -1,5 +1,5 @@ ---- exercises/095_for3.zig 2026-02-27 19:33:59 -+++ answers/095_for3.zig 2026-02-27 19:33:38 +--- exercises/098_for3.zig 2026-03-20 19:23:48.873150100 +0100 ++++ answers/098_for3.zig 2026-04-03 13:09:39.916433087 +0200 @@ -56,7 +56,7 @@ // I want to print every number between 1 and 20 that is NOT diff --git a/patches/patches/096_memory_allocation.patch b/patches/patches/099_memory_allocation.patch similarity index 64% rename from patches/patches/096_memory_allocation.patch rename to patches/patches/099_memory_allocation.patch index c26eeeb..d83a0ae 100644 --- a/patches/patches/096_memory_allocation.patch +++ b/patches/patches/099_memory_allocation.patch @@ -1,5 +1,5 @@ ---- exercises/096_memory_allocation.zig 2023-11-21 14:55:33.805678390 +0100 -+++ answers/096_memory_allocation.zig 2023-11-21 14:56:00.236163484 +0100 +--- exercises/099_memory_allocation.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/099_memory_allocation.zig 2026-04-03 13:09:47.403580391 +0200 @@ -64,7 +64,7 @@ const allocator = arena.allocator(); diff --git a/patches/patches/100_bit_manipulation.patch b/patches/patches/100_bit_manipulation.patch new file mode 100644 index 0000000..f70cc41 --- /dev/null +++ b/patches/patches/100_bit_manipulation.patch @@ -0,0 +1,11 @@ +--- exercises/100_bit_manipulation.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/100_bit_manipulation.zig 2026-04-02 10:51:15.795831343 +0200 +@@ -80,7 +80,7 @@ + y ^= x; + + // What must be written here? +- ???; ++ x ^= y; + + print("x = {b}; y = {b}\n", .{ x, y }); + } diff --git a/patches/patches/098_bit_manipulation2.patch b/patches/patches/101_bit_manipulation2.patch similarity index 55% rename from patches/patches/098_bit_manipulation2.patch rename to patches/patches/101_bit_manipulation2.patch index 5354a7b..5179272 100644 --- a/patches/patches/098_bit_manipulation2.patch +++ b/patches/patches/101_bit_manipulation2.patch @@ -1,5 +1,5 @@ ---- exercises/098_bit_manipulation2.zig 2023-10-03 22:15:22.125574535 +0200 -+++ answers/098_bit_manipulation2.zig 2023-10-05 20:04:07.286104520 +0200 +--- exercises/101_bit_manipulation2.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/101_bit_manipulation2.zig 2026-04-02 10:51:15.797831382 +0200 @@ -60,5 +60,5 @@ // and if so, we know the given string is a pangram // diff --git a/patches/patches/099_formatting.patch b/patches/patches/102_formatting.patch similarity index 71% rename from patches/patches/099_formatting.patch rename to patches/patches/102_formatting.patch index a56b556..dba8aef 100644 --- a/patches/patches/099_formatting.patch +++ b/patches/patches/102_formatting.patch @@ -1,5 +1,5 @@ ---- exercises/099_formatting.zig 2024-11-07 21:45:10.459123650 +0100 -+++ answers/099_formatting.zig 2024-11-07 21:43:55.154345991 +0100 +--- exercises/102_formatting.zig 2026-03-20 19:23:48.873150100 +0100 ++++ answers/102_formatting.zig 2026-04-02 10:51:15.799831421 +0200 @@ -131,7 +131,7 @@ for (0..size) |b| { // What formatting is needed here to make our columns diff --git a/patches/patches/100_for4.patch b/patches/patches/103_for4.patch similarity index 71% rename from patches/patches/100_for4.patch rename to patches/patches/103_for4.patch index ad73e9a..7a7e161 100644 --- a/patches/patches/100_for4.patch +++ b/patches/patches/103_for4.patch @@ -1,5 +1,5 @@ ---- exercises/100_for4.zig 2023-10-03 22:15:22.125574535 +0200 -+++ answers/100_for4.zig 2023-10-05 20:04:07.296104707 +0200 +--- exercises/103_for4.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/103_for4.zig 2026-04-02 10:51:15.801831460 +0200 @@ -39,7 +39,7 @@ const hex_nums = [_]u8{ 0xb, 0x2a, 0x77 }; const dec_nums = [_]u8{ 11, 42, 119 }; diff --git a/patches/patches/101_for5.patch b/patches/patches/104_for5.patch similarity index 72% rename from patches/patches/101_for5.patch rename to patches/patches/104_for5.patch index 00f19df..ef77013 100644 --- a/patches/patches/101_for5.patch +++ b/patches/patches/104_for5.patch @@ -1,5 +1,5 @@ ---- exercises/101_for5.zig 2023-10-03 22:15:22.125574535 +0200 -+++ answers/101_for5.zig 2023-10-05 20:04:07.299438103 +0200 +--- exercises/104_for5.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/104_for5.zig 2026-04-02 10:51:15.803831499 +0200 @@ -51,7 +51,7 @@ // We would like to number our list starting with 1, not 0. diff --git a/patches/patches/102_testing.patch b/patches/patches/105_testing.patch similarity index 81% rename from patches/patches/102_testing.patch rename to patches/patches/105_testing.patch index 6d18bf6..069b72b 100644 --- a/patches/patches/102_testing.patch +++ b/patches/patches/105_testing.patch @@ -1,5 +1,5 @@ ---- exercises/102_testing.zig 2025-10-24 12:54:56 -+++ answers/102_testing.zig 2025-10-24 12:56:33 +--- exercises/105_testing.zig 2026-03-20 19:23:48.873150100 +0100 ++++ answers/105_testing.zig 2026-04-02 10:51:15.805831538 +0200 @@ -71,7 +71,7 @@ // The corresponding test is not much different from the previous one. Except // that it contains an error that you need to correct. diff --git a/patches/patches/103_tokenization.patch b/patches/patches/106_tokenization.patch similarity index 64% rename from patches/patches/103_tokenization.patch rename to patches/patches/106_tokenization.patch index 941ca3b..4792df6 100644 --- a/patches/patches/103_tokenization.patch +++ b/patches/patches/106_tokenization.patch @@ -1,5 +1,5 @@ ---- exercises/103_tokenization.zig 2026-02-27 19:25:11 -+++ answers/103_tokenization.zig 2026-02-27 19:26:04 +--- exercises/106_tokenization.zig 2026-03-20 19:23:48.873150100 +0100 ++++ answers/106_tokenization.zig 2026-04-02 10:51:15.807831578 +0200 @@ -134,7 +134,7 @@ ; diff --git a/patches/patches/104_threading.patch b/patches/patches/107_threading.patch similarity index 82% rename from patches/patches/104_threading.patch rename to patches/patches/107_threading.patch index e6fe0f4..3f65ef4 100644 --- a/patches/patches/104_threading.patch +++ b/patches/patches/107_threading.patch @@ -1,5 +1,5 @@ ---- exercises/104_threading.zig 2026-04-01 23:31:10.073198955 +0200 -+++ answers/104_threading.zig 2026-04-01 23:29:51.314585919 +0200 +--- exercises/107_threading.zig 2026-04-01 23:31:10.073198955 +0200 ++++ answers/107_threading.zig 2026-04-02 10:51:15.809831617 +0200 @@ -88,12 +88,12 @@ defer handle.join(); diff --git a/patches/patches/105_threading2.patch b/patches/patches/108_threading2.patch similarity index 73% rename from patches/patches/105_threading2.patch rename to patches/patches/108_threading2.patch index dfa5613..d71f254 100644 --- a/patches/patches/105_threading2.patch +++ b/patches/patches/108_threading2.patch @@ -1,5 +1,5 @@ ---- exercises/105_threading2.zig 2024-03-23 16:35:14.754540802 +0100 -+++ answers/105_threading2.zig 2024-03-23 16:38:00.577539733 +0100 +--- exercises/108_threading2.zig 2025-08-15 15:17:57.839348063 +0200 ++++ answers/108_threading2.zig 2026-04-02 10:51:15.811831656 +0200 @@ -81,8 +81,8 @@ defer handle1.join(); diff --git a/patches/patches/106_files.patch b/patches/patches/109_files.patch similarity index 84% rename from patches/patches/106_files.patch rename to patches/patches/109_files.patch index 27bcb56..ac59d70 100644 --- a/patches/patches/106_files.patch +++ b/patches/patches/109_files.patch @@ -1,5 +1,5 @@ ---- exercises/106_files.zig 2026-01-09 22:41:19.373872684 +0100 -+++ answers/106_files.zig 2026-01-09 22:41:44.518372910 +0100 +--- exercises/109_files.zig 2026-03-20 19:23:48.874150121 +0100 ++++ answers/109_files.zig 2026-04-02 10:51:15.813831695 +0200 @@ -41,7 +41,7 @@ // by doing nothing // diff --git a/patches/patches/107_files2.patch b/patches/patches/110_files2.patch similarity index 89% rename from patches/patches/107_files2.patch rename to patches/patches/110_files2.patch index 6820742..64dc193 100644 --- a/patches/patches/107_files2.patch +++ b/patches/patches/110_files2.patch @@ -1,5 +1,5 @@ ---- exercises/107_files2.zig 2026-01-09 22:43:15.211177186 +0100 -+++ answers/107_files2.zig 2026-01-09 22:42:48.943654602 +0100 +--- exercises/110_files2.zig 2026-03-20 19:23:48.874150121 +0100 ++++ answers/110_files2.zig 2026-04-02 10:51:15.815831734 +0200 @@ -39,7 +39,7 @@ // initialize an array of u8 with all letter 'A' // we need to pick the size of the array, 64 seems like a good number diff --git a/patches/patches/108_labeled_switch.patch b/patches/patches/111_labeled_switch.patch similarity index 83% rename from patches/patches/108_labeled_switch.patch rename to patches/patches/111_labeled_switch.patch index fa9dd67..0fb872d 100644 --- a/patches/patches/108_labeled_switch.patch +++ b/patches/patches/111_labeled_switch.patch @@ -1,6 +1,6 @@ ---- exercises/108_labeled_switch.zig 2024-09-20 12:09:24.370066539 +0200 -+++ answers/108_labeled_switch.zig 2024-09-20 12:09:06.499711739 +0200 -@@ -65,13 +65,13 @@ +--- exercises/111_labeled_switch.zig 2025-08-15 15:17:57.840348083 +0200 ++++ answers/111_labeled_switch.zig 2026-04-02 10:51:15.817831773 +0200 +@@ -67,13 +67,13 @@ // how would you fix it? pr: switch (PullRequestState.Draft) { PullRequestState.Draft => continue :pr PullRequestState.InReview, diff --git a/patches/patches/109_vectors.patch b/patches/patches/112_vectors.patch similarity index 70% rename from patches/patches/109_vectors.patch rename to patches/patches/112_vectors.patch index bf18cc0..5bf684b 100644 --- a/patches/patches/109_vectors.patch +++ b/patches/patches/112_vectors.patch @@ -1,5 +1,5 @@ ---- exercises/109_vectors.zig 2024-11-07 14:57:09.673383618 +0100 -+++ answers/109_vectors.zig 2024-11-07 14:22:59.069150138 +0100 +--- exercises/112_vectors.zig 2025-08-15 15:17:57.840348083 +0200 ++++ answers/112_vectors.zig 2026-04-02 10:51:15.819831812 +0200 @@ -121,8 +121,8 @@ const Vec4 = @Vector(4, f32); diff --git a/patches/patches/110_quiz9.patch b/patches/patches/113_quiz9.patch similarity index 87% rename from patches/patches/110_quiz9.patch rename to patches/patches/113_quiz9.patch index 9d9b864..03bd572 100644 --- a/patches/patches/110_quiz9.patch +++ b/patches/patches/113_quiz9.patch @@ -1,6 +1,6 @@ ---- exercises/110_quiz9.zig 2025-02-08 13:19:48.522641785 -0800 -+++ answers/110_quiz9.zig 2025-02-10 17:42:04.525004335 -0800 -@@ -108,7 +108,7 @@ +--- exercises/113_quiz9.zig 2025-08-15 15:17:57.840348083 +0200 ++++ answers/113_quiz9.zig 2026-04-02 10:51:15.821831851 +0200 +@@ -84,7 +84,7 @@ PORTB = 0b1100; print(" {b:0>4} // (initial state of PORTB)\n", .{PORTB}); print("^ {b:0>4} // (bitmask)\n", .{0b0101}); @@ -9,7 +9,7 @@ checkAnswer(0b1001, PORTB); newline(); -@@ -116,7 +116,7 @@ +@@ -92,7 +92,7 @@ PORTB = 0b1100; print(" {b:0>4} // (initial state of PORTB)\n", .{PORTB}); print("^ {b:0>4} // (bitmask)\n", .{0b0011}); @@ -18,7 +18,7 @@ checkAnswer(0b1111, PORTB); newline(); -@@ -170,7 +170,7 @@ +@@ -103,7 +103,7 @@ PORTB = 0b1001; // reset PORTB print(" {b:0>4} // (initial state of PORTB)\n", .{PORTB}); print("| {b:0>4} // (bitmask)\n", .{0b0100}); @@ -27,7 +27,7 @@ checkAnswer(0b1101, PORTB); newline(); -@@ -178,7 +178,7 @@ +@@ -111,7 +111,7 @@ PORTB = 0b1001; // reset PORTB print(" {b:0>4} // (reset state)\n", .{PORTB}); print("| {b:0>4} // (bitmask)\n", .{0b0100}); @@ -36,7 +36,7 @@ checkAnswer(0b1101, PORTB); newline(); -@@ -269,7 +269,7 @@ +@@ -122,7 +122,7 @@ PORTB = 0b1110; // reset PORTB print(" {b:0>4} // (initial state of PORTB)\n", .{PORTB}); print("& {b:0>4} // (bitmask)\n", .{0b1011}); @@ -45,7 +45,7 @@ checkAnswer(0b1010, PORTB); newline(); -@@ -277,7 +277,7 @@ +@@ -130,7 +130,7 @@ PORTB = 0b0111; // reset PORTB print(" {b:0>4} // (reset state)\n", .{PORTB}); print("& {b:0>4} // (bitmask)\n", .{0b1110}); diff --git a/patches/patches/111_packed.patch b/patches/patches/114_packed.patch similarity index 91% rename from patches/patches/111_packed.patch rename to patches/patches/114_packed.patch index d38ac68..3c79f18 100644 --- a/patches/patches/111_packed.patch +++ b/patches/patches/114_packed.patch @@ -1,5 +1,5 @@ ---- exercises/111_packed.zig 2026-03-13 11:18:44 -+++ answers/111_packed.zig 2026-03-13 11:18:57 +--- exercises/114_packed.zig 2026-03-20 19:23:48.874150121 +0100 ++++ answers/114_packed.zig 2026-04-02 10:51:15.824831910 +0200 @@ -41,7 +41,7 @@ const PackedStruct = packed struct { diff --git a/patches/patches/112_packed2.patch b/patches/patches/115_packed2.patch similarity index 87% rename from patches/patches/112_packed2.patch rename to patches/patches/115_packed2.patch index 9b01eb3..81c32ab 100644 --- a/patches/patches/112_packed2.patch +++ b/patches/patches/115_packed2.patch @@ -1,5 +1,5 @@ ---- exercises/112_packed2.zig 2026-03-13 11:14:08 -+++ answers/112_packed2.zig 2026-03-13 11:14:16 +--- exercises/115_packed2.zig 2026-03-20 19:23:48.874150121 +0100 ++++ answers/115_packed2.zig 2026-04-02 10:51:15.826831949 +0200 @@ -13,9 +13,9 @@ const s: S = .{ .a = true, .b = -1 }; switch (s) {