package org.aoc2021

import java.nio.file.Files
import java.nio.file.Path

object Day8 {
    private fun solvePart1(lines: List<String>): Int {
        return lines.sumOf { line ->
            val outputDigits = line.split(" | ")[1].split(" ")
            outputDigits.count { setOf(2, 3, 4, 7).contains(it.length) }
        }
    }

    private fun solvePart2(lines: List<String>): Int {
        return lines.sumOf { line ->
            val (referenceDigits, outputDigits) = line.split(" | ").let {
                it[0].split(" ") to it[1].split(" ")
            }
            solveLine(referenceDigits, outputDigits)
        }
    }

    private fun solveLine(referenceDigits: List<String>, outputDigits: List<String>): Int {
        val digitToChars = Array(10) { setOf<Char>() }

        val referenceSets = referenceDigits.map(String::toSet)

        digitToChars[1] = referenceSets.single { it.size == 2 }
        digitToChars[4] = referenceSets.single { it.size == 4 }
        digitToChars[7] = referenceSets.single { it.size == 3 }
        digitToChars[8] = referenceSets.single { it.size == 7 }

        digitToChars[3] = referenceSets.single { referenceSet ->
            referenceSet.size == 5 && referenceSet.containsAll(digitToChars[1])
        }

        digitToChars[2] = referenceSets.single { referenceSet ->
            referenceSet.size == 5 && referenceSet.intersect(digitToChars[4]).size == 2
        }
        digitToChars[5] = referenceSets.single { referenceSet ->
            referenceSet.size == 5 && referenceSet.intersect(digitToChars[4]).size == 3 &&
                    referenceSet != digitToChars[3]
        }

        digitToChars[6] = referenceSets.single { referenceSet ->
            referenceSet.size == 6 && referenceSet.intersect(digitToChars[1]).size == 1
        }

        digitToChars[9] = referenceSets.single { referenceSet ->
            referenceSet.size == 6 && referenceSet.containsAll(digitToChars[4])
        }

        digitToChars[0] = referenceSets.single { referenceSet ->
            referenceSet.size == 6 && referenceSet != digitToChars[6] && referenceSet != digitToChars[9]
        }

        val setToDigit = digitToChars.mapIndexed { index, chars -> chars to index}.toMap()

        return outputDigits.fold(0) { sum, outputDigit ->
            10 * sum + setToDigit[outputDigit.toSet()]!!
        }
    }

    @JvmStatic
    fun main(args: Array<String>) {
        val lines = Files.readAllLines(Path.of("input8.txt"), Charsets.UTF_8)
        val solution1 = solvePart1(lines)
        println(solution1)
        val solution2 = solvePart2(lines)
        println(solution2)
    }
}

Compiled from "Day8.kt"
public final class org.aoc2021.Day8 {
  public static final org.aoc2021.Day8 INSTANCE;

