From bd3f1a8ff8ddf83f6fa9da2b9911e414553ff48d Mon Sep 17 00:00:00 2001 From: Tom Barrett Date: Sat, 13 Mar 2021 11:39:00 +0100 Subject: fixed up 4, finished 8, 9, 10, started 11 --- p11 | 20 +++++++ p8 | 20 +++++++ src/main.zig | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 194 insertions(+), 12 deletions(-) create mode 100644 p11 create mode 100644 p8 diff --git a/p11 b/p11 new file mode 100644 index 0000000..4ac2451 --- /dev/null +++ b/p11 @@ -0,0 +1,20 @@ +08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 +49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 +81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 +52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 +22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 +24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 +32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 +67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 +24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 +21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 +78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 +16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 +86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 +19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 +04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 +88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 +04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 +20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 +20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 +01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 diff --git a/p8 b/p8 new file mode 100644 index 0000000..dfd9153 --- /dev/null +++ b/p8 @@ -0,0 +1,20 @@ +73167176531330624919225119674426574742355349194934 +96983520312774506326239578318016984801869478851843 +85861560789112949495459501737958331952853208805511 +12540698747158523863050715693290963295227443043557 +66896648950445244523161731856403098711121722383113 +62229893423380308135336276614282806444486645238749 +30358907296290491560440772390713810515859307960866 +70172427121883998797908792274921901699720888093776 +65727333001053367881220235421809751254540594752243 +52584907711670556013604839586446706324415722155397 +53697817977846174064955149290862569321978468622482 +83972241375657056057490261407972968652414535100474 +82166370484403199890008895243450658541227588666881 +16427171479924442928230863465674813919123162824586 +17866458359124566529476545682848912883142607690042 +24219022671055626321111109370544217506941658960408 +07198403850962455444362981230987879927244284909188 +84580156166097919133875499200524063689912560717606 +05886116467109405077541002256983155200055935729725 +71636269561882670428252483600823257530420752963450 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(); } -- cgit v1.2.3