Joris PZ
12/01/2018, 6:59 AMJoris PZ
12/01/2018, 7:00 AMJVM 97, 18, 52, 11, 39, 16, 29, 14, 27, 14, 12, 13, 15, 49, 15, 14, 16, 16, 53, 11, 11, 11, 12, 10, 12
JS 102, 83, 61, 83, 71, 65, 62, 53, 81, 45, 71, 82, 87, 57, 46, 108, 59, 70, 49, 56, 147, 58, 51, 95, 75
MinGW 447, 435, 447, 420, 390, 408, 452, 419, 426, 395, 403, 453, 406, 407, 437, 407, 439, 426, 380, 415, 397, 432, 394, 460, 442andyb
12/01/2018, 9:27 AMJoris PZ
12/01/2018, 9:57 AMfun <T> Sequence<T>.infinite() = sequence {
while (true) {
yieldAll(this@infinite)
}
}andyb
12/01/2018, 10:11 AMstkent
12/01/2018, 12:44 PMfun <T> List<T>.loopForever() = sequence { while (true) yieldAll(this@loopForever) }stkent
12/01/2018, 12:44 PMtodd.ginsberg
12/01/2018, 1:51 PMfun <T> List<T>.toInfiniteSequence(): Sequence<T> = sequence {
if(this@toInfiniteSequence.isEmpty()) {
return@sequence
}
while(true) {
yieldAll(this@toInfiniteSequence)
}
}todd.ginsberg
12/01/2018, 1:53 PMstkent
12/01/2018, 1:55 PMval part2 = frequencyShifts
.loopForever()
.accumulate(Int::plus)
.firstRepeat()
π€·ββοΈtodd.ginsberg
12/01/2018, 2:00 PMtodd.ginsberg
12/01/2018, 2:01 PMtodd.ginsberg
12/01/2018, 2:11 PMkarelpeeters
12/01/2018, 2:41 PMprintln(numbers.sumBy { it })
val seen = mutableSetOf(0)
var curr = 0
outer@while (true) {
for (number in numbers) {
curr += number
if (!seen.add(curr)) {
println(curr)
break@outer
}
}
}stkent
12/01/2018, 2:57 PMsumBy rather than sum there?karelpeeters
12/01/2018, 2:58 PM.toInt there simple smilestkent
12/01/2018, 2:58 PMandyb
12/01/2018, 3:18 PMfun firstRepeatedFrequency(frequencyShifts: List<Int>): Int {
val prevFrequencies = mutableSetOf<Int>()
val frequencies = frequencyShifts.asInfiniteSequence().accumulate()
return frequencies.first { !prevFrequencies.add(it) }
}karelpeeters
12/01/2018, 3:21 PMaccumulate is something you wrote yourself too, right?andyb
12/01/2018, 3:22 PMfun Sequence<Int>.accumulate() : Sequence<Int> = sequence {
var value = 0
forEach {
value += it
yield(value)
}
}karelpeeters
12/01/2018, 3:23 PMandyb
12/01/2018, 3:23 PMkarelpeeters
12/01/2018, 3:24 PMresults in+1, +1, -20
karelpeeters
12/01/2018, 3:25 PMandyb
12/01/2018, 3:25 PMstkent
12/01/2018, 3:32 PMfun <T> Sequence<T>.accumulate(operation: (accumulated: T, next: T) -> T): Sequence<T> {
val iterator = iterator()
if (!iterator.hasNext()) return emptySequence()
return sequence {
var accumulated = iterator.next().also { yield(it) }
for (next in iterator) {
accumulated = operation(accumulated, next)
yield(accumulated)
}
}
}karelpeeters
12/01/2018, 3:35 PMstkent
12/01/2018, 3:35 PMtodd.ginsberg
12/01/2018, 4:40 PMfun solvePart2(): Int {
val frequencies = mutableSetOf(0)
var sum = 0
return input.toInfiniteSequence()
.map {
sum += it
sum
}
.first { !frequencies.add(it) }
}todd.ginsberg
12/01/2018, 4:41 PMtodd.ginsberg
12/01/2018, 4:48 PMtodd.ginsberg
12/01/2018, 5:13 PMtodd.ginsberg
12/01/2018, 5:13 PMkarelpeeters
12/01/2018, 5:14 PMtodd.ginsberg
12/01/2018, 5:15 PMtodd.ginsberg
12/01/2018, 6:59 PMtipsy
12/01/2018, 7:06 PMval calibrations = File("input/day1_input.txt").readLines().map { it.toInt() }
val frequencies = mutableSetOf<Int>()
var count = 0
var frequency = 0
while (true) {
frequency += calibrations[count % calibrations.size]
if (frequencies.contains(frequency)) {
return println("part2: $frequency")
}
frequencies.add(frequency)
count++
}morcerfdumas
12/01/2018, 7:44 PMif (!frequencies.add(frequency)) return println("part2: $frequency")
and replace while and count with for (count in 0..Int.MAX_VALUE)