एक पासवर्ड पढ़ें: मोबाइल पर!


13

एमडी एक्सएफ की हालिया चुनौती के लिए धन्यवाद , अब हम कई अलग-अलग भाषाओं में पासवर्ड पढ़ सकते हैं! समस्या यह है, अब हमें अपने अनुप्रयोगों को मोबाइल उपकरणों पर पोर्ट करना होगा, और वे पासवर्ड प्रविष्टि को थोड़ा अलग तरीके से करते हैं।

चुनौती

  • कीबोर्ड से एक स्ट्रिंग पढ़ें।
  • हर बार एक चरित्र kदर्ज किया जाता है, इसे थोड़े समय के अंतराल के लिए प्रदर्शित करें।
  • समय बीतने के बाद या उपयोगकर्ता ने एक और चरित्र में प्रवेश किया है, kकुछ चरित्र के साथ प्रतिस्थापित करें c

नियम

  • cस्थिर रहना चाहिए; यह एक ही चरित्र होना चाहिए।
  • c कोई भी दृश्यमान चरित्र हो सकता है (अर्थात यह एक नई रेखा, स्थान, टैब या अप्राप्य नहीं हो सकता)।
  • cकिसी भी इनपुट के आधार पर नहीं किया जा सकता है k; cपहले kपढ़ने से पहले परिभाषित / स्थिर होना चाहिए ।
  • c हर बार कार्यक्रम चलाने के दौरान समान होना चाहिए।
  • cमानों में से एक हो सकता है जैसे kकि दुर्घटना से, जब तक कि अन्य सभी नियमों का पालन न किया जाए।

  • आपको kरियलटाइम में प्रिंट करना होगा । जैसे ही उपयोगकर्ता एक नया दर्ज करता है k, आपको इसे तुरंत प्रदर्शित करना होगा।
  • kको बदलने से पहले अंतिम उपयोगकर्ता को दिखाई देना चाहिए c; समय अंतराल 0.5 सेकंड से कम नहीं होगा।
  • kcएक उचित समय के भीतर प्रतिस्थापित किया जाना चाहिए ; समय अंतराल 5 सेकंड से अधिक नहीं होगा।
  • जैसे ही एक नए चरित्र दर्ज किया गया है या नहीं, समय अंतराल समाप्त हो गया है, तो आप बदल दिया जाना चाहिए kके साथ cऔर नए के रूप में दर्ज कुंजी का उपयोग kतुरंत।

  • यह हर बार स्क्रीन को साफ़ करने और फिर से तैयार करने के लिए स्वीकार्य है, जब आपको एक चरित्र को बदलने की आवश्यकता होती है।
  • जब तक अन्य सभी नियमों का पालन किया जाता है तब तक आप इनपुट और आउटपुट के किसी भी उचित तरीके का उपयोग कर सकते हैं।
  • आप मान सकते हैं कि इनपुट किए गए वर्णों की संख्या टर्मिनल / ग्राफ़िकल विंडो की चौड़ाई से अधिक लंबी नहीं है।
  • यदि टर्मिनल का उपयोग कर रहे हैं, तो एक नई प्रविष्टि या EOF तक पहुंचने के बाद आपका कार्यक्रम समाप्त हो जाना चाहिए।
  • आपका कार्यक्रम मोबाइल और अन्य वातावरण दोनों पर यहाँ उल्लिखित होना चाहिए।

  • आपका कार्यक्रम यह मान सकता है कि इनपुट में केवल मुद्रण योग्य वर्ण (अक्षर, संख्याएं, प्रतीक) और संभवतः एक समाप्त करने वाली नई पंक्ति (कोई बैकस्पेस, तीर कुंजी, हटाएं, आदि) नहीं होगी।
  • Ctrl + C दबाए जाने पर आपका प्रोग्राम समाप्त हो सकता है।
  • यदि आपका प्रोग्राम लॉन्च होता है, तो आप विंडो बंद करके अपने प्रोग्राम को समाप्त कर सकते हैं।

स्कोरिंग

यह , इसलिए प्रत्येक भाषा में सबसे कम उत्तर जीतता है!

उदाहरण

यहाँ एक उदाहरण है कि यह कैसा दिखना चाहिए। ध्यान दें कि यह एक मोबाइल प्लेटफ़ॉर्म पर रिकॉर्ड किया गया है, लेकिन इसे डेस्कटॉप प्लेटफ़ॉर्म पर भी काम करना चाहिए।

कुंजिका


जो लोग हटाए गए पदों को देख सकते हैं, उनके लिए यहां सैंडबॉक्स पोस्ट है
Musicman523

आप वीडियो में किस कीबोर्ड का उपयोग कर रहे हैं?
बीटा दायक

1
@ BetaDecay ने ज़ेनुई कीबोर्ड के अंत में अधिसूचना दी
ovs

@BetaDecay यह वास्तव में ZenUI कीबोर्ड है। बस जिज्ञासु, या इससे कोई फर्क नहीं पड़ता?
संगीतज्ञ ५२३

