Random Latin squares: Difference between revisions
Content added Content deleted
No edit summary |
m (→{{header|zkl}}: rewrite) |
||
Line 451: | Line 451: | ||
=={{header|zkl}}== |
=={{header|zkl}}== |
||
{{trans|Python}} |
|||
<lang zkl>fcn randomLatinSquare(n,symbols=[1..]){ |
<lang zkl>fcn randomLatinSquare(n,symbols=[1..]){ |
||
if(n<=0) return(T); |
if(n<=0) return(T); |
||
symbols.walker().walk(n) |
square,syms := List(), symbols.walker().walk(n); |
||
do(n){ syms=syms.copy(); square.append(syms.append(syms.pop(0))) } |
|||
⚫ | |||
// shuffle rows, transpose & shuffle columns |
|||
⚫ | |||
} |
} |
||
⚫ | |||
fcn _rls(symbols){ // <-->mutable list of lists |
|||
⚫ | |||
n:=symbols.len(); |
|||
⚫ | |||
if(n==1) return(List(symbols)); // (1) --> ( (1) ) |
|||
⚫ | |||
z,sym := (0).random(n), symbols[z]; |
|||
symbols.del(z); |
|||
square:=_rls(symbols); |
|||
square.append(square[0].copy()); |
|||
foreach i in (n){ square[i].insert(i,sym) } |
|||
square |
|||
} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
Line 478: | Line 469: | ||
2 1 |
2 1 |
||
3 1 4 5 2 |
|||
4 2 5 1 3 |
|||
1 4 2 3 5 |
|||
5 3 1 2 4 |
|||
2 5 3 4 1 |
2 5 3 4 1 |
||
E D A B C |
|||
D C E A B |
|||
B A C D E |
|||
D A E B C |
|||
A E B C D |
A E B C D |
||
C B D E A |
|||
& % # ! * @ ) $ ( ^ |
|||
@ |
@ ) * ^ # & % ( $ ! |
||
& |
( & % # ) $ @ ^ ! * |
||
! ( & % @ ^ $ * # ) |
|||
% ! ( ^ |
% # ! ( ^ ) * @ & $ |
||
$ |
^ $ @ ) & ! ( # * % |
||
# ! ( & $ * ^ ) % @ |
|||
$ @ ) * % ( & ! ^ # |
|||
) * ^ $ ! % # & @ ( |
|||
* ^ $ @ ( # ! % ) & |
|||
</pre> |
</pre> |