fun main(args: Array) { //part 1 println(lengthLeft(input)) //part 2 input.toLowerCase().asSequence().distinct().map { c -> lengthLeft(input.filter { !it.equals(c, ignoreCase = true) }) }.min().also { println(it) } } fun lengthLeft(polymer: String): Int { val list = LinkedList(polymer.toList()) val iter = list.listIterator() while (true) { val a = if (iter.hasNext()) iter.next() else break val b = if (iter.hasNext()) iter.next() else break if (a != b && a.equals(b, ignoreCase = true)) { iter.remove() iter.previous() iter.remove() if (iter.hasPrevious()) iter.previous() } else { iter.previous() } } return list.size }