टेक्स्ट में टाइपो डालें


63

मैंने कुछ पाठ लिखा था, लेकिन यह बहुत पेशेवर लगता है। मैं यह देखना चाहता हूं कि जब मैंने इसे लिखा था तो मैं वास्तव में थका हुआ था। मुझे आपको कुछ टाइपोस सम्मिलित करने की आवश्यकता है।

आपकी चुनौती पाठ की एक मनमानी सिंगल लाइन लेना है, और टाइपो जोड़ना है। इसका मतलब है कि प्रत्येक वर्ण के लिए, इसके टाइपोफ़ाइड होने का 10% मौका होगा।

"टाइपोफ़ाइड" की परिभाषा यह है कि आपको (बेतरतीब ढंग से) निम्न में से एक को चुनना होगा:

  • चरित्र को डुप्लिकेट करें।
  • चरित्र को हटाएँ।
  • चरित्र को एक कीबोर्ड स्थान पर शिफ्ट करें। "कीबोर्ड" को इस प्रकार परिभाषित किया गया है:

    qwertyuiop
    asdfghjkl
     zxcvbnm
    

    चरित्र परिवर्तन के लिए, आपको एक स्थान ऊपर, नीचे, बाएँ या दाएँ जाना चाहिए। इसे बेतरतीब ढंग से चुना जाना चाहिए। बदलाव का विकल्प केवल वर्णमाला वर्णों पर लागू होता है। केस को संरक्षित किया जाना चाहिए। किनारे-मामलों से सावधान रहें, जैसे m!

"यादृच्छिक" की परिभाषा यह है कि परिणाम पूर्वानुमान योग्य नहीं होना चाहिए (पिछले परिणामों को देखकर)। उदाहरण के लिए, आप हर दसवें चरित्र को टाइपोफाई नहीं कर सकते। इसके अलावा, यादृच्छिकता का एक समान वितरण होना चाहिए। उदाहरण के लिए, आप 30% डुप्लिकेट, 30% डिलीट और 40% शिफ्ट नहीं कर सकते हैं; यह प्रत्येक के लिए 1/3 का मौका होना चाहिए (प्रत्येक के लिए 1/2 यदि यह एक गैर-वर्णनात्मक चरित्र है)।

उदाहरण इनपुट:

This is some correct text. It is too correct. Please un-correctify it.

उदाहरण आउटपुट:

This iissome xorreect tex..  It is too coteect. Please jn-corretify it.

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाएगा।


4
क्या गलती से कैप्सलॉक कुंजी हड़ताली के बारे में? जब कोई एक "ए" या "जेड" टाइप करता है, तो एक यादृच्छिक मौका होना चाहिए कि वे एनपी END यूपी एलआईएस के बजाय कैप्सलॉक मारेंगे।
AJMansfield

2
@AJMansfield लोल, जो शायद बहुत जटिल होगा। पी: यह पहले से ही काफी जटिल है के रूप में यह है
दरवाज़े

1
@ user2509848 अरे, बंद करो, यह, अयस्क सह, पहले से ही plped है! :-P
दरवाज़े

1
@Doorknob आपका उदाहरण आउटपुट आपको थका हुआ नहीं लगता है, ऐसा लगता है कि आप टाइप करने के लिए नए हैं और आप नहीं जानते कि टाइपोस को कैसे ठीक किया जाए। (या आपने जो कुछ भी टाइप किया था, उस पर आप गौर नहीं करते। )
ब्लैकलाइट शाइनिंग

1
"एज-केस" <- मैं देखता हूं कि आपने वहां क्या किया था। * धीमी ताली *
एडम मारस

जवाबों:


15

GolfScript, 120 अक्षर

