From 94eb34f386cae9883869c3f9adad4829972954b3 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 5 Dec 2024 15:30:22 +0100 Subject: [PATCH] Switch to os-lib --- aoc/src/dev/ctsk/aoc/Main.scala | 2 +- aoc/src/dev/ctsk/aoc/Solution.scala | 2 +- aoc/src/dev/ctsk/aoc/days/Day01.scala | 9 ++++----- aoc/src/dev/ctsk/aoc/days/Day02.scala | 9 ++++----- aoc/src/dev/ctsk/aoc/days/Day03.scala | 4 ++-- aoc/src/dev/ctsk/aoc/days/Day04.scala | 8 ++------ aoc/src/dev/ctsk/aoc/days/Day05.scala | 7 +++---- 7 files changed, 17 insertions(+), 24 deletions(-) diff --git a/aoc/src/dev/ctsk/aoc/Main.scala b/aoc/src/dev/ctsk/aoc/Main.scala index 8e8d89a..a001965 100644 --- a/aoc/src/dev/ctsk/aoc/Main.scala +++ b/aoc/src/dev/ctsk/aoc/Main.scala @@ -13,7 +13,7 @@ val solvers = Map[Int, Solver]( @main def main(day: String, input: String): Unit = solvers.get(day.toInt) match case Some(solver) => - val (timings, solution) = solver.run(input) + val (timings, solution) = solver.run(os.pwd / input) sys.env.get("AOC_BENCH") match case Some(_) => println(solution.p1) diff --git a/aoc/src/dev/ctsk/aoc/Solution.scala b/aoc/src/dev/ctsk/aoc/Solution.scala index bc3a774..2f4e869 100644 --- a/aoc/src/dev/ctsk/aoc/Solution.scala +++ b/aoc/src/dev/ctsk/aoc/Solution.scala @@ -5,7 +5,7 @@ case class Timings(prep: Long, p1: Long, p2: Long) case class Solution(p1: Object, p2: Object) abstract class Solver(day: Int): - def run(input: String): (Timings, Solution) + def run(input: os.Path): (Timings, Solution) def timed[A](solution: => A): (Long, A) = val start = System.nanoTime() diff --git a/aoc/src/dev/ctsk/aoc/days/Day01.scala b/aoc/src/dev/ctsk/aoc/days/Day01.scala index eab55d2..92641a8 100644 --- a/aoc/src/dev/ctsk/aoc/days/Day01.scala +++ b/aoc/src/dev/ctsk/aoc/days/Day01.scala @@ -5,10 +5,9 @@ import dev.ctsk.aoc._ object Day01 extends Solver(1): type Input = (Array[Int], Array[Int]) - def pre(input: String): Input = - io.Source - .fromFile(input) - .getLines() + def pre(input: os.Path): Input = + os.read + .lines(input) .map { case s"$i $j" => (i.toInt, j.toInt) } .toArray .unzip match { case (left, right) => (left.sorted, right.sorted) } @@ -22,7 +21,7 @@ object Day01 extends Solver(1): val counts = right.groupMapReduce(identity)(identity)(_ + _) left.map(n => counts.getOrElse(n, 0)).sum - def run(input: String): (Timings, Solution) = + def run(input: os.Path): (Timings, Solution) = val (pre_time, pre_input) = timed { pre(input) } val (p1_time, p1_solution) = timed { part1(pre_input) } val (p2_time, p2_solution) = timed { part2(pre_input) } diff --git a/aoc/src/dev/ctsk/aoc/days/Day02.scala b/aoc/src/dev/ctsk/aoc/days/Day02.scala index fe1c546..9fca9d5 100644 --- a/aoc/src/dev/ctsk/aoc/days/Day02.scala +++ b/aoc/src/dev/ctsk/aoc/days/Day02.scala @@ -3,10 +3,9 @@ package dev.ctsk.aoc.days import dev.ctsk.aoc._ object Day02 extends Solver(2): - def pre(input: String): List[List[Int]] = - io.Source - .fromFile(input) - .getLines() + def pre(input: os.Path): List[List[Int]] = + os.read + .lines(input) .map(line => line.split(" ").map(_.toInt).toList) .toList @@ -25,7 +24,7 @@ object Day02 extends Solver(2): def part2(lists: List[List[Int]]): Int = lists.count(list => safeWithGap(list) || safeWithGap(list.reverse)) - def run(input: String): (Timings, Solution) = + def run(input: os.Path): (Timings, Solution) = val (pre_time, pre_input) = timed { pre(input) } val (p1_time, p1_solution) = timed { part1(pre_input) } val (p2_time, p2_solution) = timed { part2(pre_input) } diff --git a/aoc/src/dev/ctsk/aoc/days/Day03.scala b/aoc/src/dev/ctsk/aoc/days/Day03.scala index 27d81f9..9ead0ba 100644 --- a/aoc/src/dev/ctsk/aoc/days/Day03.scala +++ b/aoc/src/dev/ctsk/aoc/days/Day03.scala @@ -24,8 +24,8 @@ object Day03 extends Solver(3): } ._2 - def run(input: String): (Timings, Solution) = - val in = io.Source.fromFile(input).mkString + def run(input: os.Path): (Timings, Solution) = + val in = os.read(input) val (p1_time, p1_solution) = timed { part1(in) } val (p2_time, p2_solution) = timed { part2(in) } diff --git a/aoc/src/dev/ctsk/aoc/days/Day04.scala b/aoc/src/dev/ctsk/aoc/days/Day04.scala index 1671cd1..395bbee 100644 --- a/aoc/src/dev/ctsk/aoc/days/Day04.scala +++ b/aoc/src/dev/ctsk/aoc/days/Day04.scala @@ -38,12 +38,8 @@ object Day04 extends Solver(4): && grid(i - 1)(j + 1) + grid(i + 1)(j - 1) == 'S' + 'M' yield ()).length - def run(input: String): (Timings, Solution) = - var in = io.Source - .fromFile(input) - .getLines() - .map { line => line.toVector } - .toVector + def run(input: os.Path): (Timings, Solution) = + var in = os.read.lines(input).map { line => line.toVector }.toVector val (p1_time, p1_solution) = timed { part1(in) } val (p2_time, p2_solution) = timed { part2(in) } diff --git a/aoc/src/dev/ctsk/aoc/days/Day05.scala b/aoc/src/dev/ctsk/aoc/days/Day05.scala index f6a7a73..efea7a3 100644 --- a/aoc/src/dev/ctsk/aoc/days/Day05.scala +++ b/aoc/src/dev/ctsk/aoc/days/Day05.scala @@ -4,9 +4,8 @@ import dev.ctsk.aoc._ import scala.annotation.nowarn object Day05 extends Solver(5): - def pre(input: String) = - val Array(rulesStr, updatesStr) = - io.Source.fromFile(input).mkString.split("\n\n") + def pre(input: os.Path) = + val Array(rulesStr, updatesStr) = os.read(input).split("\n\n") val rules = rulesStr.linesIterator .map(rule => { @@ -20,7 +19,7 @@ object Day05 extends Solver(5): (rules, updates) - def run(input: String): (Timings, Solution) = + def run(input: os.Path): (Timings, Solution) = val (pre_time, (rules, updates)) = timed { pre(input) } @nowarn("msg=match may not be exhaustive")