import java.io.File

fun main(args: Array<String>) {
    day3part2()
}

fun day3part1() {
    val countArray = IntArray(12) { 0 }
    val input = File("day3input.txt").bufferedReader().readLines()
    input.map { it.mapIndexed { index, value ->
        if (value == '1') {
            countArray[index] = (countArray[index] + 1)
        }
        else {
            countArray[index] = (countArray[index] - 1)
        }
        }
    }
    countArray.forEach { print(if (it > 0) "1" else "0") }
}

fun day3part2() {
    val input = File("day3input.txt")
        .bufferedReader()
        .readLines()
        .map { line ->
            line.split("")
                .filter {
                    it.isNotEmpty()
                }
                .map { it.toInt() }
        }
    val majority = getMajority(input, 0)
    val highset = input.filter { it[0] == majority }
    val lowset = input.filter { it[0] != majority }
    val oxygenRating = higherReduction(highset)
    val CO2Rating = smallerReduction(lowset)
    val oxygenRatingDecimal = Integer.parseInt(oxygenRating.joinToString(separator = "") { it.toString() }, 2)
    val CO2RatingDecimal = Integer.parseInt(CO2Rating.joinToString(separator = "") { it.toString() }, 2)
    println(oxygenRatingDecimal)
    println(CO2RatingDecimal)
    println("${oxygenRatingDecimal*CO2RatingDecimal}")
}

private fun getMajority(input: List<List<Int>>, index: Int): Int {
    return input.map { it[index] }.let {
        if (it.sum()*2 == it.size) {
            1
        }
        else if (it.sum() == 2 && it.size == 3) {
            1
        }
        else if (it.sum() > it.size / 2) 1 else 0
    }
}

fun higherReduction(set: List<List<Int>>): List<Int> {
    var reductionSet = set
    var index = 1
    while (reductionSet.size > 1) {
        val majority = getMajority(reductionSet, index)
        reductionSet = reductionSet.filter { it[index] == majority }
        index += 1
    }
    return reductionSet.first()
}

fun smallerReduction(set: List<List<Int>>): List<Int> {
    var reductionSet = set
    var index = 1
    while (reductionSet.size > 1) {
        val majority = getMajority(reductionSet, index)
        reductionSet = reductionSet.filter { it[index] != majority }
        index += 1
    }
    return reductionSet.first()
}

Compiled from "day3.kt"
public final class Day3Kt {
  public static final void main(java.lang.String[]);
    Code:
       0: aload_0
       1: ldc           #9                  // String args
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: invokestatic  #19                 // Method day3part2:()V
       9: return

  public static final void day3part1();
    Code:
       0: iconst_0
       1: istore_1
       2: bipush        12
       4: newarray       int
       6: astore_2
       7: iload_1
       8: bipush        12
      10: if_icmpge     25
      13: iload_1
      14: istore_3
      15: aload_2
      16: iload_3
      17: iconst_0
      18: iastore
      19: iinc          1, 1
      22: goto          7
      25: aload_2
      26: astore_0
      27: new           #23                 // class java/io/File
      30: dup
      31: ldc           #25                 // String day3input.txt
      33: invokespecial #29                 // Method java/io/File."<init>":(Ljava/lang/String;)V
      36: astore_2
      37: getstatic     #35                 // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      40: astore_3
      41: sipush        8192
      44: istore        4
      46: aload_2
      47: astore        5
      49: new           #37                 // class java/io/InputStreamReader
      52: dup
      53: new           #39                 // class java/io/FileInputStream
      56: dup
      57: aload         5
      59: invokespecial #42                 // Method java/io/FileInputStream."<init>":(Ljava/io/File;)V
      62: checkcast     #44                 // class java/io/InputStream
      65: aload_3
      66: invokespecial #47                 // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
      69: checkcast     #49                 // class java/io/Reader
      72: astore        5
      74: aload         5
      76: instanceof    #51                 // class java/io/BufferedReader
      79: ifeq          90
      82: aload         5
      84: checkcast     #51                 // class java/io/BufferedReader
      87: goto          101
      90: new           #51                 // class java/io/BufferedReader
      93: dup
      94: aload         5
      96: iload         4
      98: invokespecial #54                 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;I)V
     101: checkcast     #49                 // class java/io/Reader
     104: invokestatic  #60                 // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
     107: astore_1
     108: aload_1
     109: checkcast     #62                 // class java/lang/Iterable
     112: astore_2
     113: iconst_0
     114: istore_3
     115: aload_2
     116: astore        4
     118: new           #64                 // class java/util/ArrayList
     121: dup
     122: aload_2
     123: bipush        10
     125: invokestatic  #70                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     128: invokespecial #73                 // Method java/util/ArrayList."<init>":(I)V
     131: checkcast     #75                 // class java/util/Collection
     134: astore        5
     136: iconst_0
     137: istore        6
     139: aload         4
     141: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     146: astore        7
     148: aload         7
     150: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     155: ifeq          331
     158: aload         7
     160: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     165: astore        8
     167: aload         5
     169: aload         8
     171: checkcast     #91                 // class java/lang/String
     174: astore        9
     176: astore        23
     178: iconst_0
     179: istore        10
     181: aload         9
     183: checkcast     #93                 // class java/lang/CharSequence
     186: astore        11
     188: iconst_0
     189: istore        12
     191: aload         11
     193: astore        13
     195: new           #64                 // class java/util/ArrayList
     198: dup
     199: aload         11
     201: invokeinterface #97,  1           // InterfaceMethod java/lang/CharSequence.length:()I
     206: invokespecial #73                 // Method java/util/ArrayList."<init>":(I)V
     209: checkcast     #75                 // class java/util/Collection
     212: astore        14
     214: iconst_0
     215: istore        15
     217: iconst_0
     218: istore        16
     220: iconst_0
     221: istore        17
     223: iload         17
     225: aload         13
     227: invokeinterface #97,  1           // InterfaceMethod java/lang/CharSequence.length:()I
     232: if_icmpge     312
     235: aload         13
     237: iload         17
     239: invokeinterface #101,  2          // InterfaceMethod java/lang/CharSequence.charAt:(I)C
     244: istore        18
     246: aload         14
     248: iload         16
     250: iinc          16, 1
     253: iload         18
     255: istore        19
     257: istore        20
     259: astore        21
     261: iconst_0
     262: istore        22
     264: iload         19
     266: bipush        49
     268: if_icmpne     284
     271: aload_0
     272: iload         20
     274: aload_0
     275: iload         20
     277: iaload
     278: iconst_1
     279: iadd
     280: iastore
     281: goto          294
     284: aload_0
     285: iload         20
     287: aload_0
     288: iload         20
     290: iaload
     291: iconst_1
     292: isub
     293: iastore
     294: nop
     295: aload         21
     297: getstatic     #107                // Field kotlin/Unit.INSTANCE:Lkotlin/Unit;
     300: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     305: pop
     306: iinc          17, 1
     309: goto          223
     312: aload         14
     314: checkcast     #113                // class java/util/List
     317: nop
     318: nop
     319: aload         23
     321: swap
     322: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     327: pop
     328: goto          148
     331: aload         5
     333: checkcast     #113                // class java/util/List
     336: nop
     337: pop
     338: aload_0
     339: astore_2
     340: iconst_0
     341: istore_3
     342: iconst_0
     343: istore        4
     345: aload_2
     346: arraylength
     347: istore        5
     349: iload         4
     351: iload         5
     353: if_icmpge     396
     356: aload_2
     357: iload         4
     359: iaload
     360: istore        6
     362: iload         6
     364: istore        7
     366: iconst_0
     367: istore        8
     369: iload         7
     371: ifle          379
     374: ldc           #115                // String 1
     376: goto          381
     379: ldc           #117                // String 0
     381: getstatic     #123                // Field java/lang/System.out:Ljava/io/PrintStream;
     384: swap
     385: invokevirtual #129                // Method java/io/PrintStream.print:(Ljava/lang/Object;)V
     388: nop
     389: nop
     390: iinc          4, 1
     393: goto          349
     396: nop
     397: return

  public static final void day3part2();
    Code:
       0: new           #23                 // class java/io/File
       3: dup
       4: ldc           #25                 // String day3input.txt
       6: invokespecial #29                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: astore_1
      10: getstatic     #35                 // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      13: astore_2
      14: sipush        8192
      17: istore_3
      18: aload_1
      19: astore        4
      21: new           #37                 // class java/io/InputStreamReader
      24: dup
      25: new           #39                 // class java/io/FileInputStream
      28: dup
      29: aload         4
      31: invokespecial #42                 // Method java/io/FileInputStream."<init>":(Ljava/io/File;)V
      34: checkcast     #44                 // class java/io/InputStream
      37: aload_2
      38: invokespecial #47                 // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
      41: checkcast     #49                 // class java/io/Reader
      44: astore        4
      46: aload         4
      48: instanceof    #51                 // class java/io/BufferedReader
      51: ifeq          62
      54: aload         4
      56: checkcast     #51                 // class java/io/BufferedReader
      59: goto          72
      62: new           #51                 // class java/io/BufferedReader
      65: dup
      66: aload         4
      68: iload_3
      69: invokespecial #54                 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;I)V
      72: checkcast     #49                 // class java/io/Reader
      75: invokestatic  #60                 // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
      78: checkcast     #62                 // class java/lang/Iterable
      81: astore_1
      82: nop
      83: iconst_0
      84: istore_2
      85: aload_1
      86: astore_3
      87: new           #64                 // class java/util/ArrayList
      90: dup
      91: aload_1
      92: bipush        10
      94: invokestatic  #70                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      97: invokespecial #73                 // Method java/util/ArrayList."<init>":(I)V
     100: checkcast     #75                 // class java/util/Collection
     103: astore        4
     105: iconst_0
     106: istore        5
     108: aload_3
     109: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     114: astore        6
     116: aload         6
     118: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     123: ifeq          400
     126: aload         6
     128: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     133: astore        7
     135: aload         4
     137: aload         7
     139: checkcast     #91                 // class java/lang/String
     142: astore        8
     144: astore        20
     146: iconst_0
     147: istore        9
     149: aload         8
     151: checkcast     #93                 // class java/lang/CharSequence
     154: iconst_1
     155: anewarray     #91                 // class java/lang/String
     158: astore        10
     160: aload         10
     162: iconst_0
     163: ldc           #165                // String
     165: aastore
     166: aload         10
     168: iconst_0
     169: iconst_0
     170: bipush        6
     172: aconst_null
     173: invokestatic  #171                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     176: checkcast     #62                 // class java/lang/Iterable
     179: astore        10
     181: nop
     182: iconst_0
     183: istore        11
     185: aload         10
     187: astore        12
     189: new           #64                 // class java/util/ArrayList
     192: dup
     193: invokespecial #173                // Method java/util/ArrayList."<init>":()V
     196: checkcast     #75                 // class java/util/Collection
     199: astore        13
     201: iconst_0
     202: istore        14
     204: aload         12
     206: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     211: astore        15
     213: aload         15
     215: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     220: ifeq          277
     223: aload         15
     225: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     230: astore        16
     232: aload         16
     234: checkcast     #91                 // class java/lang/String
     237: astore        17
     239: iconst_0
     240: istore        18
     242: aload         17
     244: checkcast     #93                 // class java/lang/CharSequence
     247: invokeinterface #97,  1           // InterfaceMethod java/lang/CharSequence.length:()I
     252: ifle          259
     255: iconst_1
     256: goto          260
     259: iconst_0
     260: nop
     261: ifeq          213
     264: aload         13
     266: aload         16
     268: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     273: pop
     274: goto          213
     277: aload         13
     279: checkcast     #113                // class java/util/List
     282: nop
     283: checkcast     #62                 // class java/lang/Iterable
     286: astore        10
     288: nop
     289: iconst_0
     290: istore        11
     292: aload         10
     294: astore        12
     296: new           #64                 // class java/util/ArrayList
     299: dup
     300: aload         10
     302: bipush        10
     304: invokestatic  #70                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     307: invokespecial #73                 // Method java/util/ArrayList."<init>":(I)V
     310: checkcast     #75                 // class java/util/Collection
     313: astore        13
     315: iconst_0
     316: istore        14
     318: aload         12
     320: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     325: astore        15
     327: aload         15
     329: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     334: ifeq          381
     337: aload         15
     339: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     344: astore        16
     346: aload         13
     348: aload         16
     350: checkcast     #91                 // class java/lang/String
     353: astore        17
     355: astore        19
     357: iconst_0
     358: istore        18
     360: aload         17
     362: invokestatic  #179                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     365: nop
     366: invokestatic  #183                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     369: aload         19
     371: swap
     372: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     377: pop
     378: goto          327
     381: aload         13
     383: checkcast     #113                // class java/util/List
     386: nop
     387: nop
     388: aload         20
     390: swap
     391: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     396: pop
     397: goto          116
     400: aload         4
     402: checkcast     #113                // class java/util/List
     405: nop
     406: astore_0
     407: aload_0
     408: iconst_0
     409: invokestatic  #187                // Method getMajority:(Ljava/util/List;I)I
     412: istore_1
     413: aload_0
     414: checkcast     #62                 // class java/lang/Iterable
     417: astore_3
     418: iconst_0
     419: istore        4
     421: aload_3
     422: astore        5
     424: new           #64                 // class java/util/ArrayList
     427: dup
     428: invokespecial #173                // Method java/util/ArrayList."<init>":()V
     431: checkcast     #75                 // class java/util/Collection
     434: astore        6
     436: iconst_0
     437: istore        7
     439: aload         5
     441: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     446: astore        8
     448: aload         8
     450: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     455: ifeq          516
     458: aload         8
     460: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     465: astore        9
     467: aload         9
     469: checkcast     #113                // class java/util/List
     472: astore        10
     474: iconst_0
     475: istore        11
     477: aload         10
     479: iconst_0
     480: invokeinterface #191,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     485: checkcast     #193                // class java/lang/Number
     488: invokevirtual #196                // Method java/lang/Number.intValue:()I
     491: iload_1
     492: if_icmpne     499
     495: iconst_1
     496: goto          500
     499: iconst_0
     500: ifeq          448
     503: aload         6
     505: aload         9
     507: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     512: pop
     513: goto          448
     516: aload         6
     518: checkcast     #113                // class java/util/List
     521: nop
     522: astore_2
     523: aload_0
     524: checkcast     #62                 // class java/lang/Iterable
     527: astore        4
     529: iconst_0
     530: istore        5
     532: aload         4
     534: astore        6
     536: new           #64                 // class java/util/ArrayList
     539: dup
     540: invokespecial #173                // Method java/util/ArrayList."<init>":()V
     543: checkcast     #75                 // class java/util/Collection
     546: astore        7
     548: iconst_0
     549: istore        8
     551: aload         6
     553: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     558: astore        9
     560: aload         9
     562: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     567: ifeq          628
     570: aload         9
     572: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     577: astore        10
     579: aload         10
     581: checkcast     #113                // class java/util/List
     584: astore        11
     586: iconst_0
     587: istore        12
     589: aload         11
     591: iconst_0
     592: invokeinterface #191,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     597: checkcast     #193                // class java/lang/Number
     600: invokevirtual #196                // Method java/lang/Number.intValue:()I
     603: iload_1
     604: if_icmpeq     611
     607: iconst_1
     608: goto          612
     611: iconst_0
     612: ifeq          560
     615: aload         7
     617: aload         10
     619: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     624: pop
     625: goto          560
     628: aload         7
     630: checkcast     #113                // class java/util/List
     633: nop
     634: astore_3
     635: aload_2
     636: invokestatic  #200                // Method higherReduction:(Ljava/util/List;)Ljava/util/List;
     639: astore        4
     641: aload_3
     642: invokestatic  #203                // Method smallerReduction:(Ljava/util/List;)Ljava/util/List;
     645: astore        5
     647: aload         4
     649: checkcast     #62                 // class java/lang/Iterable
     652: ldc           #165                // String
     654: checkcast     #93                 // class java/lang/CharSequence
     657: aconst_null
     658: aconst_null
     659: iconst_0
     660: aconst_null
     661: invokedynamic #223,  0            // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
     666: bipush        30
     668: aconst_null
     669: invokestatic  #227                // Method kotlin/collections/CollectionsKt.joinToString$default:(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
     672: iconst_2
     673: invokestatic  #230                // Method java/lang/Integer.parseInt:(Ljava/lang/String;I)I
     676: istore        6
     678: aload         5
     680: checkcast     #62                 // class java/lang/Iterable
     683: ldc           #165                // String
     685: checkcast     #93                 // class java/lang/CharSequence
     688: aconst_null
     689: aconst_null
     690: iconst_0
     691: aconst_null
     692: invokedynamic #235,  0            // InvokeDynamic #1:invoke:()Lkotlin/jvm/functions/Function1;
     697: bipush        30
     699: aconst_null
     700: invokestatic  #227                // Method kotlin/collections/CollectionsKt.joinToString$default:(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
     703: iconst_2
     704: invokestatic  #230                // Method java/lang/Integer.parseInt:(Ljava/lang/String;I)I
     707: istore        7
     709: getstatic     #123                // Field java/lang/System.out:Ljava/io/PrintStream;
     712: iload         6
     714: invokevirtual #238                // Method java/io/PrintStream.println:(I)V
     717: getstatic     #123                // Field java/lang/System.out:Ljava/io/PrintStream;
     720: iload         7
     722: invokevirtual #238                // Method java/io/PrintStream.println:(I)V
     725: iload         6
     727: iload         7
     729: imul
     730: invokestatic  #241                // Method java/lang/String.valueOf:(I)Ljava/lang/String;
     733: getstatic     #123                // Field java/lang/System.out:Ljava/io/PrintStream;
     736: swap
     737: invokevirtual #243                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     740: return

