Here's my AoC Day2 solution. I first converted the course into a matrix with 
one column each for moves forward, moves up, and moves down. I then used matrix 
multiplications and running sums to get the horizontal movement, aim, and depth.

Mike

cutspace =: [: <;._1 ' '&,

parse =: {{)m
  course     =. cutspace&> cutLF y
  directions =. {."1 course
  distances  =. ". > {:"1 course
  distances *"0 1 directions ="0 1 'forward';'down';'up'  
}}

follow1 =: {{)m
  horizontal =. +/\ y +/ .* 1 0  0
  depth      =. +/\ y +/ .* 0 1 _1 
  ({: horizontal) ; ({: depth) ; horizontal *&{: depth
}}

follow2 =: {{)m
  horizontal =. +/\ y +/ .* 1 0  0
  aim        =. +/\ y +/ .* 0 1 _1 
  depth      =. +/\ aim * y +/ .* 1 0 0
  ({: horizontal) ; ({: aim) ; ({: depth) ; horizontal *&{: depth
}}


--
Michael P. Manti
[email protected]

> On Dec 23, 2021, at 02:41, Skip Cave <[email protected]> wrote:
> 
> Here's my AoC Day 2 solution: https://adventofcode.com/2021/day/2
> this problem seemed perfect for running sums (+/\)
> 
> n=.'b' freads 'depth2.txt' NB. Read in File
> a=.'forward';'up';'down'
> s=.;".ea{:ea n NB. Get numeric values (ea = each)
> t=.+./@E.&.>  NB. string match mark each.
> m=.s*"1[1 _1 1*>((0{a)t n),((1{a)t n),:((2{a)t n) NB. Set up for running
> sums
>   {:+/\+/1 2{m  NB. Get running depth sums
> 820
>   {:+/\0{m NB. Get running distance sums.
> 2018
> 
> 820*2018
> 1654760     NB. Answer
> 
> Skip Cave
> Cave Consulting LLC
> 
> 
>> On Wed, Dec 22, 2021 at 2:59 PM 'Michael Day' via Programming <
>> [email protected]> wrote:
>> 
>> Apologies - more chat than programming,  but: fwiw,  for part 1,  I just
>> defined simple
>> one-liner functions "forward" etc which worked ok.  For part 2, they
>> needed redefining,  and,
>> yes, I used direct defs;  nothing as sophisticated as fold!
>> 
>> I've done days 1-17,  mostly straightforward,  some very fiddly.
>> 
>> But I'm stuck at 18,  which is v complicated in its explanation.  I
>> started with boxes in J,
>> but found navigation hard - I haven't used nested structures much in J -
>> so resorted to
>> working on the untranslated rows,  using ;: to separate the symbols &
>> numbers,  but
>> couldn't get all the examples to reproduce the stated results!    So
>> I've wasted yet more time
>> learning - or relearning - how to deal with nested arrays in Dyalog APL
>> and remembering how
>> to use John Scholes' dfns.  Managed to "reduce" the "addition" of the
>> first pair of snailnumbers,
>> but reducing the "addition" of the third line defeats me.  I suppose I'm
>> sometimes inserting
>> some result at the wrong depth.
>> 
>> I've spent so much time on that that I'll probably give up the rest!
>> 
>> Cheers,
>> 
>> Mike
>> 
>> 
>>> On 22/12/2021 14:59, Raul Miller wrote:
>>> (responding to
>> http://jsoftware.com/pipermail/programming/2021-December/059436.html#)
>>> 
>>> I am not sure that I thought this example out well enough for it to be
>>> good on an examples page.
>>> 
>>> For instance, after thinking about it for just a few minutes, I realized
>> that
>>> 
>>> 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}}
>>> 
>>> would have been clearer.
>>> 
>>> (Originally I was using ]F.. and commenting that I needed to drop the
>>> first item of the result. But isn't it clearer to include that drop
>>> mechanism with the fold implementation?)
>>> 
>>> But (and this is worse): this particular example lacks utility, which
>>> means that it's not going to be very interesting for anyone.
>>> 
>>> Other opportunities will arise, though. And I think that your concept
>>> of linked example pages is a good one and worth following up on.
>>> 
>>> Thanks,
>>> 
>> 
>> 
>> --
>> This email has been checked for viruses by Avast antivirus software.
>> https://www.avast.com/antivirus
>> 
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
> ----------------------------------------------------------------------
> 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