From f797f6ec557d273a8b500369df8b3e1256614eab Mon Sep 17 00:00:00 2001
From: Jonas <git@jonas.app>
Date: Wed, 30 Nov 2022 21:27:56 +0100
Subject: [PATCH] =?UTF-8?q?Upgrade=20Gradle=20and=20linked=20stuff=20?=
 =?UTF-8?q?=E2=9C=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Upgrade AGP dependency from 3.2.1 to 7.3.1
Upgrade Gradle version to 7.4
Upgrade Gradle plugins
Update default Java language level
Move package from Android manifest to build files
---
 .idea/gradle.xml                                    |  3 +--
 .idea/misc.xml                                      |  2 +-
 .idea/runConfigurations.xml                         | 13 -------------
 app/build.gradle                                    |  1 +
 app/src/main/AndroidManifest.xml                    |  3 +--
 .../app/jonas/adventofcode2018/d04/ReposeRecord.kt  |  6 +++---
 .../adventofcode2018/d05/AlchemicalReduction.kt     |  2 +-
 .../adventofcode2018/d06/ChronalCoordinates.kt      |  2 +-
 .../jonas/adventofcode2018/d07/TheSumOfItsParts.kt  |  2 +-
 .../app/jonas/adventofcode2018/d09/MarbleMania.kt   |  2 +-
 .../app/jonas/adventofcode2018/d11/ChronalCharge.kt |  2 +-
 .../jonas/adventofcode2020/d05/BinaryBoarding.kt    |  2 +-
 .../app/jonas/adventofcode2020/d09/EncodingError.kt |  2 +-
 .../jonas/adventofcode2020/d13/ShuttleSearchTest.kt |  2 +-
 build.gradle                                        |  4 ++--
 gradle/wrapper/gradle-wrapper.properties            |  2 +-
 16 files changed, 18 insertions(+), 32 deletions(-)
 delete mode 100644 .idea/runConfigurations.xml

diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 5cd135a..a2d7c21 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 9ffcaa9..30d8673 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 e497da9..0000000
--- 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 cdc7d7b..f5e7b3b 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 9020969..3d87666 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 a8b2ec4..f795759 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 3b9b071..d2ca987 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 25a48ef..ec3812f 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 636352f..d38810c 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 dac080a..ecbf859 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 3a3c5fd..41d96c5 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 99602fb..9c4a611 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 e64fffa..bc689ca 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 1accc6f..5974db6 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 a3176b9..0d113b3 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 2d80b69..41dfb87 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
-- 
GitLab