  private static final int getMajority(java.util.List<? extends java.util.List<java.lang.Integer>>, int);
    Code:
       0: aload_0
       1: checkcast     #62                 // class java/lang/Iterable
       4: astore_2
       5: iconst_0
       6: istore_3
       7: aload_2
       8: astore        4
      10: new           #64                 // class java/util/ArrayList
      13: dup
      14: aload_2
      15: bipush        10
      17: invokestatic  #70                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      20: invokespecial #73                 // Method java/util/ArrayList."<init>":(I)V
      23: checkcast     #75                 // class java/util/Collection
      26: astore        5
      28: iconst_0
      29: istore        6
      31: aload         4
      33: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      38: astore        7
      40: aload         7
      42: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      47: ifeq          102
      50: aload         7
      52: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      57: astore        8
      59: aload         5
      61: aload         8
      63: checkcast     #113                // class java/util/List
      66: astore        9
      68: astore        11
      70: iconst_0
      71: istore        10
      73: aload         9
      75: iload_1
      76: invokeinterface #191,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      81: checkcast     #193                // class java/lang/Number
      84: invokevirtual #196                // Method java/lang/Number.intValue:()I
      87: invokestatic  #183                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      90: aload         11
      92: swap
      93: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
      98: pop
      99: goto          40
     102: aload         5
     104: checkcast     #113                // class java/util/List
     107: nop
     108: astore_3
     109: iconst_0
     110: istore        4
     112: aload_3
     113: checkcast     #62                 // class java/lang/Iterable
     116: invokestatic  #266                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
     119: iconst_2
     120: imul
     121: aload_3
     122: invokeinterface #269,  1          // InterfaceMethod java/util/List.size:()I
     127: if_icmpne     134
     130: iconst_1
     131: goto          182
     134: aload_3
     135: checkcast     #62                 // class java/lang/Iterable
     138: invokestatic  #266                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
     141: iconst_2
     142: if_icmpne     159
     145: aload_3
     146: invokeinterface #269,  1          // InterfaceMethod java/util/List.size:()I
     151: iconst_3
     152: if_icmpne     159
     155: iconst_1
     156: goto          182
     159: aload_3
     160: checkcast     #62                 // class java/lang/Iterable
     163: invokestatic  #266                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
     166: aload_3
     167: invokeinterface #269,  1          // InterfaceMethod java/util/List.size:()I
     172: iconst_2
     173: idiv
     174: if_icmple     181
     177: iconst_1
     178: goto          182
     181: iconst_0
     182: nop
     183: ireturn

