package day15

import java.io.File
import java.util.*

val deltas = listOf(Coord(-1, 0), Coord(1, 0), Coord(0, -1), Coord(0, 1))

data class Coord(val x: Int, val y: Int)
data class CoordRisk(val coord: Coord, val risk: Int)

fun Map<Coord, Int>.explore(): Int {
    val end = Coord(keys.maxOf { it.x }, keys.maxOf { it.y })
    val visited = mutableSetOf<Coord>()
    val queue = PriorityQueue<CoordRisk> { p1, p2 -> p1.risk - p2.risk }
    queue.add(CoordRisk(Coord(0, 0), 0))

    while (queue.peek().coord != end) {
        val pair = queue.poll()
        deltas.map { delta -> Coord(pair.coord.x + delta.x, pair.coord.y + delta.y) }
            .filter { it in this.keys }
            .filter { it !in visited }
            .forEach {
                visited += it
                queue.add(CoordRisk(it, pair.risk + this[it]!!))
            }
    }

    return queue.peek().risk
}

fun main() {
    val grid = File("src/day15/input.txt").readLines()
        .mapIndexed { y, line -> line.toList().mapIndexed { x, ch -> Coord(x, y) to ch.digitToInt() } }
        .flatten().toMap()

    println(grid.explore())

    val width = grid.keys.maxOf { it.x } + 1
    val height = grid.keys.maxOf { it.y } + 1
    val extendedGrid = mutableMapOf<Coord, Int>()
    for (x in 0..4) {
        for (y in 0..4) {
            extendedGrid.putAll(grid.map { (coord, value) ->
                Coord(coord.x + (x * width), coord.y + (y * height)) to ((value + x + y - 1) % 9) + 1
            }.toMap())
        }
    }

    println(extendedGrid.explore())
}

Compiled from "result.kt"
public final class day15.ResultKt {
  private static final java.util.List<day15.Coord> deltas;

  public static final java.util.List<day15.Coord> getDeltas();
    Code:
       0: getstatic     #12                 // Field deltas:Ljava/util/List;
       3: areturn

  public static final int explore(java.util.Map<day15.Coord, java.lang.Integer>);
    Code:
       0: aload_0
       1: ldc           #17                 // String <this>
       3: invokestatic  #23                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokeinterface #29,  1           // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
      12: checkcast     #31                 // class java/lang/Iterable
      15: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      20: astore_3
      21: aload_3
      22: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      27: ifne          38
      30: new           #43                 // class java/util/NoSuchElementException
      33: dup
      34: invokespecial #47                 // Method java/util/NoSuchElementException."<init>":()V
      37: athrow
      38: aload_3
      39: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      44: checkcast     #53                 // class day15/Coord
      47: astore        4
      49: iconst_0
      50: istore        5
      52: aload         4
      54: invokevirtual #57                 // Method day15/Coord.getX:()I
      57: istore        4
      59: aload_3
      60: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      65: ifeq          103
      68: aload_3
      69: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      74: checkcast     #53                 // class day15/Coord
      77: astore        5
      79: iconst_0
      80: istore        6
      82: aload         5
      84: invokevirtual #57                 // Method day15/Coord.getX:()I
      87: istore        5
      89: iload         4
      91: iload         5
      93: if_icmpge     59
      96: iload         5
      98: istore        4
     100: goto          59
     103: iload         4
     105: aload_0
     106: invokeinterface #29,  1           // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
     111: checkcast     #31                 // class java/lang/Iterable
     114: astore_2
     115: istore        15
     117: aload_2
     118: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     123: astore_3
     124: aload_3
     125: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     130: ifne          141
     133: new           #43                 // class java/util/NoSuchElementException
     136: dup
     137: invokespecial #47                 // Method java/util/NoSuchElementException."<init>":()V
     140: athrow
     141: aload_3
     142: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     147: checkcast     #53                 // class day15/Coord
     150: astore        4
     152: iconst_0
     153: istore        5
     155: aload         4
     157: invokevirtual #60                 // Method day15/Coord.getY:()I
     160: istore        4
     162: aload_3
     163: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     168: ifeq          206
     171: aload_3
     172: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     177: checkcast     #53                 // class day15/Coord
     180: astore        5
     182: iconst_0
     183: istore        6
     185: aload         5
     187: invokevirtual #60                 // Method day15/Coord.getY:()I
     190: istore        5
     192: iload         4
     194: iload         5
     196: if_icmpge     162
     199: iload         5
     201: istore        4
     203: goto          162
     206: iload         4
     208: istore        16
     210: iload         15
     212: iload         16
     214: istore        17
     216: istore        18
     218: new           #53                 // class day15/Coord
     221: dup
     222: iload         18
     224: iload         17
     226: invokespecial #63                 // Method day15/Coord."<init>":(II)V
     229: astore_1
     230: new           #65                 // class java/util/LinkedHashSet
     233: dup
     234: invokespecial #66                 // Method java/util/LinkedHashSet."<init>":()V
     237: checkcast     #68                 // class java/util/Set
     240: astore_2
     241: new           #70                 // class java/util/PriorityQueue
     244: dup
     245: invokedynamic #90,  0             // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function2;
     250: invokedynamic #101,  0            // InvokeDynamic #1:compare:(Lkotlin/jvm/functions/Function2;)Ljava/util/Comparator;
     255: invokespecial #104                // Method java/util/PriorityQueue."<init>":(Ljava/util/Comparator;)V
     258: astore_3
     259: aload_3
     260: new           #106                // class day15/CoordRisk
     263: dup
     264: new           #53                 // class day15/Coord
     267: dup
     268: iconst_0
     269: iconst_0
     270: invokespecial #63                 // Method day15/Coord."<init>":(II)V
     273: iconst_0
     274: invokespecial #109                // Method day15/CoordRisk."<init>":(Lday15/Coord;I)V
     277: invokevirtual #113                // Method java/util/PriorityQueue.add:(Ljava/lang/Object;)Z
     280: pop
     281: aload_3
     282: invokevirtual #116                // Method java/util/PriorityQueue.peek:()Ljava/lang/Object;
     285: checkcast     #106                // class day15/CoordRisk
     288: invokevirtual #120                // Method day15/CoordRisk.getCoord:()Lday15/Coord;
     291: aload_1
     292: invokestatic  #124                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     295: ifne          750
     298: aload_3
     299: invokevirtual #127                // Method java/util/PriorityQueue.poll:()Ljava/lang/Object;
     302: checkcast     #106                // class day15/CoordRisk
     305: astore        4
     307: getstatic     #12                 // Field deltas:Ljava/util/List;
     310: checkcast     #31                 // class java/lang/Iterable
     313: astore        5
     315: iconst_0
     316: istore        6
     318: aload         5
     320: astore        7
     322: new           #129                // class java/util/ArrayList
     325: dup
     326: aload         5
     328: bipush        10
     330: invokestatic  #135                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     333: invokespecial #138                // Method java/util/ArrayList."<init>":(I)V
     336: checkcast     #140                // class java/util/Collection
     339: astore        8
     341: iconst_0
     342: istore        9
     344: aload         7
     346: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     351: astore        10
     353: aload         10
     355: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     360: ifeq          433
     363: aload         10
     365: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     370: astore        11
     372: aload         8
     374: aload         11
     376: checkcast     #53                 // class day15/Coord
     379: astore        12
     381: astore        14
     383: iconst_0
     384: istore        13
     386: new           #53                 // class day15/Coord
     389: dup
     390: aload         4
     392: invokevirtual #120                // Method day15/CoordRisk.getCoord:()Lday15/Coord;
     395: invokevirtual #57                 // Method day15/Coord.getX:()I
     398: aload         12
     400: invokevirtual #57                 // Method day15/Coord.getX:()I
     403: iadd
     404: aload         4
     406: invokevirtual #120                // Method day15/CoordRisk.getCoord:()Lday15/Coord;
     409: invokevirtual #60                 // Method day15/Coord.getY:()I
     412: aload         12
     414: invokevirtual #60                 // Method day15/Coord.getY:()I
     417: iadd
     418: invokespecial #63                 // Method day15/Coord."<init>":(II)V
     421: aload         14
     423: swap
     424: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     429: pop
     430: goto          353
     433: aload         8
     435: checkcast     #143                // class java/util/List
     438: nop
     439: checkcast     #31                 // class java/lang/Iterable
     442: astore        5
     444: nop
     445: iconst_0
     446: istore        6
     448: aload         5
     450: astore        7
     452: new           #129                // class java/util/ArrayList
     455: dup
     456: invokespecial #144                // Method java/util/ArrayList."<init>":()V
     459: checkcast     #140                // class java/util/Collection
     462: astore        8
     464: iconst_0
     465: istore        9
     467: aload         7
     469: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     474: astore        10
     476: aload         10
     478: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     483: ifeq          534
     486: aload         10
     488: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     493: astore        11
     495: aload         11
     497: checkcast     #53                 // class day15/Coord
     500: astore        12
     502: iconst_0
     503: istore        13
     505: aload_0
     506: invokeinterface #29,  1           // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
     511: aload         12
     513: invokeinterface #147,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     518: ifeq          476
     521: aload         8
     523: aload         11
     525: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     530: pop
     531: goto          476
     534: aload         8
     536: checkcast     #143                // class java/util/List
     539: nop
     540: checkcast     #31                 // class java/lang/Iterable
     543: astore        5
     545: nop
     546: iconst_0
     547: istore        6
     549: aload         5
     551: astore        7
     553: new           #129                // class java/util/ArrayList
     556: dup
     557: invokespecial #144                // Method java/util/ArrayList."<init>":()V
     560: checkcast     #140                // class java/util/Collection
     563: astore        8
     565: iconst_0
     566: istore        9
     568: aload         7
     570: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     575: astore        10
     577: aload         10
     579: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     584: ifeq          638
     587: aload         10
     589: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     594: astore        11
     596: aload         11
     598: checkcast     #53                 // class day15/Coord
     601: astore        12
     603: iconst_0
     604: istore        13
     606: aload_2
     607: aload         12
     609: invokeinterface #147,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     614: ifne          621
     617: iconst_1
     618: goto          622
     621: iconst_0
     622: ifeq          577
     625: aload         8
     627: aload         11
     629: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     634: pop
     635: goto          577
     638: aload         8
     640: checkcast     #143                // class java/util/List
     643: nop
     644: checkcast     #31                 // class java/lang/Iterable
     647: astore        5
     649: nop
     650: iconst_0
     651: istore        6
     653: aload         5
     655: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     660: astore        7
     662: aload         7
     664: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     669: ifeq          746
     672: aload         7
     674: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     679: astore        8
     681: aload         8
     683: checkcast     #53                 // class day15/Coord
     686: astore        9
     688: iconst_0
     689: istore        10
     691: aload_2
     692: checkcast     #140                // class java/util/Collection
     695: aload         9
     697: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     702: pop
     703: aload_3
     704: new           #106                // class day15/CoordRisk
     707: dup
     708: aload         9
     710: aload         4
     712: invokevirtual #150                // Method day15/CoordRisk.getRisk:()I
     715: aload_0
     716: aload         9
     718: invokeinterface #154,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     723: dup
     724: invokestatic  #158                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     727: checkcast     #160                // class java/lang/Number
     730: invokevirtual #163                // Method java/lang/Number.intValue:()I
     733: iadd
     734: invokespecial #109                // Method day15/CoordRisk."<init>":(Lday15/Coord;I)V
     737: invokevirtual #113                // Method java/util/PriorityQueue.add:(Ljava/lang/Object;)Z
     740: pop
     741: nop
     742: nop
     743: goto          662
     746: nop
     747: goto          281
     750: aload_3
     751: invokevirtual #116                // Method java/util/PriorityQueue.peek:()Ljava/lang/Object;
     754: checkcast     #106                // class day15/CoordRisk
     757: invokevirtual #150                // Method day15/CoordRisk.getRisk:()I
     760: ireturn

