#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