Przeczytaj hasło: na telefonie komórkowym!

13

Dzięki najnowszemu wyzwaniu MD XF możemy teraz czytać hasła w wielu różnych językach! Problem polega na tym, że teraz musimy przenieść nasze aplikacje na urządzenia mobilne, a one wprowadzają hasła nieco inaczej.

Wyzwanie

  • Przeczytaj ciąg z klawiatury.
  • Za każdym razem, gdy kwprowadzany jest znak , wyświetl go przez krótki czas.
  • Po upływie czasu LUB użytkownik wprowadził inny znak, zamień kgo na jakiś znak c.

Zasady

  • cmusi być stały; musi to być ta sama postać.
  • c może być dowolnym widocznym znakiem (tzn. nie może być znakiem nowej linii, spacją, tabulatorem ani drukiem).
  • cnie może być oparty na żadnym wprowadzonym danych k; cmusi być zdefiniowany / stały przed pierwszym kodczytem.
  • c musi być taki sam przy każdym uruchomieniu programu.
  • cmoże być jedną z wartości podanych jak kprzez przypadek, o ile wszystkie inne reguły są przestrzegane.

  • Musisz drukować kw czasie rzeczywistym. Jak tylko użytkownik wprowadzi nowy k, musisz go natychmiast wyświetlić.
  • kpowinien być widoczny dla użytkownika końcowego przed zmianą na c; odstęp czasu nie może być krótszy niż 0,5 sekundy.
  • kpowinien zostać zastąpiony przez cw rozsądnym terminie; przedział czasu nie może przekraczać 5 sekund.
  • Jak tylko nowa postać zostanie wprowadzony, czy przedział czasu upłynął, należy wymienić kze ci używać wprowadzony jako nowy klucz knatychmiast.

  • Dopuszczalne jest czyszczenie i przerysowywanie ekranu za każdym razem, gdy trzeba zmienić postać.
  • Możesz stosować dowolne rozsądne metody wprowadzania i wyświetlania, o ile przestrzegane są wszystkie inne reguły.
  • Możesz założyć, że liczba wprowadzonych znaków nigdy nie jest większa niż szerokość okna terminala / graficznego.
  • Jeśli używasz terminala, twój program powinien zakończyć się po wprowadzeniu nowej linii lub osiągnięciu EOF.
  • Twój program powinien działać tak, jak opisano tutaj, zarówno na urządzeniach mobilnych, jak i innych.

  • Twój program może założyć, że dane wejściowe będą zawierać tylko znaki do wydrukowania (litery, cyfry, symbole) i być może końcowy znak nowej linii (bez cofania, klawiszy strzałek, usuwania itp.).
  • Twój program może zakończyć się po naciśnięciu Ctrl + C.
  • Możesz zakończyć swój program, zamykając okno, jeśli Twój program je uruchomi.

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w każdym języku!

Przykład

Oto przykład tego, jak powinien on wyglądać. Uwaga: jest to rejestrowane na platformie mobilnej, ale powinno również działać na platformie stacjonarnej.

hasło

musicman523
źródło
Dla tych, którzy mogą zobaczyć usunięte posty, oto post Sandbox
musicman523,
Jakiej klawiatury używasz w filmie?
Beta Decay
1
@BetaDecay powiadomienie na końcu informuje o stanie klawiatury
zenui
@BetaDecay W rzeczywistości jest to klawiatura ZenUI. Po prostu ciekawy, czy to ma znaczenie?
musicman523,
@ musicman523 Po prostu ciekawy :)
Rozpad Beta

Odpowiedzi:

4

HTML + JavaScript, 20 + 105 = 125 bajtów

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

Opóźnienie między wprowadzeniem ka przekształceniem litery *wynosi jedną sekundę.

JavaScript oninput, sformatowany

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 Snippet

Dodano nawias kończący ( >) dla lepszej kompatybilności.

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

Justin Mariner
źródło
Wydaje się jednak, że to nie koniec!
officialaimm
1
@officialaimm Wyzwanie mówi, że tylko aplikacje terminalowe muszą mieć sposób na ich zakończenie.
Justin Mariner,
Ach, głupie ja. Przepraszam.
officialaimm
3

Python 3 , 186 224 bajtów

Działa tylko w systemie Windows.

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)

Starsza wersja (186 bajtów): sen był obowiązkowy bez względu na szybkość naciskania klawisza.

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
Officialaimm
źródło
1
Nie sądzę, że to całkiem spełnia wszystkie kryteria. 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.Mówiąc to, nie mogę tego przetestować, ponieważ nie uruchamiam systemu Windows, więc daj mi znać! To pokrewne wyzwanie może okazać się pomocne jako odniesienie
musicman523,
Zakładam, że zamiana z k na c była tylko graficzna (co jest spełnione w moim kodzie). Czy chodziło Ci również o zmianę zapisanej wartości k za pomocą c?
officialaimm
1
Nie, to wszystko, co powinno być. Twoje opóźnienie wynosi 0,6 sekundy - co się stanie, jeśli wpisam dwie litery w odstępie 0,1 sekundy od siebie? Czy nadal będziesz spał przez 1,2 sekundy? Ponownie przepraszam, że nie mogę tego samodzielnie przetestować - warto opublikować film wideo z uruchomionym kodem!
musicman523,
Zmodyfikowano Nowsza wersja zapewnia, że ​​nowa postać może zostać rzucona nawet przed upływem czasu poprzedniej postaci.
officialaimm
3

Python 2 , 133 bajty

Na podstawie odpowiedzi @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
Felipe Nardi Batista
źródło
Woah, 90 bajtów mniej !!! Głosowałbym, ale mój dzienny limit został osiągnięty. Czy istnieje sposób, aby to sprawdzić (mam tylko Python 3 na komputerze)? Btw Nie widzę żadnego wyraźnego ekranu, jak się nim zarządza?
officialaimm
@officialaimm przez the \rin the print
Felipe Nardi Batista
1
Po przejściu do mojej klasy opublikuję wariant py3
Felipe Nardi Batista,
1
@officialaimm to powinno działać, jestem na bankomacie Linux, więc nie mogę tego przetestować
Felipe Nardi Batista
Sprawdziłem to, działa. (y)
officialaimm