  public static final java.util.List<java.lang.Integer> higherReduction(java.util.List<? extends java.util.List<java.lang.Integer>>);
    Code:
       0: aload_0
       1: ldc_w         #274                // String set
       4: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: astore_1
       9: iconst_0
      10: istore_2
      11: iconst_1
      12: istore_2
      13: aload_1
      14: invokeinterface #269,  1          // InterfaceMethod java/util/List.size:()I
      19: iconst_1
      20: if_icmple     148
      23: aload_1
      24: iload_2
      25: invokestatic  #187                // Method getMajority:(Ljava/util/List;I)I
      28: istore_3
      29: aload_1
      30: checkcast     #62                 // class java/lang/Iterable
      33: astore        4
      35: iconst_0
      36: istore        5
      38: aload         4
      40: astore        6
      42: new           #64                 // class java/util/ArrayList
      45: dup
      46: invokespecial #173                // Method java/util/ArrayList."<init>":()V
      49: checkcast     #75                 // class java/util/Collection
      52: astore        7
      54: iconst_0
      55: istore        8
      57: aload         6
      59: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      64: astore        9
      66: aload         9
      68: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      73: ifeq          134
      76: aload         9
      78: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      83: astore        10
      85: aload         10
      87: checkcast     #113                // class java/util/List
      90: astore        11
      92: iconst_0
      93: istore        12
      95: aload         11
      97: iload_2
      98: invokeinterface #191,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     103: checkcast     #193                // class java/lang/Number
     106: invokevirtual #196                // Method java/lang/Number.intValue:()I
     109: iload_3
     110: if_icmpne     117
     113: iconst_1
     114: goto          118
     117: iconst_0
     118: ifeq          66
     121: aload         7
     123: aload         10
     125: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     130: pop
     131: goto          66
     134: aload         7
     136: checkcast     #113                // class java/util/List
     139: nop
     140: astore_1
     141: iload_2
     142: iconst_1
     143: iadd
     144: istore_2
     145: goto          13
     148: aload_1
     149: invokestatic  #278                // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
     152: checkcast     #113                // class java/util/List
     155: areturn

  public static final java.util.List<java.lang.Integer> smallerReduction(java.util.List<? extends java.util.List<java.lang.Integer>>);
    Code:
       0: aload_0
       1: ldc_w         #274                // String set
       4: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: astore_1
       9: iconst_0
      10: istore_2
      11: iconst_1
      12: istore_2
      13: aload_1
      14: invokeinterface #269,  1          // InterfaceMethod java/util/List.size:()I
      19: iconst_1
      20: if_icmple     148
      23: aload_1
      24: iload_2
      25: invokestatic  #187                // Method getMajority:(Ljava/util/List;I)I
      28: istore_3
      29: aload_1
      30: checkcast     #62                 // class java/lang/Iterable
      33: astore        4
      35: iconst_0
      36: istore        5
      38: aload         4
      40: astore        6
      42: new           #64                 // class java/util/ArrayList
      45: dup
      46: invokespecial #173                // Method java/util/ArrayList."<init>":()V
      49: checkcast     #75                 // class java/util/Collection
      52: astore        7
      54: iconst_0
      55: istore        8
      57: aload         6
      59: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      64: astore        9
      66: aload         9
      68: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      73: ifeq          134
      76: aload         9
      78: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      83: astore        10
      85: aload         10
      87: checkcast     #113                // class java/util/List
      90: astore        11
      92: iconst_0
      93: istore        12
      95: aload         11
      97: iload_2
      98: invokeinterface #191,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     103: checkcast     #193                // class java/lang/Number
     106: invokevirtual #196                // Method java/lang/Number.intValue:()I
     109: iload_3
     110: if_icmpeq     117
     113: iconst_1
     114: goto          118
     117: iconst_0
     118: ifeq          66
     121: aload         7
     123: aload         10
     125: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     130: pop
     131: goto          66
     134: aload         7
     136: checkcast     #113                // class java/util/List
     139: nop
     140: astore_1
     141: iload_2
     142: iconst_1
     143: iadd
     144: istore_2
     145: goto          13
     148: aload_1
     149: invokestatic  #278                // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
     152: checkcast     #113                // class java/util/List
     155: areturn

