시도하는 모든 조합을 보여주는 암호를 해독하는 무차별 프로그램을 기억하십니까? 보다 정확하게는, 한 시점에서, n 개의 첫 번째 문자가 고정되고 (성공적으로 추측 됨) 나머지 문자에 대해 가능한 모든 문자가 테스트됩니다. 영화 나 멋진 인터페이스를 좋아하는 사람들이 작성한 일부 소프트웨어를 보셨을 것입니다.
실망스럽게도 죄송하지만 비밀번호를 해독하는 프로그램은 작성하지 않으며 멋진 출력을 재현하는 프로그램 만 작성합니다.
도전
인쇄 가능한 ASCII 문자를 포함하지만 줄 바꿈이없는 문자열 (아스키 코드 32-126 또는 정규식과 일치 ^[ -~]{2,}$
)이있는 경우 다음 규칙에 따라 출력을 인쇄하십시오.
- 시간
t=n seconds
에n
인쇄 된n
첫 문자는 입력 문자열 의 첫 문자입니다. - 애프터
n
고정 자하면 (유니 코드 범위에서 균일 한 의사 - 무작위로 선택된 캐릭터 형성된 임의의 문자를 추가한다으로
~
초기 하나의 길이 스트링을 형성하기 위해 (코드 126-32)). - 적어도 매 20 줄 이상을 출력해야합니다 . 모든
n
문자는 첫 번째 문자는 같지만 임의의 끝은 다릅니다.
아마 당신이해야 할 일이 아직 명확하지 않을 수도 있으므로 예제를 살펴 보겠습니다.
예
더 읽기 쉽게하기 위해 최소 20 개 대신 매초마다 5 개의 다른 행만 인쇄합니다.
입력을 고려하십시오 abcde
.
첫 번째 초 동안 유효한 출력은 다음과 같습니다 (완전히 임의 임).
dGuT4
S!jkN
"gQ>[
TU3!
*fAjV
그런 다음 t=1
모든 다음 문자열 a
의 첫 번째 문자는 (입력의 첫 번째 문자)입니다.
a);jD
aHv^p
aqw5*
a|.?:
a{gbK
이제 t=2
처음 두 문자는 다음과 ab
같습니다.
abTJ"
ab\ e
ab3T#
abYWS
ab"#<
이제 t=3
첫 세 문자는 다음과 abc
같습니다.
abcvW
abc3G
abc(g
abc{@
abc@4
이제 t=4
첫 네 문자는 다음과 abcd
같습니다.
abcdD
abcdv
abcdj
abcd$
abcd6
마지막으로 t=5
입력을 한 번만 인쇄합니다.
abcde
몇 가지 정밀도
- 언어 정확도를 초 단위로 너무 신경 쓰지 않아야합니다 (즉, 알고리즘이 정확하지만 시스템 / 언어의 정밀도가 부족하면 괜찮습니다).
- 첫 번째 초는 1 초보다 짧을 수 있습니다 (즉, 1 초 동안 프로그램을 시작하면 첫 번째 초는 현재 초가 끝날 때까지 남은 시간 일 수 있음). 다르게 말하면, 출력을 인쇄하기 위해 새로운 초가 시작될 때까지 기다릴 필요가 없습니다.
- 초당 20 줄 이상 :보다 자연스러운 방법은 초당 1 회 (또는 시간 초과 등) 특별한 동작을 갖는 무한 루프이므로 초당 수천 줄이 될 것입니다. ). 그러나 다른 아이디어가 있다면 초당 최소 20 줄을 인쇄하는 한 자유롭게 사용하십시오.
- 입력은 항상 2 자 이상입니다.
- 도움이 되더라도 입력 길이가 30자를 넘지 않을 것이라고 생각할 수 있습니다. (그러나 그것이 더 긴 것들을 위해 작동한다면, 최선입니다)
- 입력 형식은 사용자 언어에서 문자열을 가장 자연스럽게 표현해야합니다.
- 후행 줄 바꿈을 인쇄 할 수 있습니다.
코드 예
여전히 정확히 무엇을해야하는지 이해하지 못하는 경우 Linux 터미널에서 다음 코드를 실행하여 확인할 수 있습니다.
perl -F -aplE 'map{$t=time;print$s,map{chr 32+rand 94}@F until$t-time;$s.=shift@F}@F' <<< "Cracking in progress\!"
승리 기준
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 승리합니다!
샌드 박스의 제안과 개선에 대해 Laikoni와 Flp.Tkc에게 감사합니다.
\n
은 완벽하게 허용됩니다. with 버전 \r
은 더 좋아 보이기 때문에 여기에 있지만 필요하지는 않습니다 \r
.