{10{rand}:R~!{[{.}{;}{Z\?[.(.10-@).10+]{Z=}%' '-.,R=}]'QWERTYUIOP ASDFGHJKL  ZXCVBNM'' '22*11/*.{32|}%+:Z 2$?0>2+R=~}*}%

यहां कोड का परीक्षण किया जा सकता है

{                      # loop over all characters
  10{rand}:R~!         # take random number [0..9] and negate (i.e. 10% chance of true)
  {                    # {...}* is the if-block
    [                  # Three possible operations (code blocks) in the arry
      {.}              # a) duplicate
      {;}              # b) delete
      {                # c) shift
        Z              #      Z is the keyboard layout (see below)
        \?             #      Find the index of the current letter
        [.(.10-@).10+] #      Calculate index of letter left, right, above, below
        {Z=}%          #      Extract the corresponding letters for indices
        ' '-           #      Remove any spaces
        .,R=           #      Take random item
      }
    ]
                       # Z is the keyboard layout (upper and lower case)
                       # with enough spaces around
    'QWERTYUIOP ASDFGHJKL  ZXCVBNM'' '22*11/*.{32|}%+:Z
    2$?0>              # Is the current letter contained in Z and not a space?
    2+                 # Add 2 (i.e. 3 for letters, 2 for any other char)
    R=                 # Take a random code block from above
    ~                  # Execute the block
  }*
}%

19

सी, 358 बाइट्स

(कोड की केवल तीन पंक्तियाँ हैं, लेकिन मैंने सुगमता के लिए लाइन 3 को तोड़ दिया है)

#define x putchar
#define y random()
c,n;main(){char*s[26]={"QS","HNV","FVX","EFSX","DRW","CDGR","FHTV","BGJY","KOU","HKNU",
"IJLM","KO","KN","BJM","ILP","OO","AW","EFT","ADWZ","GRY","IJY","BCG","ESQ","CDZ","HTU",
"SX"};while((c=getchar())>0){if(y%10>0&&x(c))continue;if(isalpha(c)&&y%3<1){n=(c&31)-1;
x(s[n][y%strlen(s[n])]|(c&32));continue;}if (y&1)x(x(c));}}

शुरुआत में स्ट्रिंग्स की सरणी वर्णमाला के प्रत्येक अक्षर के लिए संभावित आसन्न कुंजियों को सूचीबद्ध करती है। मुझे random()%1शिफ्ट वर्ण का चयन करते समय गणना से बचने के लिए "O" ("P" से सटे) को दोगुना करना पड़ा ।

परीक्षण चालन:

$ echo "This is some correct text. It is too correct. Please un-correctify it." |./a.out
This is some  cofrect teext. It is too correct.. Plleaase un-correctify it..

अपडेट करें:

यहां समान स्रोत कोड का विस्तारित और टिप्पणी किया गया संस्करण है:

#include <stdio.h>
#include <string.h>
/* ^^ These should be included, but the code compiles without them */

int c,n;

void main() {

  /* Adjacent keys for each letter of the alphabet (A, B, C, ..., Z): */
  char *s[26] = { "QS","HNV","FVX","EFSX","DRW","CDGR","FHTV","BGJY","KOU","HKNU",
                  "IJLM","KO","KN","BJM","ILP","OO","AW","EFT","ADWZ","GRY","IJY",
                  "BCG","ESQ","CDZ","HTU","SX" };

  /* Fetch input until null character or EOF reached */
  while ((c=getchar())>0) {

    /* For 90% of the time, just echo the character unchanged */
    if (random()%10>0 && putchar(c)) continue;

    /* If it's a letter of the alphabet, shift with 33% probability */
    if (isalpha(c) && random()%3<1) {
      /* Calculate offset to adjacent keys data */
      n=(c&31)-1;
      /* Choose a random adjacent key, and change to lower case if needed */
      putchar(s[n][random()%strlen(s[n])]|(c&32));
      continue;
    }

    /* If we reach this point, either we didn't fetch an alphabet character, or   */
    /* we did but chose not to shift it. Either way, we now need to either repeat */
    /* the character or delete it, with 50% probability for each. */

    /* This repeats the character by printing the return value from putchar() */
    if (random()&1) putchar(putchar(c));

    /* To delete the character, we don't have to do anything. */
  }
}

2
मुझे पूरा यकीन है कि आपको 26 में डालने की जरूरत नहीं है char*s[26]। संकलक को यह पता लगाने में सक्षम होना चाहिए कि स्वयं बाहर।
FDinoff

@ फिनडॉफ आह, बिल्कुल। अभी बहुत अधिक संपादन नहीं हुआ है; जहाज का पहले से ही डूब गया:
स्क्विश ossifrage

आप दोनों को continues के साथ बदल सकते हैं else। ( ;जहां पहले एक था छोड़ दो )।
एशेल्ली

1
यादृच्छिक ()% 1 में क्या समस्या है? किसी भी int% 1 को 0.
user253751

18

रूबी, १६ Rub

थोड़ा कम एक सरणी अनुक्रमण रणनीति का उपयोग कर ले:

z='qwertyuiop.asdfghjkl...zxcvbnm'+?.*11
gets.chars{|c|$_=z[c]?z:z.upcase
h=[1,-1,11,-11].map{|d|$_[d+~/#{c}/]}-[?.]rescue[]
$><<(rand<0.9?c:[c*2,'',*h.sample].sample)}

मूल नियमित अभिव्यक्ति संस्करण (184):

s='.qwertyuiop.asdfghjkl...zxcvbnm.'
gets.chars{|c|c=~/\w/&&(s[c]?s: s.upcase)=~/((\w).{9})?((\w)|.)#{c}((\w)|.)(.{9}(\w))?/
$><<(rand<0.9?c:[c*2,'',*[*$2,*$4,*$6,*$8].sample].sample)}

3
क्षमा करें, मैं रूबी को नहीं पढ़ सकता। यहाँ मैंने STDIN '0123456789'x10 यानी 10 अंकों (यानी 10 रन में कुल 1000 अंक) के साथ इस कार्यक्रम को 10 बार चलाया, और आउटपुट में कभी भी डुप्लिकेट अंक नहीं था । क्या उस साइट के साथ कोई समस्या है, या मेरी समझ में यह कैसे काम करता है?
user2846289

@VadimR अच्छा कैच, धन्यवाद! मैंने Kernel#putcआउटपुट को प्रिंट करने के लिए उपयोग करना शुरू कर दिया था , क्योंकि मुझे किसी एक पात्र को सहेजने के लिए परेंस की आवश्यकता नहीं थी। बेशक putcकेवल पहले वर्ण को प्रिंट करता है, और आउटपुट स्ट्रिंग कभी-कभी दो वर्ण लंबा हो सकता है। बेवकूफी़ भरी गल्ती। इस संस्करण की कोशिश करो!
पॉल प्रेस्टिज

अब बिल्कुल सही है। धन्यवाद।
user2846289

9

अजगर, 251

from random import*
w=choice
o=ord
print"".join(w([z]*9+[w(["",z*2]+[chr(o(w("DGRC FHTV GJYB UOK HKUN JLIM KO NK BMJ IPL O WA ETF ADWZ RYG YIJ CBG QES ZCD TUH XS SQ VNH XVF SFEX WRD".split()[(o(z)&31)-6]))|o(z)&32)]*z.isalpha())])for z in raw_input())

बहुत ही सरल लुक-अप तकनीक, एक पल के लिए मुझे लगा कि कीबोर्ड को एक अप्रत्यक्ष ग्राफ के रूप में एन्कोड करना सस्ता हो सकता है लेकिन पायथन में इस तरह का निर्माण करने के लिए ओवरहेड निषेधात्मक साबित हुआ। चूंकि पायथन के यादृच्छिक कार्यों में बहुत अधिक वर्णनात्मक नाम हैं choice(), जिसका मैं विशेष रूप से उपयोग करता हूं , इसका नाम बदलकर w। त्रुटि का 10% मौका संभाला है w([z]*9+[...])जहां एक संयुक्त टाइपो चरित्र की नौ प्रतियां एक टाइपो के साथ एक सूची में हैं।

-16 अक्षर - धन्यवाद grc, +2 अक्षर (और शुद्धता, 2 चार्ट से अधिक के लायक) - धन्यवाद धरा


2
कुछ मामूली सुधार: रिक्त स्थान के रूप में रिक्त स्थान का उपयोग करें d="SQ VNH XVF...".split(), के बाद अंतरिक्ष को हटा दें printऔर if/ के elseसाथ बदलें ([...]+[...])*z.isalpha()। इसके अलावा, आपको dकेवल एक बार उपयोग करने के बाद से एक चर की आवश्यकता नहीं है ।
जीआर

1
आप कर सकते हैं w=__import__('random').choice(कम से कम पायथन 3 afaik में)।
सिमोन

1
यह कोड कई पाठ-पात्रों के साथ टूट जाता है: ?: <आदि
धारा

1
इसके अलावा, इसे अनुक्रमित करने में एक ऑफ-द-वन त्रुटि है: 'बी' में 'बीबबबब' में 'एक्स' द्वारा प्रतिस्थापित किया जाता है, 'ज़ज़्ज़्ज़्ज़्ज़्ज़ज़' सीमा से बाहर एक सूचकांक देता है
धरा

1
पायथन 3 का उपयोग करें input()और print()2 वर्णों को बचाने के लिए।
सेस टिम्मरमैन

8

सी #, 320 बाइट्स (प्रोग्राम रैपिंग के साथ 360 बाइट्स)

"ऊपरी स्थानांतरित" पत्रों के लिए समर्थन शामिल है।

एक समारोह के रूप में (320 बाइट्स):

string T(string s){
    string t="",z="      ",k=z+z+"qwertyuiop asdfghjkl   zxcvbnm";
    k+=k.ToUpper()+z+z;
    int[]m={-11,-1,1,11};
    var r=new System.Random();
    foreach(var c in s){
        if(r.Next(10)>0)
            t+=c;
        else{
            int i=r.Next(k.IndexOf(c)>0?3:2);
            if(i>1){
                while(' '==k[i=k.IndexOf(c)+m[r.Next(4)]]);
                t+=k[i];
            }
            else if(i>0)
                t=(t+c)+c;
        }
    }
    return t;
}

एक प्रोग्राम के रूप में जो पाठ की एक पंक्ति (360 बाइट्स) पढ़ता है:

using System;
class P{
    static void Main(){
        string t="",z="      ",k=z+z+"qwertyuiop asdfghjkl   zxcvbnm";
        k+=k.ToUpper()+z+z;
        int[]m={-11,-1,1,11};
        var r=new Random();
        foreach(var c in Console.ReadLine()){
            if(r.Next(10)>0)
                t+=c;
            else{
                int i=r.Next(k.IndexOf(c)>0?3:2);
                if(i>1){
                    while(' '==k[i=k.IndexOf(c)+m[r.Next(4)]]);
                    t+=k[i];
                }
                else if(i>0)
                    t=(t+c)+c;
            }
        }
        Console.Write(t);
    }
}

इनपुट आउटपुट नमूना:

This is some correct text. It is too correct. Please un-correctify it.
This  is some corrrect texy. Ut is too correct. Pease un-coorrectify it.

TYPO RAGE CAPS TEXT!
TYPPORAGE CAOS TEX!

कानूनी C # कार्यक्रमों को वैध होने के लिए कम से कम "सार्वजनिक वर्ग ए {स्टेटिक शून्य मेन () {}}" होना चाहिए। फिर आपको कंसोल से पढ़ने की आवश्यकता होगी। लेकिन ऐसा लगता है कि आपका समाधान अभी भी मेरी तुलना में कम होगा, इसलिए अच्छी तरह से किया गया।
Xantix

@Xantix, मुझे पता है, लेकिन उन्होंने कभी नहीं कहा कि यह एक कार्यक्रम होना चाहिए। किसी भी तरह से, मेरे जवाब में अब प्रोग्राम रैपिंग शामिल हैं।
हाथ-ई-फूड

मुझे बस एहसास हुआ, मेरा कार्य इनपुट में सीआर और एलएफ पात्रों को स्वीकार करेगा जो संभावित रूप से दोगुना या गिराया जा सकता है। यह दिलचस्प आउटपुट के लिए बनायेगा ...
हाथ-ई-फूड

2
हम्म, Func<int,int> n=x=>r.Next(x);एक अच्छा विचार बनाने के लिए पर्याप्त यादृच्छिक कॉल नहीं । यदि केवल कंपाइलर प्रतिनिधियों के लिए प्रकार का अनुमान लगा सकता है ...
मगस

8

जेएस, 303 , 288 , 275 , 273 , 274 (बग फिक्स)

function z(s){return s.split('').map(function(d){if((r=Math.random)(b='qwertyuiop0asdfghjkl000zxcvbnm')>.1)return d
if((c=r(x=(d>'`'?b:(b=b.toUpperCase())).indexOf(d))*(/[a-z]/i.test(d)+2))<2)return c>1?d+d:''
for(a=0;!a;)a=b[x+[11,-11,1,-1][~~(r()*4)]]
return a}).join('')}

Keylip के लिए एल्गोरिथ्म:

  • स्ट्रिंग (या अपरकेस) में चार खोजें
  • सूचकांक में 11, -11, 1 या -1 जोड़ें।
  • यदि यह अमान्य है (0 या शून्य), फिर से रोल करें

गैर-गोल्फ संस्करण प्रति अनुरोध:

function z (s) {
  return s.split('') // split input string into characters.
          .map( // and then for each character...
    function (d) {
      r = Math.random; // set up a shortened form of Math.random
      // declare keyboard here because we have parens and we can save a delimeter.
      b = 'qwertyuiop0asdfghjkl000zxcvbnm';  
      if (r() > .1) {  // normal case
        return d;
      }
      numOptions = /[a-z]/i.test(d) + 2; // if it's a character, 1+2, else 0+2 options

      // test here because we have parens. x might be -1
      if (d > '`') { 
        x = b.search(d);  // x marks the spot
      } else {
        b = b.toUpperCase();
        x = b.search(d);
      }

      c = r() * numOptions; // chars can be 0-3, non-chars: 0-2
      if (c < 2) {                // this case is simple, so it comes first
        return c>1 ? d + d : ''; // double or omit.
      }

      // we must be in keyslip mode.

      // in the golfed code, this while loop become for loops, 
      // but it's really a while.
      a = 0;
      while (!a) { // that is, a != null && a != 0
        v = ~~(r() * 4); // 0, 1, 2, or 3
        newX = x + [11, -11, 1, -1][v]; // choose one
        a = b[newX];  // slip the key
      }
      return a;
    }
  ) // end the map function
  .join('') // and then reassemble the string
}

वाहवाही! JS निंजा सम्मानित किया गया!
सनी आर गुप्ता

1
@SunnyRGupta धन्यवाद! काश मैं इसे और नीचे ला पाता। मुझे लगता है कि बड़े पैमाने पर कोष्ठक नरक जरूरत से ज्यादा लंबा हो सकता है।
नहीं कि चार्ल्स

नौसिखियों के लिए गैर-छोटा संस्करण प्रदर्शित करने का भी प्रयास करें!
सनी आर गुप्ता

खैर, तकनीकी रूप से आपके कोड में विंडोज़ पर 277 बाइट्स हैं। आप सभी नई सूचियों को बदलना चाहते हैं ;। यह कहने का एकमात्र तरीका है कि इसमें वास्तव में 274 बाइट्स हैं। इसके अलावा, यह केवल नए जावास्क्रिप्ट और JScript संस्करणों पर काम करता है।
इस्माईल मिगुएल

6

पर्ल, 278 239 197 169 162 156 151 149

s#((\pL)|.)#rand>.1?$&:($&x2,'',do{1until/^.{@{[(2,-10,12)[rand 4]-1+index$_=QWERTYUIOP0ASDFGHJKL000ZXCVBNM,uc($,=$&)]}}(\D)/;$,&' '|$1})[rand@-]#ge

साथ चलाएं -p, फिर 148 + 1 = 149 बाइट्स। उदाहरण के लिए:

perl -p typos.pl
Your challenge is to take an arbitrary single line of text, and add typos.
You challenge is to tale an  arbitrary singe lind of text, and add yposs.
This is some correct text. It is too correct. Please un-correctify it.
This iis some correct text. It s too coorrect.Pleqse un-correctify it.

अन-गोल्फ, कम या ज्यादा:

s#((\pL)|.)#rand>.1
    ? $&
    : ($&x2,'',
        do{
            1until/^.{@{[(2,-10,12)[rand 4]-1
                +index$_=QWERTYUIOP0ASDFGHJKL000ZXCVBNM,uc($,=$&)]}}(\D)/;
            $,&' '|$1
        }
    )[rand@-]
#ge

पहले मैंने सोचा था कि किसी सरणी (विभिन्न लंबाई के 26 में से) में यादृच्छिक रूप से तत्व चुनना अधिक सांख्यिकीय रूप से 'स्वच्छ' (यानी यादृच्छिक) है, लेकिन शायद यह गलत था। (पिछले संस्करण को देखें।) यह आखिरी प्रयास है, नेताओं के पीछे :-), एक स्ट्रिंग के साथ-साथ -1,1, -11,11 (यादृच्छिक रूप से) और फिर से मान्य चरण तक दोहराते हुए।

संपादित करें: मदद और अन्य अनुकूलन को दूर करने के लिए धन्यवाद , हम कोड आकार को काफी कम करने में कामयाब रहे।

अंतिम दृष्टिकोण प्रतिस्थापन चेक के साथ वैध कदम खोजने के लिए regexp खोज के साथ कुछ तरकीबों का उपयोग करता है, मैनुअल चेक को समाप्त करता है।

एक और संपादन: 5 बाइट्स बंद क्योंकि हमें सरणी अनुक्रमित के लिए पूर्णांक की आवश्यकता नहीं है + अवैध सरणी सूचकांक के साथ छोटी चाल। मैंने एक ही चाल के साथ [-4+rand@-](यानी नकारात्मक अनुक्रमित) की कोशिश की और एक सूची तत्व से छुटकारा पा लिया, '',लेकिन यह कुछ भी नहीं बचा।

संपादित करें: वापस सरलता के साथ - 2 बाइट्स बचाता है के ~~rand 10साथ स्थिति की जगह rand>.1...


1
की परिभाषा के बाद अर्धविराम की कोई आवश्यकता नहीं है sub i। आप सख्त का उपयोग नहीं कर रहे हैं, इसलिए 'QWERTYUIOP0ASDFGHJKL000ZXCVBNM'नंगे तलवार के रूप में दिया जा सकता है (दो उद्धरण चिह्न वर्ण बचाता है)। इसी तरह, ऐसा कर सकते हैं 'Z'(हालांकि इसका मतलब है कि आपको इसके बीच एक स्थान जोड़ने की आवश्यकता है और gtइसलिए, यह केवल एक चरित्र को बचाता है)। कुल बचत: 4 वर्ण।
टोबिंक

1
निर्माण ($n=i$&=~/\pL/?3:2)?--$n?do{...}:$&x2:''को फिर से लिखा जा सकता है ($&x2,'',do{...})[i$&=~/\pL/?3:2]। इसका अर्थ है कि मूल्यांकन आलसी नहीं है (यह सभी तीन तरीकों की गणना करता है कि एक प्रतिस्थापन तकनीक पर निर्णय लेने से पहले चरित्र को प्रतिस्थापित किया जा सकता है), लेकिन यह काम करता है, और यह मेरी गणना से एक और सात वर्णों को बचाता है।
बजे

1
ओह, मैंने अभी देखा कि आपके पास पहले gt'Z'भी व्हॉट्सएप है - जिसे गिराया जा सकता है। इन सभी परिवर्तनों के साथ, आपको इसे 184 वर्णों तक लाने में सक्षम होना चाहिए।
11'14 को

@tobyink, बहुत धन्यवाद, विशेष रूप से आपकी दूसरी टिप्पणी के लिए - मैंने वहां इस निर्माण को कैसे नहीं देखा, मुझे नहीं पता :-( उप गया है (हमें एक-दो बाइट्स बचाता है)। बरडिक्स ट्रिक बहुत अच्छी है, भी। और वास्तव में मैं पहले से ही कर रहा था जब मैंने आपकी टिप्पणी पढ़ी थी। :-) फिर से धन्यवाद।
user2846289

1
मुझे आपके लिए एक और चरित्र मिला है। यदि आप इसका नाम बदलते $sहैं $,(यह अंतर्निहित वैरिएबल के लिए फ़ील्ड विभाजक है print, लेकिन आप कहीं भी एकाधिक फ़ील्ड नहीं प्रिंट कर रहे हैं, तो इसका उपयोग उपयोग अप्रासंगिक है, पुन: उपयोग के लिए वैरिएबल पका हुआ है), तो आप सफेद स्थान को समाप्त कर सकते हैं $s x3बस बनाने में $,x3
टोबिंक करें

4

PHP, 368 बाइट्स के साथ कार्य करता है

यहाँ मेरा प्रयास है।

यह कुछ "फ्रेंकेनकोड" है, लेकिन यह थोड़े काम करता है।

function _($m){$q=array(array('qwertyuiop','asdfghjkl',' zxcvbnm'),'!.-,;?+/');$r='mt_rand';foreach(str_split($m)as$k=>$c)if(!$r(0,9)&&$c!=' ')foreach($q[0]as$x=>$y)if(($z=strpos($y,$c))!==!1){switch($t=$r(-3,2-($z>>3)-($x>>1))){case 2:++$z;break;case 1:++$x;break;case -1:--$x;break;case -2:--$z;break;case -3:$z=8;break;}$m[$k]=$t?$q[0][$x][$z]:$q[1][$z];}return$m;}

एक और "पठनीय" कोड:

function _($m)
{
    $q=array(array('qwertyuiop','asdfghjkl',' zxcvbnm'),'!.-,;?+/');
    $r='mt_rand';
    foreach(str_split($m)as$k=>$c)
        if(!$r(0,9)&&$c!=' ')
            foreach($q[0]as$x=>$y)
                if(($z=strpos($y,$c))!==!1)
                {
                    switch($t=$r(-3,2-($z>>3)-($x>>1)))
                    {
                        case 2:
                            ++$z;break;
                        case 1:
                            ++$x;break;
                        case -1:
                            --$x;break;
                        case -2:
                            --$z;break;
                        case -3:
                            $z=8;break;
                    }
                    $m[$k]=$t?$q[0][$x][$z]:$q[1][$z];
                }
    return$m;
}

2 कोडों के बीच एकमात्र अंतर यह है कि एक में टैब्स और न्यूलाइन्स होते हैं।

यह "गलतता" के समान सटीक प्रकार का उत्पादन नहीं करता है, लेकिन यह उक्त शर्तों का उपयोग करके या तो हटा देता है या एक चार्ट को बदल देता है।

आप इसे http://writecodeonline.com/php/ पर आज़मा सकते हैं ।

इस कोड को कॉपी और पेस्ट करें:

function _($m){$q=array(array('qwertyuiop','asdfghjkl',' zxcvbnm'),'!.-,;?+/');$r='mt_rand';foreach(str_split($m)as$k=>$c)if(!$r(0,9)&&$c!=' ')foreach($q[0]as$x=>$y)if(($z=strpos($y,$c))!==!1){switch($t=$r(-3,2-($z>>3)-($x>>1))){case 2:++$z;break;case 1:++$x;break;case -1:--$x;break;case -2:--$z;break;case -3:$z=8;break;}$m[$k]=$t?$q[0][$x][$z]:$q[1][$z];}return$m;}
echo _('This is some correct text. It is too correct. Please un-correctify it.');

परीक्षण के बाद, कृपया मुझे बताएं कि क्या यह एक वैध उत्तर है।


यह बड़े अक्षरों को प्रभावित नहीं करता है।
स्क्वीश ossifrage

1
बड़े अक्षर उदाहरण में अप्रभावित हैं। लेकिन हाँ, ऐसा नहीं है। लेकिन यह भी ध्यान दें कि मैंने कहा था कि यह KINDA काम करता है।
इस्माइल मिगुएल

3

सी #, 581 बाइट्स

using System;class B{static void Main(){var z=Console.ReadLine();var r=new Random();foreach(char C in z){String o;if(r.Next(10)==0){int w=r.Next(3);o=w==0?C+""+C:w==1?"":f(C,r);}else{o=C+"";}Console.Write(o);}Console.ReadLine();}static string f(char C,Random r){string[]k={"00000000000","0qwertyuiop0","0asdfghjkl0","00zxcvbnm0","000000000"};char L=char.ToLower(C);char h='0';for(int i=1;i<4;i++){var d=k[i].IndexOf(L);if(d!=-1){while(h=='0'){int n=r.Next(4);h=n==0?k[i][d-1]:n==1?k[i][d+1]:n==2?k[i-1][d]:k[i+1][d];}h=char.IsUpper(C)?char.ToUpper(h):h;return h+"";}}return C+"";}}

और अधिक पठनीय प्रारूप में:

using System;

class A
{
    static void Main()
    {
        var z = Console.ReadLine();
        var r = new Random();

        foreach (char C in z)
        {
            String o;

            if (r.Next(10) == 0)
            {
                int w = r.Next(3);
                o = w == 0 ? C + "" + C :
                    w == 1 ? "" :
                             f(C, r);
            }
            else
            {
                o = C + "";
            }

            Console.Write(o);
        }
    }

    static string f(char C, Random r)
    {
        string[] k = {
                            "00000000000", 
                            "0qwertyuiop0", 
                            "0asdfghjkl0", 
                            "00zxcvbnm0", 
                            "000000000"};  
        char L = char.ToLower(C);
        char h = '0';

        for (int i = 1; i < 4; i++)
        {
            var d = k[i].IndexOf(L);

            if (d != -1)
            {
                while (h == '0')
                {
                    int n = r.Next(4);

                    h = n == 0 ? k[i][d - 1] :
                        n == 1 ? k[i][d + 1] :
                        n == 2 ? k[i - 1][d] :
                                 k[i + 1][d];
                }
                h = char.IsUpper(C) ? char.ToUpper(h) : h;
                return h + "";
            }
        }
        return C + "";
    }
}

3

PHP, 326 320 318 315 वर्ण

$h=array(qs,vhn,vxf,sefx,wrd,drgc,fthv,gyjb,uko,hukn,jilm,ok,nk,bjm,ilp,o,aw,etf,awdz,rgy,yji,cgb,qse,zdc,thu,sx);$a=x.$argv[1];for(;$d=$a[++$b];)echo!rand(0,9)&&($c=ord($d)-65)?(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?$d.$d:($g<2?"":(($j=$i[rand(0,strlen($i=$h[$c-!$e*32]))])&&$e?strtoupper($j):$j))):$d;

और अधिक पठनीय और टिप्पणी वाला संस्करण:

// $a   input
// $b   char iterator
// $c   current char ascii value
// $d   current char
// $e   is uppercase
// $g   rand() output
// $h   char displacement
// $i   current character in $h
// $j   temporary var for uppercasing

// the neighbouring characters of a-z, in alphabetical (and ASCII) order
$h=array(qs,vhn,vxf,sefx,wrd,
    drgc,fthv,gyjb,uko,hukn,
    jilm,ok,nk,bjm,ilp,
    o,aw,etf,awdz,rgy,
    yji,cgb,qse,zdc,thu,
    sx);
// input from argument
$a=x.$argv[1];

for(;$d=$a[++$b];)
    echo!rand(0,9)&&($c=ord($d)-65)? /* 10% chance, read char ASCII value - 65 into $c */
        (!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?
          /* random number from 0 to 2 (if alphabetic) or 0 to 1 stored in $g */
            $d.$d: /* double char if $g = 0 */
            ($g<2?
                "": /* omit char if $g = 1*/
                (($j=$i[rand(0,strlen($i=$h[$c-!$e*32]))])&&$e?
                  /* $j = random neighbour of the current char */
                    strtoupper($j): /* uppercase $j */
                    $j)))
        :$d; /* keep char */

फिर भी सुधार किया जा सकता है, मुझे लगता है।

-2, -3 इस्माइल मिगुएल को धन्यवाद


1
जहां आपके लिए (!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)?2:1))बदलाव है (!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?और आप 2 बाइट्स बचाएंगे।
इस्माइल मिगेल

1
जहां आपके पास है ($e?0:32), 32*!!$e(कोष्ठक की कमी की सूचना के साथ ) 2 बाइट्स बचाएं। यदि $eहमेशा बूलियन है, तो आप कर सकते हैं 32*!$eऔर आप 3 बाइट बचाते हैं। यह काम करेगा क्योंकि php में अंकगणितीय पूर्वता है। इसका मतलब यह है कि गुणा और भाग किसी भी जोड़ और घटाव से पहले किए जाते हैं।
इस्माइल मिगुएल

2

जावा (475 बाइट्स)

यह क्रिया भाषा में मेरी कोशिश है जो जावा है। जावा में रैंडम नंबर प्राप्त करना काफी लंबा है, और मैपिंग वास्तव में कुशल नहीं है। इसे शायद सुधारा जा सकता है।

import static java.lang.Math.*;public class T{public static void main(String[]a){String z="",v;for(char c:a[0].toCharArray()){double g=random()*60;if(g>=6)z+=c;else{boolean u='A'<=c&c<='Z',l='a'<=c&c<='z';if(g<(l|u?2:3))z+=""+c+c;else if((l|u)&g<4){v="qs,hnv,fvx,efsx,drw,cdgr,fhtv,kou,bgjy,hknu,ijlm,ko,kn,bjm,ilp,o,aw,eft,adwz,gry,ijy,bcg,eqs,cdz,htu,sx".split(",")[u?c-'A':c-'a'];c=v.charAt((int)(random()*v.length()));z+=u?(char)(c-'a'+'A'):c;}}}System.out.println(z);}}

उपयोग:

java T "This is some correct text. It is too correct. Please un-correctify it."

असम्बद्ध, प्रशंसा की गयी:

import static java.lang.Math.*; // Need random()

public class T {
    public static void main(String[] a) {
        String z = "", v;
        for (char c : a[0].toCharArray()) {
            double g = random() * 60; // Compute random only once for two cases.
            if (g >= 6) {
                // 90% must be correct (accolades are stripped)
                // so we just copy the character.
                z += c;
            } else {
                // These tests come often.
                boolean u = 'A' <= c & c <= 'Z', l = 'a' <= c & c <= 'z';

                // reuse the random. g is [0,6[.
                if (g < (l | u ? 2 : 3)) { 
                    // If c is an ascii letter (l|u) then g must be [0,2[ ; if not, then g must be [0,3[.
                    // If those conditions are met, we duplicate the character
                    z += "" + c + c;
                } else if ((l | u) & g < 4) {
                    // if c is letter and g [2,4[ then we perform the wrong key event.
                    // I could not compress it using the keyboard mapping shorter in Java than expanding it like it is now.
                    v = "qs,hnv,fvx,efsx,drw,cdgr,fhtv,kou,bgjy,hknu,ijlm,ko,kn,bjm,ilp,o,aw,eft,adwz,gry,ijy,bcg,eqs,cdz,htu,sx".split(",")[u ? c - 'A' : c - 'a'];
                    // get a random character from the string.
                    c = v.charAt((int) (random() * v.length()));

                    // Keep the case of the character.
                    z += u ? (char) (c - 'a' + 'A') : c;
                } else { // if c is not an ascii letter or if g is [4,6[
                    // Do nothing. This else is stripped.
                }
            }
        }
        System.out.println(z);
    }
}

2

ऑटोहॉटकी 441 बाइट्स

इनपुट को कमांड लाइन पैरामीटर के रूप में दिया जाना चाहिए, आउटपुट एक त्रुटि संदेश के रूप में दिया गया है।

गोल्फ संस्करण

पाश, पार्स, १
{
कश्मीर: = {1: "q", 2: "डब्ल्यू", 3: "ई", 4: "आर", 5: "टी", 6: "y", 7: "यू", 8: "मैं ", 9: 'ओ', 10:" p "21:" एक ", 22:" एस ", 23:" डी ", 24:" च ", 25:" जी ", 26:" h ", 27: 'जे', 28: "कश्मीर", 29: "l", 42: "Z", 43: "x", 44: "सी", 45: "वी", 46: "बी", 47: "n" 48: "एम"}, एक: = A_LoopField, क्ष: = r (? z 3: 2), z =
अगर r (10)! = 10 {
एच। = एक
जारी रखें
}
एक्स के लिए, वाई में कश्मीर
z: = y = एक एक्स: जेड
यदि q = 1
एच। = आ
यदि q = 3
{
लूप {
टी: = r (4), डब्ल्यू: = z + (टी = 1 20:? टी = 2 -20? टी = 3 1: -1)
} जब तक k.HasKey (w)
एच। = k [डब्ल्यू]
}
}
फेंक% ह
आर (एन) {
रैंडम, डब्ल्यू, 1, एन
वापसी w
}

अन-गोल्‍ड और एनोटेट संस्‍करण (अंतर यह है कि इस संस्‍करण में अधिक सफ़ेद स्थान है और परिवर्तनशीलता के लिए अलग-अलग लाइनों पर चर असाइनमेंट हैं।)

कश्मीर: = {1: "q", 2: "डब्ल्यू", 3: "ई", 4: "आर", 5: "टी", 6: "y", 7: "यू", 8: "मैं ", 9: 'ओ', 10:" p "21:" एक ", 22:" एस ", 23:" डी ", 24:" च ", 25:" जी ", 26:" h ", 27: 'जे', 28: "कश्मीर", 29: "l", 42: "Z", 43: "x", 44: "सी", 45: "वी", 46: "बी", 47: "n" 48: "एम"}
पाश, पार्स, १
{
    एक: = A_LoopField
    1-10 से एक यादृच्छिक संख्या प्राप्त करें और जांचें कि क्या यह 10 है
    ; अगर यह इस पुनरावृत्ति को छोड़ नहीं है
    if r (10)! = 10
    {
        एच। = एक
        जारी रखें
    }

    जांच करें कि क्या वर्तमान वर्ण k में है
    जेड =
    एक्स के लिए, वाई में कश्मीर
        z: = y = एक एक्स: जेड

    टाइपो क्या करना है यह तय करने के लिए एक यादृच्छिक संख्या चुनें
    क्यू: = आर (जेड 3: 2)
    यदि q = 1
        h। = aa; कुंजी की नकल करें
    यदि q = 3
    {
        ; कीबोर्ड की सरणी सेट की जाती है ताकि जोड़कर या घटाकर
        ; सूचकांक से 20 आप एक पंक्ति के ऊपर या नीचे जा रहे हैं
        ; और 1 जोड़कर या घटाकर आप दाएं या बाएं घुमाते हैं
        ; तब आपको बस यह जांचने की आवश्यकता है कि समायोजित सूचकांक
        ; यह सही है
        लूप
        {
            टी: = r (4)
            डब्ल्यू: = z + (टी = 1 20:? टी = 2 -20: टी = 3 1: -1)
        } जब तक k.HasKey (w)
        एच। = k [डब्ल्यू]
    }
}
; स्ट्रिंग को एक त्रुटि संदेश के रूप में प्रदर्शित करें
फेंक% ह
आर (एन)
{
    रैंडम, डब्ल्यू, 1, एन
    वापसी w
}

किन कार्यक्रमों के साथ यह काम करता है?
इस्माईल मिगुएल

यह AutoHotkey.exe द्वारा चलाया जाता है। autohotkey.com
पर्सन93
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.