introduction
Vous êtes un criminel chargé de voler des plans secrets à la nouvelle startup technologique Dejavu. Vous vous faufilez par-dessus le mur du fond, mais trouvez une porte qui nécessite une épingle pour l'ouvrir. Vous reconnaissez la marque de la serrure et savez qu'il faut une broche à 5 chiffres en utilisant tous les chiffres de 0 à 4. Après chaque chiffre entré, la serrure vérifie les 5 derniers chiffres entrés et s'ouvre si le code est correct. Vous devez passer cette écluse et vite.
Superpermutations en bref
Une permutation est toutes les combinaisons possibles d'un certain ensemble de chiffres. par exemple, toutes les permutations des chiffres 0, 1, 2 sont:
012, 021, 102, 120, 201 et 210.
Si nous concaténons toutes ces permutations ensemble, nous obtenons une superpermutation:
012021102120201210
cette superpermutation contient toutes les permutations de 0, 1, 2, mais il est possible d'en faire une plus courte. Je vais sauter un peu ici, mais la superpermutation la plus courte de ces chiffres est:
012010210
À nos fins, il s'agit essentiellement de la plus courte chaîne de chiffres qui contient toutes les permutations possibles de ces chiffres, c'est-à-dire une superpermutation.
Tâche
Votre tâche est un peu plus difficile que l'exemple de superpermutation comme indiqué ci-dessus, car vous avez deux chiffres de plus à vous soucier. - Si vous n'avez pas lu sur les superpermutations, ou mon exemple ci-dessus était un peu flou, je vous suggère fortement de lire cet excellent article de Patrick Honner sur le sujet (ce défi a été très fortement inspiré par son article, donc bravo à lui): https://www.quantamagazine.org/unscrambling-the-hidden-secrets-of-superpermutations-20190116/ . Votre objectif est d'écrire le programme le plus court possible qui génère une superpermutation des chiffres 0 à 4.
Notation
Votre programme ne prend aucune entrée d'aucune sorte et produit une superpermutation des chiffres de 0 à 4. Cette superpermutation résultante doit être imprimée sur la console ou affichée visiblement à l'utilisateur dans la mesure fournie par la langue de votre choix. Cela ne doit pas être la permutation la plus courte possible, il doit simplement s'agir d'une superpermutation valide. Pour cette raison, l'objectif est d'écrire le programme le plus court avec la superpermutation la plus courte, vous devez donc calculer votre score comme suit:
taille du fichier (octets) * longueur de super-permutation générée (chiffres)
par exemple, si j'avais un programme de 40 octets et que ma superpermutation comporte 153 chiffres, mon score sera:
40 * 153 = 6120
comme toujours, l'objectif est d'obtenir ce score le plus bas possible.
Modèle
Voici comment publier votre réponse:
Langue | But
lien vers le code dans l'environnement de travail (si possible)
code snippet
explication du code, etc.
Finalités
C'est l'une de mes premières questions sur ce site. Alors s'il vous plaît dites-moi si je manque quelque chose ou si une section de mon défi n'est pas claire. Merci et amusez-vous au golf!
la source
Réponses:
05AB1E , score = 1673 (7 octets · 239)
Essayez-le en ligne!
Comment ça marche
Pyth , score = 1944 (9 octets · 216)
Essayez-le en ligne!
Comment ça marche
la source
vy3yJ
enregistre un octetm+d
->+R
enregistre un octet.Brachylog , score = 2907 (19 octets × 153)
Trop lent pour voir quoi que ce soit, mais si vous changez
4
par,2
vous pouvez le tester: Essayez-le en ligne!Cela trouve la superpermutation la plus courte en tant que telle:
la source
JavaScript (ES6), 26975 (325 * 83 octets)
Avec ce système de notation, il y a peu de place pour quelque chose entre «coder en dur la supermutation optimale» et «utiliser simplement un court intégré pour concaténer toutes les permutations» , au moins dans les non-esolangs.
Voici une tentative de toute façon.
Essayez-le en ligne!
Il génère une chaîne de 325 octets:
la source
26975/153-153>23
)n
suffixe par défaut quiconsole.log
sort)Python 2 , score:
24327151471285212628 (154 * 82 octets)Essayez-le en ligne!
Également:
Python 2 , 12628 (154 * 82 octets)
Essayez-le en ligne!
la source
05AB1E , score:
53552160 (216 * 10 octets )Port de @AndersKaseorg « s réponse Pyth , alors assurez - vous de le Upvote!
Essayez-le en ligne.
Explication:
la source
Octave , 27 x 442 = 11934
Essayez-le en ligne!
Ainsi, il s'avère que générer naïvement toutes les permutations puis tronquer à la sous-chaîne la plus courte qui est toujours une superpermutation valide est plus court que de générer la superpermutation la plus courte. Malheureusement, cette fois, le score n'est pas un palindrome.
Octave , 97 x 153 = 14841
Essayez-le en ligne!
Entrée mise à jour pour quelques éléments
a++
n'est pas implémenté pour les nombres symboliques.contains()
n'est pas implémenté dans Octave. Remplacé parany(regexp())
.a
très proche de la superpermutation de 153 longueurs. Cela permet de vérifier la solution.la source
CJam (6 * 240 = 1440)
Démo en ligne , validation (affiche l'indice auquel chaque permutation de
0..4
peut être trouvée; il doit aplatir la sortie car le programme d'origine donne une sortie appropriée à stdout mais ce qu'il place sur la pile n'est pas directement utilisable).Approche volée à Sanchises , bien que l'ordre de permutation de CJam soit différent, donnant une sous-chaîne différente.
CJam (22 * 207 = 4554)
Démo en ligne , validation .
Dissection
Cela utilise une construction récursive simple.
la source
Gelée , 3000 (600 * 5 octets)
Essayez-le en ligne!
la source
Fusain , 29 octets, longueur de sortie 153, score 4437
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication: Comme @TFeld, je viens d'imprimer la moitié d'une superpermutation et de la refléter. J'ai calculé la superpermutation en utilisant le code suivant:
Cela se traduit par un programme de 45 octets en charbon de bois et aurait donc marqué 6885.
la source
MATL , 16 x 442 = 7072
Essayez-le en ligne!
Port MATL de ma réponse Octave. -442 grâce à Luis Mendo
la source
Japt -P, 2376 (11 x 216)
Essayez!
-1 octet grâce à @ Shaggy!
Port d'Anders Kaseorg est réponse Pyth .
la source
q<space>
;)Perl 6 , 7191 (153 * 47 octets)
Essayez-le en ligne!
Recherche le premier nombre qui contient toutes les permutations des chiffres de 0 à 4. Cela prendra beaucoup de temps à exécuter, mais vous pouvez le tester avec les deux premières permutations
0
et0,1
la source
Wolfram Language (Mathematica) , 153 * 95 octets, 14535
Essayez-le en ligne!
la source