How to resolve the algorithm Latin Squares in reduced form step by step in the 11l programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Latin Squares in reduced form step by step in the 11l programming language

Table of Contents

Problem Statement

A Latin Square is in its reduced form if the first row and first column contain items in their natural order. The order n is the number of items. For any given n there is a set of reduced Latin Squares whose size increases rapidly with n. g is a number which identifies a unique element within the set of reduced Latin Squares of order n. The objective of this task is to construct the set of all Latin Squares of a given order and to provide a means which given suitable values for g any element within the set may be obtained. For a reduced Latin Square the first row is always 1 to n. The second row is all Permutations/Derangements of 1 to n starting with 2. The third row is all Permutations/Derangements of 1 to n starting with 3 which do not clash (do not have the same item in any column) with row 2. The fourth row is all Permutations/Derangements of 1 to n starting with 4 which do not clash with rows 2 or 3. Likewise continuing to the nth row. Demonstrate by:

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Latin Squares in reduced form step by step in the 11l programming language

Source code in the 11l programming language

F dList(n, =start)
   start--
   V a = Array(0 .< n)
   a[start] = a[0]
   a[0] = start
   a.sort_range(1..)
   V first = a[1]
   [[Int]] r
   F recurse(Int last) -> N
      I (last == @first)
         L(v) @a[1..]
            I L.index + 1 == v
               R
         V b = @a.map(x -> x + 1)
         @r.append(b)
         R
      L(i) (last .< 0).step(-1)
         swap(&@a[i], &@a[last])
         @recurse(last - 1)
         swap(&@a[i], &@a[last])
   recurse(n - 1)
   R r

F printSquare(latin, n)
   L(row) latin
      print(row)
   print()

F reducedLatinSquares(n, echo)
   I n <= 0
      I echo
         print(‘[]’)
      R 0
   E I n == 1
      I echo
         print([1])
      R 1

   V rlatin = [[0] * n] * n
   L(j) 0 .< n
      rlatin[0][j] = j + 1

   V count = 0
   F recurse(Int i) -> N
      V rows = dList(@n, i)

      L(r) 0 .< rows.len
         @rlatin[i - 1] = rows[r]
         V justContinue = 0B
         V k = 0
         L !justContinue & k < i - 1
            L(j) 1 .< @n
               I @rlatin[k][j] == @rlatin[i - 1][j]
                  I r < rows.len - 1
                     justContinue = 1B
                     L.break
                  I i > 2
                     R
            k++
         I !justContinue
            I i < @n
               @recurse(i + 1)
            E
               @count++
               I @echo
                  printSquare(@rlatin, @n)

   recurse(2)
   R count

print("The four reduced latin squares of order 4 are:\n")
reducedLatinSquares(4, 1B)

print(‘The size of the set of reduced latin squares for the following orders’)
print("and hence the total number of latin squares of these orders are:\n")
L(n) 1..6
   V size = reducedLatinSquares(n, 0B)
   V f = factorial(n - 1)
   f *= f * n * size
   print(‘Order #.: Size #<4 x #.! x #.! => Total #.’.format(n, size, n, n - 1, f))

  

You may also check:How to resolve the algorithm Cartesian product of two or more lists step by step in the 11l programming language
You may also check:How to resolve the algorithm Sort an array of composite structures step by step in the PicoLisp programming language
You may also check:How to resolve the algorithm Pairs with common factors step by step in the Phix programming language
You may also check:How to resolve the algorithm Cuban primes step by step in the Kotlin programming language
You may also check:How to resolve the algorithm Convex hull step by step in the RATFOR programming language