Votre entrée est une liste / séquence / vecteur / tableau de 5 à 255 entiers positifs, pas nécessairement unique. Vous pouvez supposer que le format d'entrée est le plus approprié et que chaque entier (ainsi que la quantité d'entiers) est choisi uniformément au hasard dans la plage 5-255.
Le but est de sortir la même liste, dans le même format (ou équivalent), mais trié par ordre croissant (non décroissant). Un exercice précoce courant pour apprendre une langue. Les soumissions doivent inclure:
Une réponse qui fonctionne correctement et atteint l'objectif; et
Une deuxième réponse qui contient un bug gênant. Entre 1% et 10% du temps, la sortie doit être une liste au format correct et contenant les éléments corrects, mais dans le mauvais ordre (tout ordre sauf correctement trié). Le reste du temps, le programme doit fonctionner correctement et atteindre l'objectif.
Les deux réponses doivent avoir une distance de Levenshtein un; c'est-à-dire que nous pouvons obtenir l'un de l'autre en supprimant un octet, en ajoutant un octet ou en modifiant un octet.
Marquer comme d'habitude dans le code-golf (basé sur la plus courte de vos deux réponses), avec les failles habituelles interdites.
Bonus de 10% (diminution du score) si le bug ennuyeux est indépendant de l'entrée, c'est-à-dire que l'utilisation de la même entrée ne reproduit pas le bug (sauf entre 1% et 10% du temps).
la source
[5,5,5]
il est impossible de produire le mauvais ordreRéponses:
Python 3 , 36 octets
Version sans bug, 37 octets
Essayez-le en ligne!
Version ennuyeuse, 36 octets
Essayez-le en ligne!
Cela dépend de l'entrée et ne donne donc pas droit au bonus.
Il a une probabilité d'environ 2% d'échouer. Il échoue lorsque la longueur d'entrée est inférieure à 10.
Combiné avec la réponse de LyricLy, cela donne 34 octets:
la source
or1
sera interprété comme un nom de variable et déclenche une erreur de syntaxe.05AB1E , 5 * 0,9 = 4,5 octets
Solution de travail
Essayez-le en ligne!
Explication
Solution contenant le bug
Donne la mauvaise solution 10% du temps (indépendante de l'entrée).
Essayez-le en ligne!
Explication
Identique à la solution de travail, sauf qu'elle inverse la liste si le nombre choisi est vrai.
la source
100F
et un pied de page},
qui nous aident à visualiser le résultat de la fonction appelée plusieurs fois sur l'entrée. Cela nous montre que la solution de travail retourne toujours des résultats corrects, tandis que la solution buggée a une sortie défectueuse.Gelée , 7 * (100% - 10%) = 6,3 octets
Essayez-le en ligne!
Version buggy:
Essayez-le en ligne!
Dans les deux liens, il y a un harnais de test qui exécutera le code 100 fois, chaque fois avec la liste que vous donnez comme argument, puis retourne les résultats.
La probabilité de chaque longueur d'entrée est:
Donc, pour la longueur 1, il y a une probabilité de 0%, pour la longueur 2 5%, pour la longueur 3 8,83̅%, pour la longueur 4 9,583̅% etc. jusqu'à la longueur ∞ qui a une probabilité de 10%.
la source
0.1 - 0.1/(length!)
.Ṣ⁵X’¤¡
etṢ⁵X¤¡
devrait également fonctionner: la version buggy renvoie la liste non triée <10% du temps, et étant donné que l'entrée est choisie uniformément au hasard, cela devrait fonctionner, économiser 2 octets.¹
pour enregistrer 1 octet (le nombre de règles compte d'octets = le plus court); il y a aussi un parasite combinant overline après la seconde6
dans6.6̅%
.¹
" car il ne serait pas du tout trié 10% du temps.Python 3, score
5857 - 10% = 51,3Sauvegardé un octet grâce aux ovs.
Version sans bug, 57 octets
Essayez-le en ligne!
Version buggée, 57 octets
Essayez-le en ligne!
J'ai décidé d'essayer une solution qui utilise le bonus. Cela ne bat pas l'autre réponse Python, mais je me suis amusé à y penser.
la source
C, 71 * 0,9 = 63,9 octets
Sans bug:
Essayez-le en ligne!
Buggy:
Essayez-le en ligne!
la source
Groovy , 31 octets
Solution buggée:
Solution de travail:
L'opérateur d'indice Groovy (la
getAt
méthode) renvoie null pour les listes si l'index est plus grand que la taille. Donc, s'il y a un neuvième élément, il restera le même que la liste triée, mais sinon (1,99203187% de chance), il sera inversé. Cependant, il y aura toujours un premier élément car la taille de la liste est toujours supérieure ou égale à 5. Ainsi, le 0 ina[0]
pourrait être échangé avec 1, 2, 3 ou 4.la source
Wolfram Language (Mathematica) , 29 octets
C'est 26,1 octets avec le bonus, mais je ne suis pas tout à fait sûr de gagner le bonus; sur une entrée déjà triée, les deux versions produisent toujours une sortie triée.
Version sans bug (29 octets)
Essayez-le en ligne!
Version ennuyeuse (30 octets)
Essayez-le en ligne!
la source
PHP, 70 octets
Version sans bug, 70 octets
Essayez-le en ligne!
Version buggée, 70 octets
Essayez-le en ligne!
La version buggée trie dans l'ordre inverse 10% du temps (sur la base d'un générateur de nombres aléatoires).
la source
-r
(-2 octets). rejoindre par un trait de soulignement; cela devrait être équivalent (-2 octets). utiliserasort
au lieu desort
(-1 octet).unset($argv[0]);(rand(1,9)?sort:rsort)($argv);echo join(_,$argv);
(également 65 octets)Python 2 , 26 octets
Buggy:
Essayez-le en ligne!
Sorties en modifiant la liste des entrées . Trie la liste uniquement si sa longueur est d'au moins 10. La version non buggée remplace le
9
par un0
pour toujours trier.Travail:
Essayez-le en ligne!
On peut modifier la fonction pour renvoyer la liste au prix de 4 octets, pour 30 octets au total:
Essayez-le en ligne!
25 octets avec quelques étirements des règles:
Essayez-le en ligne!
Génère un littéral de fonction qui trie ou constitue l'identité, en utilisant
id(0)
comme source aléatoire. Changez>
pour>=
fixer ou0
pour~0
.la source
Husk , 6 octets
Version buggy:
Essayez-le en ligne!
Version correcte:
Essayez-le en ligne!
Explication
Ces programmes sont complètement déterministes. En fait, Husk n'a actuellement aucun support pour les nombres aléatoires.
Je prétends que la sortie du programme buggy n'est pas triée avec une probabilité comprise entre 1% et 2%. Notons N = 251 le nombre de valeurs possibles des éléments. La probabilité qu'une liste aléatoire de longueur L ne contienne pas de multiples de 9 est ((NK) / N) ^ L , où K est le nombre de valeurs divisibles par 9 (dans notre cas K = 28 ). La probabilité totale en est la moyenne pour 5 ≤ L ≤ 255 , soit environ 1,98%. Certaines de ces listes sont des faux positifs, car elles sont déjà triées. La probabilité qu'une liste aléatoire de longueur L soit triée est au plus ((N + N * (N-1) / 2) / N ^ 2) ^ ⌊L / 2⌋ : si nous divisons la liste en morceaux de longueur 2, chacun desLes morceaux ⌊L / 2⌋ doivent être triés. La probabilité totale de tri d'une liste est limitée par la moyenne de ce qui précède pour 5 ≤ L ≤ 255 , soit environ 0,30%. Ainsi, la probabilité que la fonction renvoie une liste non triée se situe entre 1,67% et 1,98%.
la source
↓9
place deV¦9
, et le raccourcir juste9
pour la bonne version? Cela le ferait toujours échouer sur les entrées courtes et fonctionnerait toujours correctement sur les entrées plus longues, mais puisque la longueur d'entrée suit une distribution aléatoire, cela devrait toujours être une réponse valideBash , 26 octets
Version correcte
Essayez-le en ligne! ou vérifiez les probabilités .
Version buggée
Essayez-le en ligne! ou vérifiez les probabilités .
Prend la saisie sous forme de nombres séparés par des sauts de ligne. Utilise la variable intégrée
RANDOM
, qui renvoie toujours un nombre (pseudo) aléatoire compris entre 0 et 32767 . L'utilisation des%20
résultats entraîne un taux d'échec d'environ 5% (merci à @Titus d'avoir clarifié les problèmes avec%10
).Ce caractère aléatoire signifie que le taux d'échec est indépendant de l'entrée, mais cela nécessite que le tableau d'entrée comprenne au moins un nombre à plus d'un chiffre, car la sortie d'échec est triée lexicographiquement.
Version alternative, 27 octets
La version buggée remplace le
+
par un%
. Essayez-le en ligne ou essayez-le .la source
%10
a une plus grande chance de retour0
à7
de8
ou9
, si le risque de rupture est supérieure à 10%;)%20
comme votre réponse.Pyth , score 8 * 0,9 = 7,2
Premier extrait (correct):
Essayez-le ici!
Deuxième extrait (un buggé):
Essayez-le ici!
Enregistrement de deux octets (et score de 1,8) grâce à isaacg !
la source
.S
renvoyer l'entrée inchangée signifie que dans ces (rares) cas, nos chances d'obtenir la mauvaise réponse passent de 10% à 0% - donc en moyenne, c'est toujours dans la bonne plage. Bien sûr, 10 exemplaires sont également très bien..S
pourrait également renvoyer l'entrée elle-même (ce qui ne serait pas un problème), mais je voulais dire que cela.S
pourrait également renvoyer la liste triée .O.uSNT.S
JavaScript (ES6), 24 octets
Version sans bogue (au moins pour les entiers dans la plage 0-2147483647, donc tout dans la plage donnée):
Version buggy:
Cela dépend a) de l'algorithme de tri du moteur et b) de la liste d'entrée contenant deux valeurs dans le mauvais ordre qui diffèrent de 1. (Si la probabilité de cela s'avère trop faible, la
1
peut être augmentée, mais au moment où vous obtenez à8
simplement ne rien trier dans la gamme5-255
.)la source
PHP, 62 octets
inspiré par la solution de Jo (et je viens de remarquer: c'est un port de Justin Mariner ):
travail (tri croissant):
buggy (environ 5% de chances de tri décroissant):
Courir avec
-nr
la source
Pushy , 9 octets - 10% = 8,1
Solution buggée:
Essayez-le en ligne!
Solution de travail:
Essayez-le en ligne!
Le code buggé fait ce qui suit:
Le code fixe change simplement
0
en1
. Commerandom(1, 10)
jamais0
, l'instruction if ne sera jamais exécutée.la source
MATL ,
7 * 0,9 = 6,36 * 0,9 = 5,4 octetsVersion buggy:
Essayez-le en ligne!
Explication:
Version sans bug:
Essayez-le en ligne!
Explication:
la source
Jq 1,5 , 42 octets
Buggy
Fonctionne (supprimer le =)
En supposant que les longueurs de ligne sont uniformes dans la plage [5 255] environ 7% déclencheront le bogue
Essayez-le en ligne!
la source
J, 22,5 octets (25 octets - 10%)
avec bug:
sans bug:
Essayez-le en ligne!
la source
R , 30 * .9 = 27 octets
(buggy)
Essayez-le en ligne!
(pas buggy)
La version buggy trie dans
decreasing=T
10% du temps, en échantillonnant à partir d'une distribution uniforme (0,1). La version non buggée est toujoursdecreasing=F
la source
Röda , 42 octets - 10% = 37,8
Sans bug:
Buggy:
Essayez-le en ligne!
Cela utilise la
currentTime
fonction pour créer des nombres aléatoires. Il semble que leur distribution varie un peu entre les machines. Le rapport20//19
peut être ajusté pour obtenir des résultats différents sans pénalité d'octet (sauf s'il est plus petit que99//98
).la source
Octave , 36 * 0,9 = 32,4 octets
Version buggy:
Essayez-le en ligne!
Version sans bug:
Essayez-le en ligne!
Cela trie le vecteur, puis décale tous les nombres un vers la droite si un nombre aléatoire est inférieur à 0,1.
la source
Java 8,
4534,2 (5038 - 10%) octetsVersion normale:
Explication:
Essayez-le ici.
Version buggée (
5139 octets):LD de 1:
1
ajouté.Explication:
Essayez-le ici.
la source
JavaScript, 25 * 0,9 = 22,5
entrée x
la source