  private static final java.lang.CharSequence day3part2$lambda$8(int);
    Code:
       0: iload_0
       1: invokestatic  #241                // Method java/lang/String.valueOf:(I)Ljava/lang/String;
       4: checkcast     #93                 // class java/lang/CharSequence
       7: areturn

  private static final java.lang.CharSequence day3part2$lambda$9(int);
    Code:
       0: iload_0
       1: invokestatic  #241                // Method java/lang/String.valueOf:(I)Ljava/lang/String;
       4: checkcast     #93                 // class java/lang/CharSequence
       7: areturn
}


import java.io.File

fun main(args: Array<String>) {
    day4()
}

fun day4() {
    val input = File("day4input.txt").bufferedReader()
    val drawings = input.readLine().split(",").map { it.toInt() }
    input.readLines()
        .asSequence()
        .windowed(6, step = 6)
        .map { board ->
            board.filter { it.isNotEmpty() }
        }
        .map { board ->
            board.map { row ->
                row.split(" ")
                    .filter { it.isNotEmpty() }
                    .map { it.toInt() }
                    .toMutableList()
            }
        }
        .map { board ->
            calculateScore(board, drawings)
        }
        //.minByOrNull for part 1
        //.maxByOrNull for part 2
        .maxByOrNull { it.first }!!.also { println(it) }
}

fun calculateScore(bingoBoard: List<MutableList<Int>>, drawing: List<Int>): Pair<Int, Int> {
    drawing.forEachIndexed { drawNumber, draw ->
        bingoBoard.mapIndexed { index, ints ->
            if (ints.contains(draw)) {
                index to ints.indexOf(draw)
            }
            else {
                null
            }
        }.filterNotNull().forEach { coordinate ->
            bingoBoard[coordinate.first][coordinate.second] = 0
            if (bingoBoard[coordinate.first].none { it != 0 }) {
                return drawNumber to bingoBoard.sumOf { it.sum() } * drawing[drawNumber]
            }
            else if (bingoBoard.map { row -> row[coordinate.second] }.none { it != 0 }) {
                return drawNumber to bingoBoard.sumOf { it.sum() } * drawing[drawNumber]
            }
        }
    }
    return 0 to 0
}

Compiled from "day4.kt"
public final class Day4Kt {
  public static final void main(java.lang.String[]);
    Code:
       0: aload_0
       1: ldc           #9                  // String args
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: invokestatic  #19                 // Method day4:()V
       9: return

  public static final void day4();
    Code:
       0: new           #22                 // class java/io/File
       3: dup
       4: ldc           #24                 // String day4input.txt
       6: invokespecial #28                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: astore_1
      10: getstatic     #34                 // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      13: astore_2
      14: sipush        8192
      17: istore_3
      18: aload_1
      19: astore        4
      21: new           #36                 // class java/io/InputStreamReader
      24: dup
      25: new           #38                 // class java/io/FileInputStream
      28: dup
      29: aload         4
      31: invokespecial #41                 // Method java/io/FileInputStream."<init>":(Ljava/io/File;)V
      34: checkcast     #43                 // class java/io/InputStream
      37: aload_2
      38: invokespecial #46                 // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
      41: checkcast     #48                 // class java/io/Reader
      44: astore        4
      46: aload         4
      48: instanceof    #50                 // class java/io/BufferedReader
      51: ifeq          62
      54: aload         4
      56: checkcast     #50                 // class java/io/BufferedReader
      59: goto          72
      62: new           #50                 // class java/io/BufferedReader
      65: dup
      66: aload         4
      68: iload_3
      69: invokespecial #53                 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;I)V
      72: astore_0
      73: aload_0
      74: invokevirtual #57                 // Method java/io/BufferedReader.readLine:()Ljava/lang/String;
      77: dup
      78: ldc           #59                 // String readLine(...)
      80: invokestatic  #62                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      83: checkcast     #64                 // class java/lang/CharSequence
      86: iconst_1
      87: anewarray     #66                 // class java/lang/String
      90: astore_2
      91: aload_2
      92: iconst_0
      93: ldc           #68                 // String ,
      95: aastore
      96: aload_2
      97: iconst_0
      98: iconst_0
      99: bipush        6
     101: aconst_null
     102: invokestatic  #74                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     105: checkcast     #76                 // class java/lang/Iterable
     108: astore_2
     109: iconst_0
     110: istore_3
     111: aload_2
     112: astore        4
     114: new           #78                 // class java/util/ArrayList
     117: dup
     118: aload_2
     119: bipush        10
     121: invokestatic  #84                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     124: invokespecial #87                 // Method java/util/ArrayList."<init>":(I)V
     127: checkcast     #89                 // class java/util/Collection
     130: astore        5
     132: iconst_0
     133: istore        6
     135: aload         4
     137: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     142: astore        7
     144: aload         7
     146: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     151: ifeq          198
     154: aload         7
     156: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     161: astore        8
     163: aload         5
     165: aload         8
     167: checkcast     #66                 // class java/lang/String
     170: astore        9
     172: astore        11
     174: iconst_0
     175: istore        10
     177: aload         9
     179: invokestatic  #109                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     182: nop
     183: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     186: aload         11
     188: swap
     189: invokeinterface #117,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     194: pop
     195: goto          144
     198: aload         5
     200: checkcast     #119                // class java/util/List
     203: nop
     204: astore_1
     205: aload_0
     206: checkcast     #48                 // class java/io/Reader
     209: invokestatic  #125                // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
     212: checkcast     #76                 // class java/lang/Iterable
     215: invokestatic  #129                // Method kotlin/collections/CollectionsKt.asSequence:(Ljava/lang/Iterable;)Lkotlin/sequences/Sequence;
     218: bipush        6
     220: bipush        6
     222: iconst_0
     223: iconst_4
     224: aconst_null
     225: invokestatic  #135                // Method kotlin/sequences/SequencesKt.windowed$default:(Lkotlin/sequences/Sequence;IIZILjava/lang/Object;)Lkotlin/sequences/Sequence;
     228: invokedynamic #154,  0            // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
     233: invokestatic  #158                // Method kotlin/sequences/SequencesKt.map:(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
     236: invokedynamic #163,  0            // InvokeDynamic #1:invoke:()Lkotlin/jvm/functions/Function1;
     241: invokestatic  #158                // Method kotlin/sequences/SequencesKt.map:(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
     244: aload_1
     245: invokedynamic #173,  0            // InvokeDynamic #2:invoke:(Ljava/util/List;)Lkotlin/jvm/functions/Function1;
     250: invokestatic  #158                // Method kotlin/sequences/SequencesKt.map:(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
     253: astore_2
     254: nop
     255: iconst_0
     256: istore_3
     257: aload_2
     258: invokeinterface #176,  1          // InterfaceMethod kotlin/sequences/Sequence.iterator:()Ljava/util/Iterator;
     263: astore        4
     265: aload         4
     267: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     272: ifne          279
     275: aconst_null
     276: goto          385
     279: aload         4
     281: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     286: astore        5
     288: aload         4
     290: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     295: ifne          303
     298: aload         5
     300: goto          385
     303: aload         5
     305: checkcast     #178                // class kotlin/Pair
     308: astore        6
     310: iconst_0
     311: istore        7
     313: aload         6
     315: invokevirtual #181                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     318: checkcast     #183                // class java/lang/Number
     321: invokevirtual #187                // Method java/lang/Number.intValue:()I
     324: istore        6
     326: aload         4
     328: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     333: astore        7
     335: aload         7
     337: checkcast     #178                // class kotlin/Pair
     340: astore        8
     342: iconst_0
     343: istore        9
     345: aload         8
     347: invokevirtual #181                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     350: checkcast     #183                // class java/lang/Number
     353: invokevirtual #187                // Method java/lang/Number.intValue:()I
     356: istore        8
     358: iload         6
     360: iload         8
     362: if_icmpge     373
     365: aload         7
     367: astore        5
     369: iload         8
     371: istore        6
     373: aload         4
     375: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     380: ifne          326
     383: aload         5
     385: dup
     386: invokestatic  #191                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     389: astore_2
     390: aload_2
     391: checkcast     #178                // class kotlin/Pair
     394: astore_3
     395: iconst_0
     396: istore        4
     398: getstatic     #197                // Field java/lang/System.out:Ljava/io/PrintStream;
     401: aload_3
     402: invokevirtual #202                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     405: nop
     406: nop
     407: return

