You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
TrustPilotChallenge/dotnet/WhiteRabbit/PrecomputedPermutationsGene...

44 lines
1.4 KiB

8 years ago
namespace WhiteRabbit
{
using System.Collections.Generic;
using System.Linq;
internal static class PrecomputedPermutationsGenerator
8 years ago
{
private static int[][][] Permutations { get; } = Enumerable.Range(0, 9).Select(GeneratePermutations).ToArray();
private static long[] PermutationsNumbers { get; } = GeneratePermutationsNumbers().Take(19).ToArray();
public static int[][] HamiltonianPermutations(int n) => Permutations[n];
public static long GetPermutationsNumber(int n) => PermutationsNumbers[n];
private static int[][] GeneratePermutations(int n)
{
var result = PermutationsGenerator.HamiltonianPermutations(n)
.Select(permutation => permutation.PermutationData)
.ToArray();
if (result.Length % Constants.PhrasesPerSet == 0)
8 years ago
{
return result;
8 years ago
}
8 years ago
return result.Concat(Enumerable.Repeat(result[0], Constants.PhrasesPerSet - (result.Length % Constants.PhrasesPerSet))).ToArray();
8 years ago
}
private static IEnumerable<long> GeneratePermutationsNumbers()
{
long result = 1;
yield return result;
var i = 1;
while (true)
{
result *= i;
yield return result;
i++;
}
}
8 years ago
}
}