bjonnh
12/17/2020, 2:50 AMNir
12/17/2020, 5:36 AMNir
12/17/2020, 5:37 AMNir
12/17/2020, 5:43 AMNir
12/17/2020, 5:44 AMDavid Whittaker
12/17/2020, 5:44 AMfor
statements in part 2 so anything's gotta be prettier than thatNir
12/17/2020, 5:45 AMNir
12/17/2020, 5:45 AMDavid Whittaker
12/17/2020, 5:45 AMcount = 0
for (i in mx until sx) {
for (j in my until sy) {
for (k in mz until sz) {
for (p in mw until sw) {
if (mm[i][j][k][p] == '#') count++
}
}
}
}
David Whittaker
12/17/2020, 5:46 AMNir
12/17/2020, 5:46 AMNir
12/17/2020, 5:46 AMDavid Whittaker
12/17/2020, 5:47 AMfor
loop!Nir
12/17/2020, 5:47 AMNir
12/17/2020, 5:47 AMDavid Whittaker
12/17/2020, 5:48 AMilya.gorbunov
12/17/2020, 5:58 AMw = 0
.ilya.gorbunov
12/17/2020, 5:59 AMNir
12/17/2020, 6:07 AMNir
12/17/2020, 6:07 AMNir
12/17/2020, 6:07 AMNir
12/17/2020, 6:09 AMilya.gorbunov
12/17/2020, 6:26 AMfun <Point> oneCycle(field: Set<Point>, neighbors: Point.() -> List<Point>): Set<Point> = buildSet<Point> {
addAll(field)
field.forEach { addAll(it.neighbors()) }
retainAll { e ->
val n = e.neighbors().count { it in field }
n == 3 || (n == 2 && (e in field))
}
}
Jakub Gwóźdź
12/17/2020, 7:18 AMJakub Gwóźdź
12/17/2020, 7:21 AMephemient
12/17/2020, 8:18 AMephemient
12/17/2020, 8:19 AMephemient
12/17/2020, 8:20 AMJakub Gwóźdź
12/17/2020, 9:52 AMgammax
12/17/2020, 11:04 AMhow do you do this in functional programming?@David Whittaker You could run a
fold
across your entire world:
https://github.com/cortinico/adventofcode-2020/blob/6b798992648ec61287efe94bc877cef4f14f54d4/src/main/java/Exercise17-part2.kt#L40-L46gammax
12/17/2020, 11:04 AMworld.fold(0) { acc, next ->
acc + next.fold(0) { acc2, next2 ->
acc2 + next2.fold(0) { acc3, chars ->
acc3 + chars.count { it == '#' }
}
}
}.also(::println)
ephemient
12/17/2020, 11:28 AMacc +
, you can make it tail-recursive with .fold(0) { acc, next -> next.fold(acc) { ...
ephemient
12/17/2020, 11:29 AM.sumOf { it.sumOf { it.sumOf { it.sum() } } } }
would workgammax
12/17/2020, 11:31 AMCharArray
so they need to filter for '#'
. So just .sum()
won’t work.ephemient
12/17/2020, 12:28 PM.count('#')
thenNir
12/17/2020, 1:56 PMephemient
12/17/2020, 3:01 PMNir
12/17/2020, 3:48 PMNir
12/17/2020, 3:49 PMNir
12/17/2020, 3:50 PMNir
12/17/2020, 4:26 PMNir
12/17/2020, 4:27 PMtodd.ginsberg
12/17/2020, 9:35 PMbjonnh
12/17/2020, 9:42 PMNir
12/17/2020, 9:42 PMNir
12/17/2020, 9:43 PMNir
12/17/2020, 9:43 PMNir
12/17/2020, 9:43 PMNir
12/17/2020, 9:43 PMbjonnh
12/17/2020, 9:47 PMNir
12/17/2020, 9:52 PMbjonnh
12/17/2020, 9:53 PMbjonnh
12/17/2020, 9:53 PMNir
12/17/2020, 9:55 PMbjonnh
12/17/2020, 9:58 PMbjonnh
12/17/2020, 10:02 PMNir
12/17/2020, 10:04 PMbjonnh
12/17/2020, 10:05 PMvar initialList: List<List<Int>> = (-1..1).map { listOf(it) }
repeat(dimensions - 1) {
initialList = initialList.flatMap { oldList -> (-1..1).map { oldList + listOf(it) } }
}
bjonnh
12/17/2020, 10:05 PMNir
12/17/2020, 10:05 PMNir
12/17/2020, 10:05 PMNir
12/17/2020, 10:06 PMNir
12/17/2020, 10:06 PMList
as your point class, you don't have those guaranteesbjonnh
12/17/2020, 10:10 PMbjonnh
12/17/2020, 10:10 PMNir
12/17/2020, 10:10 PMNir
12/17/2020, 10:10 PMbjonnh
12/17/2020, 10:10 PMNir
12/17/2020, 10:11 PMbjonnh
12/17/2020, 10:11 PMbjonnh
12/17/2020, 10:11 PMNir
12/17/2020, 10:11 PMNir
12/17/2020, 10:12 PMstd::array<int, N>
Nir
12/17/2020, 10:12 PMNir
12/17/2020, 10:13 PMfun getNeighbors(x: List<Int>): List<List<Int>>
Nir
12/17/2020, 10:13 PMNir
12/17/2020, 10:14 PMtemplate <std::size_t N> vector<array<int, N>> get_neighbors(const std::array<int, N>&);
bjonnh
12/17/2020, 10:14 PMNir
12/17/2020, 10:14 PMNir
12/17/2020, 10:14 PMNir
12/17/2020, 10:15 PMNir
12/17/2020, 10:15 PMarray<int, 3> some_point;
vector<array<int, 4>> list_of_points;
list_of_points = get_neighbors(some_points); // compilation error
bjonnh
12/17/2020, 10:16 PMbjonnh
12/17/2020, 10:16 PMbjonnh
12/17/2020, 10:17 PMbjonnh
12/17/2020, 10:17 PMbjonnh
12/17/2020, 10:17 PMNir
12/17/2020, 10:17 PMNir
12/17/2020, 10:17 PMNir
12/17/2020, 10:18 PMinterface Dimension {
val size: Int
}
class Three : Dimension {
override val size = 3
}
class Four : Dimension {
override val size = 4
}
data class Point<T: Dimension>(val data: List<Int>, val dim: T) {
init {
assert(data.size == dim.size)
}
}
Nir
12/17/2020, 10:19 PMfun <D: Dimension> Point<D>.getNeighbors(): List<Point<D>>
Nir
12/17/2020, 10:19 PMbjonnh
12/17/2020, 10:19 PMbjonnh
12/17/2020, 10:19 PMNir
12/17/2020, 10:19 PMNir
12/17/2020, 10:19 PMbjonnh
12/17/2020, 10:20 PMNir
12/17/2020, 10:20 PMNir
12/17/2020, 10:20 PMbjonnh
12/17/2020, 10:23 PMbjonnh
12/17/2020, 10:23 PMNir
12/17/2020, 10:23 PMbjonnh
12/17/2020, 10:23 PMbjonnh
12/17/2020, 10:23 PMbjonnh
12/17/2020, 10:23 PMNir
12/17/2020, 10:23 PMbjonnh
12/17/2020, 10:23 PMbjonnh
12/17/2020, 10:23 PMNir
12/17/2020, 10:24 PMNir
12/17/2020, 10:24 PMbjonnh
12/17/2020, 10:24 PMNir
12/17/2020, 10:24 PMval neighborDirs3 = (-1..1).map { x ->
(-1..1).map { y ->
(-1..1).map { z ->
Point3(x, y, z)
}
}
}.flatten().flatten().filter { it != Point3(0, 0, 0) }
Nir
12/17/2020, 10:25 PMneighborDirs3.map { p + it }
bjonnh
12/17/2020, 10:26 PMbjonnh
12/17/2020, 10:36 PMNir
12/17/2020, 11:03 PMNir
12/17/2020, 11:03 PMNir
12/17/2020, 11:03 PMbjonnh
12/18/2020, 12:33 AMNir
12/18/2020, 1:09 AMephemient
12/18/2020, 4:52 AMbjonnh
12/18/2020, 3:50 PM