diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 5cd135a064522bbb757161b1eee5a7d65de1989e..a2d7c21338e98a66cd8af9e352f293e52324608b 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,7 +4,7 @@ <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> - <option name="testRunner" value="PLATFORM" /> + <option name="testRunner" value="GRADLE" /> <option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="modules"> @@ -13,7 +13,6 @@ <option value="$PROJECT_DIR$/app" /> </set> </option> - <option name="resolveModulePerSourceSet" value="false" /> </GradleProjectSettings> </option> </component> diff --git a/.idea/misc.xml b/.idea/misc.xml index 9ffcaa9b16e8ad73799e5488164ed1c21c2c1d3d..30d867339ba984f1d138abee9579f3efe9e76def 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -43,7 +43,7 @@ </value> </option> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Embedded JDK" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index e497da999824b5c5629039f2e74794dd96b6c419..0000000000000000000000000000000000000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="RunConfigurationProducerService"> - <option name="ignoredProducers"> - <set> - <option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" /> - <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" /> - <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" /> - <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" /> - </set> - </option> - </component> -</project> \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index cdc7d7bc228505f82ca7c4cf4e93c92a0739cafa..f5e7b3bc117f2787b548feedaaed69595bd838ae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,6 +20,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + namespace 'app.jonas.adventofcode2020' } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9020969027fd768d6544cfaa4439ef65d699780e..3d876666e098698881b4ae8a4bed0405cebb1aa4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="app.jonas.adventofcode2020"> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:allowBackup="true" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" diff --git a/app/src/main/java/app/jonas/adventofcode2018/d04/ReposeRecord.kt b/app/src/main/java/app/jonas/adventofcode2018/d04/ReposeRecord.kt index a8b2ec439c32949b65d7db9b97da734b65abcee4..f7957597a4650ac70f8660e76ca7dd963d1054b7 100644 --- a/app/src/main/java/app/jonas/adventofcode2018/d04/ReposeRecord.kt +++ b/app/src/main/java/app/jonas/adventofcode2018/d04/ReposeRecord.kt @@ -45,13 +45,13 @@ fun extractSleepRanges(entries: List<Entry>): MutableMap<Int, MutableList<IntRan fun sleepiestMinute(ranges: List<IntRange>) = (0..59).map { it to ranges.fold(0) { acc, range -> if (it in range) acc + 1 else acc } } - .maxBy { (_, count) -> count } + .maxByOrNull { (_, count) -> count } ?: throw IllegalArgumentException("Sleepiest min not parsable") fun part1(file: File): Int { val sortedInput = parseInput(file).sorted() val sleepRanges = extractSleepRanges(sortedInput) - val (id, ranges) = sleepRanges.maxBy { (_, ranges) -> ranges.fold(0) { acc, r -> acc + r.count() } } + val (id, ranges) = sleepRanges.maxByOrNull { (_, ranges) -> ranges.fold(0) { acc, r -> acc + r.count() } } ?: throw IllegalArgumentException("Sleep ranges not parsable") return id * sleepiestMinute(ranges).first } @@ -62,6 +62,6 @@ fun part2(file: File): Int { val (id, min) = sleepRanges.map { (id, ranges) -> val (minute, count) = sleepiestMinute(ranges) Triple(id, minute, count) - }.maxBy { (_, _, count) -> count } ?: throw IllegalArgumentException("Sleep ranges not parsable") + }.maxByOrNull { (_, _, count) -> count } ?: throw IllegalArgumentException("Sleep ranges not parsable") return id * min } \ No newline at end of file diff --git a/app/src/main/java/app/jonas/adventofcode2018/d05/AlchemicalReduction.kt b/app/src/main/java/app/jonas/adventofcode2018/d05/AlchemicalReduction.kt index 3b9b0715a10f7d8a03832f957145c806080676a4..d2ca9870b5abfb76673023b2ded3a0edac305784 100644 --- a/app/src/main/java/app/jonas/adventofcode2018/d05/AlchemicalReduction.kt +++ b/app/src/main/java/app/jonas/adventofcode2018/d05/AlchemicalReduction.kt @@ -42,5 +42,5 @@ fun part2(file: File): Int? { val input = file.readLines().single() return input.toList().distinctBy { it.toLowerCase() } .map { react(input.replace(it.toString(), "", true)).length } - .min() + .minOrNull() } diff --git a/app/src/main/java/app/jonas/adventofcode2018/d06/ChronalCoordinates.kt b/app/src/main/java/app/jonas/adventofcode2018/d06/ChronalCoordinates.kt index 25a48efa00870c9658c150b560ff6dff5c261530..ec3812fee075ea28d6b169cfba5fd133963dbfc9 100644 --- a/app/src/main/java/app/jonas/adventofcode2018/d06/ChronalCoordinates.kt +++ b/app/src/main/java/app/jonas/adventofcode2018/d06/ChronalCoordinates.kt @@ -46,7 +46,7 @@ fun part1(file: File): Int { } } infinite.forEach { counts.remove(it) } - return counts.values.max() ?: throw IllegalArgumentException("Max not found") + return counts.values.maxOrNull() ?: throw IllegalArgumentException("Max not found") } fun part2(file: File, maxDistance: Int): Int { diff --git a/app/src/main/java/app/jonas/adventofcode2018/d07/TheSumOfItsParts.kt b/app/src/main/java/app/jonas/adventofcode2018/d07/TheSumOfItsParts.kt index 636352fc140eaf62f62d69ef7dd402a7dd93bb54..d38810c4dafaf96a5b39870cfcf935e15ce22524 100644 --- a/app/src/main/java/app/jonas/adventofcode2018/d07/TheSumOfItsParts.kt +++ b/app/src/main/java/app/jonas/adventofcode2018/d07/TheSumOfItsParts.kt @@ -87,7 +87,7 @@ fun part2(file: File, workerCount: Int, additionalStepDuration: Int): Int { second += if (someoneFinished) { 1 } else { - val minWorkingTime = workers.mapNotNull { it.timeLeft(second) }.min() + val minWorkingTime = workers.mapNotNull { it.timeLeft(second) }.minOrNull() minWorkingTime ?: throw Error("Nobody is working: shouldn't happen!") } } diff --git a/app/src/main/java/app/jonas/adventofcode2018/d09/MarbleMania.kt b/app/src/main/java/app/jonas/adventofcode2018/d09/MarbleMania.kt index dac080a4ec7a1747de53b04791c13bceb309d878..ecbf8595195af550884b2e3a20bc40106d3fdab9 100644 --- a/app/src/main/java/app/jonas/adventofcode2018/d09/MarbleMania.kt +++ b/app/src/main/java/app/jonas/adventofcode2018/d09/MarbleMania.kt @@ -48,7 +48,7 @@ private fun getHighscore(file: File, lastMarbleValueMultiplier: Int = 1): Long { next.previous = currentMarble } } - return scores.max() ?: throw Error("No highscore!") + return scores.maxOrNull() ?: throw Error("No highscore!") } fun part1(file: File)= getHighscore(file) diff --git a/app/src/main/java/app/jonas/adventofcode2018/d11/ChronalCharge.kt b/app/src/main/java/app/jonas/adventofcode2018/d11/ChronalCharge.kt index 3a3c5fd924da1d364d93cfafec35e1fe7c8cf181..41d96c59ffdb0405622f0310d974b5b557914fa9 100644 --- a/app/src/main/java/app/jonas/adventofcode2018/d11/ChronalCharge.kt +++ b/app/src/main/java/app/jonas/adventofcode2018/d11/ChronalCharge.kt @@ -66,7 +66,7 @@ fun part1(serialNumber: Int): String { fun part2(serialNumber: Int): String { val plane = getPowerLevelPlane(serialNumber) val largestTotalPowers = (1..300).map { size -> size to plane.sumWindowed(size).getLargestTotalPower() } - val (size, largestTotalPower) = largestTotalPowers.maxBy { (_, largestTotalPower) -> largestTotalPower.second } + val (size, largestTotalPower) = largestTotalPowers.maxByOrNull { (_, largestTotalPower) -> largestTotalPower.second } ?: throw Error("No maximum found!") val (coordinates) = largestTotalPower return "$coordinates,$size" diff --git a/app/src/main/java/app/jonas/adventofcode2020/d05/BinaryBoarding.kt b/app/src/main/java/app/jonas/adventofcode2020/d05/BinaryBoarding.kt index 99602fbfdfd973c7774c677872a0d15d2e593bfb..9c4a61117ad79f4a70361989c120b965c03d8018 100644 --- a/app/src/main/java/app/jonas/adventofcode2020/d05/BinaryBoarding.kt +++ b/app/src/main/java/app/jonas/adventofcode2020/d05/BinaryBoarding.kt @@ -16,7 +16,7 @@ fun boardingPassToSeatID(boardingPass: String): Int {// BFFFBBFRRR return row * 8 + column } -fun part1(file: File) = file.readLines().map(::boardingPassToSeatID).max() +fun part1(file: File) = file.readLines().maxOfOrNull(::boardingPassToSeatID) fun part2(file: File): Int { val seatIDs = file.readLines().map(::boardingPassToSeatID) diff --git a/app/src/main/java/app/jonas/adventofcode2020/d09/EncodingError.kt b/app/src/main/java/app/jonas/adventofcode2020/d09/EncodingError.kt index e64fffac5063673601262aa11f5c9089b8857e74..bc689ca7dad0b3c9553fb9da6ee014fab50a1093 100644 --- a/app/src/main/java/app/jonas/adventofcode2020/d09/EncodingError.kt +++ b/app/src/main/java/app/jonas/adventofcode2020/d09/EncodingError.kt @@ -42,5 +42,5 @@ fun part2(file: File, preamble: Int): Long { } } val contiguousSummands = numbers.subList(startIndex, endIndex) - return contiguousSummands.max()!! + contiguousSummands.min()!! + return contiguousSummands.maxOrNull()!! + contiguousSummands.minOrNull()!! } diff --git a/app/src/test/java/app/jonas/adventofcode2020/d13/ShuttleSearchTest.kt b/app/src/test/java/app/jonas/adventofcode2020/d13/ShuttleSearchTest.kt index 1accc6faa3aec7bf653b5a442e96d089a996bfbf..5974db69eab4267e856081154e118d58cb43c149 100644 --- a/app/src/test/java/app/jonas/adventofcode2020/d13/ShuttleSearchTest.kt +++ b/app/src/test/java/app/jonas/adventofcode2020/d13/ShuttleSearchTest.kt @@ -12,7 +12,7 @@ class ShuttleSearchTest { fun testPart1Input() = assertEquals(4782, part1(load("input.txt"))) @Test - fun testPart2Example() = assertEquals(1068781, part2(load("example.txt"))) + fun testPart2Example() = assertEquals(1068781.toBigInteger(), part2(load("example.txt"))) @Test fun testPart2Input() = assertEquals(1118684865113056.toBigInteger(), part2(load("input.txt"))) diff --git a/build.gradle b/build.gradle index a3176b9e3af9db9672ed928c9534d383d3860dc9..0d113b317af5ba7c84c95171f6195b1594ae2f28 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.2.71' + ext.kotlin_version = '1.6.21' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:7.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2d80b69a76653b7165cce96f7e5d326035d61043..41dfb87909a877d96c3af4adccce4c7a301b55a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists