package com.mobiento.aoc

fun Pair<Int, Int>.toSequence(): Set<Int> {
    val result = arrayListOf<Int>()
    for (x in first .. second) {
        result.add(x)
    }
    return result.toSet()
}

class Day04 {

    companion object {
        val regex = "(\\d+)-(\\d+),(\\d+)-(\\d+)".toRegex()
    }

    fun part1(input: List<String>): Int {
        return input.sumOf { line ->
            regex.matchEntire(line)?.groups?.let { matchGroups ->
                val firstPair = Pair(extractIntVal(matchGroups, 1), extractIntVal(matchGroups, 2))
                val secondPair = Pair(extractIntVal(matchGroups, 3), extractIntVal(matchGroups, 4))
                calculatePairForPartOne(firstPair, secondPair)
            } ?: 0
        }
    }

    private fun extractIntVal(matchGroups: MatchGroupCollection, index: Int): Int {
        val group = matchGroups[index]
        val value = group?.value
        return value?.toInt() ?: 0
    }

    private fun calculatePairForPartOne(first: Pair<Int, Int>, second: Pair<Int, Int>): Int {
        return if (isEncompassing(first, second)) 1 else 0
    }

    fun isEncompassing(firstPair: Pair<Int, Int>, secondPair: Pair<Int, Int>): Boolean {
        return (firstPair.first >= secondPair.first && firstPair.second <= secondPair.second) ||
                (secondPair.first >= firstPair.first && secondPair.second <= firstPair.second)
    }

    fun part2(input: List<String>): Int {
        return input.sumOf { line ->
            regex.matchEntire(line)?.groups?.let { matchGroups ->
                val firstPair = Pair(extractIntVal(matchGroups, 1), extractIntVal(matchGroups, 2))
                val secondPair = Pair(extractIntVal(matchGroups, 3), extractIntVal(matchGroups, 4))
                calculatePairForPartTwo(firstPair, secondPair)
            } ?: 0
        }
    }

    fun isOverlapping(first: Pair<Int, Int>, second: Pair<Int, Int>): Boolean {
        return first.toSequence().intersect(second.toSequence()).isNotEmpty()
    }

    fun calculatePairForPartTwo(first: Pair<Int, Int>, second: Pair<Int, Int>): Int {
        return if (isOverlapping(first, second)) 1 else 0
    }

}

Compiled from "Day04.kt"
public final class com.mobiento.aoc.Day04$Companion {
  private com.mobiento.aoc.Day04$Companion();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final kotlin.text.Regex getRegex();
    Code:
       0: invokestatic  #18                 // Method com/mobiento/aoc/Day04.access$getRegex$cp:()Lkotlin/text/Regex;
       3: areturn

  public com.mobiento.aoc.Day04$Companion(kotlin.jvm.internal.DefaultConstructorMarker);
    Code:
       0: aload_0
       1: invokespecial #20                 // Method "<init>":()V
       4: return
}

Compiled from "Day04.kt"
public final class com.mobiento.aoc.Day04Kt {
  public static final java.util.Set<java.lang.Integer> toSequence(kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_0
       1: ldc           #10                 // String <this>
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #18                 // class java/util/ArrayList
       9: dup
      10: invokespecial #22                 // Method java/util/ArrayList."<init>":()V
      13: astore_1
      14: aload_0
      15: invokevirtual #28                 // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      18: checkcast     #30                 // class java/lang/Number
      21: invokevirtual #34                 // Method java/lang/Number.intValue:()I
      24: istore_2
      25: aload_0
      26: invokevirtual #37                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      29: checkcast     #30                 // class java/lang/Number
      32: invokevirtual #34                 // Method java/lang/Number.intValue:()I
      35: istore_3
      36: iload_2
      37: iload_3
      38: if_icmpgt     61
      41: aload_1
      42: iload_2
      43: invokestatic  #43                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      46: invokevirtual #47                 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
      49: pop
      50: iload_2
      51: iload_3
      52: if_icmpeq     61
      55: iinc          2, 1
      58: goto          41
      61: aload_1
      62: checkcast     #49                 // class java/lang/Iterable
      65: invokestatic  #55                 // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
      68: areturn
}

Compiled from "Day04.kt"
public final class com.mobiento.aoc.Day04 {
  public static final com.mobiento.aoc.Day04$Companion Companion;

  private static final kotlin.text.Regex regex;

