Random Latin squares: Difference between revisions
Content deleted Content added
m formatting |
→{{header|rubyl}}: add Ruby |
||
Line 450: | Line 450: | ||
4 10 9 0 3 7 2 5 1 11 6 8 |
4 10 9 0 3 7 2 5 1 11 6 8 |
||
0 6 11 9 1 3 5 10 2 7 8 4</pre> |
0 6 11 9 1 3 5 10 2 7 8 4</pre> |
||
=={{header|Ruby}}== |
|||
<lang ruby>N = 5 |
|||
def generate_square |
|||
perms = (1..N).to_a.permutation(N).to_a.shuffle |
|||
square = [] |
|||
N.times do |
|||
square << perms.pop |
|||
perms.reject!{|perm| perm.zip(square.last).any?{|el1, el2| el1 == el2} } |
|||
end |
|||
square |
|||
end |
|||
def print_square(square) |
|||
cell_size = N.digits.size + 1 |
|||
strings = square.map!{|row| row.map!{|el| el.to_s.rjust(cell_size)}.join } |
|||
puts strings, "\n" |
|||
end |
|||
2.times{print_square( generate_square)} |
|||
</lang> |
|||
{{out}}<pre> |
|||
3 4 2 1 5 |
|||
2 3 4 5 1 |
|||
1 2 5 3 4 |
|||
5 1 3 4 2 |
|||
4 5 1 2 3 |
|||
1 2 5 4 3 |
|||
2 3 4 1 5 |
|||
5 4 2 3 1 |
|||
3 5 1 2 4 |
|||
4 1 3 5 2 |
|||
</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |