That gerund form of ^: is cute. I need to remember and use it.

That said, note that you can shorten it slightly:
   ,@(,0,:])^:(]`1:)

You can also rearrange it, if you want:
   (,@,0,:])^:(]`1:)

Or,
   (,0&*,])^:(]`1:)

Or you could use 0"0 instead of 0&* (but why would you do that?).

I still prefer Roger Hui's explicit solution though:  3 : ', 1 0 1 */^:y ,1'

Thanks,

-- 
Raul

On Fri, Dec 1, 2017 at 7:23 AM, Arie Groeneveld
<[email protected]> wrote:
> Another iterator:
> (slower and fatter)
>
> ,@(,0,:])^:(]`(1"_))
>
> ... and there's an interesting(?) relation with OEIS sequence A005836.
>
>
> Op 01-12-17 om 12:53 schreef Arie Groeneveld:
>
>> How about
>>
>>    c0=:,@((1 0 1 */])^:(]`(1"_)))
>>    5 ts ' c0 18'
>> 0.123306 6.71091e8
>>
>> compared to:
>>
>>    c01=:,@((1 0 1 */])^:(]`(1:)))
>>    5 ts ' c01 18'
>> 1.23536 5.36871e9
>>
>> and
>>
>>    5 ts ' c1 18'
>> 0.0948998 6.03985e8
>>
>>    (c0-:c1)18
>> 1
>>
>>
>> Op 01-12-17 om 10:32 schreef Marshall Lochbaum:
>>>
>>> And for computing large Cantor sets really fast, you can use a recursive
>>> method:
>>>
>>>     c0 =. 3 :', */&1 0 1^:y 1'
>>>     c1 =. 3 :', (*/~(3^y-2^l)&{.) , */~^:(l=.<.2^.y) 1 0 1'
>>>     (c0 -: c1) 18
>>> 1
>>>     10 (6!:2) 'c0 18'
>>> 1.22999
>>>     10 (6!:2) 'c1 18'
>>> 0.0728543
>>>
>>> The J solution makes it easy to figure this out, because */ is
>>> associative. With Mathematica, it's completely opaque.
>>>
>>> Marshall
>>>
>>> On Thu, Nov 30, 2017 at 10:20:43PM -0800, Roger Hui wrote:
>>>>
>>>> Cantor =: 3 : ', 1 0 1 */^:y ,1'
>>>> SC     =: 3 : '(3 3$4>i.5) ,./^:2@(*/)^:y ,.1'
>>>>
>>>> Recursive solutions using the Mathematica ReplaceAll (/.) idea are also
>>>> possible, using indexing ({):
>>>>
>>>> Cantor1=: 3 : 'if. 0=y do. ,1 else. ,(Cantor1 y-1){0,:1 0 1 end.'
>>>> SC1    =: 3 : 'if. 0=y do. ,.1 else. ,./^:2 (SC1 y-1){0,:3 3$4>i.5 end.'
>>>>
>>>> Checking that they give the same results:
>>>>
>>>>     (Cantor -: Cantor1)"0 i.8
>>>> 1 1 1 1 1 1 1 1
>>>>     (SC -: SC1)"0 i.8
>>>> 1 1 1 1 1 1 1 1
>>>>
>>>> I claim the examples in my message unambiguously specify the extended H
>>>> problem.  More details (and solutions) can be found in
>>>> http://code.jsoftware.com/wiki/Essays/Extended_H
>>>>
>>>>
>>>>
>>>>
>>>> On Thu, Nov 30, 2017 at 9:33 PM, Dabrowski, Andrew John <
>>>> [email protected]> wrote:
>>>>
>>>>> On 11/29/2017 11:40 PM, Roger Hui wrote:
>>>>>>
>>>>>> 2.5 Cantor Set
>>>>>>
>>>>>> Write a function to compute the Cantor set of order n, n>:0.
>>>>>>
>>>>>>      Cantor 0
>>>>>> 1
>>>>>>      Cantor 1
>>>>>> 1 0 1
>>>>>>      Cantor 2
>>>>>> 1 0 1 0 0 0 1 0 1
>>>>>>      Cantor 3
>>>>>> 1 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 1
>>>>>>
>>>>> In Mathematica:
>>>>>
>>>>> cantor[n_] := If[n == 0, {1},
>>>>> cantor[n - 1] /. {0 -> Sequence[0, 0, 0], 1 -> Sequence[1, 0, 1]}]
>>>>>
>>>>> I doubt J could do substantially better, but I'll leave that to you
>>>>> experts.
>>>>>
>>>>>> 2.6 Sierpinski Carpet
>>>>>>
>>>>>> Write a function to compute the Sierpinski Carpet of order n, n>:0.
>>>>>>
>>>>>>      SC 0
>>>>>> 1
>>>>>>      SC 1
>>>>>> 1 1 1
>>>>>> 1 0 1
>>>>>> 1 1 1
>>>>>>      SC 2
>>>>>> 1 1 1 1 1 1 1 1 1
>>>>>> 1 0 1 1 0 1 1 0 1
>>>>>> 1 1 1 1 1 1 1 1 1
>>>>>> 1 1 1 0 0 0 1 1 1
>>>>>> 1 0 1 0 0 0 1 0 1
>>>>>> 1 1 1 0 0 0 1 1 1
>>>>>> 1 1 1 1 1 1 1 1 1
>>>>>> 1 0 1 1 0 1 1 0 1
>>>>>> 1 1 1 1 1 1 1 1 1
>>>>>
>>>>> I believe Mathematica has no built in tiling function, so I wrote one.
>>>>>
>>>>> tile[m_] := Join @@ ((Join @@@ #) & /@ (Transpose /@ m));
>>>>>
>>>>> hole = {{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
>>>>> zeros = Table[0, {3}, {3}];
>>>>>
>>>>> sierpinski[n_] := If[n == 0, {{1}},
>>>>>     tile[sierpinski[n - 1] /. {1 -> hole, 0 -> zeros}]]
>>>>>
>>>>>
>>>>> The tiling utilities in J are very nice.
>>>>>
>>>>>
>>>>>
>>>>> Could give a reference for the extend H algorithm?  I get the idea, but
>>>>> I'm a little unclear about the details.
>>>>> ----------------------------------------------------------------------
>>>>> 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