import java.math.BigInteger import java.util.* val scanner = Scanner(System.`in`) var sum: BigInteger = BigInteger.ZERO while (scanner.hasNextLine()) { val line = scanner.nextLine() val numbersInLine = line.split("[: ]+".toRegex()).map(String::toBigInteger) val target = numbersInLine.first() val numbers = numbersInLine.drop(1) val possibleResults = findAllPossibleResult(setOf(numbers.first()), numbers.drop(1)) if (possibleResults.contains(target)) { sum += target } } println(sum) fun findAllPossibleResult(partialResults: Set, numbers: List): Set { if (numbers.isEmpty()) return partialResults val head = numbers.first() val tail = numbers.drop(1) val newResults = partialResults.fold(HashSet()) { r, p -> r.add(p.plus(head)) r.add(p.times(head)) r } return findAllPossibleResult(newResults, tail) }