Bir şifre okuyun: mobilde!


13

Sayesinde MD XF, son meydan okumadan , şimdi pek çok farklı dilde şifreleri okuyabilirsiniz! Sorun şu ki, şimdi uygulamalarımızı mobil cihazlara taşımamız gerekiyor ve şifre girişini biraz farklı yapıyorlar.

Meydan okuma

  • Klavyeden bir dize okuyun.
  • Bir karakter kher girildiğinde, kısa bir zaman aralığı için görüntüleyin.
  • Zaman aralığı geçtikten VEYA kullanıcı başka bir karakter girdikten sonra, yerini kbiraz karakteri ile c.

kurallar

  • csabit olmalı; aynı karakter olmalı.
  • c görünür herhangi bir karakter olabilir (yani, yeni satır, boşluk, sekme veya yazdırılamaz).
  • cGirilen herhangi bir temele dayanamaz k; cilk kokunmadan önce tanımlanmış / sabit olmalıdır .
  • c program her çalıştırıldığında aynı olmalıdır.
  • ckdiğer tüm kurallara uyulduğu sürece kazara verilmiş değerlerden biri olabilir .

  • kGerçek zamanlı yazdırmalısınız . Kullanıcı yenisine girer girmez khemen görüntülemeniz gerekir.
  • kdeğiştirilmeden önce son kullanıcı tarafından görülebilir olmalıdır c; zaman aralığı 0,5 saniyeden az olmamalıdır.
  • kcmakul bir süre içinde değiştirilmelidir ; zaman aralığı 5 saniyeyi geçmemelidir.
  • En kısa sürede yeni bir karakter girildiğinde olarak, zaman aralığı doldu olsun veya olmasın, değiştirmeniz gerekir kile cve yeni olarak girilen tuşunu kullanın khemen.

  • Her karakteri değiştirmeniz gerektiğinde ekranı temizlemek ve yeniden çizmek kabul edilebilir.
  • Diğer tüm kurallara uyulduğu sürece makul giriş ve çıkış yöntemlerini kullanabilirsiniz.
  • Girilen karakter sayısının hiçbir zaman terminal / grafik pencere genişliğinden daha uzun olmadığını varsayabilirsiniz.
  • Terminal kullanılıyorsa, programınız bir satırsonu girildikten veya EOF'a ulaşıldıktan sonra sona ermelidir.
  • Programınız burada hem mobil hem de diğer ortamlarda belirtildiği gibi çalışmalıdır.

  • Programınız, girişin yalnızca yazdırılabilir karakterler (harfler, sayılar, semboller) ve muhtemelen bir sonlandırma satırını (geri boşluk, ok tuşları, silme vb.) İçereceğini varsayabilir.
  • Ctrl + C tuşlarına basıldığında programınız sonlanabilir.
  • Programınız bir pencere başlatırsa, bir pencereyi kapatarak programınızı sonlandırabilirsiniz.

puanlama

Bu , bu yüzden her dilde en kısa cevap kazanır!

Misal

İşte neye benzemesi gerektiğini gösteren bir örnek. Bunun bir mobil platformda kaydedildiğini, ancak bir masaüstü platformunda da çalışması gerektiğini unutmayın.

parola


Silinmiş yayınları görebilenler için İşte Sandbox yayını
musicman523

Videoda hangi klavyeyi kullanıyorsunuz?
Beta Çürümesi

1
Sonunda bildirim @BetaDecay zenui klavye devletler
ovs

@BetaDecay Aslında ZenUI klavye. Sadece merak ediyor musun, yoksa önemli mi?
musicman523

@ musicman523 Sadece merak ediyorum :)
Beta Çürümesi

Yanıtlar:


4

HTML + JavaScript, 20 + 105 = 125 bayt

<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)

kHarf girişi ile harf girişi arasındaki gecikme *bir saniyedir.

JavaScript oninput, Biçimlendirilmiş

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

Test Parçacığı

>Daha iyi uyumluluk için bitiş braketi ( ) eklendi .

<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)>


Yine de sona ermiyor gibi görünüyor!
officialaimm

1
@officialaimm Zorluk, yalnızca terminal uygulamalarının bunları sonlandırmak için bir yolu olması gerektiğini belirtir.
Justin Mariner

Ah, aptal bana. Üzgünüm.
officialaimm

3

Python 3 , 186 224 bayt

Yalnızca pencerelerde çalışır.

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)

Eski sürüm (186 bayt): Uyku, tuşa basıldığı hızdan bağımsız olarak zorunluydu.

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
Bunun tüm kriterleri tam olarak karşıladığını düşünmüyorum Özellikle 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.söyleniyor, Windows'u çalıştırmadığım için test edemiyorum, bu yüzden bana bildirin! Bu zorlukları referans olarak bulabilirsiniz
musicman523

Ben k yerine c sadece grafik (ki benim kod yerine) varsayılır. Ayrıca k'ın depolanan değerini c ile değiştirmek mi istediniz?
officialaimm

1
Hayır, olması gereken bu. Gecikme süreniz 0,6 saniyedir - birbirlerinden .1 saniye içinde iki harf yazdığımda ne olur? Hala 1.2 saniye uyuyacak mısın? Yine, üzgünüm bunu kendim test edemiyorum - kodunuzu çalıştıran bir video göndermeye değer olabilir!
musicman523

Değiştirilmiş. Yeni sürüm, önceki karakterin zamanı bitmeden bile yeni karakterin atılmasını sağlar.
officialaimm

3

Python 2 , 133 bayt

@Officialaimm cevabına göre .

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

Woah, 90 bayt daha az !!! Oy kullanacaktım ama günlük sınırım ulaştı. Kontrol etmek için bir yolu var mı (sadece benim pc python 3 var)? Btw hiçbir net ekran görmüyorum, nasıl yönetilir?
officialaimm

@officialaimm \rbaskıda
Felipe Nardi Batista

1
Sınıfıma geldiğimde bir py3 varyantı göndereceğim
Felipe Nardi Batista

1
@officialaimm bu çalışması gerekir, ben linux atm, bu yüzden test edemem
Felipe Nardi Batista

Kontrol ettim, çalışıyor. (y)
officialaimm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.