Inspiré par cette question CR (veuillez ne pas me tuer pour avoir parcouru CR)
Spec
Les probabilités d'orthographe d'un mot sont les suivantes:
- 1/3 du temps ne change pas la sortie
- 1/3 du temps supprime un caractère aléatoire
- 1/3 du temps dupliquer un caractère aléatoire
La possibilité de supprimer / dupliquer un caractère donné dans l'entrée doit être la même pour tous les caractères.
Si deux caractères consécutifs sont identiques (sensibles à la casse), la probabilité que l'un d'entre eux soit modifié doit être la même que s'il s'agit d'un seul caractère. C'est-à-dire que les sorties pour AA
(qui sont AA
ou A
ou AAA
) devraient toutes avoir la même probabilité.
L'entrée ne contiendra que des lettres pour plus de simplicité.
Exemples
La première ligne est entrée, les lignes suivantes sont toutes des fautes d'orthographe possibles. Chaque ligne doit avoir la même probabilité d'être sortie, l'entrée est exclue dans les exemples mais elle doit toujours avoir une probabilité 1/3 de sortie.
foo
fo
oo
ffoo
fooo
PPCG
PPC
PPG
PCG
PPPCG
PPCCG
PPCGG
foo
: si vous supprimez un caractère, il pourrait devenir (-f) oo, f (-o) o et fo (-o). Celafo
devrait donc être deux fois plus probableoo
, mais vous dites que chaque ligne a une probabilité égale.If two consecutive characters are the same (case-sensitive), the probability of one of them being modified should be the same as if they are one character. I.e. the outputs for AA (which are AA or A or AAA) should all have the same probability.
Réponses:
Pip ,
3827 octetsC'était amusant - j'ai pu utiliser les capacités de regex et de chaîne mutable de Pip, que je n'avais pas retirées depuis longtemps. Prend l'entrée via l'argument de ligne de commande.
Explication:
Essayez-le en ligne!
la source
Ruby,
6455 + 1 (p
indicateur) = 56 octetsL'entrée est une ligne de STDIN canalisée sans retour à la ligne.
la source
CJam (21 octets)
Démo en ligne
Dissection
la source
JavaScript (ES6), 107
Moins golfé
Tester
la source
Java 7,
189180178 octetsCas non testés et testés:
Essayez-le ici.
Sortie possible:
la source
Python 2, 134 octets
Les espaces blancs dans la boucle sont des tabulations.
Essayez-le sur Ideone
la source
Pyth - 17 octets
Celui-ci gère correctement les cas spéciaux avec des caractères consécutifs.
Suite de tests .
la source
APL, 21
Cela commence par créer un vecteur de zéros avec un 1 en position aléatoire. Multiplie ensuite par un nombre aléatoire entre 1 et 3. +1 et le mod 3 obtient un vecteur avec tous les 1 et un 0,1 ou 2 positionné au hasard.
Enfin, ⍵ / ⍨ dit que chaque lettre doit être écrite n fois, où n sont les nombres du vecteur.
Essayez-le sur tryapl.org
la source
Python 2, 123 octets
la source
JavaScript (ES6), 103
la source
APL, 27 octets
Explication:
Tester:
la source