Просмотр исходного кода

Added Ex. 100 fourth for (as foretold in #261)

Dave Gauer 2 лет назад
Родитель
Сommit
2e2924abdb
3 измененных файлов с 70 добавлено и 0 удалено
  1. 4 0
      build.zig
  2. 62 0
      exercises/100_for4.zig
  3. 4 0
      patches/patches/100_for4.patch

+ 4 - 0
build.zig

@@ -520,6 +520,10 @@ const exercises = [_]Exercise{
         .output = "\n X |  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15 \n---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+\n 1 |  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15 \n\n 2 |  2   4   6   8  10  12  14  16  18  20  22  24  26  28  30 \n\n 3 |  3   6   9  12  15  18  21  24  27  30  33  36  39  42  45 \n\n 4 |  4   8  12  16  20  24  28  32  36  40  44  48  52  56  60 \n\n 5 |  5  10  15  20  25  30  35  40  45  50  55  60  65  70  75 \n\n 6 |  6  12  18  24  30  36  42  48  54  60  66  72  78  84  90 \n\n 7 |  7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 \n\n 8 |  8  16  24  32  40  48  56  64  72  80  88  96 104 112 120 \n\n 9 |  9  18  27  36  45  54  63  72  81  90  99 108 117 126 135 \n\n10 | 10  20  30  40  50  60  70  80  90 100 110 120 130 140 150 \n\n11 | 11  22  33  44  55  66  77  88  99 110 121 132 143 154 165 \n\n12 | 12  24  36  48  60  72  84  96 108 120 132 144 156 168 180 \n\n13 | 13  26  39  52  65  78  91 104 117 130 143 156 169 182 195 \n\n14 | 14  28  42  56  70  84  98 112 126 140 154 168 182 196 210 \n\n15 | 15  30  45  60  75  90 105 120 135 150 165 180 195 210 225",
     },
     .{
+        .main_file = "100_for4.zig",
+        .output = "Arrays match!",
+    },
+    .{
         .main_file = "999_the_end.zig",
         .output = "\nThis is the end for now!\nWe hope you had fun and were able to learn a lot, so visit us again when the next exercises are available.",
     },

+ 62 - 0
exercises/100_for4.zig

@@ -0,0 +1,62 @@
+//
+// We've seen that the 'for' loop can let us perform some action
+// for every item in an array or slice.
+//
+// More recently, we discovered that it supports ranges to
+// iterate over number sequences.
+//
+// This is part of a more general capability of the `for` loop:
+// looping over one or more "objects" where an object is an
+// array, slice, or range.
+//
+// In fact, we *did* use multiple objects way back in Exercise
+// 016 where we iterated over an array and also a numeric index.
+// It didn't always work exactly this way, so the exercise had to
+// be retroactively modified a little bit.
+//
+//     for (bits, 0..) |bit, i| { ... }
+//
+// The general form of a 'for' loop with two lists is:
+//
+//     for (list_a, list_b) |a, b| {
+//         // Here we have the first item from list_a and list_b,
+//         // then the second item from each, then the third and
+//         // so forth...
+//     }
+//
+// What's really beautiful about this is that we don't have to
+// keep track of an index or advancing a memory pointer for
+// *either* of these lists. That error-prone stuff is all taken
+// care of for us by the compiler.
+//
+// Below, we have a program that is supposed to compare two
+// arrays. Please make it work!
+//
+const std = @import("std");
+const print = std.debug.print;
+
+pub fn main() void {
+    const hex_nums = [_]u8{ 0xb, 0x2a, 0x77 };
+    const dec_nums = [_]u8{ 11, 42, 119 };
+
+    for (hex_nums, ???) |hn, ???| {
+        if (hn != dn) {
+            std.debug.print("Uh oh! Found a mismatch: {d} vs {d}\n", .{ hn, dn });
+            return;
+        }
+    }
+
+    std.debug.print("Arrays match!\n", .{});
+}
+//
+// You are perhaps wondering what happens if one of the two lists
+// is longer than the other? Try it!
+//
+// By the way, congratulations for making it to Exercise 100!
+//
+//    +-------------+
+//    | Celebration |
+//    | Area  * * * |
+//    +-------------+
+//
+// Please keep your celebrating within the area provided.

+ 4 - 0
patches/patches/100_for4.patch

@@ -0,0 +1,4 @@
+42c42
+<     for (hex_nums, ???) |hn, ???| {
+---
+>     for (hex_nums, dec_nums) |hn, dn| {