From 10308355d4fcef84b04b1b052949dbb9cb1c3f4f Mon Sep 17 00:00:00 2001 From: ee7 <45465154+ee7@users.noreply.github.com> Date: Thu, 14 Sep 2023 22:28:52 +0200 Subject: [PATCH] exercises: use new for loop syntax (#312) Zig 0.11.0 added new for loop syntax [1]. Prefer to loop over a range, which avoids some variables. For more discussion, see Loris' blog post [2]. [1] https://ziglang.org/download/0.11.0/release-notes.html#Multi-Object-For-Loops [2] https://kristoff.it/blog/zig-multi-sequence-for-loops/ Refs: #313 --- exercises/practice/acronym/.meta/example.zig | 3 +-- exercises/practice/dnd-character/.meta/example.zig | 3 +-- exercises/practice/dnd-character/test_dnd_character.zig | 6 ++---- exercises/practice/perfect-numbers/.meta/example.zig | 3 +-- exercises/practice/proverb/.meta/example.zig | 3 +-- 5 files changed, 6 insertions(+), 12 deletions(-) diff --git a/exercises/practice/acronym/.meta/example.zig b/exercises/practice/acronym/.meta/example.zig index 22564ad7..41b34c5f 100644 --- a/exercises/practice/acronym/.meta/example.zig +++ b/exercises/practice/acronym/.meta/example.zig @@ -6,8 +6,7 @@ pub fn abbreviate(allocator: mem.Allocator, words: []const u8) mem.Allocator.Err var letters = std.ArrayList(u8).init(allocator); defer letters.deinit(); - var i: usize = 0; - while (i < words.len) : (i += 1) { + for (0..words.len) |i| { if (!ascii.isAlphabetic(words[i])) continue; if (i == 0 or words[i - 1] == ' ' or words[i - 1] == '-' or words[i - 1] == '_') { diff --git a/exercises/practice/dnd-character/.meta/example.zig b/exercises/practice/dnd-character/.meta/example.zig index d57be816..9a8b390c 100644 --- a/exercises/practice/dnd-character/.meta/example.zig +++ b/exercises/practice/dnd-character/.meta/example.zig @@ -5,9 +5,8 @@ const random = prng.random(); pub fn ability() u8 { var lowest: u8 = std.math.maxInt(u8); - var i: usize = 0; var result: u8 = 0; - while (i < 4) : (i += 1) { + for (0..4) |_| { const roll = random.intRangeAtMost(u8, 1, 6); result += roll; lowest = @min(lowest, roll); diff --git a/exercises/practice/dnd-character/test_dnd_character.zig b/exercises/practice/dnd-character/test_dnd_character.zig index e24d31f7..402f590d 100644 --- a/exercises/practice/dnd-character/test_dnd_character.zig +++ b/exercises/practice/dnd-character/test_dnd_character.zig @@ -105,8 +105,7 @@ fn isValidAbilityScore(n: isize) bool { } test "random ability is within range" { - var i: usize = 0; - while (i < 20) : (i += 1) { + for (0..20) |_| { const actual = dnd_character.ability(); try testing.expect(isValidAbilityScore(actual)); } @@ -123,8 +122,7 @@ fn isValid(c: Character) bool { } test "random character is valid" { - var i: usize = 0; - while (i < 20) : (i += 1) { + for (0..20) |_| { const character = Character.init(); try testing.expect(isValid(character)); } diff --git a/exercises/practice/perfect-numbers/.meta/example.zig b/exercises/practice/perfect-numbers/.meta/example.zig index a4d6a845..0f9a850b 100644 --- a/exercises/practice/perfect-numbers/.meta/example.zig +++ b/exercises/practice/perfect-numbers/.meta/example.zig @@ -11,9 +11,8 @@ pub const Classification = enum { fn aliquotSum(n: u64) u64 { if (n == 1) return 0; var result: u64 = 1; - var i: usize = 2; const isqrt_n = std.math.sqrt(n); - while (i <= isqrt_n) : (i += 1) { + for (2..isqrt_n + 1) |i| { if (n % i == 0) result += i + (n / i); } // When `n` is a square number, we added the same divisor twice inside the loop. diff --git a/exercises/practice/proverb/.meta/example.zig b/exercises/practice/proverb/.meta/example.zig index 91188cf9..e100057c 100644 --- a/exercises/practice/proverb/.meta/example.zig +++ b/exercises/practice/proverb/.meta/example.zig @@ -6,8 +6,7 @@ pub fn recite(allocator: mem.Allocator, words: []const []const u8) (fmt.AllocPri var main_slice = try allocator.alloc([]u8, words.len); if (words.len > 1) { - var i: usize = 0; - while (i < words.len - 1) : (i += 1) { + for (0..words.len - 1) |i| { main_slice[i] = try fmt.allocPrint(allocator, "For want of a {s} the {s} was lost.\n", .{ words[i], words[i + 1] }); } }