diff options
author | Tom Barrett <tom@tombarrett.xyz> | 2021-03-13 11:39:00 +0100 |
---|---|---|
committer | Tom Barrett <tom@tombarrett.xyz> | 2021-03-13 11:39:00 +0100 |
commit | bd3f1a8ff8ddf83f6fa9da2b9911e414553ff48d (patch) | |
tree | ce03a997311345c404487e282eb9cd069a952dc4 /src | |
parent | 89d2501523560d71384b6b8d489654826ad65f82 (diff) |
fixed up 4, finished 8, 9, 10, started 11
Diffstat (limited to 'src')
-rw-r--r-- | src/main.zig | 166 |
1 files changed, 154 insertions, 12 deletions
diff --git a/src/main.zig b/src/main.zig index 8966363..56c15fe 100644 --- a/src/main.zig +++ b/src/main.zig @@ -77,7 +77,7 @@ fn p3() void { std.debug.warn("{}\n", .{biggest}); } -fn p4() !void { +fn p4() void { var i: usize = 0; var j: usize = 0; var str: [6]u8 = undefined; @@ -85,13 +85,16 @@ fn p4() !void { while (i < 1000) : (i += 1) { j = 0; while (j < 1000) : (j += 1) { - _ = try std.fmt.bufPrint(&str, "{}", .{i * j}); - if (i * j > largest and - str[0] == str[5] and - str[1] == str[4] and - str[2] == str[3]) - { - largest = i * j; + if (std.fmt.bufPrint(&str, "{}", .{i * j})) |val| { + if (i * j > largest and + str[0] == str[5] and + str[1] == str[4] and + str[2] == str[3]) + { + largest = i * j; + } + } else |err| { + print("{}\n", .{err}); } } } @@ -111,6 +114,7 @@ fn p5() void { while (j != 0) : (j -= 1) { if (i % j != 0) { found = true; + break; } } @@ -146,17 +150,155 @@ fn p7() void { print("{}\n", .{i - 1}); } +fn remove(str: []u8, c: u8) void { + var tmp: [1024]u8 = undefined; + var counter: u16 = 0; + for (str) |char| { + if (char != c) { + tmp[counter] = char; + counter += 1; + } + } + + insert(str, &tmp); +} + +fn insert(output: []u8, input: []const u8) void { + for (input) |_, i| { + output[i] = input[i]; + } +} + +fn len(str: []u8) usize { + var i: usize = 0; + for (str) |c| { + if (c < 128) { + i += 1; + } else { + break; + } + } + + return i; +} + fn p8() void { - print("{}\n", .{1}); + var largest: usize = 0; + if (std.fs.cwd().openFile("p8", .{ .read = true })) |file| { + var str: [1024]u8 = undefined; + if (file.read(&str)) |val| { + remove(&str, '\n'); + var i: usize = 0; + while (i < len(&str) - 12) : (i += 1) { + var product: usize = 1; + for (str[i .. i + 13]) |c| { + var n: usize = c - 48; + if (n < 10) { + product *= c - 48; + } else { + break; + } + } + if (product > largest) { + largest = product; + } + } + } else |err| { + print("{}\n", .{err}); + } + } else |err| { + print("{}\n", .{err}); + } + print("{}\n", .{largest}); +} + +fn sqrt(x: f64) f64 { + var z: f64 = 1; + var i: u8 = 1; + while (i <= 10) : (i += 1) { + z -= (z * z - x) / (2 * z); + } + return z; +} + +fn p9() void { + var c: usize = 1; + main: while (c <= 1000) : (c += 1) { + //var c2: usize = c*c; + //while (b + var b: usize = 1; + while (b < c) : (b += 1) { + var a: usize = 1; + while (a < b) : (a += 1) { + if (a * a + b * b == c * c and a + b + c == 1000) { + print("{}\n", .{a * b * c}); + break :main; + } + } + } + } +} + +//fn sum(array: []usize) usize { +// var counter: usize = 0; +// for (array) |i| { +// counter += i; +// } +// return counter; +//} + +fn p10() void { + const size: usize = 2_000_001; + var primes: [size]bool = undefined; + for (primes) |prime, i| { + primes[i] = true; + } + + var i: usize = 2; + while (i < size) : (i += 1) { + if (primes[i]) { + var j: usize = 2; + while (j * i < size) : (j += 1) { + primes[j * i] = false; + } + } + } + + var sum: usize = 0; + + for (primes) |prime, num| { + if (prime and num != 1) { + sum += num; + } + } + print("{}\n", .{sum}); +} + +fn p11() void { + var array: [20][20]usize = undefined; + + if (std.fs.cwd().openFile("p11", .{ .read = true })) |file| { + var str: [4096]u8 = undefined; + if (file.read(&str)) |val| { + print("{}", .{str[0]}); + } else |err| { + print("{}\n", .{err}); + } + } else |err| { + print("{}\n", .{err}); + } } pub fn main() !void { //p1(); //p2(); //p3(); - //_ = try p4(); + //p4(); //p5(); //p6(); - p7(); - //p8(); + //p7(); + p8(); + p9(); + //p10(); + //p11(); } |