diff --git a/exercises/116_defer3.zig b/exercises/116_defer3.zig new file mode 100644 index 0000000..6e3cf6d --- /dev/null +++ b/exercises/116_defer3.zig @@ -0,0 +1,18 @@ +// +// When there are multiple defers in a single block, they are executed in reverse order. +// +const std = @import("std"); + +pub fn main() void { + var x: u32 = 100; + { + // Try reordering the statements to get the answer 42 + defer x = x / 10; + defer x = x + 11; + defer x = x * 2; + + // It might seem silly in this example, but it's important to know when + // deinitializing containers whose elements need to be deinitialized first. + } + std.debug.print("{d}\n", .{x}); +} diff --git a/patches/patches/116_defer3.patch b/patches/patches/116_defer3.patch new file mode 100644 index 0000000..7b2cce5 --- /dev/null +++ b/patches/patches/116_defer3.patch @@ -0,0 +1,14 @@ +--- exercises/116_defer3.zig 2026-05-31 22:29:56.189323732 +0200 ++++ answers/116_defer3.zig 2026-05-31 22:30:17.749186667 +0200 +@@ -7,9 +7,9 @@ + var x: u32 = 100; + { + // Try reordering the statements to get the answer 42 +- defer x = x / 10; +- defer x = x + 11; + defer x = x * 2; ++ defer x = x + 11; ++ defer x = x / 10; + + // It might seem silly in this example, but it's important to know when + // deinitializing containers whose elements need to be deinitialized first. diff --git a/src/elrond.zig b/src/elrond.zig index 35c8857..311026f 100644 --- a/src/elrond.zig +++ b/src/elrond.zig @@ -1223,6 +1223,10 @@ const exercises = [_]Exercise{ .main_file = "115_packed2.zig", .output = "", }, + .{ + .main_file = "116_defer3.zig", + .output = "42", + }, .{ .main_file = "999_the_end.zig", .output =