From 1de452e4c20830dacf99139a18655221fd23784f 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 -> 0 bytes day02/source/day02.swift | 92 +++++++++++++++++++++++++-------------- 2 files changed, 59 insertions(+), 33 deletions(-) delete mode 100755 day02/day02 diff --git a/day02/day02 b/day02/day02 deleted file mode 100755 index e9e67a12b0625559074ef1d0fc2ff336297f5da9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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..1a178b1 100644 --- a/day02/source/day02.swift +++ b/day02/source/day02.swift @@ -4,40 +4,13 @@ import Foundation @main struct Day02 { - #if hasFeature(Embedded) - static func main() { - gfxInitDefault() - consoleInit(GFX_TOP, nil) - - run() - - // Main loop - while aptMainLoop() { - hidScanInput() - let kDown = hidKeysDown() - if kDown & KEY_START != 0 { - break // break in order to return to hbmenu - } - - gfxFlushBuffers() - gfxSwapBuffers() - } - - gfxExit() - } - - #else - static func main() { - run() - } - #endif - static func run() { print("Parsing...") let parsed = parseInput(realInput) print("Running Part 1...") part1(parsed) - //part2(parsed) + print("Running Part 2...") + part2(parsed) print("Finished!") } @@ -45,10 +18,10 @@ struct Day02 { 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 - }) + //.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!)!) @@ -72,8 +45,61 @@ struct Day02 { } static func part2(_ input: ParsedInput) { + var sum: UInt64 = 0 + for (lhs, rhs) in input { + for cur in lhs...rhs { + let scur = String(cur) + let curCount = scur.count + guard curCount > 1 else { continue } + nextLength: for checkOffset in 0...((curCount / 2) - 1) { + let sub = scur[scur.startIndex...scur.index(scur.startIndex, offsetBy: checkOffset)] + let subCount = sub.count + + for windowOffset in stride(from: subCount, to: curCount, by: subCount) { + guard windowOffset + subCount <= curCount else { break nextLength } + let winStartIdx = scur.index(scur.startIndex, offsetBy: windowOffset) + let winEndIdx = scur.index(winStartIdx, offsetBy: subCount - 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() + consoleInit(GFX_TOP, nil) + + run() + + while aptMainLoop() { + hidScanInput() + let kDown = hidKeysDown() + if kDown & KEY_START != 0 { + break + } + + gfxFlushBuffers() + gfxSwapBuffers() + } + + gfxExit() + } + + #else + static func main() { + run() + } + #endif + } let testInput = """