  public static final void main();
    Code:
       0: new           #202                // class java/io/File
       3: dup
       4: ldc           #204                // String src/day15/input.txt
       6: invokespecial #207                // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #213                // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: checkcast     #31                 // class java/lang/Iterable
      18: astore_1
      19: nop
      20: iconst_0
      21: istore_2
      22: aload_1
      23: astore_3
      24: new           #129                // class java/util/ArrayList
      27: dup
      28: aload_1
      29: bipush        10
      31: invokestatic  #135                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      34: invokespecial #138                // Method java/util/ArrayList."<init>":(I)V
      37: checkcast     #140                // class java/util/Collection
      40: astore        4
      42: iconst_0
      43: istore        5
      45: iconst_0
      46: istore        6
      48: aload_3
      49: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      54: astore        7
      56: aload         7
      58: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      63: ifeq          270
      66: aload         7
      68: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      73: astore        8
      75: aload         4
      77: iload         6
      79: iinc          6, 1
      82: istore        9
      84: iload         9
      86: ifge          92
      89: invokestatic  #216                // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
      92: iload         9
      94: aload         8
      96: checkcast     #218                // class java/lang/String
      99: astore        10
     101: istore        11
     103: astore        26
     105: iconst_0
     106: istore        12
     108: aload         10
     110: checkcast     #220                // class java/lang/CharSequence
     113: invokestatic  #226                // Method kotlin/text/StringsKt.toList:(Ljava/lang/CharSequence;)Ljava/util/List;
     116: checkcast     #31                 // class java/lang/Iterable
     119: astore        13
     121: iconst_0
     122: istore        14
     124: aload         13
     126: astore        15
     128: new           #129                // class java/util/ArrayList
     131: dup
     132: aload         13
     134: bipush        10
     136: invokestatic  #135                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     139: invokespecial #138                // Method java/util/ArrayList."<init>":(I)V
     142: checkcast     #140                // class java/util/Collection
     145: astore        16
     147: iconst_0
     148: istore        17
     150: iconst_0
     151: istore        18
     153: aload         15
     155: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     160: astore        19
     162: aload         19
     164: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     169: ifeq          251
     172: aload         19
     174: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     179: astore        20
     181: aload         16
     183: iload         18
     185: iinc          18, 1
     188: istore        21
     190: iload         21
     192: ifge          198
     195: invokestatic  #216                // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     198: iload         21
     200: aload         20
     202: checkcast     #228                // class java/lang/Character
     205: invokevirtual #232                // Method java/lang/Character.charValue:()C
     208: istore        22
     210: istore        23
     212: astore        24
     214: iconst_0
     215: istore        25
     217: new           #53                 // class day15/Coord
     220: dup
     221: iload         23
     223: iload         11
     225: invokespecial #63                 // Method day15/Coord."<init>":(II)V
     228: iload         22
     230: invokestatic  #238                // Method kotlin/text/CharsKt.digitToInt:(C)I
     233: invokestatic  #244                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     236: invokestatic  #250                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     239: aload         24
     241: swap
     242: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     247: pop
     248: goto          162
     251: aload         16
     253: checkcast     #143                // class java/util/List
     256: nop
     257: nop
     258: aload         26
     260: swap
     261: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     266: pop
     267: goto          56
     270: aload         4
     272: checkcast     #143                // class java/util/List
     275: nop
     276: checkcast     #31                 // class java/lang/Iterable
     279: invokestatic  #254                // Method kotlin/collections/CollectionsKt.flatten:(Ljava/lang/Iterable;)Ljava/util/List;
     282: checkcast     #31                 // class java/lang/Iterable
     285: invokestatic  #260                // Method kotlin/collections/MapsKt.toMap:(Ljava/lang/Iterable;)Ljava/util/Map;
     288: astore_0
     289: aload_0
     290: invokestatic  #262                // Method explore:(Ljava/util/Map;)I
     293: istore_1
     294: getstatic     #268                // Field java/lang/System.out:Ljava/io/PrintStream;
     297: iload_1
     298: invokevirtual #273                // Method java/io/PrintStream.println:(I)V
     301: aload_0
     302: invokeinterface #29,  1           // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
     307: checkcast     #31                 // class java/lang/Iterable
     310: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     315: astore_3
     316: aload_3
     317: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     322: ifne          333
     325: new           #43                 // class java/util/NoSuchElementException
     328: dup
     329: invokespecial #47                 // Method java/util/NoSuchElementException."<init>":()V
     332: athrow
     333: aload_3
     334: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     339: checkcast     #53                 // class day15/Coord
     342: astore        4
     344: iconst_0
     345: istore        5
     347: aload         4
     349: invokevirtual #57                 // Method day15/Coord.getX:()I
     352: istore        4
     354: aload_3
     355: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     360: ifeq          398
     363: aload_3
     364: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     369: checkcast     #53                 // class day15/Coord
     372: astore        5
     374: iconst_0
     375: istore        6
     377: aload         5
     379: invokevirtual #57                 // Method day15/Coord.getX:()I
     382: istore        5
     384: iload         4
     386: iload         5
     388: if_icmpge     354
     391: iload         5
     393: istore        4
     395: goto          354
     398: iload         4
     400: iconst_1
     401: iadd
     402: istore_1
     403: aload_0
     404: invokeinterface #29,  1           // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
     409: checkcast     #31                 // class java/lang/Iterable
     412: invokeinterface #35,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     417: astore        4
     419: aload         4
     421: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     426: ifne          437
     429: new           #43                 // class java/util/NoSuchElementException
     432: dup
     433: invokespecial #47                 // Method java/util/NoSuchElementException."<init>":()V
     436: athrow
     437: aload         4
     439: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     444: checkcast     #53                 // class day15/Coord
     447: astore        5
     449: iconst_0
     450: istore        6
     452: aload         5
     454: invokevirtual #60                 // Method day15/Coord.getY:()I
     457: istore        5
     459: aload         4
     461: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     466: ifeq          505
     469: aload         4
     471: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     476: checkcast     #53                 // class day15/Coord
     479: astore        6
     481: iconst_0
     482: istore        7
     484: aload         6
     486: invokevirtual #60                 // Method day15/Coord.getY:()I
     489: istore        6
     491: iload         5
     493: iload         6
     495: if_icmpge     459
     498: iload         6
     500: istore        5
     502: goto          459
     505: iload         5
     507: iconst_1
     508: iadd
     509: istore_2
     510: new           #275                // class java/util/LinkedHashMap
     513: dup
     514: invokespecial #276                // Method java/util/LinkedHashMap."<init>":()V
     517: checkcast     #25                 // class java/util/Map
     520: astore_3
     521: iconst_0
     522: istore        4
     524: iload         4
     526: iconst_5
     527: if_icmpge     740
     530: iconst_0
     531: istore        5
     533: iload         5
     535: iconst_5
     536: if_icmpge     734
     539: aload_3
     540: aload_0
     541: astore        6
     543: astore        26
     545: iconst_0
     546: istore        7
     548: aload         6
     550: astore        8
     552: new           #129                // class java/util/ArrayList
     555: dup
     556: aload         6
     558: invokeinterface #279,  1          // InterfaceMethod java/util/Map.size:()I
     563: invokespecial #138                // Method java/util/ArrayList."<init>":(I)V
     566: checkcast     #140                // class java/util/Collection
     569: astore        9
     571: iconst_0
     572: istore        10
     574: aload         8
     576: invokeinterface #282,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     581: invokeinterface #283,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     586: astore        11
     588: aload         11
     590: invokeinterface #41,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     595: ifeq          708
     598: aload         11
     600: invokeinterface #51,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     605: checkcast     #285                // class java/util/Map$Entry
     608: astore        12
     610: aload         9
     612: aload         12
     614: astore        13
     616: astore        27
     618: iconst_0
     619: istore        14
     621: aload         13
     623: invokeinterface #288,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     628: checkcast     #53                 // class day15/Coord
     631: astore        15
     633: aload         13
     635: invokeinterface #291,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     640: checkcast     #160                // class java/lang/Number
     643: invokevirtual #163                // Method java/lang/Number.intValue:()I
     646: istore        16
     648: new           #53                 // class day15/Coord
     651: dup
     652: aload         15
     654: invokevirtual #57                 // Method day15/Coord.getX:()I
     657: iload         4
     659: iload_1
     660: imul
     661: iadd
     662: aload         15
     664: invokevirtual #60                 // Method day15/Coord.getY:()I
     667: iload         5
     669: iload_2
     670: imul
     671: iadd
     672: invokespecial #63                 // Method day15/Coord."<init>":(II)V
     675: iload         16
     677: iload         4
     679: iadd
     680: iload         5
     682: iadd
     683: iconst_1
     684: isub
     685: bipush        9
     687: irem
     688: iconst_1
     689: iadd
     690: invokestatic  #244                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     693: invokestatic  #250                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     696: aload         27
     698: swap
     699: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     704: pop
     705: goto          588
     708: aload         9
     710: checkcast     #143                // class java/util/List
     713: nop
     714: aload         26
     716: swap
     717: checkcast     #31                 // class java/lang/Iterable
     720: invokestatic  #260                // Method kotlin/collections/MapsKt.toMap:(Ljava/lang/Iterable;)Ljava/util/Map;
     723: invokeinterface #295,  2          // InterfaceMethod java/util/Map.putAll:(Ljava/util/Map;)V
     728: iinc          5, 1
     731: goto          533
     734: iinc          4, 1
     737: goto          524
     740: aload_3
     741: invokestatic  #262                // Method explore:(Ljava/util/Map;)I
     744: istore        4
     746: getstatic     #268                // Field java/lang/System.out:Ljava/io/PrintStream;
     749: iload         4
     751: invokevirtual #273                // Method java/io/PrintStream.println:(I)V
     754: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #321                // Method main:()V
       3: return

