Day 13, that was really cool!
This commit is contained in:
1 parent
a5dfc7cbd2
commit
190dd4bc9b
6 files changed
+201
-30
No files matched your search
@@ -1,5 +1,7 @@
|
|||||||
package com.basdado.adventofcode
|
package com.basdado.adventofcode
|
||||||
|
|
||||||
|
import java.lang.UnsupportedOperationException
|
||||||
|
|
||||||
val FULL_OPCODES = mapOf(
|
val FULL_OPCODES = mapOf(
|
||||||
Pair(1L, OpCode(1L, 3, ::add)),
|
Pair(1L, OpCode(1L, 3, ::add)),
|
||||||
Pair(2L, OpCode(2L, 3, ::multiply)),
|
Pair(2L, OpCode(2L, 3, ::multiply)),
|
||||||
@@ -14,17 +16,39 @@ val FULL_OPCODES = mapOf(
|
|||||||
|
|
||||||
|
|
||||||
fun loadProgram(inputPath: String, opCodes: Map<Long, OpCode>, input: LongArray): IntCodeProgram {
|
fun loadProgram(inputPath: String, opCodes: Map<Long, OpCode>, input: LongArray): IntCodeProgram {
|
||||||
return IntCodeProgram(loadProgramData(inputPath), input, opCodes)
|
return IntCodeProgram(loadProgramData(inputPath), StackBasedInputProvider(input), opCodes)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadProgramData(inputPath: String): LongArray {
|
fun loadProgramData(inputPath: String): LongArray {
|
||||||
return line(inputPath).split(",").map { it.toLong() }.toLongArray()
|
return line(inputPath).split(",").map { it.toLong() }.toLongArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
class IntCodeProgram(val data: LongArray, var inputs: LongArray, val opCodes: Map<Long, OpCode> = FULL_OPCODES,
|
interface InputProvider {
|
||||||
var pointer: Int = 0) {
|
fun getInput(): Long
|
||||||
|
}
|
||||||
|
|
||||||
|
class StackBasedInputProvider(var inputs: LongArray = longArrayOf()): InputProvider {
|
||||||
|
|
||||||
private var inputPointer: Int = 0
|
private var inputPointer: Int = 0
|
||||||
|
|
||||||
|
fun pushInput(input: Long) {
|
||||||
|
inputs += input
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getInput(): Long {
|
||||||
|
return inputs[inputPointer++]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NullInputProvider: InputProvider {
|
||||||
|
override fun getInput(): Long {
|
||||||
|
throw UnsupportedOperationException("This program doesn't expect any inputs")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class IntCodeProgram(val data: LongArray, private val inputProvider: InputProvider = NullInputProvider(), val opCodes: Map<Long, OpCode> = FULL_OPCODES,
|
||||||
|
var pointer: Int = 0) {
|
||||||
|
|
||||||
var relativeBase: Long = 0
|
var relativeBase: Long = 0
|
||||||
private val outputs = mutableListOf<Long>()
|
private val outputs = mutableListOf<Long>()
|
||||||
var done = false
|
var done = false
|
||||||
@@ -50,12 +74,9 @@ class IntCodeProgram(val data: LongArray, var inputs: LongArray, val opCodes: Ma
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getNextInput(): Long {
|
fun getNextInput(): Long {
|
||||||
return inputs[inputPointer++]
|
return inputProvider.getInput()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun pushInput(input: Long) {
|
|
||||||
inputs += input
|
|
||||||
}
|
|
||||||
fun getOutputs(): List<Long> {
|
fun getOutputs(): List<Long> {
|
||||||
return outputs
|
return outputs
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.basdado.adventofcode.day11
|
package com.basdado.adventofcode.day11
|
||||||
|
|
||||||
import com.basdado.adventofcode.IntCodeProgram
|
import com.basdado.adventofcode.IntCodeProgram
|
||||||
|
import com.basdado.adventofcode.StackBasedInputProvider
|
||||||
import com.basdado.adventofcode.loadProgramData
|
import com.basdado.adventofcode.loadProgramData
|
||||||
|
|
||||||
const val DAY11_INPUT_PATH = "/day/11/input.txt"
|
const val DAY11_INPUT_PATH = "/day/11/input.txt"
|
||||||
@@ -14,9 +15,10 @@ object Day11 {
|
|||||||
|
|
||||||
fun puzzle1() {
|
fun puzzle1() {
|
||||||
val programData = loadProgramData(DAY11_INPUT_PATH)
|
val programData = loadProgramData(DAY11_INPUT_PATH)
|
||||||
val program = IntCodeProgram(programData + LongArray(16384), longArrayOf())
|
val inputProvider = StackBasedInputProvider()
|
||||||
|
val program = IntCodeProgram(programData + LongArray(16384), inputProvider)
|
||||||
val hull = mutableMapOf<Vector2i, Int>()
|
val hull = mutableMapOf<Vector2i, Int>()
|
||||||
paintHull(hull, program)
|
paintHull(hull, program, inputProvider)
|
||||||
printHull(hull)
|
printHull(hull)
|
||||||
println(hull.size)
|
println(hull.size)
|
||||||
}
|
}
|
||||||
@@ -24,12 +26,13 @@ object Day11 {
|
|||||||
fun puzzle2() {
|
fun puzzle2() {
|
||||||
|
|
||||||
val programData = loadProgramData(DAY11_INPUT_PATH)
|
val programData = loadProgramData(DAY11_INPUT_PATH)
|
||||||
val program = IntCodeProgram(programData + LongArray(16384), longArrayOf())
|
val inputProvider = StackBasedInputProvider()
|
||||||
|
val program = IntCodeProgram(programData + LongArray(16384), inputProvider)
|
||||||
val hull = mutableMapOf<Vector2i, Int>(
|
val hull = mutableMapOf<Vector2i, Int>(
|
||||||
// Paint position 0,0 white
|
// Paint position 0,0 white
|
||||||
Pair(Vector2i(0, 0), 1)
|
Pair(Vector2i(0, 0), 1)
|
||||||
)
|
)
|
||||||
paintHull(hull, program)
|
paintHull(hull, program, inputProvider)
|
||||||
printHull(hull)
|
printHull(hull)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +62,8 @@ object Day11 {
|
|||||||
|
|
||||||
private fun paintHull(
|
private fun paintHull(
|
||||||
hull: MutableMap<Vector2i, Int>,
|
hull: MutableMap<Vector2i, Int>,
|
||||||
program: IntCodeProgram
|
program: IntCodeProgram,
|
||||||
|
inputProvider: StackBasedInputProvider
|
||||||
) {
|
) {
|
||||||
var pos = Vector2i(0, 0)
|
var pos = Vector2i(0, 0)
|
||||||
var dir = UP
|
var dir = UP
|
||||||
@@ -69,7 +73,7 @@ object Day11 {
|
|||||||
while (hullPaintingSizeConstant < 1000) {
|
while (hullPaintingSizeConstant < 1000) {
|
||||||
lastHullPaintingSize = hull.size
|
lastHullPaintingSize = hull.size
|
||||||
|
|
||||||
program.pushInput((hull[pos] ?: 0).toLong())
|
inputProvider.pushInput((hull[pos] ?: 0).toLong())
|
||||||
val color = program.executeUntilOutput() ?: break
|
val color = program.executeUntilOutput() ?: break
|
||||||
hull[pos] = color.toInt()
|
hull[pos] = color.toInt()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,137 @@
|
|||||||
|
package com.basdado.adventofcode.day13
|
||||||
|
|
||||||
|
import com.basdado.adventofcode.InputProvider
|
||||||
|
import com.basdado.adventofcode.IntCodeProgram
|
||||||
|
import com.basdado.adventofcode.day11.Day11
|
||||||
|
import com.basdado.adventofcode.loadProgramData
|
||||||
|
|
||||||
|
const val DAY13_INPUT_PATH = "/day/13/input.txt"
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
Day13.puzzle1()
|
||||||
|
Day13.puzzle2()
|
||||||
|
}
|
||||||
|
|
||||||
|
object Day13 {
|
||||||
|
fun puzzle1() {
|
||||||
|
|
||||||
|
val programData = loadProgramData(DAY13_INPUT_PATH)
|
||||||
|
val program = IntCodeProgram(programData + LongArray(16384))
|
||||||
|
|
||||||
|
program.execute()
|
||||||
|
val outputs = program.getOutputs()
|
||||||
|
|
||||||
|
println((outputs.indices step 3).count { i -> parseTile(outputs[i + 2]) == Tile.BLOCK })
|
||||||
|
}
|
||||||
|
|
||||||
|
fun puzzle2() {
|
||||||
|
|
||||||
|
val programData = loadProgramData(DAY13_INPUT_PATH)
|
||||||
|
|
||||||
|
// Play for free by setting the credits to "2"
|
||||||
|
programData[0] = 2
|
||||||
|
|
||||||
|
val display = Display(0, Array<Array<Tile>>(100) { Array<Tile>(100) {Tile.EMPTY} })
|
||||||
|
val program = IntCodeProgram(programData + LongArray(16384),
|
||||||
|
|
||||||
|
// Toggle the two lines below to switch between manual input or AI playing
|
||||||
|
AIInputProvider(display))
|
||||||
|
// JoystickInputProvider())
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
val x = program.executeUntilOutput()?.toInt() ?: break
|
||||||
|
val y = program.executeUntilOutput()!!.toInt()
|
||||||
|
if (x == -1 && y == 0) {
|
||||||
|
display.score = program.executeUntilOutput()!!
|
||||||
|
} else {
|
||||||
|
val tile = parseTile(program.executeUntilOutput()!!)
|
||||||
|
display.display[y][x] = tile
|
||||||
|
}
|
||||||
|
// display.show()
|
||||||
|
}
|
||||||
|
println(display.score)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun parseTile(output: Long) = when(output) {
|
||||||
|
0L -> Tile.EMPTY
|
||||||
|
1L -> Tile.WALL
|
||||||
|
2L -> Tile.BLOCK
|
||||||
|
3L -> Tile.HORIZONTAL_PADDLE
|
||||||
|
4L -> Tile.BALL
|
||||||
|
else -> throw IllegalArgumentException("Unknown tile type: $output")
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class Tile {
|
||||||
|
EMPTY,
|
||||||
|
WALL,
|
||||||
|
BLOCK,
|
||||||
|
HORIZONTAL_PADDLE,
|
||||||
|
BALL
|
||||||
|
}
|
||||||
|
|
||||||
|
class JoystickInputProvider: InputProvider {
|
||||||
|
|
||||||
|
override fun getInput(): Long {
|
||||||
|
println("Getting input")
|
||||||
|
val key = System.`in`.read()
|
||||||
|
return when (key) {
|
||||||
|
's'.toInt() -> return 0
|
||||||
|
'a'.toInt() -> return -1
|
||||||
|
'd'.toInt() -> return 1
|
||||||
|
10 -> getInput()
|
||||||
|
else -> {
|
||||||
|
println("Unkown key pressed.: $key..")
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AIInputProvider(val display: Display): InputProvider{
|
||||||
|
|
||||||
|
override fun getInput(): Long {
|
||||||
|
val ballPos = display.find(Tile.BALL)!!
|
||||||
|
val paddlePos = display.find(Tile.HORIZONTAL_PADDLE)!!
|
||||||
|
|
||||||
|
return when {
|
||||||
|
ballPos.x < paddlePos.x -> -1
|
||||||
|
ballPos.x > paddlePos.x -> 1
|
||||||
|
else -> 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Display(var score: Long, val display: Array<Array<Tile>>) {
|
||||||
|
|
||||||
|
fun find(tile: Tile): Day11.Vector2i? {
|
||||||
|
|
||||||
|
for (y in display.indices) {
|
||||||
|
for (x in display[0].indices) {
|
||||||
|
if (display[y][x] == tile) {
|
||||||
|
return Day11.Vector2i(x, y)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun show() {
|
||||||
|
println(score)
|
||||||
|
val maxY = display.indexOfLast { row -> row.any { it != Tile.EMPTY } }
|
||||||
|
val maxX = display.map { row -> row.indexOfLast { it != Tile.EMPTY } }.max()!!
|
||||||
|
for (y in 0..maxY) {
|
||||||
|
for (x in 0..maxX) {
|
||||||
|
print(when(display[y][x]) {
|
||||||
|
Tile.EMPTY -> " "
|
||||||
|
Tile.BLOCK -> "B"
|
||||||
|
Tile.BALL -> "o"
|
||||||
|
Tile.HORIZONTAL_PADDLE -> "-"
|
||||||
|
Tile.WALL -> "#"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
println()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.basdado.adventofcode.day7
|
package com.basdado.adventofcode.day7
|
||||||
|
|
||||||
import com.basdado.adventofcode.IntCodeProgram
|
import com.basdado.adventofcode.IntCodeProgram
|
||||||
|
import com.basdado.adventofcode.StackBasedInputProvider
|
||||||
import com.basdado.adventofcode.loadProgramData
|
import com.basdado.adventofcode.loadProgramData
|
||||||
|
|
||||||
const val DAY7_INPUT_PATH = "/day/7/input.txt"
|
const val DAY7_INPUT_PATH = "/day/7/input.txt"
|
||||||
@@ -20,7 +21,7 @@ object Day7 {
|
|||||||
|
|
||||||
for (A in 0L..4) {
|
for (A in 0L..4) {
|
||||||
|
|
||||||
val programA = IntCodeProgram(programData.clone(), longArrayOf(A, 0))
|
val programA = IntCodeProgram(programData.clone(), StackBasedInputProvider(longArrayOf(A, 0)))
|
||||||
programA.execute()
|
programA.execute()
|
||||||
val outputA = programA.getOutputs().last()
|
val outputA = programA.getOutputs().last()
|
||||||
|
|
||||||
@@ -28,7 +29,7 @@ object Day7 {
|
|||||||
|
|
||||||
if (B == A) continue
|
if (B == A) continue
|
||||||
|
|
||||||
val programB = IntCodeProgram(programData.clone(), longArrayOf(B, outputA))
|
val programB = IntCodeProgram(programData.clone(), StackBasedInputProvider(longArrayOf(B, outputA)))
|
||||||
programB.execute()
|
programB.execute()
|
||||||
val outputB = programB.getOutputs().last()
|
val outputB = programB.getOutputs().last()
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ object Day7 {
|
|||||||
|
|
||||||
if (C == A || C == B) continue
|
if (C == A || C == B) continue
|
||||||
|
|
||||||
val programC = IntCodeProgram(programData.clone(), longArrayOf(C, outputB))
|
val programC = IntCodeProgram(programData.clone(), StackBasedInputProvider(longArrayOf(C, outputB)))
|
||||||
programC.execute()
|
programC.execute()
|
||||||
val outputC = programC.getOutputs().last()
|
val outputC = programC.getOutputs().last()
|
||||||
|
|
||||||
@@ -44,7 +45,7 @@ object Day7 {
|
|||||||
|
|
||||||
if (D == A || D == B || D == C) continue
|
if (D == A || D == B || D == C) continue
|
||||||
|
|
||||||
val programD = IntCodeProgram(programData.clone(), longArrayOf(D, outputC))
|
val programD = IntCodeProgram(programData.clone(), StackBasedInputProvider(longArrayOf(D, outputC)))
|
||||||
programD.execute()
|
programD.execute()
|
||||||
val outputD = programD.getOutputs().last()
|
val outputD = programD.getOutputs().last()
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ object Day7 {
|
|||||||
|
|
||||||
if (E == A || E == B || E == C || E == D) continue
|
if (E == A || E == B || E == C || E == D) continue
|
||||||
|
|
||||||
val programE = IntCodeProgram(programData.clone(), longArrayOf(E, outputD))
|
val programE = IntCodeProgram(programData.clone(), StackBasedInputProvider(longArrayOf(E, outputD)))
|
||||||
programE.execute()
|
programE.execute()
|
||||||
val outputE = programE.getOutputs().last()
|
val outputE = programE.getOutputs().last()
|
||||||
// Beautiful
|
// Beautiful
|
||||||
@@ -98,25 +99,31 @@ object Day7 {
|
|||||||
|
|
||||||
val programData = loadProgramData(DAY7_INPUT_PATH)
|
val programData = loadProgramData(DAY7_INPUT_PATH)
|
||||||
|
|
||||||
val ampA = IntCodeProgram(programData.clone(), longArrayOf(phaseSettings[0].toLong()))
|
val stackA = StackBasedInputProvider(longArrayOf(phaseSettings[0].toLong()))
|
||||||
val ampB = IntCodeProgram(programData.clone(), longArrayOf(phaseSettings[1].toLong()))
|
val stackB = StackBasedInputProvider(longArrayOf(phaseSettings[1].toLong()))
|
||||||
val ampC = IntCodeProgram(programData.clone(), longArrayOf(phaseSettings[2].toLong()))
|
val stackC = StackBasedInputProvider(longArrayOf(phaseSettings[2].toLong()))
|
||||||
val ampD = IntCodeProgram(programData.clone(), longArrayOf(phaseSettings[3].toLong()))
|
val stackD = StackBasedInputProvider(longArrayOf(phaseSettings[3].toLong()))
|
||||||
val ampE = IntCodeProgram(programData.clone(), longArrayOf(phaseSettings[4].toLong()))
|
val stackE = StackBasedInputProvider(longArrayOf(phaseSettings[4].toLong()))
|
||||||
|
|
||||||
|
val ampA = IntCodeProgram(programData.clone(), stackA)
|
||||||
|
val ampB = IntCodeProgram(programData.clone(), stackB)
|
||||||
|
val ampC = IntCodeProgram(programData.clone(), stackC)
|
||||||
|
val ampD = IntCodeProgram(programData.clone(), stackD)
|
||||||
|
val ampE = IntCodeProgram(programData.clone(), stackE)
|
||||||
|
|
||||||
|
|
||||||
var ampAInput = 0L
|
var ampAInput = 0L
|
||||||
var anyAmpRunning = true
|
var anyAmpRunning = true
|
||||||
while (anyAmpRunning) {
|
while (anyAmpRunning) {
|
||||||
ampA.pushInput(ampAInput)
|
stackA.pushInput(ampAInput)
|
||||||
val ampBInput = ampA.executeUntilOutput() ?: ampA.getOutputs().last()
|
val ampBInput = ampA.executeUntilOutput() ?: ampA.getOutputs().last()
|
||||||
ampB.pushInput(ampBInput)
|
stackB.pushInput(ampBInput)
|
||||||
val ampCInput = ampB.executeUntilOutput() ?: ampA.getOutputs().last()
|
val ampCInput = ampB.executeUntilOutput() ?: ampA.getOutputs().last()
|
||||||
ampC.pushInput(ampCInput)
|
stackC.pushInput(ampCInput)
|
||||||
val ampDInput = ampC.executeUntilOutput() ?: ampA.getOutputs().last()
|
val ampDInput = ampC.executeUntilOutput() ?: ampA.getOutputs().last()
|
||||||
ampD.pushInput(ampDInput)
|
stackD.pushInput(ampDInput)
|
||||||
val ampEInput = ampD.executeUntilOutput() ?: ampA.getOutputs().last()
|
val ampEInput = ampD.executeUntilOutput() ?: ampA.getOutputs().last()
|
||||||
ampE.pushInput(ampEInput)
|
stackE.pushInput(ampEInput)
|
||||||
ampAInput = ampE.executeUntilOutput() ?: ampA.getOutputs().last()
|
ampAInput = ampE.executeUntilOutput() ?: ampA.getOutputs().last()
|
||||||
|
|
||||||
anyAmpRunning = !ampA.done || !ampB.done || !ampC.done || !ampD.done || !ampE.done
|
anyAmpRunning = !ampA.done || !ampB.done || !ampC.done || !ampD.done || !ampE.done
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.basdado.adventofcode.day9
|
package com.basdado.adventofcode.day9
|
||||||
|
|
||||||
import com.basdado.adventofcode.IntCodeProgram
|
import com.basdado.adventofcode.IntCodeProgram
|
||||||
|
import com.basdado.adventofcode.StackBasedInputProvider
|
||||||
import com.basdado.adventofcode.loadProgramData
|
import com.basdado.adventofcode.loadProgramData
|
||||||
|
|
||||||
const val DAY9_INPUT_PATH = "/day/9/input.txt"
|
const val DAY9_INPUT_PATH = "/day/9/input.txt"
|
||||||
@@ -16,7 +17,7 @@ object Day9 {
|
|||||||
fun puzzle1() {
|
fun puzzle1() {
|
||||||
|
|
||||||
val programData = loadProgramData(DAY9_INPUT_PATH)
|
val programData = loadProgramData(DAY9_INPUT_PATH)
|
||||||
val program = IntCodeProgram(programData + LongArray(65536), longArrayOf(1))
|
val program = IntCodeProgram(programData + LongArray(65536), StackBasedInputProvider(longArrayOf(1)))
|
||||||
program.execute()
|
program.execute()
|
||||||
println(program.getOutputs())
|
println(program.getOutputs())
|
||||||
}
|
}
|
||||||
@@ -24,7 +25,7 @@ object Day9 {
|
|||||||
fun puzzle2() {
|
fun puzzle2() {
|
||||||
|
|
||||||
val programData = loadProgramData(DAY9_INPUT_PATH)
|
val programData = loadProgramData(DAY9_INPUT_PATH)
|
||||||
val program = IntCodeProgram(programData + LongArray(65536), longArrayOf(2))
|
val program = IntCodeProgram(programData + LongArray(65536), StackBasedInputProvider(longArrayOf(2)))
|
||||||
program.execute()
|
program.execute()
|
||||||
println(program.getOutputs())
|
println(program.getOutputs())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
1,380,379,385,1008,2689,888873,381,1005,381,12,99,109,2690,1102,0,1,383,1101,0,0,382,21001,382,0,1,20102,1,383,2,21101,0,37,0,1105,1,578,4,382,4,383,204,1,1001,382,1,382,1007,382,41,381,1005,381,22,1001,383,1,383,1007,383,25,381,1005,381,18,1006,385,69,99,104,-1,104,0,4,386,3,384,1007,384,0,381,1005,381,94,107,0,384,381,1005,381,108,1105,1,161,107,1,392,381,1006,381,161,1101,-1,0,384,1106,0,119,1007,392,39,381,1006,381,161,1102,1,1,384,20101,0,392,1,21101,23,0,2,21102,0,1,3,21102,138,1,0,1105,1,549,1,392,384,392,21001,392,0,1,21101,23,0,2,21101,3,0,3,21102,1,161,0,1105,1,549,1101,0,0,384,20001,388,390,1,20101,0,389,2,21101,0,180,0,1106,0,578,1206,1,213,1208,1,2,381,1006,381,205,20001,388,390,1,20101,0,389,2,21101,205,0,0,1105,1,393,1002,390,-1,390,1102,1,1,384,21001,388,0,1,20001,389,391,2,21101,228,0,0,1105,1,578,1206,1,261,1208,1,2,381,1006,381,253,20101,0,388,1,20001,389,391,2,21101,253,0,0,1106,0,393,1002,391,-1,391,1101,0,1,384,1005,384,161,20001,388,390,1,20001,389,391,2,21101,279,0,0,1106,0,578,1206,1,316,1208,1,2,381,1006,381,304,20001,388,390,1,20001,389,391,2,21101,0,304,0,1106,0,393,1002,390,-1,390,1002,391,-1,391,1101,0,1,384,1005,384,161,20102,1,388,1,20101,0,389,2,21101,0,0,3,21101,0,338,0,1106,0,549,1,388,390,388,1,389,391,389,21001,388,0,1,21002,389,1,2,21102,4,1,3,21101,0,365,0,1105,1,549,1007,389,24,381,1005,381,75,104,-1,104,0,104,0,99,0,1,0,0,0,0,0,0,230,18,20,1,1,20,109,3,21201,-2,0,1,22101,0,-1,2,21101,0,0,3,21102,1,414,0,1106,0,549,22102,1,-2,1,22102,1,-1,2,21101,0,429,0,1105,1,601,2102,1,1,435,1,386,0,386,104,-1,104,0,4,386,1001,387,-1,387,1005,387,451,99,109,-3,2106,0,0,109,8,22202,-7,-6,-3,22201,-3,-5,-3,21202,-4,64,-2,2207,-3,-2,381,1005,381,492,21202,-2,-1,-1,22201,-3,-1,-3,2207,-3,-2,381,1006,381,481,21202,-4,8,-2,2207,-3,-2,381,1005,381,518,21202,-2,-1,-1,22201,-3,-1,-3,2207,-3,-2,381,1006,381,507,2207,-3,-4,381,1005,381,540,21202,-4,-1,-1,22201,-3,-1,-3,2207,-3,-4,381,1006,381,529,22102,1,-3,-7,109,-8,2106,0,0,109,4,1202,-2,41,566,201,-3,566,566,101,639,566,566,2101,0,-1,0,204,-3,204,-2,204,-1,109,-4,2105,1,0,109,3,1202,-1,41,594,201,-2,594,594,101,639,594,594,20102,1,0,-2,109,-3,2106,0,0,109,3,22102,25,-2,1,22201,1,-1,1,21101,0,521,2,21102,1,1011,3,21102,1,1025,4,21102,630,1,0,1106,0,456,21201,1,1664,-2,109,-3,2105,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,2,2,0,2,0,2,0,2,0,0,2,2,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,2,0,1,1,0,0,0,0,2,0,0,2,0,2,2,2,2,0,2,0,0,0,2,2,0,0,2,2,2,2,0,0,0,0,0,2,0,0,0,0,2,2,0,1,1,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,2,2,0,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2,2,2,0,0,1,1,0,0,2,2,2,0,0,0,2,0,0,0,0,0,2,2,0,0,2,0,2,0,0,0,2,2,0,0,0,2,0,0,0,2,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,2,0,0,2,0,0,0,0,2,0,0,2,0,2,0,2,0,2,0,0,1,1,0,0,0,0,0,2,2,0,0,2,2,0,0,0,0,2,0,0,2,2,0,0,0,2,2,0,0,2,0,0,0,2,2,2,2,2,0,2,0,1,1,0,0,0,0,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,2,2,2,0,0,0,0,0,2,0,0,2,0,0,1,1,0,2,0,0,2,0,0,0,0,2,0,0,0,0,2,2,0,2,0,0,0,0,2,0,0,0,0,0,2,0,2,0,0,2,0,0,2,0,0,1,1,0,2,2,2,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,2,0,0,2,0,2,0,2,2,0,2,2,0,2,0,2,0,0,1,1,0,0,2,0,0,2,0,2,0,0,2,0,0,2,0,0,0,2,0,0,0,0,2,0,0,2,0,0,2,2,0,2,0,0,0,0,2,2,0,1,1,0,0,2,2,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,2,2,2,0,0,2,0,2,0,2,2,0,0,2,0,2,0,0,1,1,0,0,2,2,2,0,0,2,2,0,2,2,2,0,0,0,2,2,2,0,2,0,0,0,0,0,2,0,0,2,0,2,0,0,0,0,0,0,0,1,1,0,2,0,0,0,2,2,0,2,0,0,2,0,2,2,2,0,0,2,2,0,2,0,0,0,0,0,0,2,2,0,2,2,0,2,0,0,2,0,1,1,0,0,2,0,0,2,2,0,0,0,0,0,2,2,0,2,2,2,0,2,0,2,2,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,1,1,0,2,0,2,0,2,2,2,2,0,0,0,2,0,0,0,2,2,0,0,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,2,0,0,0,1,1,0,0,0,0,2,0,0,2,0,0,2,2,0,2,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,2,0,1,1,0,2,0,0,0,2,0,0,0,2,2,0,2,0,0,2,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,2,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,34,58,37,19,14,62,51,10,28,52,86,20,39,30,61,36,77,73,19,11,17,74,7,54,40,59,20,92,18,13,85,72,83,58,18,68,10,22,94,22,25,40,67,96,55,96,42,16,80,80,96,35,19,79,81,63,91,5,72,68,80,93,79,36,91,47,71,82,45,29,51,36,10,62,57,29,17,16,4,88,75,81,70,77,32,2,38,37,35,86,41,35,61,71,72,22,14,33,12,10,10,56,30,3,90,71,24,62,69,31,47,2,18,77,43,20,64,85,50,43,43,73,16,23,98,4,23,53,82,15,88,1,39,78,43,57,65,8,45,79,17,44,32,76,31,3,25,71,45,16,42,61,89,21,93,4,98,66,68,5,13,19,48,65,29,5,24,59,29,49,57,39,21,96,10,8,25,82,17,42,46,49,83,4,81,32,14,7,76,62,31,74,55,19,39,63,89,41,38,28,34,34,88,7,77,43,87,10,47,85,39,31,88,69,40,72,51,49,64,46,64,14,66,95,95,Line truncated
|
||||||
Reference in new issue
Block a user