Browse Source

Improved maximumNarcissism

Chris Boesch 9 months ago
parent
commit
fb018d212c
2 changed files with 10 additions and 9 deletions
  1. 8 7
      exercises/065_builtins2.zig
  2. 2 2
      patches/patches/065_builtins2.patch

+ 8 - 7
exercises/065_builtins2.zig

@@ -110,7 +110,6 @@ pub fn main() void {
     // name will not be printed if the field is of type 'void'
     // (which is a zero-bit type that takes up no space at all!):
     if (fields[0].??? != void) {
-        print(" {s}", .{fields.name});
         print(" {s}", .{fields[0].name});
     }
 
@@ -137,14 +136,16 @@ pub fn main() void {
 // But a change after Zig 0.10.0 added the source file name to the
 // type. "Narcissus" became "065_builtins2.Narcissus".
 //
-// To fix this, I've added this function to strip the filename from
-// the front of the type name in the dumbest way possible. (It returns
-// a slice of the type name starting at character 14 (assuming
-// single-byte characters).
+// To fix this, we've added this function to strip the filename from
+// the front of the type name. (It returns a slice of the type name
+// starting at the index + 1 of character ".")
 //
 // We'll be seeing @typeName again in Exercise 070. For now, you can
 // see that it takes a Type and returns a u8 "string".
 fn maximumNarcissism(myType: anytype) []const u8 {
-    // Turn '065_builtins2.Narcissus' into 'Narcissus'
-    return @typeName(myType)[14..];
+    const indexOf = @import("std").mem.indexOf;
+
+    // Turn "065_builtins2.Narcissus" into "Narcissus"
+    const name = @typeName(myType);
+    return name[indexOf(u8, name, ".").? + 1 ..];
 }

+ 2 - 2
patches/patches/065_builtins2.patch

@@ -1,5 +1,5 @@
---- exercises/065_builtins2.zig	2024-09-02 19:15:56.569952315 +0200
-+++ answers/065_builtins2.zig	2024-09-02 19:13:44.280600350 +0200
+--- exercises/065_builtins2.zig	2024-11-02 16:58:30.607829441 +0100
++++ answers/065_builtins2.zig	2024-11-02 16:58:33.821220588 +0100
 @@ -58,7 +58,7 @@
      // Oops! We cannot leave the 'me' and 'myself' fields
      // undefined. Please set them here: