读取密码:在手机上!


13

由于MD XF最近面临的挑战,我们现在可以读取许多不同语言的密码!问题是,现在我们需要将我们的应用程序移植到移动设备,并且它们的密码输入有所不同。

挑战

  • 从键盘上读取一个字符串。
  • 每次k输入一个字符时,都要短时间显示。
  • 时间间隔过去之后,或者用户输入了另一个字符,请替换kc

规则

  • c必须恒定;它必须是相同的字符。
  • c 可以是任何可见字符(即不能是换行符,空格,制表符或不可打印的字符)。
  • c不能基于任何输入k; c必须在k读取第一个之前定义/常量。
  • c 每次运行程序时都必须相同。
  • ck只要遵守所有其他规则,它就可以是偶然给出的值之一。

  • 您必须k实时打印。用户输入新内容后k,您必须立即显示它。
  • k更改为最终用户之前应该对最终用户可见c;时间间隔不得少于0.5秒。
  • kc在合理时间内更换;时间间隔不得超过5秒。
  • 输入新字符后,无论时间间隔是否到期,都应替换kck立即使用输入的密钥作为新字符。

  • 每次需要更改字符时都可以清除并重画屏幕。
  • 您可以使用任何合理的输入和输出方法,只要遵循所有其他规则即可。
  • 您可以假设输入的字符数永远不会超过终端/图形窗口的宽度。
  • 如果使用终端,则应在输入换行符或到达EOF后终止程序。
  • 您的程序应在移动和其他环境中均按此处概述的功能运行。

  • 您的程序可能会假设输入将仅包含可打印字符(字母,数字,符号),并且可能包含终止换行符(无退格键,箭头键,删除键等)。
  • 当按Ctrl + C时,您的程序可能会终止。
  • 如果程序启动了一个窗口,则可以通过关闭窗口来终止程序。

计分

这是,因此每种语言中最短的答案将获胜!

这是一个外观示例。请注意,这是记录在移动平台上的,但也应在桌面平台上工作。

密码


对于那些可以看到已删除帖子的人,这里是沙盒帖子
musicman523 '17

您在视频中使用哪个键盘?
Beta Decay

1
@BetaDecay在末尾的通知状态zenui键盘
ovs

@BetaDecay实际上是ZenUI键盘。只是好奇,还是有关系吗?
musicman523

@ musicman523只是好奇:)
Beta Decay

Answers:


4

HTML + JavaScript,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和输入字母之间的延迟*为一秒。

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


似乎并没有终止!
Officialaimm

1
@officialaimm挑战指出,仅终端应用程序需要有一种方法来终止它们。
贾斯汀·马里纳

啊,愚蠢的我。抱歉。
Officialaimm

3

Python 3中186个 224字节

仅适用于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)

较早的版本(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.也就是说,由于我没有运行Windows,所以无法测试它,所以让我知道!您可能会发现此相关挑战很有帮助,可以作为参考
musicman523 '17

我假设从k到c的替换仅是图形的(在我的代码中已实现)。您是否还想用c更改k的存储值?
Officialaimm

1
不,这就是全部。您的时间延迟为0.6秒-如果我在彼此之间的0.1秒内输入两个字母会怎样?您还能睡1.2秒吗?再一次,对不起,我无法自己进行测试-值得发布一段有关您运行代码的视频!
musicman523

改性。较新的版本可确保即使在前一个角色的时间还没有耗尽之前也可以抛出新角色。
Officialaimm

3

Python 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个字节!!!可以投票,但已达到我的每日限额。有没有办法检查它(我的电脑上只有python 3)?顺便说一句,我看不到清晰的画面,如何管理?
Officialaimm

@officialaimm by \r印刷品
Felipe Nardi Batista

1
当我到达教室时,我将发布py3变体
Felipe Nardi Batista

1
@officialaimm 应该可以工作,我在linux atm上,所以我无法对其进行测试
Felipe Nardi Batista

我检查了一下,它正在工作。(y)
Officialaimm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.