  private static final int explore$lambda$2(day15.CoordRisk, day15.CoordRisk);
    Code:
       0: aload_0
       1: invokevirtual #150                // Method day15/CoordRisk.getRisk:()I
       4: aload_1
       5: invokevirtual #150                // Method day15/CoordRisk.getRisk:()I
       8: isub
       9: ireturn

  private static final int explore$lambda$3(kotlin.jvm.functions.Function2, java.lang.Object, java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokeinterface #329,  3          // InterfaceMethod kotlin/jvm/functions/Function2.invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       8: checkcast     #160                // class java/lang/Number
      11: invokevirtual #163                // Method java/lang/Number.intValue:()I
      14: ireturn

  static {};
    Code:
       0: iconst_4
       1: anewarray     #53                 // class day15/Coord
       4: astore_0
       5: aload_0
       6: iconst_0
       7: new           #53                 // class day15/Coord
      10: dup
      11: iconst_m1
      12: iconst_0
      13: invokespecial #63                 // Method day15/Coord."<init>":(II)V
      16: aastore
      17: aload_0
      18: iconst_1
      19: new           #53                 // class day15/Coord
      22: dup
      23: iconst_1
      24: iconst_0
      25: invokespecial #63                 // Method day15/Coord."<init>":(II)V
      28: aastore
      29: aload_0
      30: iconst_2
      31: new           #53                 // class day15/Coord
      34: dup
      35: iconst_0
      36: iconst_m1
      37: invokespecial #63                 // Method day15/Coord."<init>":(II)V
      40: aastore
      41: aload_0
      42: iconst_3
      43: new           #53                 // class day15/Coord
      46: dup
      47: iconst_0
      48: iconst_1
      49: invokespecial #63                 // Method day15/Coord."<init>":(II)V
      52: aastore
      53: aload_0
      54: invokestatic  #337                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      57: putstatic     #12                 // Field deltas:Ljava/util/List;
      60: return
}


package day14

import java.io.File

fun solve(rules: Map<Pair<Char, Char>, Char>, initialPairCounts: Map<Pair<Char, Char>, Long>, steps: Int): Long {

    var pairCounts = initialPairCounts
    for (step in 1..steps) {
        pairCounts = pairCounts.entries.fold(emptyMap()) { acc, pairCount ->
            val ch = rules[pairCount.key]
            if (ch != null) {
                acc + Pair(pairCount.key.first, ch).let { it to (acc[it] ?: 0L) + pairCount.value } +
                        Pair(ch, pairCount.key.second).let { it to (acc[it] ?: 0L) + pairCount.value }
            } else {
                acc + (pairCount.key to pairCount.value)
            }
        }
    }

    val counts = pairCounts.entries
        .fold(emptyMap<Char, Long>()) { acc, pairCount ->
            acc + (pairCount.key.first to (acc[pairCount.key.first] ?: 0L) + pairCount.value)
        }
    return counts.values.let { it.maxOrNull()!! - it.minOrNull()!! }
}

fun main() {
    val lines = File("src/day14/input.txt").readLines()
    val template = lines[0]
    val rules = lines.drop(2).map { it.split(" -> ") }.associate { Pair(it[0][0], it[0][1]) to it[1][0] }
    val pairCounts = "$template ".zipWithNext().groupingBy { it }.eachCount().map { (k, v) -> k to v.toLong() }.toMap()

    println(solve(rules, pairCounts, 10))
    println(solve(rules, pairCounts, 40))
}

Compiled from "_Collections.kt"
public final class day14.ResultKt$main$$inlined$groupingBy$1 implements kotlin.collections.Grouping<kotlin.Pair<? extends java.lang.Character, ? extends java.lang.Character>, kotlin.Pair<? extends java.lang.Character, ? extends java.lang.Character>> {
  final java.lang.Iterable $this_groupingBy;

  public day14.ResultKt$main$$inlined$groupingBy$1(java.lang.Iterable);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #18                 // Field $this_groupingBy:Ljava/lang/Iterable;
       5: aload_0
       6: invokespecial #21                 // Method java/lang/Object."<init>":()V
       9: return

  public java.util.Iterator<kotlin.Pair<? extends java.lang.Character, ? extends java.lang.Character>> sourceIterator();
    Code:
       0: aload_0
       1: getfield      #18                 // Field $this_groupingBy:Ljava/lang/Iterable;
       4: invokeinterface #32,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
       9: areturn

  public kotlin.Pair<? extends java.lang.Character, ? extends java.lang.Character> keyOf(kotlin.Pair<? extends java.lang.Character, ? extends java.lang.Character>);
    Code:
       0: aload_1
       1: checkcast     #37                 // class kotlin/Pair
       4: astore_2
       5: iconst_0
       6: istore_3
       7: aload_2
       8: areturn
}

Compiled from "result.kt"
public final class day14.ResultKt {
  public static final long solve(java.util.Map<kotlin.Pair<java.lang.Character, java.lang.Character>, java.lang.Character>, java.util.Map<kotlin.Pair<java.lang.Character, java.lang.Character>, java.lang.Long>, int);
    Code:
       0: aload_0
       1: ldc           #10                 // String rules
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #18                 // String initialPairCounts
       9: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_1
      13: astore_3
      14: iconst_1
      15: istore        4
      17: iload         4
      19: iload_2
      20: if_icmpgt     323
      23: aload_3
      24: invokeinterface #24,  1           // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
      29: checkcast     #26                 // class java/lang/Iterable
      32: astore        5
      34: invokestatic  #32                 // Method kotlin/collections/MapsKt.emptyMap:()Ljava/util/Map;
      37: astore        6
      39: iconst_0
      40: istore        7
      42: aload         6
      44: astore        8
      46: aload         5
      48: invokeinterface #36,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      53: astore        9
      55: aload         9
      57: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      62: ifeq          308
      65: aload         9
      67: invokeinterface #46,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      72: astore        10
      74: aload         8
      76: aload         10
      78: checkcast     #48                 // class java/util/Map$Entry
      81: astore        11
      83: astore        12
      85: iconst_0
      86: istore        13
      88: aload_0
      89: aload         11
      91: invokeinterface #51,  1           // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
      96: invokeinterface #55,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     101: checkcast     #57                 // class java/lang/Character
     104: astore        14
     106: aload         14
     108: ifnull        280
     111: aload         12
     113: new           #59                 // class kotlin/Pair
     116: dup
     117: aload         11
     119: invokeinterface #51,  1           // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     124: checkcast     #59                 // class kotlin/Pair
     127: invokevirtual #62                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     130: aload         14
     132: invokespecial #66                 // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     135: astore        15
     137: astore        16
     139: iconst_0
     140: istore        17
     142: aload         15
     144: aload         12
     146: aload         15
     148: invokeinterface #55,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     153: checkcast     #68                 // class java/lang/Long
     156: dup
     157: ifnull        166
     160: invokevirtual #72                 // Method java/lang/Long.longValue:()J
     163: goto          168
     166: pop
     167: lconst_0
     168: aload         11
     170: invokeinterface #75,  1           // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     175: checkcast     #77                 // class java/lang/Number
     178: invokevirtual #78                 // Method java/lang/Number.longValue:()J
     181: ladd
     182: invokestatic  #82                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     185: invokestatic  #88                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     188: aload         16
     190: swap
     191: nop
     192: invokestatic  #92                 // Method kotlin/collections/MapsKt.plus:(Ljava/util/Map;Lkotlin/Pair;)Ljava/util/Map;
     195: new           #59                 // class kotlin/Pair
     198: dup
     199: aload         14
     201: aload         11
     203: invokeinterface #51,  1           // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     208: checkcast     #59                 // class kotlin/Pair
     211: invokevirtual #95                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     214: invokespecial #66                 // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     217: astore        15
     219: astore        16
     221: iconst_0
     222: istore        17
     224: aload         15
     226: aload         12
     228: aload         15
     230: invokeinterface #55,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     235: checkcast     #68                 // class java/lang/Long
     238: dup
     239: ifnull        248
     242: invokevirtual #72                 // Method java/lang/Long.longValue:()J
     245: goto          250
     248: pop
     249: lconst_0
     250: aload         11
     252: invokeinterface #75,  1           // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     257: checkcast     #77                 // class java/lang/Number
     260: invokevirtual #78                 // Method java/lang/Number.longValue:()J
     263: ladd
     264: invokestatic  #82                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     267: invokestatic  #88                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     270: aload         16
     272: swap
     273: nop
     274: invokestatic  #92                 // Method kotlin/collections/MapsKt.plus:(Ljava/util/Map;Lkotlin/Pair;)Ljava/util/Map;
     277: goto          302
     280: aload         12
     282: aload         11
     284: invokeinterface #51,  1           // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     289: aload         11
     291: invokeinterface #75,  1           // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     296: invokestatic  #88                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     299: invokestatic  #92                 // Method kotlin/collections/MapsKt.plus:(Ljava/util/Map;Lkotlin/Pair;)Ljava/util/Map;
     302: nop
     303: astore        8
     305: goto          55
     308: aload         8
     310: astore_3
     311: iload         4
     313: iload_2
     314: if_icmpeq     323
     317: iinc          4, 1
     320: goto          23
     323: aload_3
     324: invokeinterface #24,  1           // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     329: checkcast     #26                 // class java/lang/Iterable
     332: astore        5
     334: invokestatic  #32                 // Method kotlin/collections/MapsKt.emptyMap:()Ljava/util/Map;
     337: astore        6
     339: iconst_0
     340: istore        7
     342: aload         6
     344: astore        8
     346: aload         5
     348: invokeinterface #36,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     353: astore        9
     355: aload         9
     357: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     362: ifeq          466
     365: aload         9
     367: invokeinterface #46,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     372: astore        10
     374: aload         8
     376: aload         10
     378: checkcast     #48                 // class java/util/Map$Entry
     381: astore        11
     383: astore        12
     385: iconst_0
     386: istore        13
     388: aload         12
     390: aload         11
     392: invokeinterface #51,  1           // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     397: checkcast     #59                 // class kotlin/Pair
     400: invokevirtual #62                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     403: aload         12
     405: aload         11
     407: invokeinterface #51,  1           // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     412: checkcast     #59                 // class kotlin/Pair
     415: invokevirtual #62                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     418: invokeinterface #55,  2           // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     423: checkcast     #68                 // class java/lang/Long
     426: dup
     427: ifnull        436
     430: invokevirtual #72                 // Method java/lang/Long.longValue:()J
     433: goto          438
     436: pop
     437: lconst_0
     438: aload         11
     440: invokeinterface #75,  1           // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     445: checkcast     #77                 // class java/lang/Number
     448: invokevirtual #78                 // Method java/lang/Number.longValue:()J
     451: ladd
     452: invokestatic  #82                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     455: invokestatic  #88                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     458: invokestatic  #92                 // Method kotlin/collections/MapsKt.plus:(Ljava/util/Map;Lkotlin/Pair;)Ljava/util/Map;
     461: astore        8
     463: goto          355
     466: aload         8
     468: astore        4
     470: aload         4
     472: invokeinterface #99,  1           // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
     477: astore        6
     479: iconst_0
     480: istore        7
     482: aload         6
     484: checkcast     #26                 // class java/lang/Iterable
     487: invokestatic  #105                // Method kotlin/collections/CollectionsKt.maxOrNull:(Ljava/lang/Iterable;)Ljava/lang/Comparable;
     490: dup
     491: invokestatic  #109                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     494: checkcast     #77                 // class java/lang/Number
     497: invokevirtual #78                 // Method java/lang/Number.longValue:()J
     500: aload         6
     502: checkcast     #26                 // class java/lang/Iterable
     505: invokestatic  #112                // Method kotlin/collections/CollectionsKt.minOrNull:(Ljava/lang/Iterable;)Ljava/lang/Comparable;
     508: dup
     509: invokestatic  #109                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     512: checkcast     #77                 // class java/lang/Number
     515: invokevirtual #78                 // Method java/lang/Number.longValue:()J
     518: lsub
     519: nop
     520: lreturn

  public static final void main();
    Code:
       0: new           #142                // class java/io/File
       3: dup
       4: ldc           #144                // String src/day14/input.txt
       6: invokespecial #147                // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #153                // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: astore_0
      16: aload_0
      17: iconst_0
      18: invokeinterface #158,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      23: checkcast     #160                // class java/lang/String
      26: astore_1
      27: aload_0
      28: checkcast     #26                 // class java/lang/Iterable
      31: iconst_2
      32: invokestatic  #164                // Method kotlin/collections/CollectionsKt.drop:(Ljava/lang/Iterable;I)Ljava/util/List;
      35: checkcast     #26                 // class java/lang/Iterable
      38: astore_3
      39: iconst_0
      40: istore        4
      42: aload_3
      43: astore        5
      45: new           #166                // class java/util/ArrayList
      48: dup
      49: aload_3
      50: bipush        10
      52: invokestatic  #170                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      55: invokespecial #173                // Method java/util/ArrayList."<init>":(I)V
      58: checkcast     #175                // class java/util/Collection
      61: astore        6
      63: iconst_0
      64: istore        7
      66: aload         5
      68: invokeinterface #36,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      73: astore        8
      75: aload         8
      77: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      82: ifeq          147
      85: aload         8
      87: invokeinterface #46,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      92: astore        9
      94: aload         6
      96: aload         9
      98: checkcast     #160                // class java/lang/String
     101: astore        10
     103: astore        15
     105: iconst_0
     106: istore        11
     108: aload         10
     110: checkcast     #177                // class java/lang/CharSequence
     113: iconst_1
     114: anewarray     #160                // class java/lang/String
     117: astore        12
     119: aload         12
     121: iconst_0
     122: ldc           #179                // String  ->
     124: aastore
     125: aload         12
     127: iconst_0
     128: iconst_0
     129: bipush        6
     131: aconst_null
     132: invokestatic  #185                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     135: aload         15
     137: swap
     138: invokeinterface #189,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     143: pop
     144: goto          75
     147: aload         6
     149: checkcast     #155                // class java/util/List
     152: nop
     153: checkcast     #26                 // class java/lang/Iterable
     156: astore_3
     157: nop
     158: iconst_0
     159: istore        4
     161: aload_3
     162: bipush        10
     164: invokestatic  #170                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     167: invokestatic  #193                // Method kotlin/collections/MapsKt.mapCapacity:(I)I
     170: bipush        16
     172: invokestatic  #199                // Method kotlin/ranges/RangesKt.coerceAtLeast:(II)I
     175: istore        5
     177: aload_3
     178: astore        6
     180: new           #201                // class java/util/LinkedHashMap
     183: dup
     184: iload         5
     186: invokespecial #202                // Method java/util/LinkedHashMap."<init>":(I)V
     189: checkcast     #20                 // class java/util/Map
     192: astore        7
     194: iconst_0
     195: istore        8
     197: aload         6
     199: invokeinterface #36,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     204: astore        9
     206: aload         9
     208: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     213: ifeq          326
     216: aload         9
     218: invokeinterface #46,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     223: astore        10
     225: aload         7
     227: astore        11
     229: aload         10
     231: checkcast     #155                // class java/util/List
     234: astore        12
     236: iconst_0
     237: istore        13
     239: new           #59                 // class kotlin/Pair
     242: dup
     243: aload         12
     245: iconst_0
     246: invokeinterface #158,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     251: checkcast     #160                // class java/lang/String
     254: iconst_0
     255: invokevirtual #206                // Method java/lang/String.charAt:(I)C
     258: invokestatic  #209                // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     261: aload         12
     263: iconst_0
     264: invokeinterface #158,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     269: checkcast     #160                // class java/lang/String
     272: iconst_1
     273: invokevirtual #206                // Method java/lang/String.charAt:(I)C
     276: invokestatic  #209                // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     279: invokespecial #66                 // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     282: aload         12
     284: iconst_1
     285: invokeinterface #158,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     290: checkcast     #160                // class java/lang/String
     293: iconst_0
     294: invokevirtual #206                // Method java/lang/String.charAt:(I)C
     297: invokestatic  #209                // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     300: invokestatic  #88                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     303: astore        12
     305: aload         11
     307: aload         12
     309: invokevirtual #62                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     312: aload         12
     314: invokevirtual #95                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     317: invokeinterface #213,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     322: pop
     323: goto          206
     326: aload         7
     328: nop
     329: astore_2
     330: new           #215                // class java/lang/StringBuilder
     333: dup
     334: invokespecial #217                // Method java/lang/StringBuilder."<init>":()V
     337: aload_1
     338: invokevirtual #221                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     341: bipush        32
     343: invokevirtual #224                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     346: invokevirtual #228                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     349: checkcast     #177                // class java/lang/CharSequence
     352: invokestatic  #232                // Method kotlin/text/StringsKt.zipWithNext:(Ljava/lang/CharSequence;)Ljava/util/List;
     355: checkcast     #26                 // class java/lang/Iterable
     358: astore        4
     360: iconst_0
     361: istore        5
     363: new           #234                // class day14/ResultKt$main$$inlined$groupingBy$1
     366: dup
     367: aload         4
     369: invokespecial #237                // Method day14/ResultKt$main$$inlined$groupingBy$1."<init>":(Ljava/lang/Iterable;)V
     372: checkcast     #239                // class kotlin/collections/Grouping
     375: invokestatic  #245                // Method kotlin/collections/GroupingKt.eachCount:(Lkotlin/collections/Grouping;)Ljava/util/Map;
     378: astore        4
     380: iconst_0
     381: istore        5
     383: aload         4
     385: astore        6
     387: new           #166                // class java/util/ArrayList
     390: dup
     391: aload         4
     393: invokeinterface #249,  1          // InterfaceMethod java/util/Map.size:()I
     398: invokespecial #173                // Method java/util/ArrayList."<init>":(I)V
     401: checkcast     #175                // class java/util/Collection
     404: astore        7
     406: iconst_0
     407: istore        8
     409: aload         6
     411: invokeinterface #24,  1           // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     416: invokeinterface #252,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     421: astore        9
     423: aload         9
     425: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     430: ifeq          506
     433: aload         9
     435: invokeinterface #46,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     440: checkcast     #48                 // class java/util/Map$Entry
     443: astore        10
     445: aload         7
     447: aload         10
     449: astore        11
     451: astore        15
     453: iconst_0
     454: istore        12
     456: aload         11
     458: invokeinterface #51,  1           // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     463: checkcast     #59                 // class kotlin/Pair
     466: astore        13
     468: aload         11
     470: invokeinterface #75,  1           // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     475: checkcast     #77                 // class java/lang/Number
     478: invokevirtual #255                // Method java/lang/Number.intValue:()I
     481: istore        14
     483: aload         13
     485: iload         14
     487: i2l
     488: invokestatic  #82                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     491: invokestatic  #88                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     494: aload         15
     496: swap
     497: invokeinterface #189,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     502: pop
     503: goto          423
     506: aload         7
     508: checkcast     #155                // class java/util/List
     511: nop
     512: checkcast     #26                 // class java/lang/Iterable
     515: invokestatic  #259                // Method kotlin/collections/MapsKt.toMap:(Ljava/lang/Iterable;)Ljava/util/Map;
     518: astore_3
     519: aload_2
     520: aload_3
     521: bipush        10
     523: invokestatic  #261                // Method solve:(Ljava/util/Map;Ljava/util/Map;I)J
     526: lstore        4
     528: getstatic     #267                // Field java/lang/System.out:Ljava/io/PrintStream;
     531: lload         4
     533: invokevirtual #273                // Method java/io/PrintStream.println:(J)V
     536: aload_2
     537: aload_3
     538: bipush        40
     540: invokestatic  #261                // Method solve:(Ljava/util/Map;Ljava/util/Map;I)J
     543: lstore        4
     545: getstatic     #267                // Field java/lang/System.out:Ljava/io/PrintStream;
     548: lload         4
     550: invokevirtual #273                // Method java/io/PrintStream.println:(J)V
     553: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #299                // Method main:()V
       3: return
}


package day13

import java.io.File
import kotlin.math.abs

fun main() {
    val input = File("src/day13/input.txt").readText()

    val coords = Regex("([0-9]*),([0-9]*)").findAll(input)
        .map { Pair(it.groupValues[1].toInt(), it.groupValues[2].toInt()) }
        .toSet()
    val folds = Regex("fold along ([xy])=([0-9]*)").findAll(input)
        .map { Pair(it.groupValues[1], it.groupValues[2].toInt()) }
        .toList()

    println(coords.map { p -> p.fold(folds[0]) }.toSet().size)
    folds.fold(coords) { c, f -> c.map { p -> p.fold(f) }.toSet() }.output()
}

fun Pair<Int, Int>.fold(fold: Pair<String, Int>) = Pair(
    if (fold.first == "x") fold.second - abs(first - fold.second) else first,
    if (fold.first == "y") fold.second - abs(second - fold.second) else second
)

fun Set<Pair<Int, Int>>.output() {
    (0..maxOf { it.second }).forEach { y ->
        (0..maxOf { it.first }).forEach { x ->
            print(if (contains(Pair(x, y))) "#" else ".")
        }
        println()
    }
    println()
}

Compiled from "result.kt"
public final class day13.ResultKt {
  public static final void main();
    Code:
       0: new           #8                  // class java/io/File
       3: dup
       4: ldc           #10                 // String src/day13/input.txt
       6: invokespecial #14                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #20                 // Method kotlin/io/FilesKt.readText$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/lang/String;
      15: astore_0
      16: new           #22                 // class kotlin/text/Regex
      19: dup
      20: ldc           #24                 // String ([0-9]*),([0-9]*)
      22: invokespecial #25                 // Method kotlin/text/Regex."<init>":(Ljava/lang/String;)V
      25: aload_0
      26: checkcast     #27                 // class java/lang/CharSequence
      29: iconst_0
      30: iconst_2
      31: aconst_null
      32: invokestatic  #31                 // Method kotlin/text/Regex.findAll$default:(Lkotlin/text/Regex;Ljava/lang/CharSequence;IILjava/lang/Object;)Lkotlin/sequences/Sequence;
      35: invokedynamic #50,  0             // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
      40: invokestatic  #56                 // Method kotlin/sequences/SequencesKt.map:(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
      43: invokestatic  #60                 // Method kotlin/sequences/SequencesKt.toSet:(Lkotlin/sequences/Sequence;)Ljava/util/Set;
      46: astore_1
      47: new           #22                 // class kotlin/text/Regex
      50: dup
      51: ldc           #62                 // String fold along ([xy])=([0-9]*)
      53: invokespecial #25                 // Method kotlin/text/Regex."<init>":(Ljava/lang/String;)V
      56: aload_0
      57: checkcast     #27                 // class java/lang/CharSequence
      60: iconst_0
      61: iconst_2
      62: aconst_null
      63: invokestatic  #31                 // Method kotlin/text/Regex.findAll$default:(Lkotlin/text/Regex;Ljava/lang/CharSequence;IILjava/lang/Object;)Lkotlin/sequences/Sequence;
      66: invokedynamic #67,  0             // InvokeDynamic #1:invoke:()Lkotlin/jvm/functions/Function1;
      71: invokestatic  #56                 // Method kotlin/sequences/SequencesKt.map:(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
      74: invokestatic  #71                 // Method kotlin/sequences/SequencesKt.toList:(Lkotlin/sequences/Sequence;)Ljava/util/List;
      77: astore_2
      78: aload_1
      79: checkcast     #73                 // class java/lang/Iterable
      82: astore_3
      83: iconst_0
      84: istore        4
      86: aload_3
      87: astore        5
      89: new           #75                 // class java/util/ArrayList
      92: dup
      93: aload_3
      94: bipush        10
      96: invokestatic  #81                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      99: invokespecial #84                 // Method java/util/ArrayList."<init>":(I)V
     102: checkcast     #86                 // class java/util/Collection
     105: astore        6
     107: iconst_0
     108: istore        7
     110: aload         5
     112: invokeinterface #90,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     117: astore        8
     119: aload         8
     121: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     126: ifeq          179
     129: aload         8
     131: invokeinterface #100,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     136: astore        9
     138: aload         6
     140: aload         9
     142: checkcast     #102                // class kotlin/Pair
     145: astore        10
     147: astore        21
     149: iconst_0
     150: istore        11
     152: aload         10
     154: aload_2
     155: iconst_0
     156: invokeinterface #108,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     161: checkcast     #102                // class kotlin/Pair
     164: invokestatic  #112                // Method fold:(Lkotlin/Pair;Lkotlin/Pair;)Lkotlin/Pair;
     167: aload         21
     169: swap
     170: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     175: pop
     176: goto          119
     179: aload         6
     181: checkcast     #104                // class java/util/List
     184: nop
     185: checkcast     #73                 // class java/lang/Iterable
     188: invokestatic  #119                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     191: invokeinterface #125,  1          // InterfaceMethod java/util/Set.size:()I
     196: istore_3
     197: getstatic     #131                // Field java/lang/System.out:Ljava/io/PrintStream;
     200: iload_3
     201: invokevirtual #136                // Method java/io/PrintStream.println:(I)V
     204: aload_2
     205: checkcast     #73                 // class java/lang/Iterable
     208: astore_3
     209: iconst_0
     210: istore        4
     212: aload_1
     213: astore        5
     215: aload_3
     216: invokeinterface #90,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     221: astore        6
     223: aload         6
     225: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     230: ifeq          370
     233: aload         6
     235: invokeinterface #100,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     240: astore        7
     242: aload         5
     244: aload         7
     246: checkcast     #102                // class kotlin/Pair
     249: astore        8
     251: astore        9
     253: iconst_0
     254: istore        10
     256: aload         9
     258: checkcast     #73                 // class java/lang/Iterable
     261: astore        11
     263: iconst_0
     264: istore        12
     266: aload         11
     268: astore        13
     270: new           #75                 // class java/util/ArrayList
     273: dup
     274: aload         11
     276: bipush        10
     278: invokestatic  #81                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     281: invokespecial #84                 // Method java/util/ArrayList."<init>":(I)V
     284: checkcast     #86                 // class java/util/Collection
     287: astore        14
     289: iconst_0
     290: istore        15
     292: aload         13
     294: invokeinterface #90,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     299: astore        16
     301: aload         16
     303: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     308: ifeq          353
     311: aload         16
     313: invokeinterface #100,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     318: astore        17
     320: aload         14
     322: aload         17
     324: checkcast     #102                // class kotlin/Pair
     327: astore        18
     329: astore        19
     331: iconst_0
     332: istore        20
     334: aload         18
     336: aload         8
     338: invokestatic  #112                // Method fold:(Lkotlin/Pair;Lkotlin/Pair;)Lkotlin/Pair;
     341: aload         19
     343: swap
     344: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     349: pop
     350: goto          301
     353: aload         14
     355: checkcast     #104                // class java/util/List
     358: nop
     359: checkcast     #73                 // class java/lang/Iterable
     362: invokestatic  #119                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     365: astore        5
     367: goto          223
     370: aload         5
     372: invokestatic  #140                // Method output:(Ljava/util/Set;)V
     375: return

  public static final kotlin.Pair<java.lang.Integer, java.lang.Integer> fold(kotlin.Pair<java.lang.Integer, java.lang.Integer>, kotlin.Pair<java.lang.String, java.lang.Integer>);
    Code:
       0: aload_0
       1: ldc           #173                // String <this>
       3: invokestatic  #179                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #180                // String fold
       9: invokestatic  #179                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: new           #102                // class kotlin/Pair
      15: dup
      16: aload_1
      17: invokevirtual #183                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      20: ldc           #185                // String x
      22: invokestatic  #189                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      25: ifeq          66
      28: aload_1
      29: invokevirtual #192                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      32: checkcast     #194                // class java/lang/Number
      35: invokevirtual #197                // Method java/lang/Number.intValue:()I
      38: aload_0
      39: invokevirtual #183                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      42: checkcast     #194                // class java/lang/Number
      45: invokevirtual #197                // Method java/lang/Number.intValue:()I
      48: aload_1
      49: invokevirtual #192                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      52: checkcast     #194                // class java/lang/Number
      55: invokevirtual #197                // Method java/lang/Number.intValue:()I
      58: isub
      59: invokestatic  #203                // Method java/lang/Math.abs:(I)I
      62: isub
      63: goto          76
      66: aload_0
      67: invokevirtual #183                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      70: checkcast     #194                // class java/lang/Number
      73: invokevirtual #197                // Method java/lang/Number.intValue:()I
      76: invokestatic  #209                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      79: aload_1
      80: invokevirtual #183                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      83: ldc           #211                // String y
      85: invokestatic  #189                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      88: ifeq          129
      91: aload_1
      92: invokevirtual #192                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      95: checkcast     #194                // class java/lang/Number
      98: invokevirtual #197                // Method java/lang/Number.intValue:()I
     101: aload_0
     102: invokevirtual #192                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     105: checkcast     #194                // class java/lang/Number
     108: invokevirtual #197                // Method java/lang/Number.intValue:()I
     111: aload_1
     112: invokevirtual #192                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     115: checkcast     #194                // class java/lang/Number
     118: invokevirtual #197                // Method java/lang/Number.intValue:()I
     121: isub
     122: invokestatic  #203                // Method java/lang/Math.abs:(I)I
     125: isub
     126: goto          139
     129: aload_0
     130: invokevirtual #192                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     133: checkcast     #194                // class java/lang/Number
     136: invokevirtual #197                // Method java/lang/Number.intValue:()I
     139: invokestatic  #209                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     142: invokespecial #214                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     145: areturn

  public static final void output(java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>>);
    Code:
       0: aload_0
       1: ldc           #173                // String <this>
       3: invokestatic  #179                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: iconst_0
       7: aload_0
       8: checkcast     #73                 // class java/lang/Iterable
      11: astore_1
      12: istore        15
      14: aload_1
      15: invokeinterface #90,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      20: astore_2
      21: aload_2
      22: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      27: ifne          38
      30: new           #218                // class java/util/NoSuchElementException
      33: dup
      34: invokespecial #220                // Method java/util/NoSuchElementException."<init>":()V
      37: athrow
      38: aload_2
      39: invokeinterface #100,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      44: checkcast     #102                // class kotlin/Pair
      47: astore_3
      48: iconst_0
      49: istore        4
      51: aload_3
      52: invokevirtual #192                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      55: checkcast     #194                // class java/lang/Number
      58: invokevirtual #197                // Method java/lang/Number.intValue:()I
      61: istore_3
      62: aload_2
      63: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      68: ifeq          110
      71: aload_2
      72: invokeinterface #100,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      77: checkcast     #102                // class kotlin/Pair
      80: astore        4
      82: iconst_0
      83: istore        5
      85: aload         4
      87: invokevirtual #192                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      90: checkcast     #194                // class java/lang/Number
      93: invokevirtual #197                // Method java/lang/Number.intValue:()I
      96: istore        4
      98: iload_3
      99: iload         4
     101: if_icmpge     62
     104: iload         4
     106: istore_3
     107: goto          62
     110: iload_3
     111: istore        16
     113: iload         15
     115: iload         16
     117: istore        17
     119: istore        18
     121: new           #222                // class kotlin/ranges/IntRange
     124: dup
     125: iload         18
     127: iload         17
     129: invokespecial #225                // Method kotlin/ranges/IntRange."<init>":(II)V
     132: checkcast     #73                 // class java/lang/Iterable
     135: astore_1
     136: iconst_0
     137: istore_2
     138: aload_1
     139: invokeinterface #90,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     144: astore_3
     145: aload_3
     146: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     151: ifeq          410
     154: aload_3
     155: checkcast     #227                // class kotlin/collections/IntIterator
     158: invokevirtual #230                // Method kotlin/collections/IntIterator.nextInt:()I
     161: istore        4
     163: iload         4
     165: istore        5
     167: iconst_0
     168: istore        6
     170: iconst_0
     171: aload_0
     172: checkcast     #73                 // class java/lang/Iterable
     175: astore        7
     177: istore        8
     179: aload         7
     181: invokeinterface #90,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     186: astore        9
     188: aload         9
     190: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     195: ifne          206
     198: new           #218                // class java/util/NoSuchElementException
     201: dup
     202: invokespecial #220                // Method java/util/NoSuchElementException."<init>":()V
     205: athrow
     206: aload         9
     208: invokeinterface #100,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     213: checkcast     #102                // class kotlin/Pair
     216: astore        10
     218: iconst_0
     219: istore        11
     221: aload         10
     223: invokevirtual #183                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     226: checkcast     #194                // class java/lang/Number
     229: invokevirtual #197                // Method java/lang/Number.intValue:()I
     232: istore        10
     234: aload         9
     236: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     241: ifeq          286
     244: aload         9
     246: invokeinterface #100,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     251: checkcast     #102                // class kotlin/Pair
     254: astore        11
     256: iconst_0
     257: istore        12
     259: aload         11
     261: invokevirtual #183                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     264: checkcast     #194                // class java/lang/Number
     267: invokevirtual #197                // Method java/lang/Number.intValue:()I
     270: istore        11
     272: iload         10
     274: iload         11
     276: if_icmpge     234
     279: iload         11
     281: istore        10
     283: goto          234
     286: iload         10
     288: istore        13
     290: iload         8
     292: iload         13
     294: istore        19
     296: istore        20
     298: new           #222                // class kotlin/ranges/IntRange
     301: dup
     302: iload         20
     304: iload         19
     306: invokespecial #225                // Method kotlin/ranges/IntRange."<init>":(II)V
     309: checkcast     #73                 // class java/lang/Iterable
     312: astore        7
     314: iconst_0
     315: istore        9
     317: aload         7
     319: invokeinterface #90,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     324: astore        10
     326: aload         10
     328: invokeinterface #96,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     333: ifeq          398
     336: aload         10
     338: checkcast     #227                // class kotlin/collections/IntIterator
     341: invokevirtual #230                // Method kotlin/collections/IntIterator.nextInt:()I
     344: istore        11
     346: iload         11
     348: istore        12
     350: iconst_0
     351: istore        14
     353: aload_0
     354: new           #102                // class kotlin/Pair
     357: dup
     358: iload         12
     360: invokestatic  #209                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     363: iload         5
     365: invokestatic  #209                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     368: invokespecial #214                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     371: invokeinterface #233,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     376: ifeq          384
     379: ldc           #235                // String #
     381: goto          386
     384: ldc           #237                // String .
     386: getstatic     #131                // Field java/lang/System.out:Ljava/io/PrintStream;
     389: swap
     390: invokevirtual #241                // Method java/io/PrintStream.print:(Ljava/lang/Object;)V
     393: nop
     394: nop
     395: goto          326
     398: nop
     399: getstatic     #131                // Field java/lang/System.out:Ljava/io/PrintStream;
     402: invokevirtual #243                // Method java/io/PrintStream.println:()V
     405: nop
     406: nop
     407: goto          145
     410: nop
     411: getstatic     #131                // Field java/lang/System.out:Ljava/io/PrintStream;
     414: invokevirtual #243                // Method java/io/PrintStream.println:()V
     417: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #254                // Method main:()V
       3: return

  private static final kotlin.Pair main$lambda$0(kotlin.text.MatchResult);
    Code:
       0: aload_0
       1: ldc_w         #257                // String it
       4: invokestatic  #179                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: new           #102                // class kotlin/Pair
      10: dup
      11: aload_0
      12: invokeinterface #263,  1          // InterfaceMethod kotlin/text/MatchResult.getGroupValues:()Ljava/util/List;
      17: iconst_1
      18: invokeinterface #108,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      23: checkcast     #169                // class java/lang/String
      26: invokestatic  #267                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
      29: invokestatic  #209                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aload_0
      33: invokeinterface #263,  1          // InterfaceMethod kotlin/text/MatchResult.getGroupValues:()Ljava/util/List;
      38: iconst_2
      39: invokeinterface #108,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      44: checkcast     #169                // class java/lang/String
      47: invokestatic  #267                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
      50: invokestatic  #209                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      53: invokespecial #214                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
      56: areturn

  private static final kotlin.Pair main$lambda$1(kotlin.text.MatchResult);
    Code:
       0: aload_0
       1: ldc_w         #257                // String it
       4: invokestatic  #179                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: new           #102                // class kotlin/Pair
      10: dup
      11: aload_0
      12: invokeinterface #263,  1          // InterfaceMethod kotlin/text/MatchResult.getGroupValues:()Ljava/util/List;
      17: iconst_1
      18: invokeinterface #108,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      23: aload_0
      24: invokeinterface #263,  1          // InterfaceMethod kotlin/text/MatchResult.getGroupValues:()Ljava/util/List;
      29: iconst_2
      30: invokeinterface #108,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      35: checkcast     #169                // class java/lang/String
      38: invokestatic  #267                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
      41: invokestatic  #209                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      44: invokespecial #214                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
      47: areturn
}