Raul wrote:
> Reading the nuvoc page, I was frustrated by the lack of orientation
materials.

I guess we were all just one step ahead of the class with this page. :-)

On Wed, 22 Dec 2021 at 14:09, Raul Miller <[email protected]> wrote:

> previous message:
> http://jsoftware.com/pipermail/chat/2021-December/009000.html
> AoC day 2 details: https://adventofcode.com/2021/day/2
>
> For day 2, we were "piloting a submarine" given a sequence of steering
> instructions,
>
> My approach was to convert those directions to numeric form:
>
> normalize=: _&".@rplc&(;:'forward 1 0 down 0 1 up 0 _1')
> sample=:  normalize;._2 {{)n
> forward 5
> down 5
> forward 8
> up 3
> down 8
> forward 2
> }}
>
> The result looks like this:
>
>    sample
> 1  0 5
> 0  1 5
> 1  0 8
> 0 _1 3
> 0  1 8
> 1  0 2
>
> Thus, for the first part, I finished converting this to vector form,
> summed the vectors and then found their product (since the puzzle asks
> us to multiply the final coordinates):
>
> aoc2a=: {{
>   */+/(({:"1)* }:"1) y
> }}
>
> For the second part, we had to interpret things a bit differently. We
> had an 'aim' value that we multiplied into our depth calculation,
> along with moving us horizontally.
>
> I decided to use this as an opportunity to get acquainted with J's
> fold (fcap) conjunction. Reading the nuvoc page, I was frustrated by
> the lack of orientation materials. I was having to skip all over the
> page to figure out what's what.
>
> So I added some basic definitions to the page. Hopefully someone
> besides myself finds them helpful:
>
> https://code.jsoftware.com/wiki/Vocabulary/fcap#Definitions
>
> Anyways, my initial implementation looked like this:
>
> aoc2bv=: {{
>   'dH0 dA0 N'=. x
>   'A H D'=. y
>   dA=. N*dA0   NB. change (difference) in aim
>   dH=. N*dH0   NB. horizontal change
>   dD=. A*dH    NB. depth change
>   y+dA,dH,dD
> }}
>
> Here, y is the accumulating value(s), and I will be dropping the first
> value (dA) from the final result.
>
> aoc2b=: {{*/}. 0 0 0&(]F..aoc2bv) y}}
>
> Just for fun, I went back and implemented a fully tacit variant:
>
> aoc2BV=: ([ + ((] , {.@[ * {:@]) ({: * |.@}:)))~
> aoc2B=: {{*/}. 0 0 0&(]F..aoc2BV) y}}
>
>    aoc2b sample
> 900
>    aoc2B sample
> 900
>
> This particular fully tacit form doesn't seem to add anything -- it's
> mostly positional manipulation, and I think I prefer variable names
> for that. But reading back on this, I am now thinking that something
> like this might make more sense:
>
> b2fold=: 0 0 0&(]F..{{
>   'dH0 dA0 N'=. x
>   'A H D'=. y
>   dA=: N*dA0
>   dH=: N*dH0
>   dD=: A*dH
>   y+dA,dH,dD
> }})
>
> b2=: {{*/}. b2fold y}}
>
>    b2 sample
> 900
>
> This approach still requires the reader to understand fcap. But it
> brings the pieces of that part of the implementation together.
>
> I hope this makes sense to someone...
>
> --
> Raul
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to