  public static final kotlin.Pair<java.lang.Integer, java.lang.Integer> calculateScore(java.util.List<? extends java.util.List<java.lang.Integer>>, java.util.List<java.lang.Integer>);
    Code:
       0: aload_0
       1: ldc           #237                // String bingoBoard
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #239                // String drawing
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_1
      13: checkcast     #76                 // class java/lang/Iterable
      16: astore_2
      17: iconst_0
      18: istore_3
      19: iconst_0
      20: istore        4
      22: aload_2
      23: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      28: astore        5
      30: aload         5
      32: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      37: ifeq          890
      40: aload         5
      42: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      47: astore        6
      49: iload         4
      51: iinc          4, 1
      54: istore        7
      56: iload         7
      58: ifge          64
      61: invokestatic  #242                // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
      64: iload         7
      66: aload         6
      68: checkcast     #183                // class java/lang/Number
      71: invokevirtual #187                // Method java/lang/Number.intValue:()I
      74: istore        8
      76: istore        9
      78: iconst_0
      79: istore        10
      81: aload_0
      82: checkcast     #76                 // class java/lang/Iterable
      85: astore        11
      87: iconst_0
      88: istore        12
      90: aload         11
      92: astore        13
      94: new           #78                 // class java/util/ArrayList
      97: dup
      98: aload         11
     100: bipush        10
     102: invokestatic  #84                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     105: invokespecial #87                 // Method java/util/ArrayList."<init>":(I)V
     108: checkcast     #89                 // class java/util/Collection
     111: astore        14
     113: iconst_0
     114: istore        15
     116: iconst_0
     117: istore        16
     119: aload         13
     121: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     126: astore        17
     128: aload         17
     130: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     135: ifeq          235
     138: aload         17
     140: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     145: astore        18
     147: aload         14
     149: iload         16
     151: iinc          16, 1
     154: istore        19
     156: iload         19
     158: ifge          164
     161: invokestatic  #242                // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     164: iload         19
     166: aload         18
     168: checkcast     #119                // class java/util/List
     171: astore        20
     173: istore        21
     175: astore        22
     177: iconst_0
     178: istore        23
     180: aload         20
     182: iload         8
     184: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     187: invokeinterface #245,  2          // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
     192: ifeq          221
     195: iload         21
     197: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     200: aload         20
     202: iload         8
     204: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     207: invokeinterface #249,  2          // InterfaceMethod java/util/List.indexOf:(Ljava/lang/Object;)I
     212: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     215: invokestatic  #255                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     218: goto          222
     221: aconst_null
     222: nop
     223: aload         22
     225: swap
     226: invokeinterface #117,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     231: pop
     232: goto          128
     235: aload         14
     237: checkcast     #119                // class java/util/List
     240: nop
     241: checkcast     #76                 // class java/lang/Iterable
     244: invokestatic  #259                // Method kotlin/collections/CollectionsKt.filterNotNull:(Ljava/lang/Iterable;)Ljava/util/List;
     247: checkcast     #76                 // class java/lang/Iterable
     250: astore        11
     252: iconst_0
     253: istore        12
     255: aload         11
     257: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     262: astore        13
     264: aload         13
     266: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     271: ifeq          884
     274: aload         13
     276: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     281: astore        14
     283: aload         14
     285: checkcast     #178                // class kotlin/Pair
     288: astore        15
     290: iconst_0
     291: istore        16
     293: aload_0
     294: aload         15
     296: invokevirtual #181                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     299: checkcast     #183                // class java/lang/Number
     302: invokevirtual #187                // Method java/lang/Number.intValue:()I
     305: invokeinterface #263,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     310: checkcast     #119                // class java/util/List
     313: aload         15
     315: invokevirtual #266                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     318: checkcast     #183                // class java/lang/Number
     321: invokevirtual #187                // Method java/lang/Number.intValue:()I
     324: iconst_0
     325: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     328: invokeinterface #270,  3          // InterfaceMethod java/util/List.set:(ILjava/lang/Object;)Ljava/lang/Object;
     333: pop
     334: aload_0
     335: aload         15
     337: invokevirtual #181                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     340: checkcast     #183                // class java/lang/Number
     343: invokevirtual #187                // Method java/lang/Number.intValue:()I
     346: invokeinterface #263,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     351: checkcast     #76                 // class java/lang/Iterable
     354: astore        17
     356: iconst_0
     357: istore        18
     359: aload         17
     361: instanceof    #89                 // class java/util/Collection
     364: ifeq          384
     367: aload         17
     369: checkcast     #89                 // class java/util/Collection
     372: invokeinterface #273,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     377: ifeq          384
     380: iconst_1
     381: goto          443
     384: aload         17
     386: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     391: astore        19
     393: aload         19
     395: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     400: ifeq          442
     403: aload         19
     405: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     410: astore        20
     412: aload         20
     414: checkcast     #183                // class java/lang/Number
     417: invokevirtual #187                // Method java/lang/Number.intValue:()I
     420: istore        21
     422: iconst_0
     423: istore        23
     425: iload         21
     427: ifeq          434
     430: iconst_1
     431: goto          435
     434: iconst_0
     435: ifeq          393
     438: iconst_0
     439: goto          443
     442: iconst_1
     443: ifeq          554
     446: iload         9
     448: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     451: aload_0
     452: checkcast     #76                 // class java/lang/Iterable
     455: astore        17
     457: astore        24
     459: iconst_0
     460: istore        18
     462: aload         17
     464: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     469: astore        19
     471: aload         19
     473: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     478: ifeq          524
     481: aload         19
     483: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     488: astore        20
     490: iload         18
     492: aload         20
     494: checkcast     #119                // class java/util/List
     497: astore        21
     499: istore        25
     501: iconst_0
     502: istore        23
     504: aload         21
     506: checkcast     #76                 // class java/lang/Iterable
     509: invokestatic  #277                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
     512: istore        26
     514: iload         25
     516: iload         26
     518: iadd
     519: istore        18
     521: goto          471
     524: iload         18
     526: istore        25
     528: aload         24
     530: iload         25
     532: aload_1
     533: iload         9
     535: invokeinterface #263,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     540: checkcast     #183                // class java/lang/Number
     543: invokevirtual #187                // Method java/lang/Number.intValue:()I
     546: imul
     547: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     550: invokestatic  #255                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     553: areturn
     554: aload_0
     555: checkcast     #76                 // class java/lang/Iterable
     558: astore        17
     560: iconst_0
     561: istore        18
     563: aload         17
     565: astore        19
     567: new           #78                 // class java/util/ArrayList
     570: dup
     571: aload         17
     573: bipush        10
     575: invokestatic  #84                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     578: invokespecial #87                 // Method java/util/ArrayList."<init>":(I)V
     581: checkcast     #89                 // class java/util/Collection
     584: astore        20
     586: iconst_0
     587: istore        21
     589: aload         19
     591: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     596: astore        23
     598: aload         23
     600: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     605: ifeq          670
     608: aload         23
     610: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     615: astore        27
     617: aload         20
     619: aload         27
     621: checkcast     #119                // class java/util/List
     624: astore        28
     626: astore        24
     628: iconst_0
     629: istore        29
     631: aload         28
     633: aload         15
     635: invokevirtual #266                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     638: checkcast     #183                // class java/lang/Number
     641: invokevirtual #187                // Method java/lang/Number.intValue:()I
     644: invokeinterface #263,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     649: checkcast     #183                // class java/lang/Number
     652: invokevirtual #187                // Method java/lang/Number.intValue:()I
     655: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     658: aload         24
     660: swap
     661: invokeinterface #117,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     666: pop
     667: goto          598
     670: aload         20
     672: checkcast     #119                // class java/util/List
     675: nop
     676: checkcast     #76                 // class java/lang/Iterable
     679: astore        17
     681: iconst_0
     682: istore        18
     684: aload         17
     686: instanceof    #89                 // class java/util/Collection
     689: ifeq          709
     692: aload         17
     694: checkcast     #89                 // class java/util/Collection
     697: invokeinterface #273,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     702: ifeq          709
     705: iconst_1
     706: goto          768
     709: aload         17
     711: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     716: astore        19
     718: aload         19
     720: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     725: ifeq          767
     728: aload         19
     730: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     735: astore        20
     737: aload         20
     739: checkcast     #183                // class java/lang/Number
     742: invokevirtual #187                // Method java/lang/Number.intValue:()I
     745: istore        21
     747: iconst_0
     748: istore        23
     750: iload         21
     752: ifeq          759
     755: iconst_1
     756: goto          760
     759: iconst_0
     760: ifeq          718
     763: iconst_0
     764: goto          768
     767: iconst_1
     768: ifeq          879
     771: iload         9
     773: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     776: aload_0
     777: checkcast     #76                 // class java/lang/Iterable
     780: astore        17
     782: astore        24
     784: iconst_0
     785: istore        18
     787: aload         17
     789: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     794: astore        19
     796: aload         19
     798: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     803: ifeq          849
     806: aload         19
     808: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     813: astore        20
     815: iload         18
     817: aload         20
     819: checkcast     #119                // class java/util/List
     822: astore        21
     824: istore        25
     826: iconst_0
     827: istore        23
     829: aload         21
     831: checkcast     #76                 // class java/lang/Iterable
     834: invokestatic  #277                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
     837: istore        26
     839: iload         25
     841: iload         26
     843: iadd
     844: istore        18
     846: goto          796
     849: iload         18
     851: istore        25
     853: aload         24
     855: iload         25
     857: aload_1
     858: iload         9
     860: invokeinterface #263,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     865: checkcast     #183                // class java/lang/Number
     868: invokevirtual #187                // Method java/lang/Number.intValue:()I
     871: imul
     872: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     875: invokestatic  #255                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     878: areturn
     879: nop
     880: nop
     881: goto          264
     884: nop
     885: nop
     886: nop
     887: goto          30
     890: nop
     891: iconst_0
     892: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     895: iconst_0
     896: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     899: invokestatic  #255                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     902: areturn

  private static final java.util.List day4$lambda$2(java.util.List);
    Code:
       0: aload_0
       1: ldc_w         #307                // String board
       4: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: checkcast     #76                 // class java/lang/Iterable
      11: astore_1
      12: iconst_0
      13: istore_2
      14: aload_1
      15: astore_3
      16: new           #78                 // class java/util/ArrayList
      19: dup
      20: invokespecial #309                // Method java/util/ArrayList."<init>":()V
      23: checkcast     #89                 // class java/util/Collection
      26: astore        4
      28: iconst_0
      29: istore        5
      31: aload_3
      32: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      37: astore        6
      39: aload         6
      41: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      46: ifeq          103
      49: aload         6
      51: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      56: astore        7
      58: aload         7
      60: checkcast     #66                 // class java/lang/String
      63: astore        8
      65: iconst_0
      66: istore        9
      68: aload         8
      70: checkcast     #64                 // class java/lang/CharSequence
      73: invokeinterface #312,  1          // InterfaceMethod java/lang/CharSequence.length:()I
      78: ifle          85
      81: iconst_1
      82: goto          86
      85: iconst_0
      86: nop
      87: ifeq          39
      90: aload         4
      92: aload         7
      94: invokeinterface #117,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
      99: pop
     100: goto          39
     103: aload         4
     105: checkcast     #119                // class java/util/List
     108: nop
     109: areturn

  private static final java.util.List day4$lambda$6(java.util.List);
    Code:
       0: aload_0
       1: ldc_w         #307                // String board
       4: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: checkcast     #76                 // class java/lang/Iterable
      11: astore_1
      12: iconst_0
      13: istore_2
      14: aload_1
      15: astore_3
      16: new           #78                 // class java/util/ArrayList
      19: dup
      20: aload_1
      21: bipush        10
      23: invokestatic  #84                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      26: invokespecial #87                 // Method java/util/ArrayList."<init>":(I)V
      29: checkcast     #89                 // class java/util/Collection
      32: astore        4
      34: iconst_0
      35: istore        5
      37: aload_3
      38: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      43: astore        6
      45: aload         6
      47: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      52: ifeq          335
      55: aload         6
      57: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      62: astore        7
      64: aload         4
      66: aload         7
      68: checkcast     #66                 // class java/lang/String
      71: astore        8
      73: astore        20
      75: iconst_0
      76: istore        9
      78: aload         8
      80: checkcast     #64                 // class java/lang/CharSequence
      83: iconst_1
      84: anewarray     #66                 // class java/lang/String
      87: astore        10
      89: aload         10
      91: iconst_0
      92: ldc_w         #320                // String
      95: aastore
      96: aload         10
      98: iconst_0
      99: iconst_0
     100: bipush        6
     102: aconst_null
     103: invokestatic  #74                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     106: checkcast     #76                 // class java/lang/Iterable
     109: astore        10
     111: nop
     112: iconst_0
     113: istore        11
     115: aload         10
     117: astore        12
     119: new           #78                 // class java/util/ArrayList
     122: dup
     123: invokespecial #309                // Method java/util/ArrayList."<init>":()V
     126: checkcast     #89                 // class java/util/Collection
     129: astore        13
     131: iconst_0
     132: istore        14
     134: aload         12
     136: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     141: astore        15
     143: aload         15
     145: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     150: ifeq          207
     153: aload         15
     155: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     160: astore        16
     162: aload         16
     164: checkcast     #66                 // class java/lang/String
     167: astore        17
     169: iconst_0
     170: istore        18
     172: aload         17
     174: checkcast     #64                 // class java/lang/CharSequence
     177: invokeinterface #312,  1          // InterfaceMethod java/lang/CharSequence.length:()I
     182: ifle          189
     185: iconst_1
     186: goto          190
     189: iconst_0
     190: nop
     191: ifeq          143
     194: aload         13
     196: aload         16
     198: invokeinterface #117,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     203: pop
     204: goto          143
     207: aload         13
     209: checkcast     #119                // class java/util/List
     212: nop
     213: checkcast     #76                 // class java/lang/Iterable
     216: astore        10
     218: nop
     219: iconst_0
     220: istore        11
     222: aload         10
     224: astore        12
     226: new           #78                 // class java/util/ArrayList
     229: dup
     230: aload         10
     232: bipush        10
     234: invokestatic  #84                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     237: invokespecial #87                 // Method java/util/ArrayList."<init>":(I)V
     240: checkcast     #89                 // class java/util/Collection
     243: astore        13
     245: iconst_0
     246: istore        14
     248: aload         12
     250: invokeinterface #93,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     255: astore        15
     257: aload         15
     259: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     264: ifeq          311
     267: aload         15
     269: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     274: astore        16
     276: aload         13
     278: aload         16
     280: checkcast     #66                 // class java/lang/String
     283: astore        17
     285: astore        19
     287: iconst_0
     288: istore        18
     290: aload         17
     292: invokestatic  #109                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     295: nop
     296: invokestatic  #113                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     299: aload         19
     301: swap
     302: invokeinterface #117,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     307: pop
     308: goto          257
     311: aload         13
     313: checkcast     #119                // class java/util/List
     316: nop
     317: checkcast     #89                 // class java/util/Collection
     320: invokestatic  #324                // Method kotlin/collections/CollectionsKt.toMutableList:(Ljava/util/Collection;)Ljava/util/List;
     323: aload         20
     325: swap
     326: invokeinterface #117,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     331: pop
     332: goto          45
     335: aload         4
     337: checkcast     #119                // class java/util/List
     340: nop
     341: areturn

  private static final kotlin.Pair day4$lambda$7(java.util.List, java.util.List);
    Code:
       0: aload_1
       1: ldc_w         #307                // String board
       4: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_1
       8: aload_0
       9: invokestatic  #329                // Method calculateScore:(Ljava/util/List;Ljava/util/List;)Lkotlin/Pair;
      12: areturn
}