How to resolve the algorithm Random Latin squares step by step in the Ruby programming language
How to resolve the algorithm Random Latin squares step by step in the Ruby programming language
Table of Contents
Problem Statement
A Latin square of size n is an arrangement of n symbols in an n-by-n square in such a way that each row and column has each symbol appearing exactly once. For the purposes of this task, a random Latin square of size n is a Latin square constructed or generated by a probabilistic procedure such that the probability of any particular Latin square of size n being produced is non-zero. Strict uniformity in the random generation is a hard problem and not a requirement of the task.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Random Latin squares step by step in the Ruby programming language
The provided Ruby code generates and prints a Latin square of size N. A Latin square is an N x N grid filled with N unique values, with no repeats in any row or column.
-
The code begins by setting the size of the square to N, which is 5 in this case.
-
It then defines a method called
generate_square
that generates a Latin square. The method first creates a list of all possible permutations of the numbers from 1 to N. It then shuffles the list to create a random order. -
Next, the method creates an empty square. It then iterates through the rows of the square, and for each row, it selects a random permutation from the list of permutations.
-
It checks that the chosen permutation does not have any duplicates in any column and then adds the chosen permutation to the square. It then removes all permutations from the list that have any duplicates in any column with the chosen permutation.
-
After generating the Latin square, the code defines a method called
print_square
that prints the square to the console. The method first calculates the size of each cell in the square based on the number of digits in the largest number in the square. -
It then converts each row of the square to a string, padding each number with spaces to ensure that all cells are the same size. Finally, it prints the square to the console.
-
The main part of the code calls the
generate_square
andprint_square
methods twice, generating and printing two different Latin squares of size 5.
Source code in the ruby programming language
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)}
You may also check:How to resolve the algorithm Substring step by step in the C# programming language
You may also check:How to resolve the algorithm Sort stability step by step in the JavaScript programming language
You may also check:How to resolve the algorithm Set step by step in the Seed7 programming language
You may also check:How to resolve the algorithm Bioinformatics/Sequence mutation step by step in the V (Vlang) programming language
You may also check:How to resolve the algorithm Averages/Median step by step in the Haskell programming language