  public com.mobiento.aoc.Day04();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final int part1(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #24                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: invokeinterface #28,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      19: astore        4
      21: aload         4
      23: invokeinterface #34,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      28: ifeq          165
      31: aload         4
      33: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      38: astore        5
      40: iload_3
      41: aload         5
      43: checkcast     #40                 // class java/lang/String
      46: astore        6
      48: istore        12
      50: iconst_0
      51: istore        7
      53: getstatic     #44                 // Field regex:Lkotlin/text/Regex;
      56: aload         6
      58: checkcast     #46                 // class java/lang/CharSequence
      61: invokevirtual #52                 // Method kotlin/text/Regex.matchEntire:(Ljava/lang/CharSequence;)Lkotlin/text/MatchResult;
      64: dup
      65: ifnull        152
      68: invokeinterface #58,  1           // InterfaceMethod kotlin/text/MatchResult.getGroups:()Lkotlin/text/MatchGroupCollection;
      73: dup
      74: ifnull        152
      77: astore        8
      79: iconst_0
      80: istore        9
      82: new           #60                 // class kotlin/Pair
      85: dup
      86: aload_0
      87: aload         8
      89: iconst_1
      90: invokespecial #64                 // Method extractIntVal:(Lkotlin/text/MatchGroupCollection;I)I
      93: invokestatic  #70                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      96: aload_0
      97: aload         8
      99: iconst_2
     100: invokespecial #64                 // Method extractIntVal:(Lkotlin/text/MatchGroupCollection;I)I
     103: invokestatic  #70                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     106: invokespecial #73                 // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     109: astore        10
     111: new           #60                 // class kotlin/Pair
     114: dup
     115: aload_0
     116: aload         8
     118: iconst_3
     119: invokespecial #64                 // Method extractIntVal:(Lkotlin/text/MatchGroupCollection;I)I
     122: invokestatic  #70                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     125: aload_0
     126: aload         8
     128: iconst_4
     129: invokespecial #64                 // Method extractIntVal:(Lkotlin/text/MatchGroupCollection;I)I
     132: invokestatic  #70                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     135: invokespecial #73                 // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     138: astore        11
     140: aload_0
     141: aload         10
     143: aload         11
     145: invokespecial #77                 // Method calculatePairForPartOne:(Lkotlin/Pair;Lkotlin/Pair;)I
     148: nop
     149: goto          154
     152: pop
     153: iconst_0
     154: istore        13
     156: iload         12
     158: iload         13
     160: iadd
     161: istore_3
     162: goto          21
     165: iload_3
     166: ireturn

  private final int extractIntVal(kotlin.text.MatchGroupCollection, int);
    Code:
       0: aload_1
       1: iload_2
       2: invokeinterface #96,  2           // InterfaceMethod kotlin/text/MatchGroupCollection.get:(I)Lkotlin/text/MatchGroup;
       7: astore_3
       8: aload_3
       9: dup
      10: ifnull        19
      13: invokevirtual #102                // Method kotlin/text/MatchGroup.getValue:()Ljava/lang/String;
      16: goto          21
      19: pop
      20: aconst_null
      21: astore        4
      23: aload         4
      25: dup
      26: ifnull        35
      29: invokestatic  #106                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
      32: goto          37
      35: pop
      36: iconst_0
      37: ireturn

  private final int calculatePairForPartOne(kotlin.Pair<java.lang.Integer, java.lang.Integer>, kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokevirtual #115                // Method isEncompassing:(Lkotlin/Pair;Lkotlin/Pair;)Z
       6: ifeq          13
       9: iconst_1
      10: goto          14
      13: iconst_0
      14: ireturn

  public final boolean isEncompassing(kotlin.Pair<java.lang.Integer, java.lang.Integer>, kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: ldc           #119                // String firstPair
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #120                // String secondPair
       9: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_1
      13: invokevirtual #123                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      16: checkcast     #125                // class java/lang/Number
      19: invokevirtual #129                // Method java/lang/Number.intValue:()I
      22: aload_2
      23: invokevirtual #123                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      26: checkcast     #125                // class java/lang/Number
      29: invokevirtual #129                // Method java/lang/Number.intValue:()I
      32: if_icmplt     58
      35: aload_1
      36: invokevirtual #132                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      39: checkcast     #125                // class java/lang/Number
      42: invokevirtual #129                // Method java/lang/Number.intValue:()I
      45: aload_2
      46: invokevirtual #132                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      49: checkcast     #125                // class java/lang/Number
      52: invokevirtual #129                // Method java/lang/Number.intValue:()I
      55: if_icmple     104
      58: aload_2
      59: invokevirtual #123                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      62: checkcast     #125                // class java/lang/Number
      65: invokevirtual #129                // Method java/lang/Number.intValue:()I
      68: aload_1
      69: invokevirtual #123                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      72: checkcast     #125                // class java/lang/Number
      75: invokevirtual #129                // Method java/lang/Number.intValue:()I
      78: if_icmplt     108
      81: aload_2
      82: invokevirtual #132                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      85: checkcast     #125                // class java/lang/Number
      88: invokevirtual #129                // Method java/lang/Number.intValue:()I
      91: aload_1
      92: invokevirtual #132                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      95: checkcast     #125                // class java/lang/Number
      98: invokevirtual #129                // Method java/lang/Number.intValue:()I
     101: if_icmpgt     108
     104: iconst_1
     105: goto          109
     108: iconst_0
     109: ireturn

  public final int part2(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #24                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: invokeinterface #28,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      19: astore        4
      21: aload         4
      23: invokeinterface #34,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      28: ifeq          165
      31: aload         4
      33: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      38: astore        5
      40: iload_3
      41: aload         5
      43: checkcast     #40                 // class java/lang/String
      46: astore        6
      48: istore        12
      50: iconst_0
      51: istore        7
      53: getstatic     #44                 // Field regex:Lkotlin/text/Regex;
      56: aload         6
      58: checkcast     #46                 // class java/lang/CharSequence
      61: invokevirtual #52                 // Method kotlin/text/Regex.matchEntire:(Ljava/lang/CharSequence;)Lkotlin/text/MatchResult;
      64: dup
      65: ifnull        152
      68: invokeinterface #58,  1           // InterfaceMethod kotlin/text/MatchResult.getGroups:()Lkotlin/text/MatchGroupCollection;
      73: dup
      74: ifnull        152
      77: astore        8
      79: iconst_0
      80: istore        9
      82: new           #60                 // class kotlin/Pair
      85: dup
      86: aload_0
      87: aload         8
      89: iconst_1
      90: invokespecial #64                 // Method extractIntVal:(Lkotlin/text/MatchGroupCollection;I)I
      93: invokestatic  #70                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      96: aload_0
      97: aload         8
      99: iconst_2
     100: invokespecial #64                 // Method extractIntVal:(Lkotlin/text/MatchGroupCollection;I)I
     103: invokestatic  #70                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     106: invokespecial #73                 // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     109: astore        10
     111: new           #60                 // class kotlin/Pair
     114: dup
     115: aload_0
     116: aload         8
     118: iconst_3
     119: invokespecial #64                 // Method extractIntVal:(Lkotlin/text/MatchGroupCollection;I)I
     122: invokestatic  #70                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     125: aload_0
     126: aload         8
     128: iconst_4
     129: invokespecial #64                 // Method extractIntVal:(Lkotlin/text/MatchGroupCollection;I)I
     132: invokestatic  #70                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     135: invokespecial #73                 // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     138: astore        11
     140: aload_0
     141: aload         10
     143: aload         11
     145: invokevirtual #136                // Method calculatePairForPartTwo:(Lkotlin/Pair;Lkotlin/Pair;)I
     148: nop
     149: goto          154
     152: pop
     153: iconst_0
     154: istore        13
     156: iload         12
     158: iload         13
     160: iadd
     161: istore_3
     162: goto          21
     165: iload_3
     166: ireturn

  public final boolean isOverlapping(kotlin.Pair<java.lang.Integer, java.lang.Integer>, kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: ldc           #140                // String first
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #141                // String second
       9: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_1
      13: invokestatic  #147                // Method com/mobiento/aoc/Day04Kt.toSequence:(Lkotlin/Pair;)Ljava/util/Set;
      16: checkcast     #24                 // class java/lang/Iterable
      19: aload_2
      20: invokestatic  #147                // Method com/mobiento/aoc/Day04Kt.toSequence:(Lkotlin/Pair;)Ljava/util/Set;
      23: checkcast     #24                 // class java/lang/Iterable
      26: invokestatic  #153                // Method kotlin/collections/CollectionsKt.intersect:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
      29: checkcast     #155                // class java/util/Collection
      32: invokeinterface #158,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
      37: ifne          44
      40: iconst_1
      41: goto          45
      44: iconst_0
      45: ireturn

  public final int calculatePairForPartTwo(kotlin.Pair<java.lang.Integer, java.lang.Integer>, kotlin.Pair<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: ldc           #140                // String first
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #141                // String second
       9: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: aload_1
      14: aload_2
      15: invokevirtual #160                // Method isOverlapping:(Lkotlin/Pair;Lkotlin/Pair;)Z
      18: ifeq          25
      21: iconst_1
      22: goto          26
      25: iconst_0
      26: ireturn

  public static final kotlin.text.Regex access$getRegex$cp();
    Code:
       0: getstatic     #44                 // Field regex:Lkotlin/text/Regex;
       3: areturn

  static {};
    Code:
       0: new           #165                // class com/mobiento/aoc/Day04$Companion
       3: dup
       4: aconst_null
       5: invokespecial #168                // Method com/mobiento/aoc/Day04$Companion."<init>":(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
       8: putstatic     #172                // Field Companion:Lcom/mobiento/aoc/Day04$Companion;
      11: new           #48                 // class kotlin/text/Regex
      14: dup
      15: ldc           #174                // String (\\d+)-(\\d+),(\\d+)-(\\d+)
      17: invokespecial #177                // Method kotlin/text/Regex."<init>":(Ljava/lang/String;)V
      20: putstatic     #44                 // Field regex:Lkotlin/text/Regex;
      23: return
}


package com.mobiento.aoc

class Day02 {

    fun part1(input: List<String>): Int {
        return input.sumOf { line ->
            line.split(" ").takeIf { it.size >= 2 }?.let { parts ->
                scoreForRoundPart1(parts[0], parts[1])
            } ?: 0
        }
    }

    fun scoreForRoundPart1(a: String, b: String): Int {
        val opponentChoice = Choice.fromOpponentChoice(a)
        val playerChoice = Choice.fromPlayerChoice(b)
        val outcome = calculateOutcome(opponentChoice, playerChoice)
        return outcome.value + playerChoice.value
    }

    fun part2(input: List<String>): Int {
        return input.sumOf { line ->
            line.split(" ").takeIf { it.size >= 2 }?.let { parts ->
                scoreForRoundPart2(parts[0], parts[1])
            } ?: 0
        }
    }

    fun scoreForRoundPart2(a: String, b: String): Int {
        val opponentChoice = Choice.fromOpponentChoice(a)
        val expectedOutcome = Outcome.fromSource(b)
        val playerChoice = playerChoiceForOutcome(opponentChoice, expectedOutcome)
        return expectedOutcome.value + playerChoice.value
    }

    enum class Outcome(val source: String, val value: Int) {
        LOSE("X", 0),
        DRAW("Y", 3),
        WIN("Z", 6);

        companion object {
            fun fromSource(source: String): Outcome {
                return values().find { it.source == source } ?: throw Exception("No matching source: $source")
            }
        }
    }

    enum class Choice(val opponentChoice: String, val playerChoice: String, val value: Int) {
        ROCK("A", "X", 1),
        PAPER("B", "Y", 2),
        SCISSORS("C", "Z", 3);

        companion object {
            fun fromPlayerChoice(choice: String): Choice {
                return values().find { it.playerChoice == choice } ?: throw Exception("No matching choice for $choice")
            }
            fun fromOpponentChoice(choice: String): Choice {
                return values().find { it.opponentChoice == choice } ?: throw Exception("No matching choice for $choice")
            }
        }

    }

    private fun playerChoiceForOutcome(opponentChoice: Choice, expectedOutcome: Outcome): Choice {
        return when (opponentChoice) {
            Choice.ROCK -> when (expectedOutcome) {
                Outcome.LOSE -> Choice.SCISSORS
                Outcome.DRAW -> Choice.ROCK
                Outcome.WIN -> Choice.PAPER
            }
            Choice.PAPER -> when (expectedOutcome) {
                Outcome.LOSE -> Choice.ROCK
                Outcome.DRAW -> Choice.PAPER
                Outcome.WIN -> Choice.SCISSORS
            }
            Choice.SCISSORS -> when(expectedOutcome) {
                Outcome.LOSE -> Choice.PAPER
                Outcome.DRAW -> Choice.SCISSORS
                Outcome.WIN -> Choice.ROCK
            }
        }
    }

    private fun calculateOutcome(opponentChoice: Choice, playerChoice: Choice): Outcome {
        return when (opponentChoice) {
            Choice.ROCK -> when (playerChoice) {
                Choice.ROCK -> Outcome.DRAW
                Choice.PAPER -> Outcome.WIN
                Choice.SCISSORS -> Outcome.LOSE
            }
            Choice.PAPER -> when (playerChoice) {
                Choice.ROCK -> Outcome.LOSE
                Choice.PAPER -> Outcome.DRAW
                Choice.SCISSORS -> Outcome.WIN
            }
            Choice.SCISSORS -> when (playerChoice) {
                Choice.ROCK -> Outcome.WIN
                Choice.PAPER -> Outcome.LOSE
                Choice.SCISSORS -> Outcome.DRAW
            }
        }
    }

}

Compiled from "Day02.kt"
public final class com.mobiento.aoc.Day02$Choice extends java.lang.Enum<com.mobiento.aoc.Day02$Choice> {
  public static final com.mobiento.aoc.Day02$Choice$Companion Companion;

  private final java.lang.String opponentChoice;

  private final java.lang.String playerChoice;

  private final int value;

  public static final com.mobiento.aoc.Day02$Choice ROCK;

  public static final com.mobiento.aoc.Day02$Choice PAPER;

  public static final com.mobiento.aoc.Day02$Choice SCISSORS;

  private static final com.mobiento.aoc.Day02$Choice[] $VALUES;

  private static final kotlin.enums.EnumEntries $ENTRIES;

  private com.mobiento.aoc.Day02$Choice(java.lang.String, java.lang.String, int);
    Code:
       0: aload_0
       1: aload_1
       2: iload_2
       3: invokespecial #11                 // Method java/lang/Enum."<init>":(Ljava/lang/String;I)V
       6: aload_0
       7: aload_3
       8: putfield      #15                 // Field opponentChoice:Ljava/lang/String;
      11: aload_0
      12: aload         4
      14: putfield      #18                 // Field playerChoice:Ljava/lang/String;
      17: aload_0
      18: iload         5
      20: putfield      #22                 // Field value:I
      23: return

  public final java.lang.String getOpponentChoice();
    Code:
       0: aload_0
       1: getfield      #15                 // Field opponentChoice:Ljava/lang/String;
       4: areturn

  public final java.lang.String getPlayerChoice();
    Code:
       0: aload_0
       1: getfield      #18                 // Field playerChoice:Ljava/lang/String;
       4: areturn

  public final int getValue();
    Code:
       0: aload_0
       1: getfield      #22                 // Field value:I
       4: ireturn

  public static com.mobiento.aoc.Day02$Choice[] values();
    Code:
       0: getstatic     #38                 // Field $VALUES:[Lcom/mobiento/aoc/Day02$Choice;
       3: invokevirtual #44                 // Method java/lang/Object.clone:()Ljava/lang/Object;
       6: checkcast     #45                 // class "[Lcom/mobiento/aoc/Day02$Choice;"
       9: areturn

  public static com.mobiento.aoc.Day02$Choice valueOf(java.lang.String);
    Code:
       0: ldc           #2                  // class com/mobiento/aoc/Day02$Choice
       2: aload_0
       3: invokestatic  #50                 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
       6: checkcast     #2                  // class com/mobiento/aoc/Day02$Choice
       9: areturn

  public static kotlin.enums.EnumEntries<com.mobiento.aoc.Day02$Choice> getEntries();
    Code:
       0: getstatic     #57                 // Field $ENTRIES:Lkotlin/enums/EnumEntries;
       3: areturn

  private static final com.mobiento.aoc.Day02$Choice[] $values();
    Code:
       0: iconst_3
       1: anewarray     #2                  // class com/mobiento/aoc/Day02$Choice
       4: astore_0
       5: aload_0
       6: iconst_0
       7: getstatic     #61                 // Field ROCK:Lcom/mobiento/aoc/Day02$Choice;
      10: aastore
      11: aload_0
      12: iconst_1
      13: getstatic     #64                 // Field PAPER:Lcom/mobiento/aoc/Day02$Choice;
      16: aastore
      17: aload_0
      18: iconst_2
      19: getstatic     #67                 // Field SCISSORS:Lcom/mobiento/aoc/Day02$Choice;
      22: aastore
      23: aload_0
      24: areturn

  static {};
    Code:
       0: new           #2                  // class com/mobiento/aoc/Day02$Choice
       3: dup
       4: ldc           #70                 // String ROCK
       6: iconst_0
       7: ldc           #72                 // String A
       9: ldc           #74                 // String X
      11: iconst_1
      12: invokespecial #76                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
      15: putstatic     #61                 // Field ROCK:Lcom/mobiento/aoc/Day02$Choice;
      18: new           #2                  // class com/mobiento/aoc/Day02$Choice
      21: dup
      22: ldc           #77                 // String PAPER
      24: iconst_1
      25: ldc           #79                 // String B
      27: ldc           #81                 // String Y
      29: iconst_2
      30: invokespecial #76                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
      33: putstatic     #64                 // Field PAPER:Lcom/mobiento/aoc/Day02$Choice;
      36: new           #2                  // class com/mobiento/aoc/Day02$Choice
      39: dup
      40: ldc           #82                 // String SCISSORS
      42: iconst_2
      43: ldc           #84                 // String C
      45: ldc           #86                 // String Z
      47: iconst_3
      48: invokespecial #76                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
      51: putstatic     #67                 // Field SCISSORS:Lcom/mobiento/aoc/Day02$Choice;
      54: invokestatic  #88                 // Method $values:()[Lcom/mobiento/aoc/Day02$Choice;
      57: putstatic     #38                 // Field $VALUES:[Lcom/mobiento/aoc/Day02$Choice;
      60: getstatic     #38                 // Field $VALUES:[Lcom/mobiento/aoc/Day02$Choice;
      63: checkcast     #90                 // class "[Ljava/lang/Enum;"
      66: invokestatic  #96                 // Method kotlin/enums/EnumEntriesKt.enumEntries:([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries;
      69: putstatic     #57                 // Field $ENTRIES:Lkotlin/enums/EnumEntries;
      72: new           #98                 // class com/mobiento/aoc/Day02$Choice$Companion
      75: dup
      76: aconst_null
      77: invokespecial #101                // Method com/mobiento/aoc/Day02$Choice$Companion."<init>":(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
      80: putstatic     #105                // Field Companion:Lcom/mobiento/aoc/Day02$Choice$Companion;
      83: return
}

Compiled from "Day02.kt"
public final class com.mobiento.aoc.Day02$Outcome$Companion {
  private com.mobiento.aoc.Day02$Outcome$Companion();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final com.mobiento.aoc.Day02$Outcome fromSource(java.lang.String);
    Code:
       0: aload_1
       1: ldc           #15                 // String source
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: invokestatic  #27                 // Method com/mobiento/aoc/Day02$Outcome.values:()[Lcom/mobiento/aoc/Day02$Outcome;
       9: astore_2
      10: iconst_0
      11: istore_3
      12: aload_2
      13: arraylength
      14: istore        4
      16: iload_3
      17: iload         4
      19: if_icmpge     57
      22: aload_2
      23: iload_3
      24: aaload
      25: astore        5
      27: aload         5
      29: astore        6
      31: iconst_0
      32: istore        7
      34: aload         6
      36: invokevirtual #31                 // Method com/mobiento/aoc/Day02$Outcome.getSource:()Ljava/lang/String;
      39: aload_1
      40: invokestatic  #35                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      43: ifeq          51
      46: aload         5
      48: goto          58
      51: iinc          3, 1
      54: goto          16
      57: aconst_null
      58: dup
      59: ifnonnull     90
      62: pop
      63: new           #37                 // class java/lang/Exception
      66: dup
      67: new           #39                 // class java/lang/StringBuilder
      70: dup
      71: invokespecial #40                 // Method java/lang/StringBuilder."<init>":()V
      74: ldc           #42                 // String No matching source:
      76: invokevirtual #46                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      79: aload_1
      80: invokevirtual #46                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      83: invokevirtual #49                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      86: invokespecial #52                 // Method java/lang/Exception."<init>":(Ljava/lang/String;)V
      89: athrow
      90: areturn

  public com.mobiento.aoc.Day02$Outcome$Companion(kotlin.jvm.internal.DefaultConstructorMarker);
    Code:
       0: aload_0
       1: invokespecial #61                 // Method "<init>":()V
       4: return
}

Compiled from "Day02.kt"
public final class com.mobiento.aoc.Day02$Choice$Companion {
  private com.mobiento.aoc.Day02$Choice$Companion();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final com.mobiento.aoc.Day02$Choice fromPlayerChoice(java.lang.String);
    Code:
       0: aload_1
       1: ldc           #15                 // String choice
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: invokestatic  #27                 // Method com/mobiento/aoc/Day02$Choice.values:()[Lcom/mobiento/aoc/Day02$Choice;
       9: astore_2
      10: iconst_0
      11: istore_3
      12: aload_2
      13: arraylength
      14: istore        4
      16: iload_3
      17: iload         4
      19: if_icmpge     57
      22: aload_2
      23: iload_3
      24: aaload
      25: astore        5
      27: aload         5
      29: astore        6
      31: iconst_0
      32: istore        7
      34: aload         6
      36: invokevirtual #31                 // Method com/mobiento/aoc/Day02$Choice.getPlayerChoice:()Ljava/lang/String;
      39: aload_1
      40: invokestatic  #35                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      43: ifeq          51
      46: aload         5
      48: goto          58
      51: iinc          3, 1
      54: goto          16
      57: aconst_null
      58: dup
      59: ifnonnull     90
      62: pop
      63: new           #37                 // class java/lang/Exception
      66: dup
      67: new           #39                 // class java/lang/StringBuilder
      70: dup
      71: invokespecial #40                 // Method java/lang/StringBuilder."<init>":()V
      74: ldc           #42                 // String No matching choice for
      76: invokevirtual #46                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      79: aload_1
      80: invokevirtual #46                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      83: invokevirtual #49                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      86: invokespecial #52                 // Method java/lang/Exception."<init>":(Ljava/lang/String;)V
      89: athrow
      90: areturn

  public final com.mobiento.aoc.Day02$Choice fromOpponentChoice(java.lang.String);
    Code:
       0: aload_1
       1: ldc           #15                 // String choice
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: invokestatic  #27                 // Method com/mobiento/aoc/Day02$Choice.values:()[Lcom/mobiento/aoc/Day02$Choice;
       9: astore_2
      10: iconst_0
      11: istore_3
      12: aload_2
      13: arraylength
      14: istore        4
      16: iload_3
      17: iload         4
      19: if_icmpge     57
      22: aload_2
      23: iload_3
      24: aaload
      25: astore        5
      27: aload         5
      29: astore        6
      31: iconst_0
      32: istore        7
      34: aload         6
      36: invokevirtual #63                 // Method com/mobiento/aoc/Day02$Choice.getOpponentChoice:()Ljava/lang/String;
      39: aload_1
      40: invokestatic  #35                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      43: ifeq          51
      46: aload         5
      48: goto          58
      51: iinc          3, 1
      54: goto          16
      57: aconst_null
      58: dup
      59: ifnonnull     90
      62: pop
      63: new           #37                 // class java/lang/Exception
      66: dup
      67: new           #39                 // class java/lang/StringBuilder
      70: dup
      71: invokespecial #40                 // Method java/lang/StringBuilder."<init>":()V
      74: ldc           #42                 // String No matching choice for
      76: invokevirtual #46                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      79: aload_1
      80: invokevirtual #46                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      83: invokevirtual #49                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      86: invokespecial #52                 // Method java/lang/Exception."<init>":(Ljava/lang/String;)V
      89: athrow
      90: areturn

  public com.mobiento.aoc.Day02$Choice$Companion(kotlin.jvm.internal.DefaultConstructorMarker);
    Code:
       0: aload_0
       1: invokespecial #66                 // Method "<init>":()V
       4: return
}

Compiled from "Day02.kt"
public final class com.mobiento.aoc.Day02$Outcome extends java.lang.Enum<com.mobiento.aoc.Day02$Outcome> {
  public static final com.mobiento.aoc.Day02$Outcome$Companion Companion;

  private final java.lang.String source;

  private final int value;

  public static final com.mobiento.aoc.Day02$Outcome LOSE;

  public static final com.mobiento.aoc.Day02$Outcome DRAW;

  public static final com.mobiento.aoc.Day02$Outcome WIN;

  private static final com.mobiento.aoc.Day02$Outcome[] $VALUES;

  private static final kotlin.enums.EnumEntries $ENTRIES;

  private com.mobiento.aoc.Day02$Outcome(java.lang.String, int);
    Code:
       0: aload_0
       1: aload_1
       2: iload_2
       3: invokespecial #10                 // Method java/lang/Enum."<init>":(Ljava/lang/String;I)V
       6: aload_0
       7: aload_3
       8: putfield      #14                 // Field source:Ljava/lang/String;
      11: aload_0
      12: iload         4
      14: putfield      #18                 // Field value:I
      17: return

  public final java.lang.String getSource();
    Code:
       0: aload_0
       1: getfield      #14                 // Field source:Ljava/lang/String;
       4: areturn

  public final int getValue();
    Code:
       0: aload_0
       1: getfield      #18                 // Field value:I
       4: ireturn

  public static com.mobiento.aoc.Day02$Outcome[] values();
    Code:
       0: getstatic     #33                 // Field $VALUES:[Lcom/mobiento/aoc/Day02$Outcome;
       3: invokevirtual #39                 // Method java/lang/Object.clone:()Ljava/lang/Object;
       6: checkcast     #40                 // class "[Lcom/mobiento/aoc/Day02$Outcome;"
       9: areturn

  public static com.mobiento.aoc.Day02$Outcome valueOf(java.lang.String);
    Code:
       0: ldc           #2                  // class com/mobiento/aoc/Day02$Outcome
       2: aload_0
       3: invokestatic  #45                 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
       6: checkcast     #2                  // class com/mobiento/aoc/Day02$Outcome
       9: areturn

  public static kotlin.enums.EnumEntries<com.mobiento.aoc.Day02$Outcome> getEntries();
    Code:
       0: getstatic     #52                 // Field $ENTRIES:Lkotlin/enums/EnumEntries;
       3: areturn

  private static final com.mobiento.aoc.Day02$Outcome[] $values();
    Code:
       0: iconst_3
       1: anewarray     #2                  // class com/mobiento/aoc/Day02$Outcome
       4: astore_0
       5: aload_0
       6: iconst_0
       7: getstatic     #56                 // Field LOSE:Lcom/mobiento/aoc/Day02$Outcome;
      10: aastore
      11: aload_0
      12: iconst_1
      13: getstatic     #59                 // Field DRAW:Lcom/mobiento/aoc/Day02$Outcome;
      16: aastore
      17: aload_0
      18: iconst_2
      19: getstatic     #62                 // Field WIN:Lcom/mobiento/aoc/Day02$Outcome;
      22: aastore
      23: aload_0
      24: areturn

  static {};
    Code:
       0: new           #2                  // class com/mobiento/aoc/Day02$Outcome
       3: dup
       4: ldc           #65                 // String LOSE
       6: iconst_0
       7: ldc           #67                 // String X
       9: iconst_0
      10: invokespecial #69                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;I)V
      13: putstatic     #56                 // Field LOSE:Lcom/mobiento/aoc/Day02$Outcome;
      16: new           #2                  // class com/mobiento/aoc/Day02$Outcome
      19: dup
      20: ldc           #70                 // String DRAW
      22: iconst_1
      23: ldc           #72                 // String Y
      25: iconst_3
      26: invokespecial #69                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;I)V
      29: putstatic     #59                 // Field DRAW:Lcom/mobiento/aoc/Day02$Outcome;
      32: new           #2                  // class com/mobiento/aoc/Day02$Outcome
      35: dup
      36: ldc           #73                 // String WIN
      38: iconst_2
      39: ldc           #75                 // String Z
      41: bipush        6
      43: invokespecial #69                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;I)V
      46: putstatic     #62                 // Field WIN:Lcom/mobiento/aoc/Day02$Outcome;
      49: invokestatic  #77                 // Method $values:()[Lcom/mobiento/aoc/Day02$Outcome;
      52: putstatic     #33                 // Field $VALUES:[Lcom/mobiento/aoc/Day02$Outcome;
      55: getstatic     #33                 // Field $VALUES:[Lcom/mobiento/aoc/Day02$Outcome;
      58: checkcast     #79                 // class "[Ljava/lang/Enum;"
      61: invokestatic  #85                 // Method kotlin/enums/EnumEntriesKt.enumEntries:([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries;
      64: putstatic     #52                 // Field $ENTRIES:Lkotlin/enums/EnumEntries;
      67: new           #87                 // class com/mobiento/aoc/Day02$Outcome$Companion
      70: dup
      71: aconst_null
      72: invokespecial #90                 // Method com/mobiento/aoc/Day02$Outcome$Companion."<init>":(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
      75: putstatic     #94                 // Field Companion:Lcom/mobiento/aoc/Day02$Outcome$Companion;
      78: return
}

Compiled from "Day02.kt"
public final class com.mobiento.aoc.Day02$WhenMappings {
  public static final int[] $EnumSwitchMapping$0;

  public static final int[] $EnumSwitchMapping$1;

  static {};
    Code:
       0: invokestatic  #14                 // Method com/mobiento/aoc/Day02$Outcome.values:()[Lcom/mobiento/aoc/Day02$Outcome;
       3: arraylength
       4: newarray       int
       6: astore_0
       7: nop
       8: aload_0
       9: getstatic     #18                 // Field com/mobiento/aoc/Day02$Outcome.LOSE:Lcom/mobiento/aoc/Day02$Outcome;
      12: invokevirtual #22                 // Method com/mobiento/aoc/Day02$Outcome.ordinal:()I
      15: iconst_1
      16: iastore
      17: goto          21
      20: astore_1
      21: nop
      22: aload_0
      23: getstatic     #25                 // Field com/mobiento/aoc/Day02$Outcome.DRAW:Lcom/mobiento/aoc/Day02$Outcome;
      26: invokevirtual #22                 // Method com/mobiento/aoc/Day02$Outcome.ordinal:()I
      29: iconst_2
      30: iastore
      31: goto          35
      34: astore_1
      35: nop
      36: aload_0
      37: getstatic     #28                 // Field com/mobiento/aoc/Day02$Outcome.WIN:Lcom/mobiento/aoc/Day02$Outcome;
      40: invokevirtual #22                 // Method com/mobiento/aoc/Day02$Outcome.ordinal:()I
      43: iconst_3
      44: iastore
      45: goto          49
      48: astore_1
      49: aload_0
      50: putstatic     #32                 // Field $EnumSwitchMapping$0:[I
      53: invokestatic  #37                 // Method com/mobiento/aoc/Day02$Choice.values:()[Lcom/mobiento/aoc/Day02$Choice;
      56: arraylength
      57: newarray       int
      59: astore_0
      60: nop
      61: aload_0
      62: getstatic     #41                 // Field com/mobiento/aoc/Day02$Choice.ROCK:Lcom/mobiento/aoc/Day02$Choice;
      65: invokevirtual #42                 // Method com/mobiento/aoc/Day02$Choice.ordinal:()I
      68: iconst_1
      69: iastore
      70: goto          74
      73: astore_1
      74: nop
      75: aload_0
      76: getstatic     #45                 // Field com/mobiento/aoc/Day02$Choice.PAPER:Lcom/mobiento/aoc/Day02$Choice;
      79: invokevirtual #42                 // Method com/mobiento/aoc/Day02$Choice.ordinal:()I
      82: iconst_2
      83: iastore
      84: goto          88
      87: astore_1
      88: nop
      89: aload_0
      90: getstatic     #48                 // Field com/mobiento/aoc/Day02$Choice.SCISSORS:Lcom/mobiento/aoc/Day02$Choice;
      93: invokevirtual #42                 // Method com/mobiento/aoc/Day02$Choice.ordinal:()I
      96: iconst_3
      97: iastore
      98: goto          102
     101: astore_1
     102: aload_0
     103: putstatic     #51                 // Field $EnumSwitchMapping$1:[I
     106: return
    Exception table:
       from    to  target type
           7    17    20   Class java/lang/NoSuchFieldError
          21    31    34   Class java/lang/NoSuchFieldError
          35    45    48   Class java/lang/NoSuchFieldError
          60    70    73   Class java/lang/NoSuchFieldError
          74    84    87   Class java/lang/NoSuchFieldError
          88    98   101   Class java/lang/NoSuchFieldError
}

Compiled from "Day02.kt"
public final class com.mobiento.aoc.Day02 {
  public com.mobiento.aoc.Day02();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final int part1(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #24                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: invokeinterface #28,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      19: astore        4
      21: aload         4
      23: invokeinterface #34,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      28: ifeq          166
      31: aload         4
      33: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      38: astore        5
      40: iload_3
      41: aload         5
      43: checkcast     #40                 // class java/lang/String
      46: astore        6
      48: istore        12
      50: iconst_0
      51: istore        7
      53: aload         6
      55: checkcast     #42                 // class java/lang/CharSequence
      58: iconst_1
      59: anewarray     #40                 // class java/lang/String
      62: astore        8
      64: aload         8
      66: iconst_0
      67: ldc           #44                 // String
      69: aastore
      70: aload         8
      72: iconst_0
      73: iconst_0
      74: bipush        6
      76: aconst_null
      77: invokestatic  #50                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      80: astore        8
      82: aload         8
      84: astore        9
      86: iconst_0
      87: istore        10
      89: aload         9
      91: invokeinterface #56,  1           // InterfaceMethod java/util/List.size:()I
      96: iconst_2
      97: if_icmplt     104
     100: iconst_1
     101: goto          105
     104: iconst_0
     105: ifeq          113
     108: aload         8
     110: goto          114
     113: aconst_null
     114: dup
     115: ifnull        153
     118: astore        10
     120: iconst_0
     121: istore        11
     123: aload_0
     124: aload         10
     126: iconst_0
     127: invokeinterface #60,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     132: checkcast     #40                 // class java/lang/String
     135: aload         10
     137: iconst_1
     138: invokeinterface #60,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     143: checkcast     #40                 // class java/lang/String
     146: invokevirtual #64                 // Method scoreForRoundPart1:(Ljava/lang/String;Ljava/lang/String;)I
     149: nop
     150: goto          155
     153: pop
     154: iconst_0
     155: istore        13
     157: iload         12
     159: iload         13
     161: iadd
     162: istore_3
     163: goto          21
     166: iload_3
     167: ireturn

  public final int scoreForRoundPart1(java.lang.String, java.lang.String);
    Code:
       0: aload_1
       1: ldc           #75                 // String a
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #77                 // String b
       9: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: getstatic     #83                 // Field com/mobiento/aoc/Day02$Choice.Companion:Lcom/mobiento/aoc/Day02$Choice$Companion;
      15: aload_1
      16: invokevirtual #89                 // Method com/mobiento/aoc/Day02$Choice$Companion.fromOpponentChoice:(Ljava/lang/String;)Lcom/mobiento/aoc/Day02$Choice;
      19: astore_3
      20: getstatic     #83                 // Field com/mobiento/aoc/Day02$Choice.Companion:Lcom/mobiento/aoc/Day02$Choice$Companion;
      23: aload_2
      24: invokevirtual #92                 // Method com/mobiento/aoc/Day02$Choice$Companion.fromPlayerChoice:(Ljava/lang/String;)Lcom/mobiento/aoc/Day02$Choice;
      27: astore        4
      29: aload_0
      30: aload_3
      31: aload         4
      33: invokespecial #96                 // Method calculateOutcome:(Lcom/mobiento/aoc/Day02$Choice;Lcom/mobiento/aoc/Day02$Choice;)Lcom/mobiento/aoc/Day02$Outcome;
      36: astore        5
      38: aload         5
      40: invokevirtual #101                // Method com/mobiento/aoc/Day02$Outcome.getValue:()I
      43: aload         4
      45: invokevirtual #102                // Method com/mobiento/aoc/Day02$Choice.getValue:()I
      48: iadd
      49: ireturn

  public final int part2(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #24                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: invokeinterface #28,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      19: astore        4
      21: aload         4
      23: invokeinterface #34,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      28: ifeq          166
      31: aload         4
      33: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      38: astore        5
      40: iload_3
      41: aload         5
      43: checkcast     #40                 // class java/lang/String
      46: astore        6
      48: istore        12
      50: iconst_0
      51: istore        7
      53: aload         6
      55: checkcast     #42                 // class java/lang/CharSequence
      58: iconst_1
      59: anewarray     #40                 // class java/lang/String
      62: astore        8
      64: aload         8
      66: iconst_0
      67: ldc           #44                 // String
      69: aastore
      70: aload         8
      72: iconst_0
      73: iconst_0
      74: bipush        6
      76: aconst_null
      77: invokestatic  #50                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      80: astore        8
      82: aload         8
      84: astore        9
      86: iconst_0
      87: istore        10
      89: aload         9
      91: invokeinterface #56,  1           // InterfaceMethod java/util/List.size:()I
      96: iconst_2
      97: if_icmplt     104
     100: iconst_1
     101: goto          105
     104: iconst_0
     105: ifeq          113
     108: aload         8
     110: goto          114
     113: aconst_null
     114: dup
     115: ifnull        153
     118: astore        10
     120: iconst_0
     121: istore        11
     123: aload_0
     124: aload         10
     126: iconst_0
     127: invokeinterface #60,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     132: checkcast     #40                 // class java/lang/String
     135: aload         10
     137: iconst_1
     138: invokeinterface #60,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     143: checkcast     #40                 // class java/lang/String
     146: invokevirtual #111                // Method scoreForRoundPart2:(Ljava/lang/String;Ljava/lang/String;)I
     149: nop
     150: goto          155
     153: pop
     154: iconst_0
     155: istore        13
     157: iload         12
     159: iload         13
     161: iadd
     162: istore_3
     163: goto          21
     166: iload_3
     167: ireturn

  public final int scoreForRoundPart2(java.lang.String, java.lang.String);
    Code:
       0: aload_1
       1: ldc           #75                 // String a
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #77                 // String b
       9: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: getstatic     #83                 // Field com/mobiento/aoc/Day02$Choice.Companion:Lcom/mobiento/aoc/Day02$Choice$Companion;
      15: aload_1
      16: invokevirtual #89                 // Method com/mobiento/aoc/Day02$Choice$Companion.fromOpponentChoice:(Ljava/lang/String;)Lcom/mobiento/aoc/Day02$Choice;
      19: astore_3
      20: getstatic     #117                // Field com/mobiento/aoc/Day02$Outcome.Companion:Lcom/mobiento/aoc/Day02$Outcome$Companion;
      23: aload_2
      24: invokevirtual #123                // Method com/mobiento/aoc/Day02$Outcome$Companion.fromSource:(Ljava/lang/String;)Lcom/mobiento/aoc/Day02$Outcome;
      27: astore        4
      29: aload_0
      30: aload_3
      31: aload         4
      33: invokespecial #127                // Method playerChoiceForOutcome:(Lcom/mobiento/aoc/Day02$Choice;Lcom/mobiento/aoc/Day02$Outcome;)Lcom/mobiento/aoc/Day02$Choice;
      36: astore        5
      38: aload         4
      40: invokevirtual #101                // Method com/mobiento/aoc/Day02$Outcome.getValue:()I
      43: aload         5
      45: invokevirtual #102                // Method com/mobiento/aoc/Day02$Choice.getValue:()I
      48: iadd
      49: ireturn

  private final com.mobiento.aoc.Day02$Choice playerChoiceForOutcome(com.mobiento.aoc.Day02$Choice, com.mobiento.aoc.Day02$Outcome);
    Code:
       0: aload_1
       1: getstatic     #134                // Field com/mobiento/aoc/Day02$WhenMappings.$EnumSwitchMapping$1:[I
       4: swap
       5: invokevirtual #137                // Method com/mobiento/aoc/Day02$Choice.ordinal:()I
       8: iaload
       9: tableswitch   { // 1 to 3
                     1: 36
                     2: 98
                     3: 158
               default: 218
          }
      36: aload_2
      37: getstatic     #140                // Field com/mobiento/aoc/Day02$WhenMappings.$EnumSwitchMapping$0:[I
      40: swap
      41: invokevirtual #141                // Method com/mobiento/aoc/Day02$Outcome.ordinal:()I
      44: iaload
      45: tableswitch   { // 1 to 3
                     1: 72
                     2: 78
                     3: 84
               default: 90
          }
      72: getstatic     #144                // Field com/mobiento/aoc/Day02$Choice.SCISSORS:Lcom/mobiento/aoc/Day02$Choice;
      75: goto          226
      78: getstatic     #147                // Field com/mobiento/aoc/Day02$Choice.ROCK:Lcom/mobiento/aoc/Day02$Choice;
      81: goto          226
      84: getstatic     #150                // Field com/mobiento/aoc/Day02$Choice.PAPER:Lcom/mobiento/aoc/Day02$Choice;
      87: goto          226
      90: new           #152                // class kotlin/NoWhenBranchMatchedException
      93: dup
      94: invokespecial #153                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
      97: athrow
      98: aload_2
      99: getstatic     #140                // Field com/mobiento/aoc/Day02$WhenMappings.$EnumSwitchMapping$0:[I
     102: swap
     103: invokevirtual #141                // Method com/mobiento/aoc/Day02$Outcome.ordinal:()I
     106: iaload
     107: tableswitch   { // 1 to 3
                     1: 132
                     2: 138
                     3: 144
               default: 150
          }
     132: getstatic     #147                // Field com/mobiento/aoc/Day02$Choice.ROCK:Lcom/mobiento/aoc/Day02$Choice;
     135: goto          226
     138: getstatic     #150                // Field com/mobiento/aoc/Day02$Choice.PAPER:Lcom/mobiento/aoc/Day02$Choice;
     141: goto          226
     144: getstatic     #144                // Field com/mobiento/aoc/Day02$Choice.SCISSORS:Lcom/mobiento/aoc/Day02$Choice;
     147: goto          226
     150: new           #152                // class kotlin/NoWhenBranchMatchedException
     153: dup
     154: invokespecial #153                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     157: athrow
     158: aload_2
     159: getstatic     #140                // Field com/mobiento/aoc/Day02$WhenMappings.$EnumSwitchMapping$0:[I
     162: swap
     163: invokevirtual #141                // Method com/mobiento/aoc/Day02$Outcome.ordinal:()I
     166: iaload
     167: tableswitch   { // 1 to 3
                     1: 192
                     2: 198
                     3: 204
               default: 210
          }
     192: getstatic     #150                // Field com/mobiento/aoc/Day02$Choice.PAPER:Lcom/mobiento/aoc/Day02$Choice;
     195: goto          226
     198: getstatic     #144                // Field com/mobiento/aoc/Day02$Choice.SCISSORS:Lcom/mobiento/aoc/Day02$Choice;
     201: goto          226
     204: getstatic     #147                // Field com/mobiento/aoc/Day02$Choice.ROCK:Lcom/mobiento/aoc/Day02$Choice;
     207: goto          226
     210: new           #152                // class kotlin/NoWhenBranchMatchedException
     213: dup
     214: invokespecial #153                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     217: athrow
     218: new           #152                // class kotlin/NoWhenBranchMatchedException
     221: dup
     222: invokespecial #153                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     225: athrow
     226: areturn

  private final com.mobiento.aoc.Day02$Outcome calculateOutcome(com.mobiento.aoc.Day02$Choice, com.mobiento.aoc.Day02$Choice);
    Code:
       0: aload_1
       1: getstatic     #134                // Field com/mobiento/aoc/Day02$WhenMappings.$EnumSwitchMapping$1:[I
       4: swap
       5: invokevirtual #137                // Method com/mobiento/aoc/Day02$Choice.ordinal:()I
       8: iaload
       9: tableswitch   { // 1 to 3
                     1: 36
                     2: 98
                     3: 158
               default: 218
          }
      36: aload_2
      37: getstatic     #134                // Field com/mobiento/aoc/Day02$WhenMappings.$EnumSwitchMapping$1:[I
      40: swap
      41: invokevirtual #137                // Method com/mobiento/aoc/Day02$Choice.ordinal:()I
      44: iaload
      45: tableswitch   { // 1 to 3
                     1: 72
                     2: 78
                     3: 84
               default: 90
          }
      72: getstatic     #156                // Field com/mobiento/aoc/Day02$Outcome.DRAW:Lcom/mobiento/aoc/Day02$Outcome;
      75: goto          226
      78: getstatic     #159                // Field com/mobiento/aoc/Day02$Outcome.WIN:Lcom/mobiento/aoc/Day02$Outcome;
      81: goto          226
      84: getstatic     #162                // Field com/mobiento/aoc/Day02$Outcome.LOSE:Lcom/mobiento/aoc/Day02$Outcome;
      87: goto          226
      90: new           #152                // class kotlin/NoWhenBranchMatchedException
      93: dup
      94: invokespecial #153                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
      97: athrow
      98: aload_2
      99: getstatic     #134                // Field com/mobiento/aoc/Day02$WhenMappings.$EnumSwitchMapping$1:[I
     102: swap
     103: invokevirtual #137                // Method com/mobiento/aoc/Day02$Choice.ordinal:()I
     106: iaload
     107: tableswitch   { // 1 to 3
                     1: 132
                     2: 138
                     3: 144
               default: 150
          }
     132: getstatic     #162                // Field com/mobiento/aoc/Day02$Outcome.LOSE:Lcom/mobiento/aoc/Day02$Outcome;
     135: goto          226
     138: getstatic     #156                // Field com/mobiento/aoc/Day02$Outcome.DRAW:Lcom/mobiento/aoc/Day02$Outcome;
     141: goto          226
     144: getstatic     #159                // Field com/mobiento/aoc/Day02$Outcome.WIN:Lcom/mobiento/aoc/Day02$Outcome;
     147: goto          226
     150: new           #152                // class kotlin/NoWhenBranchMatchedException
     153: dup
     154: invokespecial #153                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     157: athrow
     158: aload_2
     159: getstatic     #134                // Field com/mobiento/aoc/Day02$WhenMappings.$EnumSwitchMapping$1:[I
     162: swap
     163: invokevirtual #137                // Method com/mobiento/aoc/Day02$Choice.ordinal:()I
     166: iaload
     167: tableswitch   { // 1 to 3
                     1: 192
                     2: 198
                     3: 204
               default: 210
          }
     192: getstatic     #159                // Field com/mobiento/aoc/Day02$Outcome.WIN:Lcom/mobiento/aoc/Day02$Outcome;
     195: goto          226
     198: getstatic     #162                // Field com/mobiento/aoc/Day02$Outcome.LOSE:Lcom/mobiento/aoc/Day02$Outcome;
     201: goto          226
     204: getstatic     #156                // Field com/mobiento/aoc/Day02$Outcome.DRAW:Lcom/mobiento/aoc/Day02$Outcome;
     207: goto          226
     210: new           #152                // class kotlin/NoWhenBranchMatchedException
     213: dup
     214: invokespecial #153                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     217: athrow
     218: new           #152                // class kotlin/NoWhenBranchMatchedException
     221: dup
     222: invokespecial #153                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     225: athrow
     226: areturn
}


package com.mobiento.aoc

class Day03 {

    private val priority: Map<Char, Int> = hashMapOf<Char, Int>().apply {
        var priority = 0
        for (c in 'a' .. 'z') {
            this[c] = ++priority
        }
        for (c in 'A' .. 'Z') {
            this[c] = ++priority
        }
    }

    fun part1(input: List<String>): Int {
        return input.sumOf { line ->
            getPriority(findCommonItem(getFirstCompartmentItems(line), getSecondCompartmentItems(line)))
        }
    }

    fun getFirstCompartmentItems(contents: String): String {
        return contents.substring(0, contents.length / 2)
    }
    fun getSecondCompartmentItems(contents: String): String {
        return contents.substring(contents.length / 2)
    }
    fun findCommonItem(firstItems: String, secondItems: String): Char {
        return firstItems.toSet().intersect(secondItems.toSet()).firstOrNull() ?: ' '
    }
    fun getPriority(letter: Char): Int {
        return priority[letter] ?: 0
    }

    fun part2(input: List<String>): Int {
        return input.windowed(3, 3).sumOf {
            getPriority(findCommonItem(it[0], it[1], it[2]))
        }
    }

    fun findCommonItem(first: String, second: String, third: String): Char {
        return first.toSet().intersect(second.toSet()).intersect(third.toSet()).firstOrNull() ?: ' '
    }

}

Compiled from "Day03.kt"
public final class com.mobiento.aoc.Day03 {
  private final java.util.Map<java.lang.Character, java.lang.Integer> priority;

  public com.mobiento.aoc.Day03();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: new           #10                 // class java/util/HashMap
       8: dup
       9: invokespecial #11                 // Method java/util/HashMap."<init>":()V
      12: astore_1
      13: aload_1
      14: astore_2
      15: astore        7
      17: iconst_0
      18: istore_3
      19: iconst_0
      20: istore        4
      22: bipush        97
      24: istore        5
      26: iload         5
      28: bipush        123
      30: if_icmpge     70
      33: iload         5
      35: invokestatic  #17                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
      38: astore        6
      40: aload_2
      41: checkcast     #19                 // class java/util/Map
      44: aload         6
      46: iinc          4, 1
      49: iload         4
      51: invokestatic  #24                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      54: invokeinterface #28,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      59: pop
      60: iload         5
      62: iconst_1
      63: iadd
      64: i2c
      65: istore        5
      67: goto          26
      70: bipush        65
      72: istore        5
      74: iload         5
      76: bipush        91
      78: if_icmpge     118
      81: iload         5
      83: invokestatic  #17                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
      86: astore        6
      88: aload_2
      89: checkcast     #19                 // class java/util/Map
      92: aload         6
      94: iinc          4, 1
      97: iload         4
      99: invokestatic  #24                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     102: invokeinterface #28,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     107: pop
     108: iload         5
     110: iconst_1
     111: iadd
     112: i2c
     113: istore        5
     115: goto          74
     118: nop
     119: aload         7
     121: aload_1
     122: checkcast     #19                 // class java/util/Map
     125: putfield      #32                 // Field priority:Ljava/util/Map;
     128: return

  public final int part1(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #46                 // String input
       3: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #54                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: invokeinterface #58,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      19: astore        4
      21: aload         4
      23: invokeinterface #64,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      28: ifeq          84
      31: aload         4
      33: invokeinterface #68,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      38: astore        5
      40: iload_3
      41: aload         5
      43: checkcast     #70                 // class java/lang/String
      46: astore        6
      48: istore        8
      50: iconst_0
      51: istore        7
      53: aload_0
      54: aload_0
      55: aload_0
      56: aload         6
      58: invokevirtual #74                 // Method getFirstCompartmentItems:(Ljava/lang/String;)Ljava/lang/String;
      61: aload_0
      62: aload         6
      64: invokevirtual #77                 // Method getSecondCompartmentItems:(Ljava/lang/String;)Ljava/lang/String;
      67: invokevirtual #81                 // Method findCommonItem:(Ljava/lang/String;Ljava/lang/String;)C
      70: invokevirtual #85                 // Method getPriority:(C)I
      73: istore        9
      75: iload         8
      77: iload         9
      79: iadd
      80: istore_3
      81: goto          21
      84: iload_3
      85: ireturn

  public final java.lang.String getFirstCompartmentItems(java.lang.String);
    Code:
       0: aload_1
       1: ldc           #91                 // String contents
       3: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: iconst_0
       8: aload_1
       9: invokevirtual #95                 // Method java/lang/String.length:()I
      12: iconst_2
      13: idiv
      14: invokevirtual #99                 // Method java/lang/String.substring:(II)Ljava/lang/String;
      17: dup
      18: ldc           #101                // String substring(...)
      20: invokestatic  #104                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      23: areturn

  public final java.lang.String getSecondCompartmentItems(java.lang.String);
    Code:
       0: aload_1
       1: ldc           #91                 // String contents
       3: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: aload_1
       8: invokevirtual #95                 // Method java/lang/String.length:()I
      11: iconst_2
      12: idiv
      13: invokevirtual #107                // Method java/lang/String.substring:(I)Ljava/lang/String;
      16: dup
      17: ldc           #101                // String substring(...)
      19: invokestatic  #104                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      22: areturn

  public final char findCommonItem(java.lang.String, java.lang.String);
    Code:
       0: aload_1
       1: ldc           #109                // String firstItems
       3: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #111                // String secondItems
       9: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_1
      13: checkcast     #113                // class java/lang/CharSequence
      16: invokestatic  #119                // Method kotlin/text/StringsKt.toSet:(Ljava/lang/CharSequence;)Ljava/util/Set;
      19: checkcast     #54                 // class java/lang/Iterable
      22: aload_2
      23: checkcast     #113                // class java/lang/CharSequence
      26: invokestatic  #119                // Method kotlin/text/StringsKt.toSet:(Ljava/lang/CharSequence;)Ljava/util/Set;
      29: checkcast     #54                 // class java/lang/Iterable
      32: invokestatic  #125                // Method kotlin/collections/CollectionsKt.intersect:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
      35: checkcast     #54                 // class java/lang/Iterable
      38: invokestatic  #129                // Method kotlin/collections/CollectionsKt.firstOrNull:(Ljava/lang/Iterable;)Ljava/lang/Object;
      41: checkcast     #13                 // class java/lang/Character
      44: dup
      45: ifnull        54
      48: invokevirtual #133                // Method java/lang/Character.charValue:()C
      51: goto          57
      54: pop
      55: bipush        32
      57: ireturn

  public final int getPriority(char);
    Code:
       0: aload_0
       1: getfield      #32                 // Field priority:Ljava/util/Map;
       4: iload_1
       5: invokestatic  #17                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
       8: invokeinterface #137,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
      13: checkcast     #21                 // class java/lang/Integer
      16: dup
      17: ifnull        26
      20: invokevirtual #140                // Method java/lang/Integer.intValue:()I
      23: goto          28
      26: pop
      27: iconst_0
      28: ireturn

  public final int part2(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #46                 // String input
       3: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #54                 // class java/lang/Iterable
      10: iconst_3
      11: iconst_3
      12: iconst_0
      13: iconst_4
      14: aconst_null
      15: invokestatic  #146                // Method kotlin/collections/CollectionsKt.windowed$default:(Ljava/lang/Iterable;IIZILjava/lang/Object;)Ljava/util/List;
      18: checkcast     #54                 // class java/lang/Iterable
      21: astore_2
      22: iconst_0
      23: istore_3
      24: aload_2
      25: invokeinterface #58,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      30: astore        4
      32: aload         4
      34: invokeinterface #64,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      39: ifeq          116
      42: aload         4
      44: invokeinterface #68,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      49: astore        5
      51: iload_3
      52: aload         5
      54: checkcast     #148                // class java/util/List
      57: astore        6
      59: istore        8
      61: iconst_0
      62: istore        7
      64: aload_0
      65: aload_0
      66: aload         6
      68: iconst_0
      69: invokeinterface #151,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      74: checkcast     #70                 // class java/lang/String
      77: aload         6
      79: iconst_1
      80: invokeinterface #151,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      85: checkcast     #70                 // class java/lang/String
      88: aload         6
      90: iconst_2
      91: invokeinterface #151,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      96: checkcast     #70                 // class java/lang/String
      99: invokevirtual #154                // Method findCommonItem:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)C
     102: invokevirtual #85                 // Method getPriority:(C)I
     105: istore        9
     107: iload         8
     109: iload         9
     111: iadd
     112: istore_3
     113: goto          32
     116: iload_3
     117: ireturn

  public final char findCommonItem(java.lang.String, java.lang.String, java.lang.String);
    Code:
       0: aload_1
       1: ldc           #158                // String first
       3: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #160                // String second
       9: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_3
      13: ldc           #162                // String third
      15: invokestatic  #52                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      18: aload_1
      19: checkcast     #113                // class java/lang/CharSequence
      22: invokestatic  #119                // Method kotlin/text/StringsKt.toSet:(Ljava/lang/CharSequence;)Ljava/util/Set;
      25: checkcast     #54                 // class java/lang/Iterable
      28: aload_2
      29: checkcast     #113                // class java/lang/CharSequence
      32: invokestatic  #119                // Method kotlin/text/StringsKt.toSet:(Ljava/lang/CharSequence;)Ljava/util/Set;
      35: checkcast     #54                 // class java/lang/Iterable
      38: invokestatic  #125                // Method kotlin/collections/CollectionsKt.intersect:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
      41: checkcast     #54                 // class java/lang/Iterable
      44: aload_3
      45: checkcast     #113                // class java/lang/CharSequence
      48: invokestatic  #119                // Method kotlin/text/StringsKt.toSet:(Ljava/lang/CharSequence;)Ljava/util/Set;
      51: checkcast     #54                 // class java/lang/Iterable
      54: invokestatic  #125                // Method kotlin/collections/CollectionsKt.intersect:(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set;
      57: checkcast     #54                 // class java/lang/Iterable
      60: invokestatic  #129                // Method kotlin/collections/CollectionsKt.firstOrNull:(Ljava/lang/Iterable;)Ljava/lang/Object;
      63: checkcast     #13                 // class java/lang/Character
      66: dup
      67: ifnull        76
      70: invokevirtual #133                // Method java/lang/Character.charValue:()C
      73: goto          79
      76: pop
      77: bipush        32
      79: ireturn
}