Here's my silly version for part 1... We can turn the instructions
into bytecodes and run it through the bytecode interpreter I've been
playing with:

https://gist.github.com/joebo/92738a1c6df841d53b15

I haven't run it through the full 1000x1000 matrix yet. I'm estimating
it would take about 3 hours to run (3000 ops per second)

smoutput $ compile lines
27212168 3

I could always run it through the OCL version :-)


On Sun, Dec 6, 2015 at 11:03 PM, 'Pascal Jasmin' via Programming
<programm...@jsoftware.com> wrote:
> A version focused on reduced typing of parens, uses this file,
>
> https://github.com/Pascal-J/multiline-tacit-and-macros---J/blob/master/multiline2.ijs
>
> multiline tacit basically inserts parens around each line in a definition
>
>
> Y =: (&{::)(@:])
> X =: (&{::)(@:[)
> amenD =: 2 : '([ u"_ v{ ])`(v"_)`]} ]'
> reduce =: 1 : '<"_1@[ ([: u &.>/(>@:) ,) <@:]'
>
> coinsert 'multiline'
>
> p3 =: ,@:(<"1)@(0 Tacify)
>
> 4 Y (] + i.@>:@-) 2 Y
> ,.~"0 1
> 3 Y (] + i.@>:@-) 1 Y)
>
> p2 =: 0 Tacify"1 _
> (2 + ]) amenD  (p3@[)
> `
>>:@] amenD (p3@[)
> `
> (0 >. <:@])  amenD (p3@[)
> @.
> 0 X
> )
>
> b =. (2 , 0 ". every  3 5 7 9 { ])`(1 , 0 ". every  3 5 7 9 { ])@.('on' -: 2 
> Y)`(0 , 0 ". every  2 4 6 8 { ])@.(0 Y)"1( ],~ [: < 0:`1:@.('toggle' -: 0 
> Y))"1 ;:"1 > cutLF a =. wd 'clippaste'
>
> +/@, ( |. b) p2 reduce 1000 1000 $ 0
>
> slow because of boxing in reduce
>
> Henry's was quite fast.
>
>
> ----- Original Message -----
> From: Ric Sherlock <tikk...@gmail.com>
> To: Programming JForum <programm...@jsoftware.com>
> Sent: Sunday, December 6, 2015 10:14 PM
> Subject: Re: [Jprogramming] adventofcode 6
>
> I struggled with an efficient tacit implementation too and went with a for
> loop to sequentially update the array.
> I love Henry's take on the problem!
>
> parseInstructs=: 3 :0
>
>   tmp=. y rplc 'turn ';'';'through ';''
>
>   action=. <@(' '&taketo);._2 tmp
>
>   coords=. ". ' '&takeafter;._2 tmp
>
>   action=. ('off';'on';'toggle') i. action
>
>   action ,. coords
>
> )
>
>
> getIdx=: [: < ([ + i.@>:@-~)&.>/@(_2 ]\ ])
>
> on=: 1:`(getIdx@[)`]}
>
> off=: 0:`(getIdx@[)`]}
>
> toggle=: ([: -. getIdx@[ { ])`(getIdx@[)`]}
>
>
> applyActions=: 4 :0
>
>    actions=. {."1 x
>
>    coords=. }."1 x
>
>    for_action. actions do.
>
>       coord=. action_index { coords
>
>       y=. coord off`on`toggle@.action"_ y
>
>    end.
>
> )
>
>
> Lights=: 1000 1000 $ 0
>
> Instructions=: parseInstructs freads '~temp/advent6_input.txt'
>
> Lights=: Instructions applyActions Lights
>
> echo +/ , Lights
>
>
> Part 2:
> on=: (1 + getIdx@[ { ])`(getIdx@[)`]}
>
> off=: (0 >. _1 + getIdx@[ { ])`(getIdx@[)`]}
>
> toggle=: (2 + getIdx@[ { ])`(getIdx@[)`]}
>
> Lights=: 1000 1000 $ 0
>
> Instructions=: parseInstructs freads '~temp/advent6_input.txt'
>
> Lights=: Instructions applyActions Lights
>
> echo +/ , Lights
>
>
> On Mon, Dec 7, 2015 at 1:46 PM, Ryan Eckbo <ec...@cim.mcgill.ca> wrote:
>
>> Wow.
>>
>> These problems are great, I'm learning a lot seeing people's solutions.
>>
>>
>> On 7 Dec 2015, at 10:37, Henry Rich wrote:
>>
>> Part 1:
>>>
>>> i =. <@('y =. y ' , ;@(<@('(' , ,&')');._2)@:(,&' '));._2 wd 'clippaste'
>>>
>>> through =: (1000 1000 {. ({. ($&1)))/@(-~/\)@:-@(,:~ >:)
>>>
>>> turn =: 1 : 'u'
>>>
>>> '`off on toggle' =: >`+.`~:
>>>
>>> +/@, 3 : i 1000 1000 $ 0
>>>
>>>
>>> For part 2, use
>>>
>>> '`off on toggle' =: (0 >. -)`+`(+ +:)
>>>
>>>
>>>
>>>
>>> On 12/6/2015 6:03 PM, David Lambert wrote:
>>>
>>>> Ryan made a mask shape 1000 1000 and applied it appropriately to a
>>>> cumulative array.  Pascal updated the accumulation array in place. I did so
>>>> likewise but used the dyadic form of amend with gerund m. Pascal computed
>>>> the index in one place, which I prefer to my 3 sites.
>>>>
>>>> g
>>>> [: r/ [: _&". {::"0 1
>>>>
>>>> r   NB. absolute value not required
>>>> ([ + i.@:|@:(-/)) >:
>>>>
>>>>
>>>> NB. noun L is the array of lights.
>>>>
>>>> identify  NB. whoops!  returns a vector
>>>> 0 1 2 #~ 'turn on'&({.@E.) , 'turn off'&({.@E.) , 'toggle'&({.@E.)
>>>>
>>>> on
>>>> 3 : 0
>>>> I=:([: < 2 6&g ; 4 8&g)@;:y
>>>> NB. L=:I (1:)`([)`(])}L
>>>> L=:I (>:@:{)`([)`(])}L
>>>> EMPTY
>>>> )
>>>>
>>>> off
>>>> 3 : 0
>>>> I=:([: < 2 6&g ; 4 8&g)@;:y
>>>> NB.I (0:)`([)`(])}L
>>>> L=:I ((0>.<:)@:{)`([)`(])}L
>>>> EMPTY
>>>> )
>>>>
>>>> toggle
>>>> 3 : 0
>>>> I=:([: < (<:2 6)&g ; (<:4 8)&g)@;:y
>>>> NB. L=:  I (-.@:{)`([)`(])}L
>>>> L=:I (2+{)`([)`(])}L
>>>> EMPTY
>>>> )
>>>>
>>>>
>>>> NB. what the heck???  Why is this zero?
>>>>
>>>> +/, L [ on`off`toggle@.({.@identify)@,;._2(1!:1)<'/tmp/a' [ L=:1000
>>>> 1000$0
>>>> 0
>>>> +/,L
>>>> 14110788
>>>>
>>>>
>>>>
>>>>
>>>> Date: Mon, 07 Dec 2015 08:46:59 +1100
>>>>> From: "Ryan Eckbo"<ec...@cim.mcgill.ca>
>>>>> To: programming<programm...@jsoftware.com>
>>>>> Subject: Re: [Jprogramming] adventofcode 6
>>>>> Message-ID:<b4007f86-91ad-409c-95d6-ba6d6966c...@cim.mcgill.ca>
>>>>> Content-Type: text/plain; format=flowed
>>>>>
>>>>> How do your on/off/toggle functions work?  My solution also updates a
>>>>> global matrix,
>>>>> but my implementation doesn't feel good.  Looking forward to seeing
>>>>> nicer solutions.
>>>>>
>>>>> xind=: 3 : 0&{ + [: i. >:@:(-/)@:(2 0&{)
>>>>> yind=: 3 : 1&{ + [: i. >:@:(-/)@:(3 1&{)
>>>>> mkmask=: 3 : '1 inds} 1000 1000 $ 0 [ inds=: < (xind y);(yind y)'
>>>>> on=: 3 : 'lights=: lights + mkmask y'
>>>>> off=: 3 : 'lights=: 0 >. lights - mkmask y'
>>>>> toggle=: 3 : 'lights=: lights + +: mkmask y'
>>>>> instructions=: <;._2 (' through ';',';'turn ';'') stringreplace
>>>>> fread'/tmp/input.txt'
>>>>>
>>>>> lights=: 1000 1000$0
>>>>> do each instructions
>>>>> +/, lights
>>>>>
>>>>>
>>>> ----------------------------------------------------------------------
>>>> 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
>>
> ----------------------------------------------------------------------
> 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