Advent of Code 2021 day 19
12/19/2021, 5:00 AMKroppeb
12/19/2021, 6:07 AMelizarov
12/19/2021, 7:36 AMephemient
12/19/2021, 7:42 AMilya.gorbunov
12/19/2021, 7:51 AM[-1, 0, 0]
[0, 1, 0]
[0, 0, 1]
Is there a simple criteria, how to distinguish a rotation matrix from a mirroring one?elizarov
12/19/2021, 8:02 AMelizarov
12/19/2021, 8:07 AMelizarov
12/19/2021, 8:10 AMList<Int>
š± and I copy them all the time without ever trying to save on copying). The resulting code is quite concise, but it takes over 10 seconds to complete.elizarov
12/19/2021, 8:25 AMdata class
with val x: Int, val y: Int, val z: Int
makes it significantly faster (~5 sec), but forces writing more code.Dan Fingal-Surma
12/19/2021, 9:01 AMDan Fingal-Surma
12/19/2021, 9:01 AMelizarov
12/19/2021, 9:07 AMnkiesel
12/19/2021, 9:18 AMDan Fingal-Surma
12/19/2021, 9:18 AMDan Fingal-Surma
12/19/2021, 9:19 AMnkiesel
12/19/2021, 9:19 AMephemient
12/19/2021, 9:36 AM.sortedByDescending { (key, _) -> delta.intersect(key).size }
took 45s, .map { (key, value) -> key.count { it in delta } to value }.apply { sortByDescending { it.first } }
takes 2.5s āephemient
12/19/2021, 9:38 AMintersect
to be smarter and handle swapping of arguments (depending on cardinality) for better runtime on its own, but it seems it's documented to preserve order of the receiver, so it can be pretty terrible)ephemient
12/19/2021, 10:15 AMMichael de Kaste
12/19/2021, 10:19 AMMichael de Kaste
12/19/2021, 10:37 AMtotalBeacons.flatMap { c1 -> orient.map { c2 -> c1 - c2 } }
.groupingBy { it }
.eachCount()
.filterValues { it >= MINIMALBEACONS }
Michael de Kaste
12/19/2021, 1:04 PMMarcin Wisniowski
12/19/2021, 2:02 PMJintin
12/19/2021, 4:58 PMKiet
12/20/2021, 12:41 AMphldavies
12/20/2021, 12:47 AMDan Fingal-Surma
12/20/2021, 6:12 AMDan Fingal-Surma
12/20/2021, 6:16 AMtypealias Extractor = (Point) -> Int
val X: Extractor = { it.x }
val NX: Extractor = { -it.x }
val Y: Extractor = { it.y }
val NY: Extractor = { -it.y }
val Z: Extractor = { it.z }
val NZ: Extractor = { -it.z }
class Transform(val x: Extractor, val y: Extractor, val z: Extractor): (Point) -> Point {
override operator fun invoke(p: Point) = Point(x(p), y(p), z(p))
}
val transforms = listOf(
// X -> X
Transform(X, Y, Z), Transform(X, NY, NZ), Transform(X, NZ, Y), Transform(X, Z, NY),
Transform(NX, Y, NZ), Transform(NX, NY, Z), Transform(NX, NZ, NY), Transform(NX, Z, Y),
// Y -> X
Transform(Y, NX, Z), Transform(Y, X, NZ), Transform(Y, Z, X), Transform(Y, NZ, NX),
Transform(NY, X, Z), Transform(NY, NX, NZ), Transform(NY, NZ, X), Transform(NY, Z, NX),
// Z -> X
Transform(Z, X, Y), Transform(Z, NX, NY), Transform(Z, Y, NX), Transform(Z, NY, X),
Transform(NZ, NX, Y), Transform(NZ, X, NY), Transform(NZ, NY, NX), Transform(NZ, Y, X),
)
Dan Fingal-Surma
12/20/2021, 6:19 AMKiet
12/20/2021, 7:26 AMphldavies
12/20/2021, 12:22 PMtodd.ginsberg
12/20/2021, 7:38 PMNir
12/20/2021, 8:45 PMNir
12/20/2021, 8:45 PMNir
12/20/2021, 8:46 PMNir
12/20/2021, 8:47 PMNir
12/20/2021, 8:48 PMNir
12/20/2021, 8:49 PMephemient
12/20/2021, 10:56 PMNir
12/20/2021, 11:26 PMephemient
12/20/2021, 11:30 PMnkiesel
12/20/2021, 11:32 PMNir
12/20/2021, 11:38 PMNir
12/20/2021, 11:38 PMNir
12/20/2021, 11:39 PMNir
12/20/2021, 11:40 PMNir
12/20/2021, 11:41 PMNir
12/20/2021, 11:41 PMephemient
12/20/2021, 11:44 PMphldavies
12/20/2021, 11:45 PMephemient
12/20/2021, 11:46 PMphldavies
12/20/2021, 11:46 PMKiet
12/21/2021, 12:10 AMNir
12/21/2021, 3:24 AMNir
12/21/2021, 3:25 AMkqr
01/02/2022, 7:46 PM