La tâche
Dans ce défi, votre tâche consiste à écrire du code qui génère l'une de ses anagrammes choisies au hasard avec une distribution uniforme, mais il ne doit jamais se produire lui-même.
Élaboration
En l'absence de saisie, votre programme devrait sortir l'une des anagrammes de son code source. Votre programme ne devrait jamais produire sa propre source telle quelle, c'est-à-dire qu'elle ne devrait jamais être une quine.
Contribution
Votre programme ne doit prendre aucune entrée. Cependant, si votre langue nécessite une saisie comme une nécessité, vous pouvez supposer qu'elle sera donnée en minuscules a
. Cependant, vous ne devez en aucun cas utiliser l'entrée.
Production
Votre programme peut sortir de n'importe quelle façon sauf l'écrire dans une variable. L'écriture dans un fichier, une console, un écran, etc. est autorisée. La fonction return
est également autorisée.
Règles supplémentaires
Le code source de votre programme doit avoir au moins 3 caractères (pas 3 octets).
Le code source de votre programme doit avoir au moins 3 anagrammes possibles (hors lui-même). Par exemple,
aab
ne compte pas comme une soumission valide caraab
il n'a que deux anagrammes autres queaab
(baa
etaba
).Votre programme ne doit produire aucune erreur.
Votre programme devrait afficher ses anagrammes exactement .
Les échappatoires standard et les règles de quine standard s'appliquent.
Exemple
Supposons que le code source de votre programme soit abc
. Il doit générer au hasard l'un des éléments suivants (avec une distribution uniforme):
acb
bca
bac
cba
cab
Et, il ne devrait jamais sortir abc
.
Critère gagnant
Il s'agit de code-golf , donc le code le plus court en octets gagne! En cas d'égalité, la solution qui avait été publiée plus tôt l'emporte!
la source
Réponses:
Gelée , 15 octets
Juste pour commencer. c'est presque certainement battable. Il s'agit simplement d'une combinaison d'un constructeur de quine universel et d'une fonction "choisir une permutation aléatoire autre que l'entrée"; ce dernier peut être améliorable, le premier l'est presque certainement.
Explication
Constructeur universel de quine
Cela peut être considéré comme une quine s'il est géré par lui-même. C'est aussi un quine approprié par la plupart des définitions que je connais; il ne lit pas sa propre source (il contient plutôt un littéral qui est "évalué" et reçoit une copie de lui-même comme argument), il peut transporter une charge utile (comme on le voit ici!), et le
v
extérieur de la chaîne littéral est codé par l'v
intérieur.Choisissez une anagramme aléatoire
C'est vraiment inefficace sur une chaîne aussi longue, donc je n'ai pas pu tester le programme dans son ensemble, mais je l'ai testé sur des chaînes plus courtes et il semble fonctionner correctement.
la source
Q
. Cependant, je pense que vous pouvez changer cette méthode "toutes permutations" avec une méthode "shuffle" en utilisantẊ⁼¿
, en sauvant un octet tout en lui permettant de fonctionner sur TIO.CJam , 17 octets
Cela ne se terminera pas de si tôt, donc pas de lien TIO cette fois.
En guise de consolation, voici une solution de 20 octets qui se termine très rapidement:
Essayez-le en ligne!
Explication
La solution de 20 octets mélange à la place le code source jusqu'à ce qu'il soit différent de l'original.
la source
Python 2, 117 octets
Étonnamment, cette solution est plus courte que ce à quoi je m'attendais. Mélange le code source jusqu'à ce qu'il diffère de l'original.
-2 octets, grâce à @ mbomb007
-3 octets, grâce à @Wondercricket
Essayez-le en ligne
Ceci est l'un des quines de base en python, que j'ai modifié
La génération d'anagrammes se fait par module aléatoire
Où R contient le code source
Des guillemets triples étaient nécessaires car j'ai été obligé de conserver les séparateurs de lignes réels dans le code. Les anagrammes auront de toute façon 3 lignes.
la source
exec s
au lieu deexec(s)
str
est immuable, vous pouvez enregistrer un octet en faisantL=R
et en utilisantsample
surL
plutôt qu'en utilisantshuffle
surlist
. repl.it . L'idée est tirée de ce StackoverflowJava 7,
376428426428 octets+52 et +2 octets pour deux corrections de bugs .. Je ne vérifiais pas (correctement) si la chaîne générée de manière aléatoire était égale au code source d'origine. Les chances de cela sont astronomiques, compte tenu du nombre de personnages impliqués, mais je dois le valider malgré tout pour me conformer aux règles du défi.
Ma première réponse quine en Java ..
Essayez-le ici.
Vous pouvez supprimer les deux
Collections.shuffle(l)
et les ajouter!
devant les deuxx.equals(s)
pour vérifier que la sortie est bien égale au programme:Essayez-le ici.
Explication:
String s
contient le code source non formaté.%s
est utilisé pour entrer cette chaîne en elle-même avec les.format(...)
.%c
,%1$c
Et34
sont utilisés pour formater les guillemets doubles.s.format(s,34,s)
met tout cela ensembleEt cette partie du code est responsable de la sortie d'une anagramme aléatoire:
la source
05AB1E , 22 octets
Cela crée une liste trop grande pour TIO, donc le lien utilise une chaîne plus petite, mais l'idée est la même.
Essayez-le en ligne!
la source
Javascript (ES6), 128 octets
Utilise sort () retournant aléatoire -1,0 ou 1 pour mélanger la sortie.
la source
Bash,
2796 octetsfold
divise le code en lignes,shuf
mélange les lignes ettr
remet le code ensemblea résolu le problème de la sortie elle-même, maintenant elle ne sortira jamais
Essayez-le en ligne!
la source
$0
ressemble à une violation de "Votre programme ne doit prendre aucune entrée."