Random Latin squares: Difference between revisions

m
No edit summary
Line 451:
 
=={{header|zkl}}==
{{trans|Python}}
<lang zkl>fcn randomLatinSquare(n,symbols=[1..]){
if(n<=0) return(T);
square,syms := List(), symbols.walker().walk(n).copy() : _rls(_) ;
do(n){ syms=syms.copy(); square.append(syms.append(syms.pop(0))) }
: T.zip(_.shuffle().xplode()).shuffle()
// shuffle rows, transpose & shuffle columns
: T.zip(_square.shuffle().xplode()).shuffle();
}
fcn m2Stringrls2String(matrix){ matrix.apply("concat"," ").concat("\n") }</lang>
fcn _rls(symbols){ // <-->mutable list of lists
<lang zkl>foreach n in (T(1,2,5)){ randomLatinSquare(n) : m2Stringrls2String(_).println("\n") }
n:=symbols.len();
randomLatinSquare(5, ["A".."Z"]) : m2Stringrls2String(_).println("\n");
if(n==1) return(List(symbols)); // (1) --> ( (1) )
randomLatinSquare(10,"!@#$%^&*()") : m2Stringrls2String(_).println("\n");</lang>
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
}
fcn m2String(matrix){ matrix.apply("concat"," ").concat("\n") }</lang>
<lang zkl>foreach n in (T(1,2,5)){ randomLatinSquare(n) : m2String(_).println("\n") }
randomLatinSquare(5,["A".."Z"]) : m2String(_).println("\n");
randomLatinSquare(10,"!@#$%^&*()") : m2String(_).println("\n");</lang>
{{out}}
<pre>
Line 478 ⟶ 469:
2 1
 
53 1 24 35 42
1 4 2 5 21 3
3 21 4 12 3 5
45 3 1 5 2 4
2 5 3 4 1
 
CE D A E B C
BD C DE A EB
E B A C D AE
D A E B C
A E B C D
C B D E A
 
) & *% # ^! * @ ( %) $ !( ^
@ () %* !^ # $& *% )( ^$ &!
( & $% # ) %$ (@ ^ ! * @
*! #( & $% @ %^ !$ (* )# ^)
% # ! ( ^ $ ) & * @ #& $
^ $ *@ ) & ! ^ % @( # (* %
( ^# ! @( )& $ * #^ &) % $@
!$ @ ^) * % *( & $! #^ ( )#
^) %* @^ ($ &! % # )& $@ ! *(
#* )^ $ *@ ( # ! @% ^) & %
</pre>
Anonymous user