Mots-clés descriptifs (pour la recherche): rendre deux matrices équivalentes, chevaucher, tableau, rechercher
Défi
Le Père Noël a eu une histoire d'elfes volant des cadeaux de sa chambre forte dans le passé, donc cette année, il a conçu une serrure qui est très difficile à casser, et il semble avoir empêché les elfes de sortir cette année. Malheureusement, il a perdu la combinaison et il ne sait pas non plus comment l'ouvrir! Heureusement, il vous a engagé pour écrire un programme pour trouver la combinaison. Ce n'est pas nécessairement le plus court, mais il doit le trouver le plus rapidement possible!
Il a un horaire très strict et il ne peut pas se permettre d'attendre très longtemps. Votre score sera la durée d'exécution totale de votre programme multipliée par le nombre d'étapes de sortie de votre programme pour l'entrée de notation. Le score le plus bas l'emporte.
Caractéristiques
Le verrou est une matrice carrée de 1 et de 0. Il est défini sur une disposition aléatoire de 1 et de 0 et doit être défini sur un code spécifié. Heureusement, le Père Noël se souvient du code requis.
Il peut effectuer quelques étapes. Chaque étape peut être effectuée sur n'importe quelle sous-matrice contiguë (c'est-à-dire que vous devez sélectionner une sous-matrice entièrement délimitée par un coin supérieur gauche et inférieur droit) (il peut s'agir d'une sous-matrice non carrée):
- Rotation à droite de 90 degrés *
- Rotation à gauche de 90 degrés *
- Rotation à 180 degrés
- Faites défiler les
n
éléments de chaque ligne vers la droite ou vers la gauche (retour à la ligne) - Faire défiler les
m
éléments de chaque colonne vers le haut ou vers le bas (retour à la ligne) - Retourner horizontalement
- Retourner verticalement
- Retournez sur la diagonale principale *
- Retournez l'anti-diagonale principale *
* uniquement si la sous-matrice est carrée
Bien entendu, il peut également effectuer ces étapes sur l'ensemble de la matrice. Étant donné que les 1 et les 0 ne peuvent être échangés que sur la matrice mais que la valeur d'un carré ne peut pas être directement modifiée, le nombre de 1 et de 0 est le même pour la configuration de début et de fin.
Spécifications de formatage + règles
Vous recevrez l'entrée sous forme de deux matrices carrées (position de départ et position de fin) dans le format raisonnable de votre choix. La sortie doit être une séquence de ces étapes dans n'importe quel format lisible. Comme il ne s'agit pas de code-golf, veuillez en faire un format facilement vérifiable, mais ce n'est pas une exigence stricte. Vous pouvez choisir de prendre la longueur latérale des matrices dans l'entrée si vous le souhaitez.
Votre programme sera exécuté sur mon ordinateur (Linux Mint, les détails de la version exacte sont disponibles sur demande si quelqu'un s'en soucie: P) et je le chronométrerai en fonction du temps entre le moment où j'appuie sur "Entrée" sur la ligne de commande et lorsque le la commande se termine.
Cas de test
1 0 0 1 0 0 0 0
0 1 1 0 -> 0 0 0 0
0 1 1 0 -> 1 1 1 1
1 0 0 1 1 1 1 1
- Prenez la matrice entière. Faites défiler chaque colonne vers le haut 1.
- Prenez les deux colonnes du milieu comme sous-matrice. Faites défiler chaque colonne vers le bas 2.
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 -> 0 1 1 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
- Prenez la matrice entière. Faites défiler chaque colonne vers le bas 1.
- Prenez la colonne du milieu. Faites-le descendre 2.
- Prenez les 2 premières rangées. Retournez-le verticalement.
- Prenez les 2 éléments les plus à droite de la rangée supérieure. Échangez-les (tournez à droite / gauche 1, retournez horizontalement).
- Prenez les 2 éléments les plus à gauche de la rangée supérieure. Échangez-les.
Il pourrait y avoir des méthodes plus efficaces, mais cela n'a pas d'importance. N'hésitez pas à les signaler dans les commentaires si vous en trouvez un :)
Jugement du cas de test
Ce cas de test sera utilisé pour évaluer votre soumission. Si je pense qu'une réponse est trop spécialisée pour le cas de test, j'ai le droit de repiquer une entrée aléatoire et de juger toutes les réponses avec le nouveau cas. Le cas de test peut être trouvé ici où le haut est le début et le bas est la configuration souhaitée.
Si je pense que les réponses sont trop spécialisées, le MD5 du prochain test est 3c1007ebd4ea7f0a2a1f0254af204eed
. (Ceci est écrit ici en ce moment pour me libérer des accusations de tricherie: P)
Des échappatoires standard s'appliquent. Aucune réponse ne sera acceptée. Bon codage!
Remarque: je me suis inspiré de cette série de défis d' Advent Of Code . Je n'ai aucune affiliation avec ce site
Vous pouvez voir une liste de tous les défis de la série en consultant la section 'Linked' du premier défi ici .
0
et 641
, et il y a des256 choose 64 ≈ 1.9 × 10⁶¹
matrices totales accessibles. (qui est comparable à un Megaminx, et est plus grand qu'un Rubik's Revenge, bien que beaucoup moins qu'un cube de professeur)