This was pretty easy - array programming languages are made for this kind of thing - mostly complicated by my deciding to forget about boxes when doing part 2 (and spend time on an overcomplex attempt with dynamic fills instead for a while).
Similar thing with Day 5, where I got most of the way into a solution before realising that I was just reimplementing fold less well...