  private org.aoc2021.Day8();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  private final int solvePart1(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: checkcast     #15                 // class java/lang/Iterable
       4: astore_2
       5: iconst_0
       6: istore_3
       7: aload_2
       8: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      13: astore        4
      15: aload         4
      17: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      22: ifeq          271
      25: aload         4
      27: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      32: astore        5
      34: iload_3
      35: aload         5
      37: checkcast     #31                 // class java/lang/String
      40: astore        6
      42: istore        17
      44: iconst_0
      45: istore        7
      47: aload         6
      49: checkcast     #33                 // class java/lang/CharSequence
      52: iconst_1
      53: anewarray     #31                 // class java/lang/String
      56: astore        8
      58: aload         8
      60: iconst_0
      61: ldc           #35                 // String  |
      63: aastore
      64: aload         8
      66: iconst_0
      67: iconst_0
      68: bipush        6
      70: aconst_null
      71: invokestatic  #41                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      74: iconst_1
      75: invokeinterface #47,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      80: checkcast     #33                 // class java/lang/CharSequence
      83: iconst_1
      84: anewarray     #31                 // class java/lang/String
      87: astore        8
      89: aload         8
      91: iconst_0
      92: ldc           #49                 // String
      94: aastore
      95: aload         8
      97: iconst_0
      98: iconst_0
      99: bipush        6
     101: aconst_null
     102: invokestatic  #41                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     105: astore        9
     107: aload         9
     109: checkcast     #15                 // class java/lang/Iterable
     112: astore        8
     114: iconst_0
     115: istore        10
     117: aload         8
     119: instanceof    #51                 // class java/util/Collection
     122: ifeq          142
     125: aload         8
     127: checkcast     #51                 // class java/util/Collection
     130: invokeinterface #54,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
     135: ifeq          142
     138: iconst_0
     139: goto          259
     142: iconst_0
     143: istore        11
     145: aload         8
     147: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     152: astore        12
     154: aload         12
     156: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     161: ifeq          257
     164: aload         12
     166: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     171: astore        13
     173: aload         13
     175: checkcast     #31                 // class java/lang/String
     178: astore        14
     180: iconst_0
     181: istore        15
     183: iconst_4
     184: anewarray     #56                 // class java/lang/Integer
     187: astore        16
     189: aload         16
     191: iconst_0
     192: iconst_2
     193: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     196: aastore
     197: aload         16
     199: iconst_1
     200: iconst_3
     201: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     204: aastore
     205: aload         16
     207: iconst_2
     208: iconst_4
     209: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     212: aastore
     213: aload         16
     215: iconst_3
     216: bipush        7
     218: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     221: aastore
     222: aload         16
     224: invokestatic  #66                 // Method kotlin/collections/SetsKt.setOf:([Ljava/lang/Object;)Ljava/util/Set;
     227: aload         14
     229: invokevirtual #70                 // Method java/lang/String.length:()I
     232: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     235: invokeinterface #76,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     240: ifeq          154
     243: iinc          11, 1
     246: iload         11
     248: ifge          154
     251: invokestatic  #81                 // Method kotlin/collections/CollectionsKt.throwCountOverflow:()V
     254: goto          154
     257: iload         11
     259: nop
     260: istore        18
     262: iload         17
     264: iload         18
     266: iadd
     267: istore_3
     268: goto          15
     271: iload_3
     272: ireturn

  private final int solvePart2(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: checkcast     #15                 // class java/lang/Iterable
       4: astore_2
       5: iconst_0
       6: istore_3
       7: aload_2
       8: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      13: astore        4
      15: aload         4
      17: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      22: ifeq          192
      25: aload         4
      27: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      32: astore        5
      34: iload_3
      35: aload         5
      37: checkcast     #31                 // class java/lang/String
      40: astore        6
      42: istore        13
      44: iconst_0
      45: istore        7
      47: aload         6
      49: checkcast     #33                 // class java/lang/CharSequence
      52: iconst_1
      53: anewarray     #31                 // class java/lang/String
      56: astore        8
      58: aload         8
      60: iconst_0
      61: ldc           #35                 // String  |
      63: aastore
      64: aload         8
      66: iconst_0
      67: iconst_0
      68: bipush        6
      70: aconst_null
      71: invokestatic  #41                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      74: astore        9
      76: iconst_0
      77: istore        10
      79: aload         9
      81: iconst_0
      82: invokeinterface #47,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      87: checkcast     #33                 // class java/lang/CharSequence
      90: iconst_1
      91: anewarray     #31                 // class java/lang/String
      94: astore        11
      96: aload         11
      98: iconst_0
      99: ldc           #49                 // String
     101: aastore
     102: aload         11
     104: iconst_0
     105: iconst_0
     106: bipush        6
     108: aconst_null
     109: invokestatic  #41                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     112: aload         9
     114: iconst_1
     115: invokeinterface #47,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     120: checkcast     #33                 // class java/lang/CharSequence
     123: iconst_1
     124: anewarray     #31                 // class java/lang/String
     127: astore        11
     129: aload         11
     131: iconst_0
     132: ldc           #49                 // String
     134: aastore
     135: aload         11
     137: iconst_0
     138: iconst_0
     139: bipush        6
     141: aconst_null
     142: invokestatic  #41                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     145: invokestatic  #103                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     148: nop
     149: astore        12
     151: aload         12
     153: invokevirtual #108                // Method kotlin/Pair.component1:()Ljava/lang/Object;
     156: checkcast     #43                 // class java/util/List
     159: astore        8
     161: aload         12
     163: invokevirtual #111                // Method kotlin/Pair.component2:()Ljava/lang/Object;
     166: checkcast     #43                 // class java/util/List
     169: astore        9
     171: getstatic     #114                // Field INSTANCE:Lorg/aoc2021/Day8;
     174: aload         8
     176: aload         9
     178: invokespecial #118                // Method solveLine:(Ljava/util/List;Ljava/util/List;)I
     181: istore        14
     183: iload         13
     185: iload         14
     187: iadd
     188: istore_3
     189: goto          15
     192: iload_3
     193: ireturn

  private final int solveLine(java.util.List<java.lang.String>, java.util.List<java.lang.String>);
    Code:
       0: iconst_0
       1: istore        4
       3: bipush        10
       5: anewarray     #72                 // class java/util/Set
       8: astore        5
      10: iload         4
      12: bipush        10
      14: if_icmpge     35
      17: iload         4
      19: istore        6
      21: aload         5
      23: iload         6
      25: invokestatic  #126                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
      28: aastore
      29: iinc          4, 1
      32: goto          10
      35: aload         5
      37: astore_3
      38: aload_1
      39: checkcast     #15                 // class java/lang/Iterable
      42: astore        5
      44: iconst_0
      45: istore        6
      47: aload         5
      49: astore        7
      51: new           #128                // class java/util/ArrayList
      54: dup
      55: aload         5
      57: bipush        10
      59: invokestatic  #132                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      62: invokespecial #135                // Method java/util/ArrayList."<init>":(I)V
      65: checkcast     #51                 // class java/util/Collection
      68: astore        8
      70: iconst_0
      71: istore        9
      73: aload         7
      75: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      80: astore        10
      82: aload         10
      84: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      89: ifeq          135
      92: aload         10
      94: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      99: astore        11
     101: aload         8
     103: aload         11
     105: checkcast     #31                 // class java/lang/String
     108: astore        12
     110: astore        18
     112: iconst_0
     113: istore        13
     115: aload         12
     117: checkcast     #33                 // class java/lang/CharSequence
     120: invokestatic  #139                // Method kotlin/text/StringsKt.toSet:(Ljava/lang/CharSequence;)Ljava/util/Set;
     123: aload         18
     125: swap
     126: invokeinterface #142,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     131: pop
     132: goto          82
     135: aload         8
     137: checkcast     #43                 // class java/util/List
     140: nop
     141: astore        4
     143: aload_3
     144: iconst_1
     145: aload         4
     147: checkcast     #15                 // class java/lang/Iterable
     150: astore        5
     152: istore        19
     154: astore        18
     156: iconst_0
     157: istore        6
     159: aconst_null
     160: astore        7
     162: iconst_0
     163: istore        8
     165: aload         5
     167: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     172: astore        9
     174: aload         9
     176: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     181: ifeq          247
     184: aload         9
     186: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     191: astore        10
     193: aload         10
     195: checkcast     #72                 // class java/util/Set
     198: astore        11
     200: iconst_0
     201: istore        12
     203: aload         11
     205: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
     210: iconst_2
     211: if_icmpne     218
     214: iconst_1
     215: goto          219
     218: iconst_0
     219: ifeq          174
     222: iload         8
     224: ifeq          237
     227: new           #147                // class java/lang/IllegalArgumentException
     230: dup
     231: ldc           #149                // String Collection contains more than one matching element.
     233: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     236: athrow
     237: aload         10
     239: astore        7
     241: iconst_1
     242: istore        8
     244: goto          174
     247: iload         8
     249: ifne          262
     252: new           #154                // class java/util/NoSuchElementException
     255: dup
     256: ldc           #156                // String Collection contains no element matching the predicate.
     258: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     261: athrow
     262: aload         7
     264: astore        20
     266: aload         18
     268: iload         19
     270: aload         20
     272: aastore
     273: aload_3
     274: iconst_4
     275: aload         4
     277: checkcast     #15                 // class java/lang/Iterable
     280: astore        5
     282: istore        19
     284: astore        18
     286: iconst_0
     287: istore        6
     289: aconst_null
     290: astore        7
     292: iconst_0
     293: istore        8
     295: aload         5
     297: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     302: astore        9
     304: aload         9
     306: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     311: ifeq          377
     314: aload         9
     316: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     321: astore        10
     323: aload         10
     325: checkcast     #72                 // class java/util/Set
     328: astore        11
     330: iconst_0
     331: istore        12
     333: aload         11
     335: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
     340: iconst_4
     341: if_icmpne     348
     344: iconst_1
     345: goto          349
     348: iconst_0
     349: ifeq          304
     352: iload         8
     354: ifeq          367
     357: new           #147                // class java/lang/IllegalArgumentException
     360: dup
     361: ldc           #149                // String Collection contains more than one matching element.
     363: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     366: athrow
     367: aload         10
     369: astore        7
     371: iconst_1
     372: istore        8
     374: goto          304
     377: iload         8
     379: ifne          392
     382: new           #154                // class java/util/NoSuchElementException
     385: dup
     386: ldc           #156                // String Collection contains no element matching the predicate.
     388: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     391: athrow
     392: aload         7
     394: astore        20
     396: aload         18
     398: iload         19
     400: aload         20
     402: aastore
     403: aload_3
     404: bipush        7
     406: aload         4
     408: checkcast     #15                 // class java/lang/Iterable
     411: astore        5
     413: istore        19
     415: astore        18
     417: iconst_0
     418: istore        6
     420: aconst_null
     421: astore        7
     423: iconst_0
     424: istore        8
     426: aload         5
     428: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     433: astore        9
     435: aload         9
     437: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     442: ifeq          508
     445: aload         9
     447: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     452: astore        10
     454: aload         10
     456: checkcast     #72                 // class java/util/Set
     459: astore        11
     461: iconst_0
     462: istore        12
     464: aload         11
     466: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
     471: iconst_3
     472: if_icmpne     479
     475: iconst_1
     476: goto          480
     479: iconst_0
     480: ifeq          435
     483: iload         8
     485: ifeq          498
     488: new           #147                // class java/lang/IllegalArgumentException
     491: dup
     492: ldc           #149                // String Collection contains more than one matching element.
     494: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     497: athrow
     498: aload         10
     500: astore        7
     502: iconst_1
     503: istore        8
     505: goto          435
     508: iload         8
     510: ifne          523
     513: new           #154                // class java/util/NoSuchElementException
     516: dup
     517: ldc           #156                // String Collection contains no element matching the predicate.
     519: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     522: athrow
     523: aload         7
     525: astore        20
     527: aload         18
     529: iload         19
     531: aload         20
     533: aastore
     534: aload_3
     535: bipush        8
     537: aload         4
     539: checkcast     #15                 // class java/lang/Iterable
     542: astore        5
     544: istore        19
     546: astore        18
     548: iconst_0
     549: istore        6
     551: aconst_null
     552: astore        7
     554: iconst_0
     555: istore        8
     557: aload         5
     559: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     564: astore        9
     566: aload         9
     568: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     573: ifeq          640
     576: aload         9
     578: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     583: astore        10
     585: aload         10
     587: checkcast     #72                 // class java/util/Set
     590: astore        11
     592: iconst_0
     593: istore        12
     595: aload         11
     597: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
     602: bipush        7
     604: if_icmpne     611
     607: iconst_1
     608: goto          612
     611: iconst_0
     612: ifeq          566
     615: iload         8
     617: ifeq          630
     620: new           #147                // class java/lang/IllegalArgumentException
     623: dup
     624: ldc           #149                // String Collection contains more than one matching element.
     626: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     629: athrow
     630: aload         10
     632: astore        7
     634: iconst_1
     635: istore        8
     637: goto          566
     640: iload         8
     642: ifne          655
     645: new           #154                // class java/util/NoSuchElementException
     648: dup
     649: ldc           #156                // String Collection contains no element matching the predicate.
     651: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     654: athrow
     655: aload         7
     657: astore        20
     659: aload         18
     661: iload         19
     663: aload         20
     665: aastore
     666: aload_3
     667: iconst_3
     668: aload         4
     670: checkcast     #15                 // class java/lang/Iterable
     673: astore        5
     675: istore        19
     677: astore        18
     679: iconst_0
     680: istore        6
     682: aconst_null
     683: astore        7
     685: iconst_0
     686: istore        8
     688: aload         5
     690: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     695: astore        9
     697: aload         9
     699: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     704: ifeq          786
     707: aload         9
     709: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     714: astore        10
     716: aload         10
     718: checkcast     #72                 // class java/util/Set
     721: astore        11
     723: iconst_0
     724: istore        12
     726: aload         11
     728: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
     733: iconst_5
     734: if_icmpne     757
     737: aload         11
     739: aload_3
     740: iconst_1
     741: aaload
     742: checkcast     #51                 // class java/util/Collection
     745: invokeinterface #161,  2          // InterfaceMethod java/util/Set.containsAll:(Ljava/util/Collection;)Z
     750: ifeq          757
     753: iconst_1
     754: goto          758
     757: iconst_0
     758: ifeq          697
     761: iload         8
     763: ifeq          776
     766: new           #147                // class java/lang/IllegalArgumentException
     769: dup
     770: ldc           #149                // String Collection contains more than one matching element.
     772: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     775: athrow
     776: aload         10
     778: astore        7
     780: iconst_1
     781: istore        8
     783: goto          697
     786: iload         8
     788: ifne          801
     791: new           #154                // class java/util/NoSuchElementException
     794: dup
     795: ldc           #156                // String Collection contains no element matching the predicate.
     797: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     800: athrow
     801: aload         7
     803: astore        20
     805: aload         18
     807: iload         19
     809: aload         20
     811: aastore
     812: aload_3
     813: iconst_2
     814: aload         4
     816: checkcast     #15                 // class java/lang/Iterable
     819: astore        5
     821: istore        19
     823: astore        18
     825: iconst_0
     826: istore        6
     828: aconst_null
     829: astore        7
     831: iconst_0
     832: istore        8
     834: aload         5
     836: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     841: astore        9
     843: aload         9
     845: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     850: ifeq          939
     853: aload         9
     855: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     860: astore        10
     862: aload         10
     864: checkcast     #72                 // class java/util/Set
     867: astore        11
     869: iconst_0
     870: istore        12
     872: aload         11
     874: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
     879: iconst_5
     880: if_icmpne     910
     883: aload         11
     885: checkcast     #15                 // class java/lang/Iterable
     888: aload_3
     889: iconst_4
     890: aaload
     891: checkcast     #15                 // class java/lang/Iterable
     894: invokestatic  #165                // Method kotlin/collections/CollectionsKt.intersect:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
     897: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
     902: iconst_2
     903: if_icmpne     910
     906: iconst_1
     907: goto          911
     910: iconst_0
     911: ifeq          843
     914: iload         8
     916: ifeq          929
     919: new           #147                // class java/lang/IllegalArgumentException
     922: dup
     923: ldc           #149                // String Collection contains more than one matching element.
     925: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     928: athrow
     929: aload         10
     931: astore        7
     933: iconst_1
     934: istore        8
     936: goto          843
     939: iload         8
     941: ifne          954
     944: new           #154                // class java/util/NoSuchElementException
     947: dup
     948: ldc           #156                // String Collection contains no element matching the predicate.
     950: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     953: athrow
     954: aload         7
     956: astore        20
     958: aload         18
     960: iload         19
     962: aload         20
     964: aastore
     965: aload_3
     966: iconst_5
     967: aload         4
     969: checkcast     #15                 // class java/lang/Iterable
     972: astore        5
     974: istore        19
     976: astore        18
     978: iconst_0
     979: istore        6
     981: aconst_null
     982: astore        7
     984: iconst_0
     985: istore        8
     987: aload         5
     989: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     994: astore        9
     996: aload         9
     998: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1003: ifeq          1103
    1006: aload         9
    1008: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1013: astore        10
    1015: aload         10
    1017: checkcast     #72                 // class java/util/Set
    1020: astore        11
    1022: iconst_0
    1023: istore        12
    1025: aload         11
    1027: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
    1032: iconst_5
    1033: if_icmpne     1074
    1036: aload         11
    1038: checkcast     #15                 // class java/lang/Iterable
    1041: aload_3
    1042: iconst_4
    1043: aaload
    1044: checkcast     #15                 // class java/lang/Iterable
    1047: invokestatic  #165                // Method kotlin/collections/CollectionsKt.intersect:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
    1050: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
    1055: iconst_3
    1056: if_icmpne     1074
    1059: aload         11
    1061: aload_3
    1062: iconst_3
    1063: aaload
    1064: invokestatic  #171                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
    1067: ifne          1074
    1070: iconst_1
    1071: goto          1075
    1074: iconst_0
    1075: ifeq          996
    1078: iload         8
    1080: ifeq          1093
    1083: new           #147                // class java/lang/IllegalArgumentException
    1086: dup
    1087: ldc           #149                // String Collection contains more than one matching element.
    1089: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
    1092: athrow
    1093: aload         10
    1095: astore        7
    1097: iconst_1
    1098: istore        8
    1100: goto          996
    1103: iload         8
    1105: ifne          1118
    1108: new           #154                // class java/util/NoSuchElementException
    1111: dup
    1112: ldc           #156                // String Collection contains no element matching the predicate.
    1114: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
    1117: athrow
    1118: aload         7
    1120: astore        20
    1122: aload         18
    1124: iload         19
    1126: aload         20
    1128: aastore
    1129: aload_3
    1130: bipush        6
    1132: aload         4
    1134: checkcast     #15                 // class java/lang/Iterable
    1137: astore        5
    1139: istore        19
    1141: astore        18
    1143: iconst_0
    1144: istore        6
    1146: aconst_null
    1147: astore        7
    1149: iconst_0
    1150: istore        8
    1152: aload         5
    1154: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1159: astore        9
    1161: aload         9
    1163: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1168: ifeq          1258
    1171: aload         9
    1173: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1178: astore        10
    1180: aload         10
    1182: checkcast     #72                 // class java/util/Set
    1185: astore        11
    1187: iconst_0
    1188: istore        12
    1190: aload         11
    1192: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
    1197: bipush        6
    1199: if_icmpne     1229
    1202: aload         11
    1204: checkcast     #15                 // class java/lang/Iterable
    1207: aload_3
    1208: iconst_1
    1209: aaload
    1210: checkcast     #15                 // class java/lang/Iterable
    1213: invokestatic  #165                // Method kotlin/collections/CollectionsKt.intersect:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
    1216: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
    1221: iconst_1
    1222: if_icmpne     1229
    1225: iconst_1
    1226: goto          1230
    1229: iconst_0
    1230: ifeq          1161
    1233: iload         8
    1235: ifeq          1248
    1238: new           #147                // class java/lang/IllegalArgumentException
    1241: dup
    1242: ldc           #149                // String Collection contains more than one matching element.
    1244: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
    1247: athrow
    1248: aload         10
    1250: astore        7
    1252: iconst_1
    1253: istore        8
    1255: goto          1161
    1258: iload         8
    1260: ifne          1273
    1263: new           #154                // class java/util/NoSuchElementException
    1266: dup
    1267: ldc           #156                // String Collection contains no element matching the predicate.
    1269: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
    1272: athrow
    1273: aload         7
    1275: astore        20
    1277: aload         18
    1279: iload         19
    1281: aload         20
    1283: aastore
    1284: aload_3
    1285: bipush        9
    1287: aload         4
    1289: checkcast     #15                 // class java/lang/Iterable
    1292: astore        5
    1294: istore        19
    1296: astore        18
    1298: iconst_0
    1299: istore        6
    1301: aconst_null
    1302: astore        7
    1304: iconst_0
    1305: istore        8
    1307: aload         5
    1309: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1314: astore        9
    1316: aload         9
    1318: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1323: ifeq          1406
    1326: aload         9
    1328: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1333: astore        10
    1335: aload         10
    1337: checkcast     #72                 // class java/util/Set
    1340: astore        11
    1342: iconst_0
    1343: istore        12
    1345: aload         11
    1347: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
    1352: bipush        6
    1354: if_icmpne     1377
    1357: aload         11
    1359: aload_3
    1360: iconst_4
    1361: aaload
    1362: checkcast     #51                 // class java/util/Collection
    1365: invokeinterface #161,  2          // InterfaceMethod java/util/Set.containsAll:(Ljava/util/Collection;)Z
    1370: ifeq          1377
    1373: iconst_1
    1374: goto          1378
    1377: iconst_0
    1378: ifeq          1316
    1381: iload         8
    1383: ifeq          1396
    1386: new           #147                // class java/lang/IllegalArgumentException
    1389: dup
    1390: ldc           #149                // String Collection contains more than one matching element.
    1392: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
    1395: athrow
    1396: aload         10
    1398: astore        7
    1400: iconst_1
    1401: istore        8
    1403: goto          1316
    1406: iload         8
    1408: ifne          1421
    1411: new           #154                // class java/util/NoSuchElementException
    1414: dup
    1415: ldc           #156                // String Collection contains no element matching the predicate.
    1417: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
    1420: athrow
    1421: aload         7
    1423: astore        20
    1425: aload         18
    1427: iload         19
    1429: aload         20
    1431: aastore
    1432: aload_3
    1433: iconst_0
    1434: aload         4
    1436: checkcast     #15                 // class java/lang/Iterable
    1439: astore        5
    1441: istore        19
    1443: astore        18
    1445: iconst_0
    1446: istore        6
    1448: aconst_null
    1449: astore        7
    1451: iconst_0
    1452: istore        8
    1454: aload         5
    1456: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1461: astore        9
    1463: aload         9
    1465: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1470: ifeq          1561
    1473: aload         9
    1475: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1480: astore        10
    1482: aload         10
    1484: checkcast     #72                 // class java/util/Set
    1487: astore        11
    1489: iconst_0
    1490: istore        12
    1492: aload         11
    1494: invokeinterface #145,  1          // InterfaceMethod java/util/Set.size:()I
    1499: bipush        6
    1501: if_icmpne     1532
    1504: aload         11
    1506: aload_3
    1507: bipush        6
    1509: aaload
    1510: invokestatic  #171                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
    1513: ifne          1532
    1516: aload         11
    1518: aload_3
    1519: bipush        9
    1521: aaload
    1522: invokestatic  #171                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
    1525: ifne          1532
    1528: iconst_1
    1529: goto          1533
    1532: iconst_0
    1533: ifeq          1463
    1536: iload         8
    1538: ifeq          1551
    1541: new           #147                // class java/lang/IllegalArgumentException
    1544: dup
    1545: ldc           #149                // String Collection contains more than one matching element.
    1547: invokespecial #152                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
    1550: athrow
    1551: aload         10
    1553: astore        7
    1555: iconst_1
    1556: istore        8
    1558: goto          1463
    1561: iload         8
    1563: ifne          1576
    1566: new           #154                // class java/util/NoSuchElementException
    1569: dup
    1570: ldc           #156                // String Collection contains no element matching the predicate.
    1572: invokespecial #157                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
    1575: athrow
    1576: aload         7
    1578: astore        20
    1580: aload         18
    1582: iload         19
    1584: aload         20
    1586: aastore
    1587: aload_3
    1588: astore        6
    1590: iconst_0
    1591: istore        7
    1593: aload         6
    1595: astore        8
    1597: new           #128                // class java/util/ArrayList
    1600: dup
    1601: aload         6
    1603: arraylength
    1604: invokespecial #135                // Method java/util/ArrayList."<init>":(I)V
    1607: checkcast     #51                 // class java/util/Collection
    1610: astore        9
    1612: iconst_0
    1613: istore        10
    1615: iconst_0
    1616: istore        11
    1618: iconst_0
    1619: istore        12
    1621: aload         8
    1623: arraylength
    1624: istore        13
    1626: iload         12
    1628: iload         13
    1630: if_icmpge     1683
    1633: aload         8
    1635: iload         12
    1637: aaload
    1638: astore        14
    1640: aload         9
    1642: iload         11
    1644: iinc          11, 1
    1647: aload         14
    1649: astore        15
    1651: istore        16
    1653: astore        18
    1655: iconst_0
    1656: istore        17
    1658: aload         15
    1660: iload         16
    1662: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1665: invokestatic  #103                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
    1668: aload         18
    1670: swap
    1671: invokeinterface #142,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1676: pop
    1677: iinc          12, 1
    1680: goto          1626
    1683: aload         9
    1685: checkcast     #43                 // class java/util/List
    1688: nop
    1689: checkcast     #15                 // class java/lang/Iterable
    1692: invokestatic  #177                // Method kotlin/collections/MapsKt.toMap:(Ljava/lang/Iterable;)Ljava/util/Map;
    1695: astore        5
    1697: aload_2
    1698: checkcast     #15                 // class java/lang/Iterable
    1701: astore        6
    1703: iconst_0
    1704: istore        7
    1706: iconst_0
    1707: istore        8
    1709: iload         7
    1711: istore        9
    1713: aload         6
    1715: invokeinterface #19,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1720: astore        10
    1722: aload         10
    1724: invokeinterface #25,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1729: ifeq          1791
    1732: aload         10
    1734: invokeinterface #29,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1739: astore        11
    1741: iload         9
    1743: aload         11
    1745: checkcast     #31                 // class java/lang/String
    1748: astore        12
    1750: istore        13
    1752: iconst_0
    1753: istore        14
    1755: bipush        10
    1757: iload         13
    1759: imul
    1760: aload         5
    1762: aload         12
    1764: checkcast     #33                 // class java/lang/CharSequence
    1767: invokestatic  #139                // Method kotlin/text/StringsKt.toSet:(Ljava/lang/CharSequence;)Ljava/util/Set;
    1770: invokeinterface #182,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
    1775: dup
    1776: invokestatic  #186                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
    1779: checkcast     #188                // class java/lang/Number
    1782: invokevirtual #191                // Method java/lang/Number.intValue:()I
    1785: iadd
    1786: istore        9
    1788: goto          1722
    1791: iload         9
    1793: ireturn

  public static final void main(java.lang.String[]);
    Code:
       0: aload_0
       1: ldc           #245                // String args
       3: invokestatic  #249                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: ldc           #251                // String input8.txt
       8: iconst_0
       9: anewarray     #31                 // class java/lang/String
      12: invokestatic  #257                // InterfaceMethod java/nio/file/Path.of:(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
      15: getstatic     #263                // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      18: invokestatic  #269                // Method java/nio/file/Files.readAllLines:(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/util/List;
      21: astore_1
      22: getstatic     #114                // Field INSTANCE:Lorg/aoc2021/Day8;
      25: aload_1
      26: invokestatic  #186                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      29: aload_1
      30: invokespecial #271                // Method solvePart1:(Ljava/util/List;)I
      33: istore_2
      34: getstatic     #277                // Field java/lang/System.out:Ljava/io/PrintStream;
      37: iload_2
      38: invokevirtual #282                // Method java/io/PrintStream.println:(I)V
      41: getstatic     #114                // Field INSTANCE:Lorg/aoc2021/Day8;
      44: aload_1
      45: invokespecial #284                // Method solvePart2:(Ljava/util/List;)I
      48: istore_3
      49: getstatic     #277                // Field java/lang/System.out:Ljava/io/PrintStream;
      52: iload_3
      53: invokevirtual #282                // Method java/io/PrintStream.println:(I)V
      56: return

  static {};
    Code:
       0: new           #2                  // class org/aoc2021/Day8
       3: dup
       4: invokespecial #289                // Method "<init>":()V
       7: putstatic     #114                // Field INSTANCE:Lorg/aoc2021/Day8;
      10: return
}


package org.aoc2021

import java.nio.file.Files
import java.nio.file.Path

object Day25 {
    private fun solve(lines: List<String>): Int {
        var grid = parseInput(lines)

        var turns = 0
        while (true) {
            turns++
            val prevGrid = grid
            grid = simulateTurn(grid)
            if (prevGrid == grid) {
                return turns
            }
        }
    }

    private fun simulateTurn(grid: List<List<Char>>): List<List<Char>> {
        return moveDown(moveRight(grid))
    }

    private fun moveRight(grid: List<List<Char>>): List<List<Char>> {
        val newGrid = Array(grid.size) { Array(grid[0].size) { 'X' } }
        for (i in grid.indices) {
            for (j in grid[0].indices) {
                if (grid[i][j] == '>') {
                    val nj = (j + 1) % grid[0].size
                    if (grid[i][nj] == '.') {
                        newGrid[i][j] = '.'
                        newGrid[i][nj] = '>'
                    } else if (newGrid[i][j] == 'X') {
                        newGrid[i][j] = '>'
                    }
                } else if (newGrid[i][j] == 'X') {
                    newGrid[i][j] = grid[i][j]
                }
            }
        }
        return newGrid.map(Array<Char>::toList)
    }

    private fun moveDown(grid: List<List<Char>>): List<List<Char>> {
        val newGrid = Array(grid.size) { Array(grid[0].size) { 'X' } }
        for (i in grid.indices) {
            for (j in grid[0].indices) {
                if (grid[i][j] == 'v') {
                    val ni = (i + 1) % grid.size
                    if (grid[ni][j] == '.') {
                        newGrid[i][j] = '.'
                        newGrid[ni][j] = 'v'
                    } else if (newGrid[i][j] == 'X') {
                        newGrid[i][j] = 'v'
                    }
                } else if (newGrid[i][j] == 'X') {
                    newGrid[i][j] = grid[i][j]
                }
            }
        }
        return newGrid.map(Array<Char>::toList)
    }

    private fun parseInput(lines: List<String>): List<List<Char>> {
        return lines.map { line -> line.toCharArray().toList() }
    }

    @JvmStatic
    fun main(args: Array<String>) {
        val lines = Files.readAllLines(Path.of("input25.txt"), Charsets.UTF_8)
        val solution = solve(lines)
        println(solution)
    }
}

Compiled from "Day25.kt"
public final class org.aoc2021.Day25 {
  public static final org.aoc2021.Day25 INSTANCE;

  private org.aoc2021.Day25();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  private final int solve(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: aload_1
       2: invokespecial #17                 // Method parseInput:(Ljava/util/List;)Ljava/util/List;
       5: astore_2
       6: iconst_0
       7: istore_3
       8: nop
       9: iinc          3, 1
      12: aload_2
      13: astore        4
      15: aload_0
      16: aload_2
      17: invokespecial #20                 // Method simulateTurn:(Ljava/util/List;)Ljava/util/List;
      20: astore_2
      21: aload         4
      23: aload_2
      24: invokestatic  #26                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      27: ifeq          8
      30: iload_3
      31: ireturn

  private final java.util.List<java.util.List<java.lang.Character>> simulateTurn(java.util.List<? extends java.util.List<java.lang.Character>>);
    Code:
       0: aload_0
       1: aload_0
       2: aload_1
       3: invokespecial #38                 // Method moveRight:(Ljava/util/List;)Ljava/util/List;
       6: invokespecial #41                 // Method moveDown:(Ljava/util/List;)Ljava/util/List;
       9: areturn

  private final java.util.List<java.util.List<java.lang.Character>> moveRight(java.util.List<? extends java.util.List<java.lang.Character>>);
    Code:
       0: iconst_0
       1: istore_3
       2: aload_1
       3: invokeinterface #45,  1           // InterfaceMethod java/util/List.size:()I
       8: istore        4
      10: iload         4
      12: anewarray     #47                 // class "[Ljava/lang/Character;"
      15: astore        5
      17: iload_3
      18: iload         4
      20: if_icmpge     101
      23: iload_3
      24: istore        6
      26: aload         5
      28: iload         6
      30: iconst_0
      31: istore        7
      33: aload_1
      34: iconst_0
      35: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      40: checkcast     #34                 // class java/util/List
      43: invokeinterface #45,  1           // InterfaceMethod java/util/List.size:()I
      48: istore        8
      50: iload         8
      52: anewarray     #53                 // class java/lang/Character
      55: astore        9
      57: istore        14
      59: astore        13
      61: iload         7
      63: iload         8
      65: if_icmpge     88
      68: iload         7
      70: istore        10
      72: aload         9
      74: iload         10
      76: bipush        88
      78: invokestatic  #57                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
      81: aastore
      82: iinc          7, 1
      85: goto          61
      88: aload         13
      90: iload         14
      92: aload         9
      94: aastore
      95: iinc          3, 1
      98: goto          17
     101: aload         5
     103: astore_2
     104: iconst_0
     105: istore_3
     106: aload_1
     107: checkcast     #59                 // class java/util/Collection
     110: invokeinterface #60,  1           // InterfaceMethod java/util/Collection.size:()I
     115: istore        4
     117: iload_3
     118: iload         4
     120: if_icmpge     330
     123: iconst_0
     124: istore        5
     126: aload_1
     127: iconst_0
     128: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     133: checkcast     #59                 // class java/util/Collection
     136: invokeinterface #60,  1           // InterfaceMethod java/util/Collection.size:()I
     141: istore        6
     143: iload         5
     145: iload         6
     147: if_icmpge     324
     150: aload_1
     151: iload_3
     152: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     157: checkcast     #34                 // class java/util/List
     160: iload         5
     162: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     167: checkcast     #53                 // class java/lang/Character
     170: invokevirtual #64                 // Method java/lang/Character.charValue:()C
     173: bipush        62
     175: if_icmpne     281
     178: iload         5
     180: iconst_1
     181: iadd
     182: aload_1
     183: iconst_0
     184: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     189: checkcast     #34                 // class java/util/List
     192: invokeinterface #45,  1           // InterfaceMethod java/util/List.size:()I
     197: irem
     198: istore        7
     200: aload_1
     201: iload_3
     202: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     207: checkcast     #34                 // class java/util/List
     210: iload         7
     212: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     217: checkcast     #53                 // class java/lang/Character
     220: invokevirtual #64                 // Method java/lang/Character.charValue:()C
     223: bipush        46
     225: if_icmpne     253
     228: aload_2
     229: iload_3
     230: aaload
     231: iload         5
     233: bipush        46
     235: invokestatic  #57                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     238: aastore
     239: aload_2
     240: iload_3
     241: aaload
     242: iload         7
     244: bipush        62
     246: invokestatic  #57                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     249: aastore
     250: goto          318
     253: aload_2
     254: iload_3
     255: aaload
     256: iload         5
     258: aaload
     259: invokevirtual #64                 // Method java/lang/Character.charValue:()C
     262: bipush        88
     264: if_icmpne     318
     267: aload_2
     268: iload_3
     269: aaload
     270: iload         5
     272: bipush        62
     274: invokestatic  #57                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     277: aastore
     278: goto          318
     281: aload_2
     282: iload_3
     283: aaload
     284: iload         5
     286: aaload
     287: invokevirtual #64                 // Method java/lang/Character.charValue:()C
     290: bipush        88
     292: if_icmpne     318
     295: aload_2
     296: iload_3
     297: aaload
     298: iload         5
     300: aload_1
     301: iload_3
     302: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     307: checkcast     #34                 // class java/util/List
     310: iload         5
     312: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     317: aastore
     318: iinc          5, 1
     321: goto          143
     324: iinc          3, 1
     327: goto          117
     330: aload_2
     331: checkcast     #66                 // class "[Ljava/lang/Object;"
     334: astore_3
     335: iconst_0
     336: istore        4
     338: aload_3
     339: astore        5
     341: new           #68                 // class java/util/ArrayList
     344: dup
     345: aload_3
     346: arraylength
     347: invokespecial #71                 // Method java/util/ArrayList."<init>":(I)V
     350: checkcast     #59                 // class java/util/Collection
     353: astore        6
     355: iconst_0
     356: istore        7
     358: iconst_0
     359: istore        8
     361: aload         5
     363: arraylength
     364: istore        9
     366: iload         8
     368: iload         9
     370: if_icmpge     414
     373: aload         5
     375: iload         8
     377: aaload
     378: astore        10
     380: aload         6
     382: aload         10
     384: checkcast     #47                 // class "[Ljava/lang/Character;"
     387: astore        11
     389: astore        13
     391: iconst_0
     392: istore        12
     394: aload         11
     396: invokestatic  #77                 // Method kotlin/collections/ArraysKt.toList:([Ljava/lang/Object;)Ljava/util/List;
     399: aload         13
     401: swap
     402: invokeinterface #81,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     407: pop
     408: iinc          8, 1
     411: goto          366
     414: aload         6
     416: checkcast     #34                 // class java/util/List
     419: nop
     420: areturn

  private final java.util.List<java.util.List<java.lang.Character>> moveDown(java.util.List<? extends java.util.List<java.lang.Character>>);
    Code:
       0: iconst_0
       1: istore_3
       2: aload_1
       3: invokeinterface #45,  1           // InterfaceMethod java/util/List.size:()I
       8: istore        4
      10: iload         4
      12: anewarray     #47                 // class "[Ljava/lang/Character;"
      15: astore        5
      17: iload_3
      18: iload         4
      20: if_icmpge     101
      23: iload_3
      24: istore        6
      26: aload         5
      28: iload         6
      30: iconst_0
      31: istore        7
      33: aload_1
      34: iconst_0
      35: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      40: checkcast     #34                 // class java/util/List
      43: invokeinterface #45,  1           // InterfaceMethod java/util/List.size:()I
      48: istore        8
      50: iload         8
      52: anewarray     #53                 // class java/lang/Character
      55: astore        9
      57: istore        14
      59: astore        13
      61: iload         7
      63: iload         8
      65: if_icmpge     88
      68: iload         7
      70: istore        10
      72: aload         9
      74: iload         10
      76: bipush        88
      78: invokestatic  #57                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
      81: aastore
      82: iinc          7, 1
      85: goto          61
      88: aload         13
      90: iload         14
      92: aload         9
      94: aastore
      95: iinc          3, 1
      98: goto          17
     101: aload         5
     103: astore_2
     104: iconst_0
     105: istore_3
     106: aload_1
     107: checkcast     #59                 // class java/util/Collection
     110: invokeinterface #60,  1           // InterfaceMethod java/util/Collection.size:()I
     115: istore        4
     117: iload_3
     118: iload         4
     120: if_icmpge     322
     123: iconst_0
     124: istore        5
     126: aload_1
     127: iconst_0
     128: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     133: checkcast     #59                 // class java/util/Collection
     136: invokeinterface #60,  1           // InterfaceMethod java/util/Collection.size:()I
     141: istore        6
     143: iload         5
     145: iload         6
     147: if_icmpge     316
     150: aload_1
     151: iload_3
     152: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     157: checkcast     #34                 // class java/util/List
     160: iload         5
     162: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     167: checkcast     #53                 // class java/lang/Character
     170: invokevirtual #64                 // Method java/lang/Character.charValue:()C
     173: bipush        118
     175: if_icmpne     273
     178: iload_3
     179: iconst_1
     180: iadd
     181: aload_1
     182: invokeinterface #45,  1           // InterfaceMethod java/util/List.size:()I
     187: irem
     188: istore        7
     190: aload_1
     191: iload         7
     193: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     198: checkcast     #34                 // class java/util/List
     201: iload         5
     203: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     208: checkcast     #53                 // class java/lang/Character
     211: invokevirtual #64                 // Method java/lang/Character.charValue:()C
     214: bipush        46
     216: if_icmpne     245
     219: aload_2
     220: iload_3
     221: aaload
     222: iload         5
     224: bipush        46
     226: invokestatic  #57                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     229: aastore
     230: aload_2
     231: iload         7
     233: aaload
     234: iload         5
     236: bipush        118
     238: invokestatic  #57                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     241: aastore
     242: goto          310
     245: aload_2
     246: iload_3
     247: aaload
     248: iload         5
     250: aaload
     251: invokevirtual #64                 // Method java/lang/Character.charValue:()C
     254: bipush        88
     256: if_icmpne     310
     259: aload_2
     260: iload_3
     261: aaload
     262: iload         5
     264: bipush        118
     266: invokestatic  #57                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     269: aastore
     270: goto          310
     273: aload_2
     274: iload_3
     275: aaload
     276: iload         5
     278: aaload
     279: invokevirtual #64                 // Method java/lang/Character.charValue:()C
     282: bipush        88
     284: if_icmpne     310
     287: aload_2
     288: iload_3
     289: aaload
     290: iload         5
     292: aload_1
     293: iload_3
     294: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     299: checkcast     #34                 // class java/util/List
     302: iload         5
     304: invokeinterface #51,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     309: aastore
     310: iinc          5, 1
     313: goto          143
     316: iinc          3, 1
     319: goto          117
     322: aload_2
     323: checkcast     #66                 // class "[Ljava/lang/Object;"
     326: astore_3
     327: iconst_0
     328: istore        4
     330: aload_3
     331: astore        5
     333: new           #68                 // class java/util/ArrayList
     336: dup
     337: aload_3
     338: arraylength
     339: invokespecial #71                 // Method java/util/ArrayList."<init>":(I)V
     342: checkcast     #59                 // class java/util/Collection
     345: astore        6
     347: iconst_0
     348: istore        7
     350: iconst_0
     351: istore        8
     353: aload         5
     355: arraylength
     356: istore        9
     358: iload         8
     360: iload         9
     362: if_icmpge     406
     365: aload         5
     367: iload         8
     369: aaload
     370: astore        10
     372: aload         6
     374: aload         10
     376: checkcast     #47                 // class "[Ljava/lang/Character;"
     379: astore        11
     381: astore        13
     383: iconst_0
     384: istore        12
     386: aload         11
     388: invokestatic  #77                 // Method kotlin/collections/ArraysKt.toList:([Ljava/lang/Object;)Ljava/util/List;
     391: aload         13
     393: swap
     394: invokeinterface #81,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     399: pop
     400: iinc          8, 1
     403: goto          358
     406: aload         6
     408: checkcast     #34                 // class java/util/List
     411: nop
     412: areturn

  private final java.util.List<java.util.List<java.lang.Character>> parseInput(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: checkcast     #102                // class java/lang/Iterable
       4: astore_2
       5: iconst_0
       6: istore_3
       7: aload_2
       8: astore        4
      10: new           #68                 // class java/util/ArrayList
      13: dup
      14: aload_2
      15: bipush        10
      17: invokestatic  #108                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      20: invokespecial #71                 // Method java/util/ArrayList."<init>":(I)V
      23: checkcast     #59                 // class java/util/Collection
      26: astore        5
      28: iconst_0
      29: istore        6
      31: aload         4
      33: invokeinterface #112,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      38: astore        7
      40: aload         7
      42: invokeinterface #118,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      47: ifeq          99
      50: aload         7
      52: invokeinterface #122,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      57: astore        8
      59: aload         5
      61: aload         8
      63: checkcast     #124                // class java/lang/String
      66: astore        9
      68: astore        11
      70: iconst_0
      71: istore        10
      73: aload         9
      75: invokevirtual #128                // Method java/lang/String.toCharArray:()[C
      78: dup
      79: ldc           #130                // String toCharArray(...)
      81: invokestatic  #134                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      84: invokestatic  #137                // Method kotlin/collections/ArraysKt.toList:([C)Ljava/util/List;
      87: aload         11
      89: swap
      90: invokeinterface #81,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
      95: pop
      96: goto          40
      99: aload         5
     101: checkcast     #34                 // class java/util/List
     104: nop
     105: areturn

  public static final void main(java.lang.String[]);
    Code:
       0: aload_0
       1: ldc           #147                // String args
       3: invokestatic  #150                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: ldc           #152                // String input25.txt
       8: iconst_0
       9: anewarray     #124                // class java/lang/String
      12: invokestatic  #158                // InterfaceMethod java/nio/file/Path.of:(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
      15: getstatic     #164                // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      18: invokestatic  #170                // Method java/nio/file/Files.readAllLines:(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/util/List;
      21: astore_1
      22: getstatic     #173                // Field INSTANCE:Lorg/aoc2021/Day25;
      25: aload_1
      26: invokestatic  #177                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      29: aload_1
      30: invokespecial #179                // Method solve:(Ljava/util/List;)I
      33: istore_2
      34: getstatic     #185                // Field java/lang/System.out:Ljava/io/PrintStream;
      37: iload_2
      38: invokevirtual #190                // Method java/io/PrintStream.println:(I)V
      41: return

  static {};
    Code:
       0: new           #2                  // class org/aoc2021/Day25
       3: dup
       4: invokespecial #194                // Method "<init>":()V
       7: putstatic     #173                // Field INSTANCE:Lorg/aoc2021/Day25;
      10: return
}