From e24b32420df08bb6ecb0a00d51007d3a329cf2e5 Mon Sep 17 00:00:00 2001 From: Max Nuding Date: Sun, 5 Dec 2021 11:43:02 +0100 Subject: [PATCH] Reorganised packages --- Package.swift | 46 ++++++++++++++--- Sources/{aoc2021 => 01}/01.swift | 3 +- Sources/01/main.swift | 11 ++++ Sources/{aoc2021 => 02}/02.swift | 3 +- Sources/02/main.swift | 11 ++++ Sources/{aoc2021 => 03}/03.swift | 3 +- Sources/03/main.swift | 11 ++++ Sources/{aoc2021 => 04}/04.swift | 3 +- Sources/04/main.swift | 11 ++++ .../Resources/input/01.txt | 0 .../Resources/input/02.txt | 0 .../Resources/input/03.txt | 0 .../Resources/input/04.txt | 0 .../Resources/input/05.txt | 0 .../Resources/input/05_test.txt | 0 Sources/Runner/Runner.swift | 38 ++++++++++++++ Sources/aoc2021/main.swift | 50 ------------------- 17 files changed, 128 insertions(+), 62 deletions(-) rename Sources/{aoc2021 => 01}/01.swift (98%) create mode 100644 Sources/01/main.swift rename Sources/{aoc2021 => 02}/02.swift (97%) create mode 100644 Sources/02/main.swift rename Sources/{aoc2021 => 03}/03.swift (99%) create mode 100644 Sources/03/main.swift rename Sources/{aoc2021 => 04}/04.swift (98%) create mode 100644 Sources/04/main.swift rename Sources/{aoc2021 => Runner}/Resources/input/01.txt (100%) rename Sources/{aoc2021 => Runner}/Resources/input/02.txt (100%) rename Sources/{aoc2021 => Runner}/Resources/input/03.txt (100%) rename Sources/{aoc2021 => Runner}/Resources/input/04.txt (100%) rename Sources/{aoc2021 => Runner}/Resources/input/05.txt (100%) rename Sources/{aoc2021 => Runner}/Resources/input/05_test.txt (100%) create mode 100644 Sources/Runner/Runner.swift delete mode 100644 Sources/aoc2021/main.swift diff --git a/Package.swift b/Package.swift index aeb472f..9731741 100644 --- a/Package.swift +++ b/Package.swift @@ -6,6 +6,16 @@ import PackageDescription let package = Package( name: "aoc2021", platforms: [.macOS(.v12)], + products: [ + .library( + name: "Runner", + targets: ["Runner"]), + .executable(name: "01", targets: ["01"]), + .executable(name: "02", targets: ["02"]), + .executable(name: "03", targets: ["03"]), + .executable(name: "04", targets: ["04"]), + .executable(name: "05", targets: ["05"]) + ], dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), @@ -17,17 +27,37 @@ let package = Package( targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "Runner", + path: "Sources/Runner", + resources: [.process("Resources")] + ), .executableTarget( - name: "aoc2021", + name: "01", + dependencies: [.targetItem(name: "Runner", condition: nil)] + ), + .executableTarget( + name: "02", + dependencies: [.targetItem(name: "Runner", condition: nil)] + ), + .executableTarget( + name: "03", + dependencies: [.targetItem(name: "Runner", condition: nil)] + ), + .executableTarget( + name: "04", + dependencies: [ + .targetItem(name: "Runner", condition: nil) + ], + resources: [] + ), + .executableTarget( + name: "05", dependencies: [ //.product(name: "Collections", package: "swift-collections") + .targetItem(name: "Runner", condition: nil) ], - resources: [ - .process("Resources"), - ] - ), - .testTarget( - name: "aoc2021Tests", - dependencies: ["aoc2021"]), + resources: [] + ) ] ) diff --git a/Sources/aoc2021/01.swift b/Sources/01/01.swift similarity index 98% rename from Sources/aoc2021/01.swift rename to Sources/01/01.swift index 34b5c1a..0f1b9dd 100644 --- a/Sources/aoc2021/01.swift +++ b/Sources/01/01.swift @@ -6,8 +6,9 @@ // import Foundation +import Runner -struct Day01 { +struct Day01: Runnable { let inputPath: String diff --git a/Sources/01/main.swift b/Sources/01/main.swift new file mode 100644 index 0000000..c1562d1 --- /dev/null +++ b/Sources/01/main.swift @@ -0,0 +1,11 @@ +// +// File.swift +// +// +// Created by Max Nuding on 05.12.21. +// + +import Foundation +import Runner + +Runner(target: Day01.self, day: "01").run() diff --git a/Sources/aoc2021/02.swift b/Sources/02/02.swift similarity index 97% rename from Sources/aoc2021/02.swift rename to Sources/02/02.swift index faa54bd..2e81442 100644 --- a/Sources/aoc2021/02.swift +++ b/Sources/02/02.swift @@ -6,6 +6,7 @@ // import Foundation +import Runnerer enum Direction: String { case forward @@ -39,7 +40,7 @@ struct MoveCommand { } } -struct Day02 { +struct Day02: Runnable { let inputPath: String diff --git a/Sources/02/main.swift b/Sources/02/main.swift new file mode 100644 index 0000000..8e65216 --- /dev/null +++ b/Sources/02/main.swift @@ -0,0 +1,11 @@ +// +// File.swift +// +// +// Created by Max Nuding on 05.12.21. +// + +import Foundation +import Runner + +Runner(target: Day02.self, day: "02").run() diff --git a/Sources/aoc2021/03.swift b/Sources/03/03.swift similarity index 99% rename from Sources/aoc2021/03.swift rename to Sources/03/03.swift index 98d5d00..8d2f8a3 100644 --- a/Sources/aoc2021/03.swift +++ b/Sources/03/03.swift @@ -6,8 +6,9 @@ // import Foundation +import Runner -struct Day03 { +struct Day03: Runnable { let inputPath: String func run() { diff --git a/Sources/03/main.swift b/Sources/03/main.swift new file mode 100644 index 0000000..28cc865 --- /dev/null +++ b/Sources/03/main.swift @@ -0,0 +1,11 @@ +// +// File.swift +// +// +// Created by Max Nuding on 05.12.21. +// + +import Foundation +import Runner + +Runner(target: Day03.self, day: "03").run() diff --git a/Sources/aoc2021/04.swift b/Sources/04/04.swift similarity index 98% rename from Sources/aoc2021/04.swift rename to Sources/04/04.swift index 77eba4d..e8ada2f 100644 --- a/Sources/aoc2021/04.swift +++ b/Sources/04/04.swift @@ -6,6 +6,7 @@ // import Foundation +import Runner struct Board { var numbers: [[Int?]] @@ -48,7 +49,7 @@ struct Board { } } -struct Day04 { +struct Day04: Runnable { let inputPath: String func run() { diff --git a/Sources/04/main.swift b/Sources/04/main.swift new file mode 100644 index 0000000..c12f107 --- /dev/null +++ b/Sources/04/main.swift @@ -0,0 +1,11 @@ +// +// File.swift +// +// +// Created by Max Nuding on 05.12.21. +// + +import Foundation +import Runner + +Runner(target: Day04.self, day: "04").run() diff --git a/Sources/aoc2021/Resources/input/01.txt b/Sources/Runner/Resources/input/01.txt similarity index 100% rename from Sources/aoc2021/Resources/input/01.txt rename to Sources/Runner/Resources/input/01.txt diff --git a/Sources/aoc2021/Resources/input/02.txt b/Sources/Runner/Resources/input/02.txt similarity index 100% rename from Sources/aoc2021/Resources/input/02.txt rename to Sources/Runner/Resources/input/02.txt diff --git a/Sources/aoc2021/Resources/input/03.txt b/Sources/Runner/Resources/input/03.txt similarity index 100% rename from Sources/aoc2021/Resources/input/03.txt rename to Sources/Runner/Resources/input/03.txt diff --git a/Sources/aoc2021/Resources/input/04.txt b/Sources/Runner/Resources/input/04.txt similarity index 100% rename from Sources/aoc2021/Resources/input/04.txt rename to Sources/Runner/Resources/input/04.txt diff --git a/Sources/aoc2021/Resources/input/05.txt b/Sources/Runner/Resources/input/05.txt similarity index 100% rename from Sources/aoc2021/Resources/input/05.txt rename to Sources/Runner/Resources/input/05.txt diff --git a/Sources/aoc2021/Resources/input/05_test.txt b/Sources/Runner/Resources/input/05_test.txt similarity index 100% rename from Sources/aoc2021/Resources/input/05_test.txt rename to Sources/Runner/Resources/input/05_test.txt diff --git a/Sources/Runner/Runner.swift b/Sources/Runner/Runner.swift new file mode 100644 index 0000000..b4de575 --- /dev/null +++ b/Sources/Runner/Runner.swift @@ -0,0 +1,38 @@ +// +// File.swift +// +// +// Created by Max Nuding on 05.12.21. +// + +import Foundation + +public protocol Runnable { + init(inputPath: String) + func run() +} + +public struct Runner { + let target: Runnable.Type + let inputPath: String + let day: String + + public init(target: Runnable.Type, day: String, isTest: Bool = false) { + let inputPath = isTest ? "\(day)_test" : day + let input = Bundle.module.path(forResource: inputPath, ofType: ".txt")! + self.inputPath = input + self.target = target + self.day = day + } + + public func run() { + print("Starting day \(day)") + let start = CFAbsoluteTimeGetCurrent() + let runnable = target.init(inputPath: inputPath) + runnable.run() + let end = CFAbsoluteTimeGetCurrent() + let execTimeMs = round((end - start) * 1000.0 * 100.0) / 100.0 + print("Finished in \(execTimeMs)ms") + + } +} diff --git a/Sources/aoc2021/main.swift b/Sources/aoc2021/main.swift deleted file mode 100644 index ec6bafb..0000000 --- a/Sources/aoc2021/main.swift +++ /dev/null @@ -1,50 +0,0 @@ -import Foundation -//import Collections -/* -print("Starting day 01") -let input01 = Bundle.module.path(forResource: "01", ofType: ".txt")! -let start = CFAbsoluteTimeGetCurrent() -Day01(inputPath: input01).run() -let end = CFAbsoluteTimeGetCurrent() -let execTimeMs = round((end - start) * 1000.0 * 100.0) / 100.0 -print("Finished in \(execTimeMs)ms") -*/ - -/* -print("Starting day 02") -let input02 = Bundle.module.path(forResource: "02", ofType: ".txt")! -let start = CFAbsoluteTimeGetCurrent() -Day02(inputPath: input02).run() -let end = CFAbsoluteTimeGetCurrent() -let execTimeMs = round((end - start) * 1000.0 * 100.0) / 100.0 -print("Finished in \(execTimeMs)ms") -*/ - -/* -print("Starting day 03") -let input03 = Bundle.module.path(forResource: "03", ofType: ".txt")! -let start = CFAbsoluteTimeGetCurrent() -Day03(inputPath: input03).run() -let end = CFAbsoluteTimeGetCurrent() -let execTimeMs = round((end - start) * 1000.0 * 100.0) / 100.0 -print("Finished in \(execTimeMs)ms") -*/ - -/* -print("Starting day 04") -let input03 = Bundle.module.path(forResource: "04", ofType: ".txt")! -let start = CFAbsoluteTimeGetCurrent() -Day04(inputPath: input03).run() -let end = CFAbsoluteTimeGetCurrent() -let execTimeMs = round((end - start) * 1000.0 * 100.0) / 100.0 -print("Finished in \(execTimeMs)ms") -*/ - -print("Starting day 05") -let input03 = Bundle.module.path(forResource: "05", ofType: ".txt")! -let start = CFAbsoluteTimeGetCurrent() -Day05(inputPath: input03).run() -let end = CFAbsoluteTimeGetCurrent() -let execTimeMs = round((end - start) * 1000.0 * 100.0) / 100.0 -print("Finished in \(execTimeMs)ms") -