Small timesaving addition:
([:*./@, [:~:"1 (,: |:))"2 q
However, the Hui version can be formatted to be superior if space is a
limiting factor:
q=.100000 10 1...@$10
ts '([:*./@, [:~:"1 (,: |:))"2 q'
0.513206 143616
ts '((8$15) -: (+/"1 , +/)@:({&(0,2^i.10)))"2 q'
0.160701 141824
In fact, virtually all of the space used was in selection, and the solution
does not use significantly more space than q does:
7!:5 <'q'
1.34218e8
ts '(8$15) -:"1 (+/"1 ,. +/"2) q{0,2^i.10'
0.16598 1.6778e8
ts 'q{0,2^i.10'
0.0981654 1.3422e8
Marshall
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of R.E. Boss
Sent: Tuesday, October 05, 2010 5:44 AM
To: 'Programming forum'
Subject: Re: [Jprogramming] Distinct Numbers in Rows and Columns
q #~ ([:*./^:3 [:~:"1 (,: |:))"2 q
1 2 4 3
4 3 2 1
2 1 3 4
3 4 1 2
ts'q#~([:*./^:3[:~:"1(,:|:))"2 q'
0.030079443 12352
ts'q #~ (8$15) -:"1 (+/"1 ,. +/"2) q{0,2^i.4'
0.0026829032 2100864
Slower but leaner:
rank 'q #~ (8$15) -:"1 (+/"1 ,. +/"2) q{0,2^i.4';
'q#~([:*./^:3[:~:"1(,:|:))"2 q'
+----+-----+-----+------+
|rank|tm*sz|time |size |
+----+-----+-----+------+
| 1 |15.85| 1.00|170.08|
+----+-----+-----+------+
| 0 | 1.00|10.73| 1.00|
+----+-----+-----+------+
R.E. Boss
> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens Roger Hui
> Verzonden: dinsdag 5 oktober 2010 1:37
> Aan: Programming forum
> Onderwerp: Re: [Jprogramming] Distinct Numbers in Rows and Columns
>
> Great minds think alike, eh? (But I think you need to test your
> expressions ;-) Go to http://www.jsoftware.com/jwiki/Essays/KenKen
> and look about a third of the way down,
>
> q #~ (8$15) -:"1 (+/"1 ,. +/"2) q{0,2^i.4
>
> The initial effort in your previous msg is also similar to my initial
> effort.
>
>
>
> ----- Original Message -----
> From: Marshall Lochbaum <[email protected]>
> Date: Monday, October 4, 2010 16:28
> Subject: Re: [Jprogramming] Distinct Numbers in Rows and Columns
> To: 'Programming forum' <[email protected]>
>
> > Here's a funny--and much faster--one:
> > p=.p:i.n
> > *./"1 (*/p) = (*/"2 ,. */"1) q{p
> >
> > Actually, I suppose it is better to do it with addition, so p=.2^i.n
> > *./"1 (+/p) = (+/"2 ,. +/"1) q{p
> >
> > Marshall
> >
> > -----Original Message-----
> > From: [email protected]
> > [mailto:[email protected]] On Behalf Of Roger Hui
> > Sent: Monday, October 04, 2010 6:41 PM
> > To: Programming forum
> > Subject: [Jprogramming] Distinct Numbers in Rows and Columns
> >
> > An interesting puzzle arising from the KenKen solver:
> > q is an array with shape (m,n,n) and (,q) e. 1+i.n .
> > Which items of q have 1+i.n in each row and in each column?
> ----------------------------------------------------------------------
> 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