J'ai écrit du texte, mais il a l'air trop professionnel. Je veux faire croire que j'étais vraiment fatigué quand je l'ai écrit. J'ai besoin que tu insères des fautes de frappe.
Votre défi consiste à prendre une ligne de texte arbitraire et à ajouter des fautes de frappe. Cela signifie que pour chaque personnage, il y aura 10% de chances qu'il soit typofié.
La définition de "typofied" est que vous devez choisir (au hasard) l'un des éléments suivants:
- Dupliquer le personnage.
- Supprimer le personnage.
Décale le caractère d'un espace clavier. Le "clavier" est défini comme:
qwertyuiop asdfghjkl zxcvbnm
Pour le changement de personnage, vous devez aller d'un espace vers le haut, le bas, la gauche ou la droite. Cela doit être choisi au hasard. L'option shift ne s'applique qu'aux caractères alphabétiques. Le cas doit être préservé. Soyez prudent avec les cas de bord, comme
m
!
La définition de "aléatoire" est que le résultat ne doit pas être prévisible (en regardant les résultats précédents). Par exemple, vous ne pouvez pas écrire tous les dix caractères. De plus, le caractère aléatoire doit avoir une distribution égale. Par exemple, vous ne pouvez pas effectuer 30% de duplication, 30% de suppression et 40% de décalage; il doit y avoir 1/3 de chance pour chacun (1/2 pour chacun s'il s'agit d'un personnage non alphabétique).
Exemple d'entrée:
This is some correct text. It is too correct. Please un-correctify it.
Exemple de sortie:
This iissome xorreect tex.. It is too coteect. Please jn-corretify it.
C'est du code-golf , donc le code le plus court en octets va gagner.
Réponses:
GolfScript, 120 caractères
Le code peut être testé ici .
la source
C, 358 octets
(Il n'y a que trois lignes de code, mais j'ai cassé la ligne 3 pour la lisibilité)
Le tableau de chaînes au début répertorie les touches adjacentes possibles pour chaque lettre de l'alphabet. J'ai dû doubler le "O" (adjacent à "P") pour éviter de calculer
random()%1
lors de la sélection d'un caractère décalé.Essai:
Mise à jour:
Voici une version développée et commentée du même code source:
la source
char*s[26]
. Le compilateur devrait pouvoir comprendre cela lui-même.continue
s parelse
s. (laissez le;
où le premier était).Ruby, 168
Prise légèrement plus courte à l'aide d'une stratégie d'indexation par tableau:
Version d'expression régulière originale (184):
la source
Kernel#putc
pour imprimer le résultat car cela ne nécessitait pas de pars, ce qui me sauvait un caractère. Bien entendu,putc
seul le premier caractère est imprimé et la chaîne de sortie peut parfois comporter deux caractères. Erreur stupide. Essayez cette version!Python, 251
Technique de recherche très simple, j'ai pensé pendant un moment qu'il serait peut-être moins coûteux de coder le clavier sous forme de graphe non orienté, mais le temps système nécessaire à la création d'un tel type en Python s'est révélé prohibitif. Comme les fonctions aléatoires de Python ont des noms trop descriptifs, j'utilise
choice()
exclusivement pour les renommerw
. La probabilité d'erreur de 10% est géréew([z]*9+[...])
lorsque les neuf copies d'un caractère non typo sont dans une liste avec une seule frappe.-16 caractères - merci grc, +2 caractères (et exactitude, valant bien plus que 2 caractères) - merci Dhara
la source
d="SQ VNH XVF...".split()
, supprimer l'espace aprèsprint
et remplacer leif
/else
par([...]+[...])*z.isalpha()
. En outre, vous n'avez pas besoin d'une variabled
car vous ne l'utilisez qu'une fois.w=__import__('random').choice
(au moins en Python 3 autant que je sache).input()
etprint()
sauvegardez 2 caractères.C #, 320 octets (360 octets avec le wrapping du programme)
Inclut la prise en charge des lettres majuscules "décalées".
En fonction (320 octets):
En tant que programme qui lit une ligne de texte (360 octets):
Exemple de sortie d'entrée:
la source
Func<int,int> n=x=>r.Next(x);
une bonne idée. Si seulement le compilateur pouvait en déduire le type pour les délégués ...JS,
303,288,275,273, 274 (correction de bogue)Algorithme pour le keyslip:
Version non-Golfée par demande:
la source
;
. C’est la seule façon de dire qu’il contient 274 octets. En outre, cela ne fonctionne que sur les versions plus récentes de JavaScript et de JScript.Perl,
278239197169162156151149Exécuter avec
-p
, puis 148 + 1 = 149 octets. Par exemple:Non-golfé, plus ou moins:
Au début, je pensais que choisir un élément de manière aléatoire dans un tableau (sur 26 d’entre elles de longueurs différentes) est statistiquement plus «net» (c'est-à-dire aléatoire), mais peut-être que c'était faux. (Voir la version précédente.) Cette dernière tentative suit, à la suite des meneurs :-), le long d’une chaîne soit de -1,1, -11,11 (au hasard) et se répète jusqu’à ce que l’étape soit valide.
Edit: Grâce à l' aide tobyink et à d'autres optimisations, nous avons réussi à réduire considérablement la taille du code.
La dernière approche utilise quelques astuces avec la recherche sur les expressions rationnelles pour trouver une étape valide le long de la chaîne de substitution, en éliminant les vérifications manuelles.
Une autre édition: 5 octets désactivés car nous n'avons pas besoin d'entiers pour les index de tableau + petit truc avec index de tableau illégal. J'ai essayé le même truc avec
[-4+rand@-]
(c'est-à-dire des indices négatifs) et je me suis débarrassé d'un élément de la liste,'',
mais cela n'a rien sauvé.Edit: Retour à la simplicité - le remplacement de la condition
~~rand 10
par larand>.1
sauvegarde de 2 octets ...la source
sub i
. Vous n'utilisez pas strict, vous'QWERTYUIOP0ASDFGHJKL000ZXCVBNM'
pouvez donc le donner à nu (enregistre deux caractères de guillemet). De même, vous pouvez le faire'Z'
(bien que cela signifie que vous devez ajouter un espace entre lui etgt
, de sorte que cela n'enregistre qu'un seul caractère). Économies totales: 4 caractères.($n=i$&=~/\pL/?3:2)?--$n?do{...}:$&x2:''
peut être réécrite comme($&x2,'',do{...})[i$&=~/\pL/?3:2]
. Cela signifie que l'évaluation n'est pas paresseuse (elle calcule les trois manières dont le personnage peut être remplacé avant de choisir une technique de substitution), mais cela fonctionne et il enregistre sept autres caractères selon mes calculs.gt'Z'
- cela peut être supprimé. Avec tous ces changements, vous devriez pouvoir le réduire à 184 caractères.$s
en$,
(cette variable intégrée est le séparateur de champs pourprint
, mais que vous n'imprimez pas plusieurs champs n'importe où, de sorte que son utilisation intégrée n'est pas pertinente, ce qui rend la variable prête à être réutilisée), vous pouvez alors éliminer l'espace blanc. en le$s x3
rendant juste$,x3
.PHP, fonction avec 368 octets
Voici ma tentative.
C'est un "code de frankenc", mais ça marche un peu .
Un code plus "lisible":
La seule différence entre les 2 codes est qu’il ya des tonnes d’onglets et de nouvelles lignes.
Il ne produit pas le même type exact d '"inexactitude", mais il supprime ou remplace un caractère à l'aide desdites conditions.
Vous pouvez l'essayer sur http://writecodeonline.com/php/ .
Copiez et collez ce code:
Après le test, dites-moi s’il s’agit d’une réponse valide.
la source
C #, 581 octets
et dans un format plus lisible:
la source
PHP,
326320318315 caractèresEt une version plus lisible et commentée:
On pourrait encore améliorer, je suppose.
-2, -3 grâce à Ismael Miguel
la source
(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)?2:1))
changé(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?
et vous économiserez 2 octets.($e?0:32)
, en remplaçant par32*!!$e
(notez le manque de parenthèse), économisez 2 octets. Si$e
est TOUJOURS booléen, vous pouvez le faire32*!$e
et vous enregistrez 3 octets. Cela fonctionnera car php a une priorité arithmétique. Cela signifie que les multiplications et les divisions sont effectuées avant toute addition et soustraction.Java (475 octets)
Ceci est mon essai dans le langage prolixe Java. Obtenir des nombres aléatoires est assez long en Java et le mappage n'est pas vraiment efficace. Cela peut probablement être amélioré.
Usage:
Non compressé, distinctions ajoutées:
la source
AutoHotkey 441 octets
L'entrée doit être donnée en tant que paramètre de ligne de commande, la sortie est donnée en tant que message d'erreur.
Version golfée
Version non jouée et annotée (la différence est que cette version a plus d’espace blanc et que les affectations de variables sont sur des lignes séparées pour plus de lisibilité.)
la source