Files
aoc-2025/day03/source/day03.swift
Andrew Glaze ca251612d2 day3 part1
2025-12-13 12:56:14 -05:00

121 lines
2.9 KiB
Swift

#if !hasFeature(Embedded)
import Foundation
#endif
@main
struct Day03 {
static func run() {
guard let input = realInput else {
print("input sttring nil")
return
}
print("Parsing...")
let parsed = parseInput(input)
print("Running Part 1...")
part1(parsed)
//print("Running Part 2...")
//part2(parsed)
print("Finished!")
}
typealias ParsedInput = [String]
static func parseInput(_ input: String) -> ParsedInput {
return input
.split(whereSeparator: { $0.isNewline })
.map({ String($0) })
}
static func part1(_ input: ParsedInput) {
var sum = 0
for line in input {
var firstMax: Character = "0"
var lastMax: Character = "0"
for char in line.dropLast() {
if char > firstMax {
firstMax = char
lastMax = "0"
continue
}
if char > lastMax {
lastMax = char
}
}
if line.last! > lastMax {
lastMax = line.last!
}
sum += Int("\(firstMax)\(lastMax)")!
}
print("Part 1: \(sum)")
}
static func part2(_ input: ParsedInput) {
}
#if hasFeature(Embedded)
static func main() {
gfxInitDefault()
consoleInit(GFX_TOP, nil)
guard romfsInit() == 0 else {
print("Couldn't init RomFS")
return
}
testInput = stringFromFile("romfs:/test.txt")
realInput = stringFromFile("romfs:/input.txt")
run()
while aptMainLoop() {
hidScanInput()
let kDown = hidKeysDown()
if kDown & KEY_START != 0 {
break
}
gfxFlushBuffers()
gfxSwapBuffers()
}
romfsExit()
gfxExit()
}
static func stringFromFile(_ path: String) -> String? {
let file = fopen(path, "r")
var ret = ""
var buf = [CChar](repeating: 0, count: 100)
while fgets(&buf, 100, file) != nil {
ret += String(cString: buf)
}
guard feof(file) != 0 else {
print("Error reading file \(path)")
return nil
}
while ret.first?.isNewline ?? false {
ret.removeFirst()
}
while ret.last?.isNewline ?? false {
ret.removeLast()
}
return ret
}
#else
static func main() {
testInput = try? String(contentsOfFile: "romfs/test.txt").trimmingCharacters(in: .whitespacesAndNewlines)
realInput = try? String(contentsOfFile: "romfs/input.txt").trimmingCharacters(in: .whitespacesAndNewlines)
run()
}
#endif
}
var testInput: String? = nil
var realInput: String? = nil