मेरे कीबोर्ड का अनुकरण करें


15

मेरे पास अपने कीबोर्ड के साथ एक मुद्दा है (अधिक संभावना है कि मेरे ब्राउज़र के साथ एक समस्या है)। कुछ बार जब मैं एक नए टेक्स्ट फ़ील्ड पर क्लिक करता हूं और टाइप करना शुरू करता हूं तो मेरा सारा टेक्स्ट पीछे की तरफ निकल जाता है। बहुत कम समय के बाद (चुनौती के उद्देश्य के लिए हम कहेंगे कि यह 10 मिलीसेकंड है) यह फिर से टाइप करना शुरू कर देता है। ऐसा लगता है कि पहली बार जब मैं टाइप करना शुरू करता हूं तो मेरा कर्सर हिलता नहीं है इसलिए टेक्स्टफील्ड की शुरुआत में सभी अक्षर सम्मिलित हो जाते हैं।

उदाहरण के लिए अगर मैं टाइप कर रहा था pythonऔर मैंने pytपहले 10 मिलीसेकंड में टाइप किया तो परिणाम होगा

hontyp

कार्य

आपका काम इस व्यवहार को यथासंभव बाइट्स में अनुकरण करना है।

इनपुट

आप किसी भी उचित विधि में इनपुट ले सकते हैं। हालाँकि आप इनपुट को दो अलग-अलग फ़ील्ड के रूप में नहीं ले सकते। इनपुट की अनुमति देने के लिए कार्यक्रम शुरू होने पर 10 मिलीसेकंड की देरी शुरू होनी चाहिए। इनपुट करने की अनुमति देने से पहले आपको ऐसा करना पड़ सकता है, जिसे 10 मिलीसेकंड की ओर नहीं गिना जाना चाहिए।

जब तक यह 10 मिलीसेकंड औसत रहता है तब तक समय में कुछ विलंबता की अनुमति होती है और यह 1 मिलीसेकंड से अधिक से अधिक 1% से अधिक नहीं होता है।

उत्पादन

आप जिस भी विधि को फिट देखते हैं, उसमें आप स्ट्रिंग का उत्पादन कर सकते हैं। आप या तो लाइव अपडेट कर सकते हैं क्योंकि उपयोगकर्ता इनपुट लेने के बाद परिणाम लिख रहा है या आउटपुट दे रहा है (या तो एक नई लाइन या फ़ाइल के अंत तक ^D)।

परीक्षण के मामलों

उन्नीसवीं बाइट में इस सीएमसी द्वारा इनमें से कुछ उत्पन्न किए गए थे

First 10  | after   | result
bra         in-flak   in-flakarb
ap          ple       plepa
code-       golf      golf-edoc
no          ne        neon
we          st        stew
ai          med       media
draw        back      backward

3
@ लूक 1) हां। 2) यदि वह एकमात्र तरीका है कि वे इनपुट ले सकते हैं तो वे प्रतिस्पर्धा नहीं कर सकते।
पोस्ट रॉक गार्फ हंटर

3
^ यह शायद बहुत सारी भाषाओं पर
राज

2
यह दुर्भाग्य है। मैं इस चुनौती को अपनी भाषाओं पर राज नहीं करना चाहता, हालांकि मैं वास्तव में यह नहीं चाहता कि यह एक तुच्छ स्ट्रिंग हेरफेर चुनौती बन जाए।
रॉक गार्फ हंटर

2
10 मिलीसेकंड एक है बहुत कम समय। क्या आपका वास्तव में मतलब था?
नील

1
@ नील आप शायद सही हैं, लेकिन यह वही है, मैं इसे इस बिंदु पर बदलने की स्थिति में नहीं हूं।
पोस्ट रॉक गार्फ हंटर

जवाबों:


7

विमस्क्रिप्ट, 48 47 बाइट्स

विम के पास इसके लिए कुछ अच्छे भवन हैं। Vim 8 की आवश्यकता है।

se ri|cal timer_start(10,{->execute("se ri&")})

सम्मिलित मोड में पाठ की अपेक्षा करता है, VimScript के लिए एक बहुत ही उचित इनपुट है। स्पष्टीकरण:

se ri " short for 'set revins', or 'reverse insert'
cal timer_start(10, " Start a timer that fires after 10ms
                 {->execute("se ri&")}) " Give it a lambda that unsets ri

मेरा प्रारंभिक दृष्टिकोण, se ri|sl10m|se ri&काम नहीं करता क्योंकि नींद आदेश के बाद पाठ बफ़र किया गया है, और मुझे इसके आसपास कोई रास्ता नहीं मिला।


5

HTML (JS), 96 बाइट्स

<input id=i oninput=i.d=i.d||Date.now()+1e3;Date.now()<i.d&&(i.selectionEnd=i.selectionStart=0)>

आपको इसे एक्शन में देखने का मौका देने के लिए पहले कीप्स से 1s के लिए टाइमिंग शुरू करता है।


