모바일에서 암호를 읽으십시오!


13

MD XF의 최근 과제 덕분에 이제 다양한 언어로 암호를 읽을 수 있습니다! 문제는 이제 응용 프로그램을 모바일 장치로 이식해야하며 암호 입력이 조금 다르게되는 것입니다.

도전

  • 키보드에서 문자열을 읽습니다.
  • 문자 k를 입력 할 때마다 짧은 시간 간격으로 표시하십시오.
  • 시간 간격이지나거나 사용자가 다른 문자를 입력 한 후 k일부 문자로 바꾸십시오 c.

규칙

  • c일정해야합니다. 같은 문자 여야합니다.
  • c 눈에 띄는 문자가 될 수 있습니다 (예 : 줄 바꿈, 공백, 탭 또는 인쇄 할 수 없음).
  • c입력 한 내용을 기반으로 할 수 없습니다 k. c첫 번째 k를 읽기 전에 정의 / 일정해야합니다 .
  • c 프로그램이 실행될 때마다 동일해야합니다.
  • ck다른 모든 규칙을 따르는 한 우연히 제공된 값 중 하나 일 수 있습니다 .

  • k실시간으로 인쇄해야합니다 . 사용자가 new를 입력하자마자 k즉시 표시해야합니다.
  • k로 변경하기 전에 최종 사용자에게 표시되어야합니다 c. 시간 간격은 0.5 초 이상이어야한다.
  • kc적절한 시간 내에 교체해야합니다 . 시간 간격은 5 초를 초과하지 않아야한다.
  • 즉시 새로운 문자가 입력 될 때, 시간 간격이 만료 여부, 당신은 교체해야 kc새 등의 입력 키를 사용하여 k즉시.

  • 캐릭터를 변경할 때마다 화면을 지우고 다시 그리는 것이 허용됩니다.
  • 다른 모든 규칙을 따르는 한 합리적인 입력 및 출력 방법을 사용할 수 있습니다.
  • 입력 한 문자 수가 터미널 / 그래픽 창 너비보다 길지 않다고 가정 할 수 있습니다.
  • 터미널을 사용하는 경우 줄 바꿈을 입력하거나 EOF에 도달 한 후 프로그램을 종료해야합니다.
  • 귀하의 프로그램은 모바일 환경과 다른 환경 모두에서 설명 된대로 작동해야합니다.

  • 프로그램은 입력에 인쇄 가능한 문자 (문자, 숫자, 기호) 및 종료 줄 바꿈 (백 스페이스, 화살표 키, 삭제 등) 만 포함한다고 가정 할 수 있습니다.
  • Ctrl + C를 누르면 프로그램이 종료 될 수 있습니다.
  • 프로그램이 시작되면 창을 닫아 프로그램을 종료 할 수 있습니다.

채점

이것은 이므로 각 언어에서 가장 짧은 답변이 이깁니다!

다음은 그 모습에 대한 예입니다. 이것은 모바일 플랫폼에서 기록되지만 데스크탑 플랫폼에서도 작동해야합니다.

암호


삭제 된 게시물을 볼 수있는 사용자를 위한 Sandbox 게시물
musicman523

비디오에서 어떤 키보드를 사용하고 있습니까?
Beta Decay

1
@BetaDecay 종료 상태에서 알림 zenui 키보드
ovs

@BetaDecay 사실 ZenUI 키보드입니다. 그냥 궁금하거나 중요합니까?
musicman523

@ musicman523 Just curious :)
Beta Decay

답변:


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편지와 편지 사이의 지연 *은 1 초입니다.

oninput형식화 된 JavaScript

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

파이썬 3 , 186224 바이트

창에서만 작동합니다.

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

k에서 c 로의 대체는 그래픽 일뿐이라고 생각합니다 (내 코드에서 수행됨). k의 저장된 값을 c로 변경한다는 의미입니까?
officialaimm

1
아니, 그게 다야. 시간 지연은 0.6 초입니다. 서로 0.1 초 이내에 두 글자를 입력하면 어떻게됩니까? 여전히 1.2 초 동안 잠을 자십니까? 다시 한 번, 이것을 직접 테스트 할 수는 없습니다. 코드를 실행하는 비디오를 게시하는 것이 좋습니다!
musicman523

수정되었습니다. 최신 버전은 이전 캐릭터의 시간이 끝나기 전에도 새로운 캐릭터를 던질 수 있도록합니다.
officialaimm

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 바이트 줄어든 !!! 투표하지만 내 일일 한도에 도달했습니다. 그것을 확인하는 방법이 있습니까 (내 PC에는 Python 3 만 있습니다)? Btw 명확한 화면이 표시되지 않습니다. 어떻게 관리됩니까?
officialaimm

에 의해 @officialaimm \r인쇄에
펠리페 나르디 바티스타

1
교실에 도착하면 py3 변형을 게시하겠습니다
Felipe Nardi Batista

1
@officialaimm 내가 그것을 테스트 할 수 없습니다 그래서, 리눅스 기압에있어, 작동합니다
펠리페 나르디 바티스타

확인했는데 작동합니다. (y)
officialaimm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.