@ musicman523 बस जिज्ञासु :)
बीटा डेक

जवाबों:


4

HTML + जावास्क्रिप्ट, 20 + 105 = 125 बाइट्स

<input id=I oninput=v=I.value;s='*'.repeat(l=v.length-1);I.value=s+v[l];clearTimeout(I.t);I.t=setTimeout(`I.value=s+'*'`,1e3)

प्रवेश kऔर पत्र बनने के बीच की देरी *एक सेकंड है।

जावास्क्रिप्ट oninput, स्वरूपित

v=I.value;
s='*'.repeat(l=v.length-1);
I.value=s+v[l];
clearTimeout(I.t);
I.t=setTimeout(`I.value=s+'*'`,1e3)

टेस्ट स्निपेट

>बेहतर संगतता के लिए अंतिम ब्रैकेट ( ) जोड़ा गया ।

<input id=I oninput=v=I.value;s='*'.repeat(l=v.length-1);I.value=s+v[l];clearTimeout(I.t);I.t=setTimeout(`I.value=s+'*'`,1e3)>


हालांकि समाप्त करने के लिए प्रतीत नहीं होता है!
आधिकारिक

1
@officialaimm चुनौती में कहा गया है कि केवल टर्मिनल अनुप्रयोगों को समाप्त करने का एक तरीका होना चाहिए।
जस्टिन मैरीनर

आह, मुझे मूर्ख। माफ़ करना।
आधिकारिक

3

पायथन 3 , 186 224 बाइट्स

केवल खिड़कियों में काम करता है।

import os,time,msvcrt as m
i=s=x=0;t=time.clock
def v():os.system("cls")
v()
while 1:
 if m.kbhit():
  k=str(m.getch())
  if"\\r"in k:break 
  i+=1;x=1;v();print("*"*(i-1)+k[2]);s=t()
 if (t()-s>.6and x):x=0;v();print("*"*i)

पुराने संस्करण (186 बाइट्स): जिस गति से कुंजी दबाया गया था, उसकी परवाह किए बिना नींद अनिवार्य थी।

import os,time,msvcrt
a=k=[];i=0;o=os.system
while 1:
 o("cls")
 if i:print("*"*(i-1)+a[i-1]);time.sleep(.6);o("cls");print("*"*i)
 k=str(msvcrt.getch())
 if"\\r"in k:break
 a+=k[2];i+=1

1
मुझे नहीं लगता कि यह सभी मानदंडों को पूरा करता है, विशेष रूप से As soon as a new character is entered, whether or not the time interval has expired, you should replace k with c and use the entered key as the new k immediately.यह कहा जा रहा है, मैं इसका परीक्षण नहीं कर सकता क्योंकि मैं विंडोज नहीं चलाता, इसलिए मुझे बताएं! आपको यह संबंधित चुनौती संदर्भ के रूप में मददगार लग सकती है
Musicman523

मैंने माना कि k से c तक का प्रतिस्थापन केवल चित्रमय था (जो मेरे कोड में पूरा हुआ)। क्या आपके पास c के साथ k का संग्रहीत मान बदलने का भी मतलब है?
अधिकारिक

1
नहींं, बस इतना ही होना चाहिए। आपका समय विलंब है। 6 सेकंड - अगर मैं दो अक्षरों में टाइप करूँ तो क्या होगा। क्या आप अभी भी 1.2 सेकंड के लिए सोएंगे? फिर से, क्षमा करें, मैं इसे स्वयं नहीं परख सकता - यह आपके कोड को चलाने वाले वीडियो को पोस्ट करने के लायक हो सकता है!
संगीतज्ञ ५२३

संशोधित। नया संस्करण सुनिश्चित करता है कि नए चरित्र को फेंक दिया जा सकता है इससे पहले कि पिछले चरित्र का समय समाप्त नहीं हुआ है।
आधिकारिक

3

पायथन 2 , 133 बाइट्स

@Officialaimm उत्तर के आधार पर ।

import time,msvcrt as m
k=T=0
s=p='\r'
while'\r'!=k:
 t=time.time();print s,
 if m.kbhit():k=m.getch();s=p+k;T=t;p+='*'
 if t-T>1:s=p

वाह, 90 बाइट कम !!! वोट देंगे लेकिन मेरी दैनिक सीमा पूरी हो चुकी है। वहाँ यह जाँच करने के लिए एक रास्ता है (मैं केवल मेरे पीसी पर अजगर 3 है)? Btw मुझे कोई स्पष्ट स्क्रीन नहीं दिख रही है, इसे कैसे प्रबंधित किया जाता है?
आधिकारिक

@officialaimm \rप्रिंट में
फेलिप नारदी बतिस्ता

1
जब मैं अपनी कक्षा में पहुँचता हूँ तो मैं एक py3 संस्करण पोस्ट करता हूँ
फेलिप

1
@officialaimm को यह काम करना चाहिए, मैं linux atm पर काम कर रहा हूँ, इसलिए मैं इसका परीक्षण नहीं कर सकता हूँ
फेलिप नारदी बतिस्ता

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