4

जावास्क्रिप्ट (ईएस 6), 88 बाइट्स

p=s='',t=+new Date,document.onkeyup=k=>console.log(+new Date-t>9?(s+=k.key)+p:p=k.key+p)

डेमो

स्निपेट जिस तरह से काम कर रहा है, आपको उसके फ्रेम के अंदर क्लिक करना होगा ताकि रन बटन पर क्लिक करने के बाद फोकस हो जाए और इससे पहले कि आप टाइप करना शुरू कर सकें।

ऐसा करने का कोई तरीका नहीं है कि कम से कम 10ms। इसलिए, मैंने इस डेमो में 1 सेकंड की देरी निर्धारित की है - और यहां तक ​​कि, आप बेहतर जल्दी करेंगे।


3

प्रसंस्करण, 167 165 146 बाइट्स

String a="",b="";long m=0;void setup(){size(9,9);}void draw(){m=m<1?millis():m;println(b+a);}void keyTyped(){if(millis()-m>9)b+=key;else a=key+a;}

इनपुट को कीस्ट्रोक्स के रूप में लेता है और कंसोल को आउटपुट करता है। यह हर फ्रेम को अपडेट करता है।

व्याख्या

String a="",b="";                // a contains the reversed (in the 10 milliseconds) string, b contains the text that is typed after the 10 milliseconds.
long m=0;                        // Store the start milliseconds in variable m
void setup() {
  size(9,9);                     // set the dimensions of the window
}

void draw() {                    // loop forever
  m=m<1?millis():m;              // update m
  println(b+a);                  // print the string b+a
}

void keyTyped() {                // this function gets called whenever a key is typed
  if(millis() - m) >9)           // if over 9 milliseconds have elapsed then
    b+=key;                      //   add the key to the end of b
  else                           // else (if less than 10 milliseconds have elapsed)
    a=key+a;                     //   prepend the key to a
}

1
@HeatWizard कहें कि इनपुट asdf+ था ghjk। यदि सब कुछ एक चर में था, तो 10 मिलीसेकंड के बाद, हम fdsaउस एक तार में होंगे। उसके बाद, जब gटाइप किया जाता है, तो स्ट्रिंग प्रीपेंड हो जाएगी gऔर बन जाएगी gfdsa। फिर जब hटाइप किया जाता है, तो मैं hवेरिएबल के लिए प्रीपेंड नहीं कर सकता (क्योंकि तब इनपुट अभी भी उलटा है), मुझे substringएस का उपयोग करने की आवश्यकता होगी और lengthउस स्ट्रिंग वेरिएबल की गणना करनी होगी । इससे बहुत सारे बाइट्स खर्च होंगे।
कृति लिथोस

बाइट्स को कम करने के लिए त्रिगुट का उपयोग करें
श्री एलियन

@ Mr.Alien एक टर्नरी का उपयोग करने के लिए, मुझे एक ही चर से निपटने की आवश्यकता होगी, लेकिन यहां, मैं दो अलग-अलग चर (अर्थात् aऔर b) का उपयोग कर रहा हूं । यहां तक ​​कि अगर मैं एक अस्थायी चर को परिणाम असाइन करता हूं, तो परिणामी बायटेकाउंट अभी भी बड़ा है।
क्रिक्टी लिथोस

मेरा बुरा है, मैंने सोचा कि यह एक जावास्क्रिप्ट उत्तर है x) .. एहसास हुआ कि जब मैंने आपके उत्तर में
श्री एलियन

1

सी - 169 बाइट्स

खैर सी इसके लिए सबसे अच्छा नहीं है क्योंकि इसके पास ऐसा करने का कोई प्लेटफ़ॉर्म-स्वतंत्र तरीका नहीं है। MSVC के तहत काम करता है।

#include<time.h>
#include<conio.h>
l,k,b[9];main(a){for(a=clock();clock()-a<100;(k=_getch())?b[l++]=k:0);for(;(k=_getch())-13;k?putchar(k):0);for(;l;putchar(b[--l]));}

एक hacky दृष्टिकोण के बिट, यदि आप 10 ms में 9 से अधिक अक्षर टाइप कर सकते हैं, तो यह क्रैश हो जाएगा। एक नई चरित्र के बाद अद्यतन।


1
मुझे यकीन नहीं है कि अगर मैं 10ms में 9 यादृच्छिक वर्णों को मैश कर सकता हूं ...
बेंडल

1

अजगर 2 , 112 106

import msvcrt as m,time
a=b=''
T=time.time
t=T()
while 1:c=m.getch();exec'ba=+c=+cb'[T()-t>1::2];print a+b

यदि आप चाहते हैं कि आउटपुट फ्लश हो, तो लाइनों के साथ बाढ़ के बिना, print'\r'+a+b,इसके बजाय का उपयोग करें

आपको इसे रोकने के लिए प्रक्रिया को मारना होगा

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