aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/exercises
diff options
context:
space:
mode:
authorDave Gauer <dave@ratfactor.com>2021-03-06 19:16:28 -0500
committerDave Gauer <dave@ratfactor.com>2021-03-06 19:16:28 -0500
commita8b9d6f2b864d6a341ef90c86e2db0623aa8654b (patch)
treed83b04fdd9668bddbac55321319b0d4727788f90 /exercises
parentd1c699389803f6ce485fb7de2bf8305260001c92 (diff)
add ex53 slices2
Diffstat (limited to 'exercises')
-rw-r--r--exercises/53_slices2.zig35
1 files changed, 35 insertions, 0 deletions
diff --git a/exercises/53_slices2.zig b/exercises/53_slices2.zig
new file mode 100644
index 0000000..2456d86
--- /dev/null
+++ b/exercises/53_slices2.zig
@@ -0,0 +1,35 @@
+//
+// You are perhaps tempted to try slices on strings? They're arrays of
+// u8 characters after all, right? Slices on strings work great.
+// There's just one catch: don't forget that Zig string literals are
+// immutable (const) values. So we need to change the type of slice
+// from:
+//
+// var foo: []u8 = "foobar"[0..3];
+//
+// to:
+//
+// var foo: []const u8 = "foobar"[0..3];
+//
+// See if you can fix this Zero Wing-inspired phrase descrambler:
+const std = @import("std");
+
+pub fn main() void {
+ const scrambled = "great base for all your justice are belong to us";
+
+ const base1: []u8 = scrambled[15..23];
+ const base2: []u8 = scrambled[6..10];
+ const base3: []u8 = scrambled[32..];
+ printPhrase(base1, base2, base3);
+
+ const justice1: []u8 = scrambled[11..14];
+ const justice2: []u8 = scrambled[0..5];
+ const justice3: []u8 = scrambled[24..31];
+ printPhrase(justice1, justice2, justice3);
+
+ std.debug.print("\n", .{});
+}
+
+fn printPhrase(part1: []u8, part2: []u8, part3: []u8) void {
+ std.debug.print("'{s} {s} {s}.' ", .{part1, part2, part3});
+}