From 243656a778dd471bc93d1e1e20627af2677ef1ac Mon Sep 17 00:00:00 2001 From: Andrew Glaze Date: Fri, 12 Dec 2025 17:22:22 -0500 Subject: [PATCH] day 2 part 2 --- day02/day02 | Bin 38168 -> 45120 bytes day02/source/day02.swift | 110 ++++++++++++++++++++++++--------------- 2 files changed, 68 insertions(+), 42 deletions(-) diff --git a/day02/day02 b/day02/day02 index e9e67a12b0625559074ef1d0fc2ff336297f5da9..69bb08201f8f000472f9c75d1566009b3b843351 100755 GIT binary patch literal 45120 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 V{)NfI=>H2KtSVT+0^wrl2LOgtV7LGP literal 38168 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 SRu6~%o2?KPRcMYw*AD=gBCSaP diff --git a/day02/source/day02.swift b/day02/source/day02.swift index 1fbf1b1..01b9678 100644 --- a/day02/source/day02.swift +++ b/day02/source/day02.swift @@ -4,6 +4,74 @@ import Foundation @main struct Day02 { + static func run() { + print("Parsing...") + let parsed = parseInput(realInput) + //print("Running Part 1...") + //part1(parsed) + print("Running Part 2...") + part2(parsed) + print("Finished!") + } + + typealias ParsedInput = [(UInt64, UInt64)] + + static func parseInput(_ input: String) -> ParsedInput { + input.split(separator: ",") + //.filter({ line in + // let split = line.split(separator: "-") + // return String(split[0]).count % 2 == 0 || String(split[1]).count % 2 == 0 + //}) + .map({ line in + let split = line.split(separator: "-") + return (UInt64(split.first!)!, UInt64(split.last!)!) + }) + } + + static func part1(_ input: ParsedInput) { + var sum: UInt64 = 0 + for (lhs, rhs) in input { + for cur in lhs...rhs { + let cnt = String(cur).count + guard cnt % 2 == 0 else { continue } + let low = cur % UInt64(pow(10, (Double(cnt) / 2))) + let hi = low * UInt64(pow(10, (Double(cnt) / 2))) + if cur == hi + low { + sum += cur + } + } + } + print("Part 1: \(sum)") + } + + static func part2(_ input: ParsedInput) { + var sum: UInt64 = 0 + for (lhs, rhs) in input { + for cur in lhs...rhs { + let sCur = String(cur) + let cnt = sCur.count + guard cnt > 1 else { continue } + + nextLength: for checkOffset in 0...((cnt / 2) - 1) { + let sub = sCur[sCur.startIndex...sCur.index(sCur.startIndex, offsetBy: checkOffset)] + + for windowOffset in stride(from: sub.count, to: cnt, by: sub.count) { + guard windowOffset + (sub.count) <= cnt else { break nextLength } + let winStartIdx = sCur.index(sCur.startIndex, offsetBy: windowOffset) + let winEndIdx = sCur.index(winStartIdx, offsetBy: sub.count - 1) + let window = sCur[winStartIdx...winEndIdx] + if sub != window { + continue nextLength + } + } + sum += cur + break + } + } + } + print("Part 2: \(sum)") + } + #if hasFeature(Embedded) static func main() { gfxInitDefault() @@ -32,48 +100,6 @@ struct Day02 { } #endif - static func run() { - print("Parsing...") - let parsed = parseInput(realInput) - print("Running Part 1...") - part1(parsed) - //part2(parsed) - print("Finished!") - } - - typealias ParsedInput = [(UInt64, UInt64)] - - static func parseInput(_ input: String) -> ParsedInput { - input.split(separator: ",") - .filter({ line in - let split = line.split(separator: "-") - return String(split[0]).count % 2 == 0 || String(split[1]).count % 2 == 0 - }) - .map({ line in - let split = line.split(separator: "-") - return (UInt64(split.first!)!, UInt64(split.last!)!) - }) - } - - static func part1(_ input: ParsedInput) { - var sum: UInt64 = 0 - for (lhs, rhs) in input { - for cur in lhs...rhs { - let cnt = String(cur).count - guard cnt % 2 == 0 else { continue } - let low = cur % UInt64(pow(10, (Double(cnt) / 2))) - let hi = low * UInt64(pow(10, (Double(cnt) / 2))) - if cur == hi + low { - sum += cur - } - } - } - print("Part 1: \(sum)") - } - - static func part2(_ input: ParsedInput) { - - } } let testInput = """