diff --git a/2022/day6.scala b/2022/day6.scala index 4227eca..a254f1f 100644 --- a/2022/day6.scala +++ b/2022/day6.scala @@ -1,24 +1,26 @@ import java.nio.file.Files import java.nio.file.Paths +import scala.util.control.NonLocalReturns.* -def first_unique_run_for(line: String, num: Int, skip: Int = 0): Int = +def first_unique_run_for(line: String, num: Int, skip: Int = 0): Int = returning { for i <- num.max(skip) until line.length do - if line.substring(i-num, i).toCharArray.toSet.size == num then - return i - return -1 + if line.substring(i-num, i).toCharArray.distinct.size == num then + throwReturn(i) + throwReturn(-1) +} def first_unique_run_while(line: String, num: Int, skip: Int = 0): Int = var i = num.max(skip) while i < line.length do - if line.substring(i-num, i).toCharArray.toSet.size == num then + if line.substring(i-num, i).toCharArray.distinct.size == num then return i i += 1 return -1 @main def main() = val line = Files.readString(Paths.get("input/6")).strip - do_once(line) - // perf_test(line, 50000) + // do_once(line) + perf_test(line, 100000) def do_once(line: String) = val four = first_unique_run_for(line, 4) @@ -26,11 +28,11 @@ def do_once(line: String) = println(four) println(fourteen) -def perf_test(line: String, n: int) = +def perf_test(line: String, n: Int) = var four = -1 var fourteen = -1 for i <- 1 to n do - four = first_unique_run_while(line, 4) - fourteen = first_unique_run_while(line, 14, four) + four = first_unique_run_for(line, 4) + fourteen = first_unique_run_for(line, 14, four) println(four) println(fourteen)