Đọc mật khẩu: trên di động!


13

Nhờ thử thách gần đây của MD XF, giờ đây chúng tôi có thể đọc mật khẩu bằng nhiều ngôn ngữ khác nhau! Vấn đề là, bây giờ chúng ta cần chuyển các ứng dụng của mình sang thiết bị di động và chúng nhập mật khẩu hơi khác một chút.

Thử thách

  • Đọc một chuỗi từ bàn phím.
  • Mỗi khi một ký tự kđược nhập, hiển thị nó trong một khoảng thời gian ngắn.
  • Sau khi khoảng thời gian đã trôi qua HOẶC người dùng đã nhập một ký tự khác, thay thế kbằng một số ký tự c.

Quy tắc

  • cphải là hằng số; nó phải là cùng một nhân vật
  • c có thể là bất kỳ ký tự hiển thị nào (nghĩa là nó không thể là dòng mới, dấu cách, tab hoặc không thể in được).
  • ckhông thể dựa trên bất kỳ đầu vào nào k; cphải được xác định / hằng trước khi kđọc đầu tiên .
  • c phải giống nhau mỗi khi chương trình được chạy.
  • ccó thể là một trong những giá trị được đưa ra như kthể tình cờ, miễn là tuân theo tất cả các quy tắc khác.

  • Bạn phải in ktrong thời gian thực. Ngay khi người dùng nhập mới k, bạn phải hiển thị nó ngay lập tức.
  • kphải được hiển thị cho người dùng cuối trước khi được thay đổi thành c; khoảng thời gian không được nhỏ hơn 0,5 giây.
  • knên được thay thế ctrong một thời gian hợp lý; khoảng thời gian không quá 5 giây.
  • Ngay sau khi một ký tự mới được nhập, cho dù khoảng thời gian đã hết hay chưa, bạn nên thay thế kbằng cvà sử dụng khóa đã nhập như mới kngay lập tức.

  • Có thể chấp nhận xóa và vẽ lại màn hình mỗi khi bạn cần thay đổi một ký tự.
  • Bạn có thể sử dụng bất kỳ phương pháp nhập và xuất hợp lý nào miễn là tuân theo tất cả các quy tắc khác.
  • Bạn có thể giả định rằng số lượng ký tự được nhập không bao giờ dài hơn chiều rộng cửa sổ đầu cuối / đồ họa.
  • Nếu sử dụng thiết bị đầu cuối, chương trình của bạn sẽ chấm dứt sau khi nhập dòng mới hoặc đạt EOF.
  • Chương trình của bạn sẽ hoạt động như được phác thảo ở đây trên cả môi trường di động và các môi trường khác.

  • Chương trình của bạn có thể cho rằng đầu vào sẽ chỉ chứa các ký tự có thể in (chữ cái, số, ký hiệu) và có thể là một dòng mới kết thúc (không có phím lùi, phím mũi tên, xóa, v.v.).
  • Chương trình của bạn có thể chấm dứt khi nhấn Ctrl + C.
  • Bạn có thể chấm dứt chương trình của mình bằng cách đóng một cửa sổ, nếu chương trình của bạn khởi chạy một chương trình.

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng!

Thí dụ

Dưới đây là một ví dụ về những gì nó sẽ trông như thế nào. Lưu ý điều này được ghi lại trên nền tảng di động, nhưng cũng nên hoạt động trên nền tảng máy tính để bàn.

mật khẩu


Đối với những người có thể xem các bài đăng đã bị xóa, đây là bài Sandbox
musicman523

Bàn phím nào bạn đang sử dụng trong video?
Beta Decay

1
@BetaDecay thông báo ở cuối trạng thái bàn phím
zenui

@BetaDecay Thực tế nó là bàn phím ZenUI. Chỉ tò mò, hoặc nó có vấn đề?
sĩ523

@ musicman523 Chỉ tò mò thôi :)
Beta Decay

Câu trả lời:


4

HTML + JavaScript, 20 + 105 = 125 byte

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

Độ trễ giữa mục nhập kvà thư trở thành *là một giây.

JavaScript oninput, được định dạng

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

Kiểm tra đoạn trích

Đã thêm dấu ngoặc kết thúc ( >) để tương thích tốt hơn.

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


Dường như không chấm dứt!
chính thức

1
@officialaimm Thách thức nêu rõ rằng chỉ các ứng dụng đầu cuối cần có cách để chấm dứt chúng.
Justin Mariner

A, ngớ ngẩn với tôi. Lấy làm tiếc.
chính thức tuyên bố

3

Python 3 , 186 224 byte

Chỉ hoạt động trong cửa sổ.

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)

Phiên bản cũ hơn (186 byte): Giấc ngủ là bắt buộc bất kể tốc độ nhấn phím nào.

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
Tôi không nghĩ rằng điều này hoàn toàn đáp ứng tất cả các tiêu chí, cụ thể như 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.đã nói, tôi không thể kiểm tra nó vì tôi không chạy Windows, vì vậy hãy cho tôi biết! Bạn có thể thấy thử thách liên quan này hữu ích như một tài liệu tham khảo
musicman523

Tôi giả sử thay thế từ k thành c chỉ là đồ họa (được hoàn thành trong mã của tôi). Bạn cũng có nghĩa là thay đổi giá trị được lưu trữ của k với c?
chính thức tuyên bố

1
Không, đó là tất cả nên có. Thời gian trễ của bạn là .6 giây - điều gì xảy ra nếu tôi nhập hai chữ cái trong vòng .1 giây của nhau? Bạn vẫn sẽ ngủ trong 1,2 giây chứ? Một lần nữa, xin lỗi tôi không thể tự kiểm tra điều này - có thể đáng để đăng video bạn đang chạy mã của mình!
sĩ523

Sửa đổi. Phiên bản mới hơn đảm bảo nhân vật mới có thể được ném ngay cả trước khi thời gian của nhân vật trước chưa hết.
chính thức tuyên bố

3

Python 2 , 133 byte

Dựa trên câu trả lời @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

Ái chà, 90 byte ít hơn !!! Sẽ bỏ phiếu nhưng giới hạn hàng ngày của tôi đã đạt được. Có cách nào để kiểm tra không (tôi chỉ có python 3 trên pc)? Btw Tôi không thấy màn hình rõ ràng, nó được quản lý như thế nào?
chính thức tuyên bố

@officialaimm bởi \rbản in
Felipe Nardi Batista

1
Tôi sẽ đăng một biến thể py3 khi tôi đến lớp học của mình
Felipe Nardi Batista

1
@officialaimm cái này sẽ hoạt động, tôi đang dùng linux atm, vì vậy tôi không thể kiểm tra nó
Felipe Nardi Batista

Tôi đã kiểm tra nó, nó hoạt động. (y)
chính thức tuyên bố
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.