40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
| import java.io.File
 | |
| import kotlin.math.absoluteValue
 | |
| 
 | |
| fun main(args: Array<String>){
 | |
|     val file = File("../puzzle_20.txt")
 | |
|     // val file = File("test.txt")
 | |
|     val lines = file.readLines()
 | |
|     val firstLine = lines.first()
 | |
|     val particles = lines.map {
 | |
|         val split = it.split("=")
 | |
|         val (x, y, z) = split[1].substring(1).substringBefore(">").split(",").map { it.toLong() }
 | |
|         val (vx, vy, vz) = split[2].substring(1).substringBefore(">").split(",").map { it.toLong() }
 | |
|         val (ax, ay, az) = split[3].substring(1).substringBefore(">").split(",").map { it.toLong() }
 | |
|         Particle(x, y, z, vx, vy, vz, ax, ay, az)
 | |
|     }.toMutableList()
 | |
|     var count = 0
 | |
|     while(count < 1000){
 | |
|         particles.forEach {
 | |
|             it.step()
 | |
|         }
 | |
|         val collidedParticles = mutableListOf<Particle>()
 | |
|         var index = 0
 | |
|         while(index < particles.size){
 | |
|             val par1 = particles[index]
 | |
|             var index2 = index + 1;
 | |
|             while(index2 < particles.size){
 | |
|                 val par2 = particles[index2]
 | |
|                 if(par1.x == par2.x && par1.y == par2.y && par1.z == par2.z) {
 | |
|                     collidedParticles.add(par1)
 | |
|                     collidedParticles.add(par2)
 | |
|                 }
 | |
|                 index2++
 | |
|             }
 | |
|             index++
 | |
|         }
 | |
|         particles.removeAll(collidedParticles)
 | |
|         count++
 | |
|     }
 | |
|     println(particles.size)
 | |
| } |