Un carré latin est un carré qui n'a pas de symboles répétée soit dans la colonne X ou Y . Par exemple:
ABCD
DABC
CDAB
BCDA
est un de ces carrés. Remarquez comment chaque colonne et ligne contient une permutation des mêmes 4 lettres.
Cependant, notre carré latin a un problème: si je tournais la deuxième ligne ( DABC
) 1 vers la gauche, je me retrouverais avec ABCD
, ce qui est identique à la permutation au-dessus. S'il est impossible de faire pivoter une colonne / ligne et d'obtenir une autre colonne / ligne, alors nous considérons que le carré est sûr pour la rotation .
Par exemple:
ABCD
BDAC
CADB
DCBA
la rotation est-elle sûre? La grille a les propriétés suivantes:
- Le point [0, N] utilise le Nième symbole
- Les points [0, N] et [N, 0] sont toujours le même symbole . (Je voudrais également dire que [x, y] et [y, x] sont également toujours la même lettre, mais je ne peux pas le prouver)
Votre tâche consiste à imprimer 1 carré latin à rotation sûre, une fois passé N. Je me fiche que vous produisiez des lettres, des chiffres, une liste ou un tableau 2D. Si vous utilisez des nombres, la colonne et la ligne du haut doivent être 0,1,2,3,...
(dans cet ordre). Si vous utilisez des lettres, cela doit êtreA,B,C,D,....
Par exemple, si votre entrée était 4, vous devez soit imprimer:
0,1,2,3 0,1,2,3
1,3,0,2 or 1,0,3,2
2,0,3,1 2,3,1,0
3,2,1,0 3,2,0,1
Il n'y a pas de carrés latins à rotation sûre de taille inférieure à 4. Je me fiche de ce que fait votre programme si N est inférieur à 4. Pour les curieux, le nombre de carrés à rotation sûre est (à partir de 4): 2,5,5906,(too long to calculate)
Ceci est un code-golf , alors essayez de faire des réponses aussi courtes que possible dans votre langue préférée!
la source
N
raison d'une qualité de nombre aléatoire insuffisante?)1,2,3,...
-elle être ?Réponses:
Pyth - 29 octets
Force brute.
Ne se termine pas en ligne, même pour
n=4
, mais vous pouvez l'essayer localement ou exécuter cette version modifiée en ligne pour un octet de plus .la source
SQL Server 2012 - 918 octets
Sur ma boîte, cela fonctionne pour @k = 5, même si cela prend 16 secondes.
C'est du code de construction de code (attention Skynet, vous avez de la concurrence)
Y a-t-il un prix pour le script le plus long?
Essayez en ligne!
la source