09a
This commit is contained in:
parent
433d8b4e15
commit
c6e3288cb8
@ -17,7 +17,8 @@ let package = Package(
|
||||
.executable(name: "05", targets: ["05"]),
|
||||
.executable(name: "06", targets: ["06"]),
|
||||
.executable(name: "07", targets: ["07"]),
|
||||
.executable(name: "08", targets: ["08"])
|
||||
.executable(name: "08", targets: ["08"]),
|
||||
.executable(name: "09", targets: ["09"])
|
||||
],
|
||||
dependencies: [
|
||||
// Dependencies declare other packages that this package depends on.
|
||||
@ -75,6 +76,10 @@ let package = Package(
|
||||
.product(name: "Collections", package: "swift-collections"),
|
||||
.targetItem(name: "Runner", condition: nil)
|
||||
]
|
||||
),
|
||||
.executableTarget(
|
||||
name: "09",
|
||||
dependencies: [.targetItem(name: "Runner", condition: nil)]
|
||||
)
|
||||
]
|
||||
)
|
||||
|
82
Sources/09/09.swift
Normal file
82
Sources/09/09.swift
Normal file
@ -0,0 +1,82 @@
|
||||
//
|
||||
// File.swift
|
||||
//
|
||||
//
|
||||
// Created by Max Nuding on 05.12.21.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Runner
|
||||
import Collections
|
||||
|
||||
struct Coord {
|
||||
let row: Int
|
||||
let col: Int
|
||||
|
||||
func getLeft() -> Coord? {
|
||||
guard col > 0 else {
|
||||
return nil
|
||||
}
|
||||
return Coord(row: row, col: col - 1)
|
||||
}
|
||||
|
||||
func getRight() -> Coord { Coord(row: row, col: col + 1) }
|
||||
|
||||
func getAbove() -> Coord? {
|
||||
guard row > 0 else {
|
||||
return nil
|
||||
}
|
||||
return Coord(row: row - 1, col: col)
|
||||
}
|
||||
|
||||
func getBelow() -> Coord { Coord(row: row + 1, col: col) }
|
||||
}
|
||||
|
||||
struct Field {
|
||||
let numbers: [[Int]]
|
||||
let numCols: Int
|
||||
let numRows: Int
|
||||
|
||||
init(numbers: [[Int]]) {
|
||||
self.numbers = numbers
|
||||
numCols = numbers.first!.count
|
||||
numRows = numbers.count
|
||||
}
|
||||
|
||||
func getNeighborsCoordsFor(coord: Coord) -> [Coord] {
|
||||
return [coord.getAbove(), coord.getRight(), coord.getBelow(), coord.getLeft()]
|
||||
.compactMap { $0 }
|
||||
.filter { $0.row < numRows && $0.col < numCols }
|
||||
}
|
||||
|
||||
func lowPointValueAt(coord: Coord) -> Int? {
|
||||
let value = numbers[coord.row][coord.col]
|
||||
return getNeighborsCoordsFor(coord: coord)
|
||||
.map { numbers[$0.row][$0.col] }
|
||||
.allSatisfy { $0 > value }
|
||||
? value
|
||||
: nil
|
||||
}
|
||||
}
|
||||
|
||||
struct Day09: Runnable {
|
||||
let inputPath: String
|
||||
|
||||
func run() {
|
||||
let input = try! String(contentsOfFile: inputPath)
|
||||
let entries = input
|
||||
.trimmingCharacters(in: .newlines)
|
||||
.components(separatedBy: .newlines)
|
||||
.map { line in line.map { $0.wholeNumberValue! } }
|
||||
let field = Field(numbers: entries)
|
||||
var sum = 0
|
||||
for row in 0..<field.numRows {
|
||||
for col in 0..<field.numCols {
|
||||
if let lpv = field.lowPointValueAt(coord: Coord(row: row, col: col)) {
|
||||
sum += lpv + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
print(sum)
|
||||
}
|
||||
}
|
12
Sources/09/main.swift
Normal file
12
Sources/09/main.swift
Normal file
@ -0,0 +1,12 @@
|
||||
//
|
||||
// File.swift
|
||||
//
|
||||
//
|
||||
// Created by Max Nuding on 05.12.21.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Runner
|
||||
|
||||
//Runner(target: Day09.self, day: "09", isTest: true).run()
|
||||
Runner(target: Day09.self, day: "09", isTest: false).run()
|
100
Sources/Runner/Resources/input/09.txt
Normal file
100
Sources/Runner/Resources/input/09.txt
Normal file
@ -0,0 +1,100 @@
|
||||
4323999434356678989012399854245901359876432101298901239876569892012345896567996545678912345689998921
|
||||
6319898921234589878923987653129892349989949212347892398765498765423456789469884326789923468998997890
|
||||
5498767892945678967899876543256789998999898943456789987654329878534567994398765434567894579997876789
|
||||
7598756789896789656799988654347897897898787899969894198969210989675679865789987645678965989986845678
|
||||
9987642356789995345789999767658966956987676987898943019898921299789789989898998759789996899895434567
|
||||
8765421234597893234567899878979654645696545545787892198797993459895995797967439867899989998756523456
|
||||
9873210123456789145978967989989743234985432123456953987676889567994379976543123978969878987643212677
|
||||
8654321234599891059899656196899820189876541034567999876545678978989457898991034989454569899876543467
|
||||
8765432346789932129789543245698721278987632175679789985434899299879768909989549994323798789997654578
|
||||
9876543459999943398656959366797632368999543286789679876545789349768979219978998943212345695498765679
|
||||
8987654567899854987847898997987543456987655399896598987656999998657894398769876543101456789329876789
|
||||
7998766678998769876236987789998787567898867899989467898789679876546796987654989654212567893210989894
|
||||
6879878789439898765134896578999898678999978999876347999892498765435689996543498765323989964348994943
|
||||
5667989894323949873256789459899969989799989298765276789901999976523499989432369878554899979767893212
|
||||
4456998976210239954367892365797654395689990198754345890199898765434678978943458987675789989989989103
|
||||
3347897654321298765458921234998753234567891259869656789989729879656789567954667898789895698794567924
|
||||
2256998985434349999567890147899432145678942345998969999877610998789893457895978989899924997643457895
|
||||
0197899876579569878998921356987553269789653496987898998765431239898921238989989876968999876432346796
|
||||
1989921989698998767889432387898769998997654989976767999865432378997632345678998765656789997321245989
|
||||
9879899998997897658978943499949898787898769878765657892976543456796543458989987654245894395460349878
|
||||
8768778987986986546569765678934987656789898765454345991097694567987654567999998742134589987651298766
|
||||
7656567996765987432458979899929876545689997654343234789198989798998785688958999821023678987542987654
|
||||
8543457895454599543567898987898965432398789543210123678999978989109898799767898762124589998963499763
|
||||
7432568976323987654678987896587898751987678954621234567899868878998969899878987654355678999654598754
|
||||
6563678996454598785789876543456789899896567976542545689988759767897653978989698776456789498775679876
|
||||
7674569987887679899899998954587893998765456897678766789977648956789792368994569897568992349896789987
|
||||
8789678998998799987978989899998941987654347998989877899866537845678989457893556998989641239987896599
|
||||
9996989469239899976567976798889432398743257789995989999654326534989878968942445989899932398998965456
|
||||
9765794345999998655456985697778943469854345679954197898765410129798956899321239876787899497899999999
|
||||
7654654239878899543257894986567954567965466789893246799987654397657645965490399865676798976789987878
|
||||
6543210198768789954145993214456895699876587898789345678998766498543237896989988754545987545698986767
|
||||
7659323498756567893239872102345696989987679987678956989999987987632126789879876543234985434767895456
|
||||
8798944987643476789398765213456989878998793236567897899897899876543245998765987656129876323456789346
|
||||
9997955698652345679459854323469878767899892105478898998766976987654346789654598761034987654979893234
|
||||
9986896789821239896567967469598765457894999212345789999845275698766457896543469878236798899897992123
|
||||
8875989899843345798999897578999854346795698923458897898732154569899598987674878989345899988756789634
|
||||
7654678998764466989987789989899965234896987894567976987621013456987699698765999999456999879645899546
|
||||
8463567899876577978996578898659894365689876789678965496434154789998789549896899898767898766434578957
|
||||
4322456799988789467986459789548789456790245678989654398645865699899899932987998789998999654323467898
|
||||
3210345989999891239874345678937578968921576789998763219856776789799999891098997656569998765634678959
|
||||
4421299876789999498763234589425467899432347999899865498987887895679998789129986543467949976545689646
|
||||
5542989665678998987654345678912348997543598998799986597898998954598987679298765432599234987898795431
|
||||
6743976564567796598765466789323556789954689898678999986569899323987896567999877653789345698939894310
|
||||
7769865433475689439876578895434667899899797654589998777476789012396543457899998789898959899323965621
|
||||
9898764321234678912987889976545978998798976543478997654365692126597632349789109898967898989459875432
|
||||
6969875430345799323498998797667899457657897652367898743234589987698721234589299987654987678998998745
|
||||
5456989561256789534679967698799954312445679721458999892123678999899830145678989976543498899897897656
|
||||
3237898762347897645789854549899543101239998932369898989294569767998764234889679885432459998786789767
|
||||
6545679654456798789999753234997653212398887893456797679989678955349854345796598754101345987675679878
|
||||
7656799765767899899899875123989964329987676799569986568678989844239965566897399543212659976564568999
|
||||
8767949879878999956798765234567895498766565688998765454567897632198987677979987674353598989323656789
|
||||
9878933989999997345987654347978987987657474567899864323456789543987798789657898765674987643212347898
|
||||
2989212399899976499899765456789598999843323456798543412345897689976579896546989978786799532101234567
|
||||
1099923456789897988769896567893459988732012347987632101276889798865456965435678989897899744312345678
|
||||
2989894569898789876553987878932349876543123457898543242345678997655329876323468996998998765423456899
|
||||
9878789678987678965432398989321956987654234567998765953456889896543212965414567895469999876536567893
|
||||
8767679789876569896543459999939897899776876678929878767967996795432109876525678994356987987897678954
|
||||
7654568998965456789654597899898789999897898789213989879979645689643234987987989789249876598998989865
|
||||
6543457976434345678969986789787678989969959892102398998796534679865359898998995678998765459789999986
|
||||
7532369865421237789998995897678459876553345943234567895679845989877899789999434567897654345678998987
|
||||
8643456976510175893987654589541234985432237899765678954598759992989987678985326789999543256899987799
|
||||
9754567984323234992199867678920349894321018989887899943698767921399976569876434697698954387929876545
|
||||
9965678999654345689023978789321298765732147678998999892349878992349989678998556789567895998934984334
|
||||
9896789698765456795434989897632349876654234567899998789759989789498798789987667898488976789949893213
|
||||
8789996539876568976765699976543456987769645778998987698998795678997629899998979987569987899898789323
|
||||
8678789623987878989876789987656567898998756789987654597899654578987510949879989097698998987678678934
|
||||
6577678910198989099987899999878978999459867897898769986898943139995421234569992198987989766534567965
|
||||
5464569923239099198798978987989989989234978976789898765567892098986532345678943469876878954323588976
|
||||
6323467894549198999659767896590195678949899965878987653467894987987645456799654979765767893212789987
|
||||
7467878995698987888943656987321234789998799894569876542345695986799656777898769898954456794325678999
|
||||
9878989789987656567892346895499995894987676789678984321237989875678967888959998767893345689634789343
|
||||
9989795678976545456789498976987889963298545798789995452345678964569898999543989656921239796545895212
|
||||
8799654345987432367898569299876978954987656789896976563456789543456789212959876967892398987656954101
|
||||
5698743239874321298987694398765767896799767899965698754689897632345898909899765898993987898787893212
|
||||
8789842198765453456998789987654656789899879999854569869793998943458967898798654789989796789898965337
|
||||
9898651019976764567899899876553234899999998999763579878892349894967898987698765678979655679929598656
|
||||
8999532124987989678921999765454123689998987688932389989921498789898999876549876799768443458913459767
|
||||
7987693535698998799210198754321014599997698567893499995210988679789498765434987897654312367904599898
|
||||
6298989545679129898921239895932135679876542348954569874329876565699349954323698998766423778912989989
|
||||
5129878996989098987892398989893234598765430567895678965498765434598998766464569239976534567899878879
|
||||
4298767789998997645789997868689395987654321789989789876989954323457979887575698999988785678998767656
|
||||
9987656679987673234669876546578989998865439896578999989879765545568967998786987989999876799987654343
|
||||
8764346567895432123456987432446678969976546965456789998769877696678957899899876878913987891098765212
|
||||
9843213457897641012349996551234569655987697892347999879656989987889345679999985467899999942139876909
|
||||
9874326567999973253598987767897678934598788901256789765345699898998956798798754376788987659245989898
|
||||
8765534567899654345696598988969789012479999432346789654236987649567897897649654234567898798967998767
|
||||
9876645678958987656985459199459892123467987656759896543129876533456789986539867545678989987899879756
|
||||
1989856789767898769874321012389943234568998767867987321013976512356899876621998656789679876789769845
|
||||
0198967899878959998765453125678974345899459898978998534123497301245798765433498767896567965398654976
|
||||
1987698901999239879876875234569865456789345949989987643294989212398999879754699878965459876797743988
|
||||
9876569892999398767987864345678976567899276932994398784989978934567891989876789999894323987896532399
|
||||
8765456789878999856998875457899987679998999899875999899876867897678910199997890123789412398965321246
|
||||
9984345898768897645879987568999998793467989799989899988965456998989329988998943235694325499984210123
|
||||
9765457987656789734567898979998879912399865689998789877652347899395498977899876545789434989875331234
|
||||
9876569876545678923456789989987762101987754679987698768341236789219987656789998756789649878989445678
|
||||
8997699997656789212345898795496543212976763567896549854210145678997697545899989867899998767898986789
|
||||
7698989698767892101256987656398654323965432356789430969321234567976543234878978998999894854567997891
|
||||
3569876569898976412345896546239876579876321245695321298763367898965432123458965459998763213458998942
|
||||
2345965412969994324456789634123998689988432357976763497654456999976543234567898567987654101556789543
|
||||
0156976323456789534567994321014569795499543568987954698767767894397654545798987678996543232345678954
|
5
Sources/Runner/Resources/input/09_test.txt
Normal file
5
Sources/Runner/Resources/input/09_test.txt
Normal file
@ -0,0 +1,5 @@
|
||||
2199943210
|
||||
3987894921
|
||||
9856789892
|
||||
8767896789
|
||||
9899965678
|
Loading…
Reference in New Issue
Block a user