폭탄을 해제하십시오!


214

당신은 비밀 요원의 조수로서 당신의 기술 지식을 위해 고용되어 좋은 사람이 그의 일을 끝내고 세상을 구할 수있게합니다.

이것은 월급이 높고 전 세계에 대한 감사로 은퇴하기 전의 마지막 임무입니다. 그러나 사악한 천재의 거대 대량 BOMB를 해제하기 전에 (사악한 천재는 재귀 약어를 좋아하는 똑똑한 엉덩이라고 생각합니다). 어쨌든 당신과 당신의 친구는 Evil Genius 비밀 기지의 핵심에 있으며 대륙을 완전히 파괴 할 수있는 BOMB를 해제 할 준비가되어 있습니다. 이전 미션에서 놀랍게도 "PASSWORD_01"이라는 해제 코드를 얻었습니다. 키보드를 BOMB에 연결하지만 갈 준비가되면 Evil Genius의 헨치 맨이 총알을 발사합니다. 불행히도이 글 머리 기호 중 하나가 키보드에 영향을줍니다. "그 머리를 산만하게하면서 일을 끝내라!" 당신의 친구를 말하고 그의 총을 발사하기 시작합니다.

명세서

  1. 문자열을 원하는 방식으로 출력하는 프로그램을 작성하십시오 PASSWORD_01(대문자).
  2. 키보드가 총알에 맞았으므로 다음 키만 사용할 수 있습니다.

    1 2 3 4 5

    Q W E R T

    A S D F G

    < > Z X C

    Ctrl Shift Tab Space

    은 Using Shift키를 키보드는 이러한 문자를 사용할 수 있습니다 :

    ! " · $ %

  3. 키보드 및 화면 (예 : 마우스) 이외의 다른 하드웨어 나 컴퓨터에 암호가 기록 된 파일이 없습니다.

  4. 인터넷에 연결되어 있지 않습니다.

  5. 글 머리 기호가 들어 오기 전에 인터프리터 쉘 / 소스 편집기가 열려 있다고 가정 할 수 있습니다. 슬프게도 키보드를 누르기 전에는 아무것도 작성하지 않았습니다.

  6. 가상 키보드가 없습니다. 실제로 BOMB에는 표준 허점 을 사용하려고하면 폭발하는 TOO_FUNNY 감지기가 있습니다.

  7. 친구가 비밀 기지에서 탈출하기를 곧 기다리고 있기 때문에 가능한 가장 작은 코드를 작성해야합니다 (따라서 !).

카운트 다운이 시작 되었기 때문에 행운을 빕니다!

도움말 모드 : 또한 KEY(키보드에서 원하는 하나의 키만 있지만 Shift + 키 또는 다른 조합은 아님) 기적적으로도 살아 남았습니다. 예 : 당신은 사용할 수 있습니다 =, 또는 0/...이 추가 키의 문자 중 하나가 될 수 없다 PASSWORD_01(그래서 당신은 추가 할 수 없습니다 P또는 O). 답에 해당 키의 이름을 지정하십시오. 키를 몇 번 사용하는지에 관계없이이 키를 사용하기 위해 10 자 처벌을 받습니다.


67
키보드의 레이아웃을 DVORAK으로 변경할 수 있습니까?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

42
적어도 enter 키를 얻습니까?
OUurous

72
공백, 여기 큰 기회가 있습니다!
german_guy

43
암호를 입력 할 수없는 이유는 무엇 stewardesses입니까?
codebreaker 2016 년

24
농담 답변 : 저는 스파이입니다. 시계에 숨겨진 백업 키보드로 전환합니다.
Nzall

답변:



136

bash, vim 및 dc (343)

나는 Evil Genius가 구성 한 bash 프롬프트에 앉아 있으며 물론 VISUAL=vim기본 환경에 있습니다. edit-and-execute-command( C-x C-e) bash에 기본 bash 바인딩을 사용하면 $VISUAL종료 ( ZZ)시 버퍼 내용이 실행됩니다 . 다음 순서로 입력합니다 (참고 : kbd-mode는 일반 모드 및 제어 순서로 실행되는 명령입니다).

  1. C-xC-e
  2. a고양이 <<< 45 C-c4C-aaa

    이제 vim 버퍼에 포함 cat<<<49a됩니다. 계속 ...

  3. 45C-c3C-aa

  4. 54C-c41C-aa
  5. 55C-c13C-aa

    이제 vim 버퍼에 포함 cat<<<49a48a95a68a됩니다. 계속 ...

  6. 51C-c31C-aa

  7. 55C-c24C-aa
  8. 44C-c43C-aa
  9. 42C-c41C-aa
  10. 42C-c41C-aa
  11. 54C-c11C-aa
  12. 55 C-c25C-aaa> s

    이제 vim 버퍼는 cat<<<49a48a95a68a82a79a87a83a83a65a80a>s

    삽입 모드에서 빠져 나와 저장 후 종료

  13. C-cZZ

    s파일이 이제 포함 dc스택에 원하는 문자열을 생성 스크립트를, 지금 우리는 인쇄 명령을 추가해야합니다.

  14. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

    위의 명령을 9 번 반복하십시오.

  15. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  16. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  17. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  18. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  19. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  20. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  21. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  22. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  23. C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ

  24. C-xC-ea고양이 《F》 s

    dc 스크립트를 실행하십시오.

  25. C-xC-eadc sC-cZZ

산출:

PASSWORD_01

s파일 내용 :

49a48a95a68a82a79a87a83a83a65a80a
P
P
P
P
P
P
P
P
P
P
f

4
나는 성격 vim때문에 대본 을 만들려고 생각했습니다 Ctrl. 그것과 짝을 이루는 좋은 생각 dc! 또한, 훌륭한 해결책 :)
nneonneo

2
모든 <kbd> </ kbd> 태그를 작성하는 데 얼마나 걸립니까?
justhalf 2016 년

15
@ justhalf : 나는 이것을 <Leader>k경계 로 vim에 작성 map <Leader>k i<kbd></kbd>^[F>a했으므로 보이는 것처럼 나쁘지 않았습니다 :-).
Thor

18
이제 토르 요원은 자신의 도구를 철저히 알고 있습니다. 은퇴 할 자격이 있습니다.
justhalf 2016 년

67

루비, 57 + 10 ( *) = 67

$*<<4*4*5<<214%135<<44%25*5<<1%1
$><<"%cASSW%cRD%c%d1"%$*

이 답변이 사용 *하고 %(Fixnum이라는으로하고 0) ASCII의 누락 문자의 값을 구축하고로 밀어 $*( ARGV). 이 배열은 인쇄 된 정확한 암호 생성하는 형식 문자열과 병용 $><<( $>표준 출력이다).

루비, 62 + 10 ( .) = 72, 줄 바꿈 없음

$>.<< "%cASSW%cRD%c%d1".% %w%%<<311%231<<214%135<<321%113<<1%1

여기서는 배열이 빈 배열 리터럴 ( %w%%)로 빌드된다는 점을 제외하고는 위 버전과 거의 동일한 원리 입니다. .원하는 연산자 우선 순위를 얻으려면 약간의 조정 이 필요합니다.


13
"이것은 높은 급여와 전 세계의 감사로 은퇴하기 전의 마지막 임무입니다." 축하합니다, 모두 감사합니다 :)
Timtech

4
Perl이 Ruby의 가장 큰 영감 중 하나라는 궁극적 증거.
Pierre Arlaud

11
줄 바꿈을 어떻게 했습니까?
Cephalopod

4
@Arian nneonneo가 REPL에 입력 한 후 Python 코드를 실행하는 것과 같은 방식으로 ... 줄 바꿈없이 버전을 추가합니다.
Ventero

사악한 천재에 루비가 설치되어 있습니까?
Mhmd

36

공백 (148 + 10 = 158)

Enter 여기서 키를 사용해야합니다.

SS+1010000L // Push code of P
TLSS        // Output character
SS+1000001L // Push code of A
TLSS        // Output character
SS+1010011L // Push code of S
SLS         // Duplicate top stack
TLSS
TLSS
SS+1010111L // Push code of W
TLSS
SS+1001111L // Push code of O
TLSS
SS+1010010L // Push code of R
TLSS
SS+1000100L // Push code of D
TLSS
SS+1011111L // Push code of _
TLSS
SS+0L       // Push 0
TLST        // Output number
SS+1L       // Push 1
TLST        // Output number
LLL         // End program

내 표기법의 설명 :

  • S, +, 0공백이다.
  • T, 1탭입니다.
  • L 줄 바꿈입니다.
  • // 댓글을 시작합니다.

각 줄은 공백 언어로 된 명령입니다.

데모


1
아 아아아 ... 난 그냥 그 일을하고 있었어 :(
Teun Pronk

1
나도 그래도 나는 누군가가 더 빠를 것이라는 것을 알고 포기했다
german_guy

'L'을 사용할 수 없다고 생각 했습니까?
500-내부 서버 오류

@ 500-InternalServerError : 실제로 L줄 바꿈 문자를 나타냅니다. 실제 코드에 대한 데모를 확인하십시오. 내가 게시 한 것은 읽을 수있는 버전입니다.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 2016 년

아, 이제 알겠다
500-내부 서버 오류

25

파이썬 ( 2200 395 + 10)

exec"""exec"exec"+"%ca"%34+"%c52+53"""+"%c55+55"%44+"%c34"%44+"%c45+35"%44+"%c"%44+"""34%%cexec"%"""+"%c"%54+"""1+"%c"%34+"%%5%c+"%5"""+"%c"%55+"""+"%c"%34+"%c"""+"%c"%112+"""r%%c%%ct%%c%%cASSW"+"%c%%34+"%34+"%c%%cRD"%34+"%c%%"""+"%c"%55+""""%34+"%c+"%5"""+"%c"%55+"""+"%c%%c"%34+"%c%%"%34+"%c5+"%5"""+"%c"%55+"""+"%c"%34+"%c1%%c"+"%c%%4"%34+"%c+"%5"""+"%c"%54+"""+"%c"%34+"%c%%a"+"%c%%34"%34"""

+숫자 키패드 (또는 특정 키 레이아웃)에서 얻을 수있는 문자 (비용 +10)가 필요했습니다 .

예, 입력하는 동안 BOMB가 중단되었을 수 있습니다.

기본 접근 방식은 execand 를 사용하여 더 큰 문자 집합을 구성하는 것입니다 "%c"%(number). exec서로 안에 네 개의 중첩이 있습니다. 점차, 내 숫자 세트는

  1. 12345
  2. 1234567 (6 = ASCII 54, 7 = ASCII 55)
  3. 123456789 (8 = ASCII 56, 9 = ASCII 57)
  4. 0x0123456789abcdef

마지막 반복에서 모든 문자를 표현할 수 있습니다 (가장 안쪽 버전은 실제로 모든 프로그램을 실행할 수 있도록).

프로그램의 약 50 %는 인용 부호 ( "%c"%34큰 따옴표)입니다. exec명령문 의 중첩 된 특성은 인용 부호 문자를 적극적으로 요구 하기 때문 입니다.


숫자 키패드에서 "+"를 사용하면 키보드 언어와 무관합니다.
celtschk 2016 년

@celtschk : 좋은 지적입니다! 이 부분을 편집하겠습니다.
nneonneo

1
중첩 된 exec로 숫자 세트를 구성하는 대신 산술을 사용하여 숫자를 얻을 수 없습니까? 전의. exec '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'%(112,114,51+54,55+55,1+115,32,4+35,25+55,11+54,31+52,31+52,32+55,24+55,31+51,13+55,41+54,3+45,4+45,4+35)
Kevin

2
두 쪽을 모두 얻을 수 없기 때문입니다. (나는 이것을 고려했다!)
nneonneo 2016 년

또한 파이썬에는 %보다 더 강력하게 묶는 연산자가 많지 않습니다. **는 하나이지만 대부분의 용어를 구성하는 데 상당히 쓸모없는 경향이 있습니다.
nneonneo 2016 년

25

불면증 39 35 31 29

이 언어는 단일 ASCII 문자로 명령을 인코딩하는 언어를 찾고있을 때 나타납니다. 이 언어는 실제로 문자의 십진 ASCII 코드에서 작동하므로 키보드의 절반이 파괴 되어도 여전히 유연합니다.

메모리 사용을 줄이고 검색 공간을 늘린 후 가능한 29 자까지 추가로 드롭하십시오.

FdFzt%dF<rGdt>tt Gtreeet t%4s

허용되는 모든 문자 세트에서 조정 프로그램을 실행하기로 결정하고 솔루션을 31 자로 줄였습니다.

FdFGt dtreeC>tt FFdx<Fdtr ztq4s

이 솔루션을 검색하기 위해 프로그램을 사용했습니다. 내 프로그램에서 반환 한 많은 솔루션 중 하나이며 모두 같은 크기입니다.

Fddx>"eCeezdC>CefCdddzCzzfCqred>r4s

손으로 만든 오래된 버전. 나는 이것을하기 위해 아침까지 머무르는 것을 기억한다.

Fddx>"eCeezdC>Cef>dx"dCezeeedeCrqeeC%4s

다음은 테스트를위한 불면증 해석기 입니다.


3
"아침까지 머무르기"+1은 프로그래밍 언어 선택과 일치합니다.
justhalf December

20

일부 창 관리자의 Vim + PHP

44 개의 스트로크로 65 개의 키를 사용하여 10 점의 벌점을 =받습니다.

aEACE<Alt+Tab>z=5<Alt+Tab>$xxxxaASSWRD<Alt+Tab>z=1<Alt+Tab>
$a$aA<Alt+Tab>==wxx$r1<^X>a1

고장 :

  • Alt+TabEscVim 또는이 터미널 에뮬레이터와 같이 작동하는 것으로 보입니다 . 새로운 것을 가르쳐 주셔서 감사합니다!
  • aEACE<Alt+Tab>: 추가 모드로 들어가서 "EACE"를 삽입하십시오. 출구.
  • z=5<Alt+Tab>: 맞춤법 교정을 수행합니다. 5,“PEACE”를 선택하십시오. 출구. ( 여기서 Esc작동하는 것 같습니다 Enter!)
  • $xxxxaASSWRD<Alt+Tab>: 줄의 끝으로 가십시오. 4자를 삭제하고을 추가 ASSWRD하여 결과를 얻습니다 PASSWRD. 일반 모드로 돌아갑니다. (아니, 4x작동하지 않습니다.)
  • z=1<Alt+Tab>: 아마도 이것에 대한 첫 번째 수정 PASSWORD 것입니다. 그것을 선택하십시오.
  • $a$aA<Alt+Tab>: 줄 끝으로 이동하여을 추가하십시오 $aA. 일반 모드로 돌아갑니다.
  • ==: camelCase $aA를로 변경하여 PHP의이 행을 멋지게 형식화하십시오 $a_a. 또한 커서를 줄의 시작 부분으로 다시 이동합니다.
  • wxx: 한마디 앞으로 나아가십시오. 커서가 이제 이전 $입니다. 더 - 두 개의 문자를 삭제 $하고을 a만들기 위해 - PASSWORD_a.
  • $r1: 줄 끝으로 이동하여 현재 문자 (즉 a)를 1로 바꿉니다 PASSWORD_1.
  • ^X: 커서 아래의 정수를 감소시켜 결과를 얻습니다 PASSWORD_0.
  • a1마지막으로, 추가 1에 대해 PASSWORD_01!

나는 ==명령을 복제 할 수 없으며 vi 설정 (debian 7, v7.3.547)에서 큰 들여 쓰기 모드를 토글합니다.
Cengiz Can

11

파이썬 2, 75889 바이트

추가 캐릭터가 없습니다!

불행히도 코드는 매우 길다. 대신 프로그램을 생성하는 코드는 다음과 같습니다.

x=[2**n for n in xrange(16)]
y=-5
print('exec"""exec'+x[7]*'%'+'c""'+x[6]*'%'+'cr'+x[-2]*'%'+'c'+x[-1]*'%'+'ct'+x[8]*'%'+'c'+x[-4]*'%'+'cASSW'+x[-5]*'%'+'cRD'+x[-3]*'%'+'c'+x[0]*'%'+'s1'+x[10]*'%'+'c '+x[9]*'%'+'c""'+x[y]*'%'+x[1]*'%'+'s'+x[y]*'%'+x[2]*'%'+'s'+x[y]*'%'+x[3]*'%'+'s'+x[y]*'%'+x[4]*'%'+'s'+x[y]*'%'+x[5]*'%'+'s"""'+'%`1>>1`%`2531>>5`%`321>>2`%`1521>>4`%`211>>1`%`221>>1`%112%34%34%34%34')

온라인으로 사용해보십시오

(코드를 실행하려면 바깥 쪽을 print로 변경하십시오 exec. 또는 프로그램을 생성 한 다음 붙여 넣어 실행하십시오. 또는 아래 링크 된 pastebin에서 복사하십시오.)

설명:

목표는 다음을 실행하는 것입니다.

print"PASSWORD_01"

()+문자를 사용하지 않으려면 서로 연결된 여러 문자열 형식 작업을 사용해야합니다. 즉, 각 단계를 추가 하면 이전 단계마다 필요한 문자 수가 두 배가됩니다% .

print"%cASSW%%cRD%%%%c%%%%%%%%c1"%80%79%95%48

필요한 숫자 중 일부를 만들 수없고 만들 수도 없기 때문에 이것으로는 충분하지 않습니다 print. 따라서 ing에 exec대한 추상화 수준 print과 형식화 할 수없는 ASCII 코드 포인트의 수준을 추가합니다. 다음은 본질적으로 내 대답이지만 각 문자열을 %단일 문자열로 줄였습니다 ( %s%s%s%s%s정확한 표현이 아니며 %각 문자 앞에 필요한 리터럴을 설명하지 못합니다 ).

exec"""exec%c""%cr%c%ct%c%cASSW%cRD%c%s1%c %c""%s%s%s%s%s""" % `1>>1`%`2531>>5`%`321>>2`%`1521>>4`%`211>>1`%`221>>1`%112%34%34%34%34

첫 번째 단계 : 가장 바깥 쪽 exec:

exec""" ... ASSW%cRD ... %s%s%s%s%s""" % `1>>1` % `2531>>5` % `321>>2` % `1521>>4` % `211>>1` % `221>>1`
  1. 1>>1: 0의 사용 0PASSWORD_01
  2. 2531>>5: 79내부 exec에서 작성하는 데 사용O
  3. 321>>2: 80내부 exec에서 작성하는 데 사용P
  4. 1521>>4: 95내부 exec에서 작성하는 데 사용_
  5. 211>>1: 105내부 exec에서 작성하는 데 사용i
  6. 221>>1: 110내부 exec에서 작성하는 데 사용n

두 번째 단계 : 내부 준비 exec

위의 내부 exec는 다음과 같습니다.

exec%c""%cr%c%ct%c%cASSWORD%c01%c %c""%79%80%95%105%110

당신이 그것을 얻지 못한다는 것을 제외하고. 여전히 단순화를 통해 다음을 얻을 수 있습니다.

exec%c""%cr%c%ct%c%cASSWORD%c01%c %c""798095105110

리터럴 %이 포함되어야합니다. 그래서 기본적으로 나는 모든 형식화 후에 %s리터럴로 끝나기 전에 각각 을 %묶어야했습니다. 2**11그들의. 타임즈 5

나머지 외부 exec문자열 형식 작업은 %112%34%34%34%34입니다. 을 112위한 p, 나머지는 인용 부호이다. 그것들을 적용하면 결과는 다음과 같습니다.

exec"""pr%c%ct"%cASSW%cRD%c01" """%79%80%95%105%110

그러나 실제로는 더 많은 것이 %있습니다. 이것입니다 :

exec"""pr%%%%%%%%c%%%%%%%%%%%%%%%%ct"%%cASSW%cRD%%%%c01" """%79%80%95%105%110

마지막 단계는 간단히 실행하여 필요한 출력을 얻는 것입니다.


전체 코드는 여기 : http://pastebin.com/rSFs6DiH


7
감동적인! BOMB가 폭발하기 전에 직접 입력 했습니까? 실수하지 않고 (백 스페이스 키 없음)? 당신은 각하 또는 부인, 연금 수급 자격이 있습니다. ; D
DLosc

10

배쉬 + Vim (56)

차입 Ctrl-XCtrl-E토르의 솔루션에서 bash는 트릭을, 여기에 내가 bash는 + 정력에 어떻게 할 것입니다 :

C-XC-E 기본 편집기를 시작합니다 (보통 vim)

a 삽입 모드를 시작합니다

.space ASSW

C-Vx4f 삽입물 O

RD

C-Vx5f 삽입물 _

1

C-3에 해당합니다 escape(단지 정력에 있지만, 어디 터미널에서)

C-X1방금 입력 한 i 에서 1을 빼기

a 모드를 다시 삽입

1 C-3

버퍼 내용은 이제 . ASSWORD_01

<< 들여 쓰기되지 않은 줄 (줄이 들여 쓰기되지 않았으므로 no-op) 및 커서를 첫 번째 열로 이동

a

C-X 단어 완성 시작

C-V 전 명령으로 완료

C-V 9 번 더 항목 선택 Print

C-3 정상 모드로 돌아 가기

XXXxx 삭제 rint 

< < 1 열로 돌아 가기

s삭제 ., 삽입 모드 시작

e c C-X C-V전 명령 완료 다시 한 번, 방금 입력 한 항목으로 echo인해 항목이 이미 선택되었습니다.ec

space C-3 지금 콘텐츠를 버퍼링 echo PASSWORD_01

Z Z 버퍼 저장, vim 닫기, bash는 파일 내용을 실행합니다. echo PASSWORD_01

그건 그렇고 : C-3많은 유용한 형제가 있습니다 : C-Jis Enter, C-Iis Tab, C-His Backspace, C-2is C-@(즉, null 바이트). emacs 사용자에게는 Escape다른 키가 뒤에 오는 키와 그 키가 같다는 것을 아는 것이 좋습니다 Alt. 따라서, 없이도 다음 EscapeAlt같이 Meta-x를 입력 할 수 있습니다.C-3x


9

펄, (31 + 10 / 41 + 10 / 64 + 10)

( ^키 사용, 3 가지 방법)

exec"easswsrdcqw"^"5    <  <AF"                   # exec "PASSWORD_01"

  • 시스템 명령으로 실행하면 "출력"자격이있는 경우에 유효합니다.

exec"QQZSqeasswsrdcqw"^"422<Q5    <  <AF"         # exec "echo PASSWORD_01"

exec"EQAXqwQqQZQxqeasswsrdcqwxqq"^q!5434QZ4S534$S5    <  <AF$SS! 
                  # exec "perl -e\"die\\\"PASSWORD_01\\\"\""
  • 시스템을 통해 Perl을 실행할 수 있으면 유효합니다. (여기서 실행) <-이 print대신에 사용die

이 스크립트는 Perl의 비트 별 문자열 XOR 연산자 ^를 사용하여 두 문자열의 문자 비트에서 XOR을 수행합니다. 이를 통해 PASSWORD_01에 누락 된 문자를 다시 만들고 시스템 명령에 대한 문자를 만들 수 있습니다.

규칙이 얼마나 관대했는지에 따라 세 가지 변형을 만들었습니다. 변형 2와 3이 실제로 Ideone에서 단어를 출력하기 때문에 솔루션이 유효하다고 가정합니다. 아무도 읽지 않을 것이라고 생각했기 때문에 여기에 있던 작은 이야기를 제거했지만 궁금한 점이 있으면 편집에서 읽을 수 있습니다!


4

우 코드 (300)

QwerTaSdfGzxCqwertAsDfgZxCQwerTasDfgZxcQweRtaSDfgZxCqwertAsDFgZXcQWeRtaSdFGzxcQwERTasdfGzxc
QwErtAsdFgzxcqWeRtaSdFGzxcQweRtaSDfGZxCqWErTAsDFgZXCqWerTasDfgZxcQweRtaSdfGzxCQwErTAsDFgZXC
qWertAsDfgzxcQwERtASdFGzXcqWeRTasdFGzXcQWeRtAsDfgzxcQwERtASdFGzXCqWerTaSDfgzXcQWErTaSdFgZxc
QwertaSdFgzXcQWertASdFgZXCq

쉬운. (줄 바꿈은 선택 사항이며 코드를 더 읽기 쉽게하기 위해 여기에 있습니다) 코드 생성기 사용 :

o=lambda b,c:"".join(i.upper()if j else i for i,j in zip(__import__('itertools').cycle(c),map(int,"".join((3-len(i))*'0'+i for i in(bin('><[]-+.,'.index(i))[2:]for i in b)))))

덜 바보 같은 인코딩의 동일한 코드 :

EeeeEeEeeEeeEeeeeeEeEeeEeEEeeeEeeEeeEeeEeeEeeEEeeEeEeeeeeEeEEeEEeEEeEeeEeEEeeeEeEEEeeeeEeee
EeEeeEeeEeeeeeEeEeeEeEEeeeEeeEeeEEeEEeEeEEeEEeEEeEEEeEeeEeeEeeEeeEeeEeeEeeEeeEEeEeEEeEEeEEE
eEeeeEeEeeeeeEeEEeEEeEEeEeeEeEEeeeEEeEeEEeEeEeEeeeeeEeEEeEEeEEeEEeEeeEeEEeeeEeEEEeEeEeEeEee
EeeeeeEeEeeEeEEeeeEEeEeEEEe


3

ferNANDo, 179 + 10 = 189 바이트

2 1
1 2 1 2 1 1 1 1
1 2 1 1 1 1 1 2
1 2 1 2 1 1 2 2
1 2 1 2 1 1 2 2
1 2 1 2 1 2 2 2
1 2 1 1 2 2 2 2
1 2 1 2 1 1 2 1
1 2 1 1 1 2 1 1
1 2 1 2 2 2 2 2
1 1 2 2 1 1 1 1
1 1 2 2 1 1 1 2

온라인으로 사용해보십시오!

Enter익숙한. 사용 0하고 1코드를 더 읽기 쉽게 만들 수는 있지만 사용할 수는 없습니다 0.


나는 입력이 허용된다고 생각한다.
Conor O'Brien

2
OP는 Enter가 허용되었다고 말하지 않았습니다.
acrolith

3

JS-Forth, 103 바이트

문자열은 스택에서 문자 배열로 반환됩니다.

12544 1 3 << >> 24 1 << 1521 4 >> 34 1 << 41 1 << 2531 5 >> 351 2 >> 332 2 >> 32 2 >> 131 1 >> 321 2 >>

온라인 사용해보기 - 댓글 버전


설명:

먼저 허용 된 단어 목록을 찾았습니다 . 본질적으로 내가 사용할 수있는 유일한 것은 다음과 같습니다.

  • 12345 숫자 상수
  • << 왼쪽으로 이동
  • >> 오른쪽으로 이동
  • s>f 스택을 띄우려면 단일 푸시
  • f>d 플로트 스택에서 이중 팝
  • fsqrt 플로트 스택의 제곱근

그래서 숫자 상수, 비트 시프트를 사용하여 제곱근을 계산 할 수있는 (다음 >>대체합니다 drop에 의해 이동 0을 제거하기 위해 0) :

s>f fsqrt f>d >>

다행히도, 제곱근을 사용하는 것보다 짧은 생성에 필요한 모든 상수에 대해 가능한 비트 시프트가 발견되었습니다. 대부분의 경우 각 숫자를 제곱으로 인쇄하거나 숫자가 포함 된 경우 2의 더 큰 제곱을 인쇄하여 검색했습니다 6-0. 그런 다음 정밀도 손실을 사용 f>d하여 더 많은 가능성을 찾을 수 있음을 깨달았습니다 . (숫자를 더할 수는 있지만 여전히 동일한 정수 제곱근을 얻습니다.) 조금 후에, 나는 비트 시프 팅을 사용하여 일부 상수를 찾았습니다. >>비트 시프트가 클수록 "마법 번호"에 더 추가 할 수 있으며 여전히 동일한 결과를 얻을 수 있습니다. 그래서 필요한 결과를 얻는 데 사용할 수있는 가장 작은 비트 시프트를 발견했습니다. 때로는 숫자조차도 사용할 수 있고 <<, 확률은 사용해야했습니다 >>.

주석 처리 된 코드 ( \코멘트 시작) :

\ 49
12544 1 3 << >>

\ 48
24 1 <<

\ 95
1521 4 >>

\ 68
34 1 <<

\ 82
41 1 <<

\ 79
2531 5 >>

\ 87
351 2 >>

\ 83 (x2)
332 2 >> 332 2 >>

\ 65
131 1 >>

\ 80
321 2 >>

gForth 단어가 없습니다 <<>>. 대신은이 lshiftrshift내가 사용하지 수있는, .


3

십진수 , 190180 + 10 = 190 바이트

12055D12025D41D301212055D12010D41D301212055D12025D41D12003D41D30130112004D41D301212055D12024D41D30112003D41D301212055D12013D41D301212055D12040D41D301212045D12003D41D30112001D41D301

온라인으로 사용해보십시오! Decimal은 소수와 문자 만 사용하는 난해한 언어입니다 D. 그러나 거의 모든 명령이을 사용하기 때문에 +10 페널티가 필요했습니다 0.

다행히 인쇄에 필요한 모든 명령 PASSWORD_01에는 숫자가 필요하지 않습니다 6.

  • 12...D -캐릭터를 밀어
  • 2 -가치를 터 뜨리다
  • 41D -상단 두 스택 값 팝, 곱셈 및 푸시 결과
  • 301 -인쇄 DSI (기본 스택 색인)

1에서 5까지의 숫자 만 사용하는 문자 값을 반복해서 누른 다음 추가하면에서 각 문자의 문자 값을 만들 수 있습니다 PASSWORD_01.

Ungolfed 및 댓글 :

12055D     ; push char 55 to stack
12025D     ; push char 25 to stack
41D        ; pop [DSI] and [DSI-1], add and push result
3012       ; print from stack to output, pop
12055D     ; push char 55 to stack
12010D     ; push char 10 to stack
41D        ; pop top two stack values, add and push result
3012       ; print from stack to output, pop
12055D     ; push char 55 to stack
12025D     ; push char 25 to stack
41D        ; pop x2, add, push
12003D     ; push char 3 to stack
41D        ; pop x2, add, push
301301     ; print, print
12004D     ; push char 4 to stack
41D        ; pop x2, add, push
3012       ; print, pop
12055D     ; push char 55 to stack
12024D     ; push char 24 to stack
41D        ; pop x2, add, push
301        ; print
12003D     ; push char 4 to stack
41D        ; pop x2, add, push
3012       ; print, pop
12055D     ; push char 55 to stack
12013D     ; push char 13 to stack
41D        ; pop x2, add, push
3012       ; print, pop
12055D     ; push char 55 to stack
12040D     ; push char 40 to stack
41D        ; pop x2, add, push
3012       ; print, pop
12045D     ; push char 45 to stack
12003D     ; push char 3 to stack
41D        ; pop x2, add, push
301        ; print
12001D     ; push char 1 to stack
41D        ; pop x2, add, push
301        ; print

3

공백 , 점수 : 111 (101 바이트 + 10 Enter)

[S S T  T   T   T   T   T   N
_Push_-31_1][S S T  T   S S S S S N
_Push_-32_0][S S S T    T   T   T   N
_Push_15__][S S T   T   T   S S N
_Push_-12_D][S S S T    S N
_Push_2_R][S S T    T   N
_Push_-1_O][S S S T T   T   N
_Push_7_W][S S S T  T   N
_Push_3_S][S N
S _Duplicate_3_S][S S T T   T   T   T   N
_Push_-15_A][S S S N
_Push_0_P][N
S S N
_Create_Label_LOOP][S S S T S T S S S S N
_Push_80][T S S S _Add][T   N
S S _Output_as_character][N
S N
N
_Jump_to_Label_LOOP]

문자 S(공백), T(탭) 및 N(줄 바꾸기)가 강조 표시로만 추가되었습니다.
[..._some_action]설명으로 만 추가되었습니다.

온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).

의사 코드의 설명 :

이 솔루션은 이 공백 팁을 활용 하여 기존 공백 응답 보다 짧습니다 ( @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 는 골프로 제안했을 때 별도의 응답으로 게시하도록 요청했습니다) .

Push the code-points for the characters of "10_DROWSSAP" minus constant 80 to the stack
Start LOOP:
  Add 80 to the current code-point
  Pop and output it as character
  Go to the next iteration of LOOP

상수 80이 Java 프로그램 으로 생성되었으며 , 이전의 일부 공백 응답에 대해 작성하고 사용했습니다.


2

Stax , 91 + 10 바이트

"W"EEEd$"$"1 !$Re]"$""ASSW"R"$""a"EEE$"$"a$Re]R"$""RD"R"$""a"EEEd$"$""5"Re]R"$"1 !$R"$""1"R

온라인으로 사용해보십시오!

]싱글 톤을 만드는 데 사용 합니다.

설명

normal을 사용하지 않고 "P"어떻게 생성되고 어떻게 "ASSW"추가 되는지 봅시다 +.

"W"                             Push "W", or [87]
   E                            Convert to a scalar, 87
    E                           Convert to an array of digits, [8,7]
     E                          Push 8 on the stack, then push 7.
      d                         Pop the 7 and discard it.

                                Start making components of regex substitution
       $                        Pop 8, push "8"
        "$"                     Push "$"
           1 !                  Push 0. The space is necessary because normally one doesn't do 1! to obtain 0
              $                 Pop 0, push "0"
               R                Do regex substitution 's/$/0/g' on the string "8"

                                Basically doing "8"+"0" without using +
                e               Pop "80", push 80
                 ]              Singleton. Pop 80, push [80], or "P"
                  "$""ASSW"R    Use the same trick again to append "ASSW" to "P"

나머지는 동일한 트릭을 반복합니다.

"a"EEE$"$"a$Re]R의 숫자를 스왑 "a"또는 [97]만드는 [79]또는 "O"및 문자열에 추가합니다.

"$""RD"R appends "RD".

"$""a"EEEd$"$""5"Re]R사용하여 "a"수득 다시 "9"하고는 폐기 "7"후 결합 "9"리터럴이 함께 "5"형성 [95]하거나 "_", 상기 문자열에 추가한다.

"$"1 !$R 논리 값이 1이 아닌 0을 얻어 문자열에 추가합니다.

"$""1"R마지막을 추가 "1"하고 우리는 끝났습니다.

암시 적 출력.


1
O_O ... 이것은 영리합니다.
재귀

감사합니다. 그래도 더 짧아 질 수 있다고 생각합니다 (아마 다른 키를 선택하여?).
Weijun Zhou

2

brainfuck , 400 + 10 ( +) = 410 바이트

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<.>>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++.<<++++++++++++++.+++.>>>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<++++++++.>>>>++++++++++++++++++++++++++++++++++++++++++++++++.+.<

온라인으로 사용해보십시오!


2

MS-DOS .COM 8086 머신 코드 (72 바이트)

시간은 소중합니다. 그래서 컴파일러 나 인터프리터와 딜리 데이를 할 시간이 없습니다! 선택한 텍스트 편집기를 열고 다음을 입력하십시오 ( \tTAB로 교체 ).

451D<1DAQX1D11D3AQX4c1DDQX4<SZ!Gq\tGq3WqEEEEESX5\t\t2!<<<<<<<<<eASSWzRD<11$

16 진 덤프 :

00000000 : 34 35 31 44 3C 31 44 41 51 58 31 44 31 31 44 33 : 451D<1DAQX1D11D3
00000010 : 41 51 58 34 63 31 44 44 51 58 34 3C 53 5A 21 47 : AQX4c1DDQX4<SZ!G
00000020 : 71 09 47 71 33 57 71 45 45 45 45 45 53 58 35 09 : q.Gq3WqEEEEESX5.
00000030 : 09 32 21 3C 3C 3C 3C 3C 3C 3C 3C 3C 65 41 53 53 : .2!<<<<<<<<<eASS
00000040 : 57 7A 52 44 3C 31 31 24                         : WzRD<11$

.COM 파일로 저장하고 실행하여 일을 저장하십시오.

이 코드는 레지스터의 특정 시작 값을 가정 하므로 일부 DOS 버전에서는 작동하지 않을 수 있습니다. IBM을 사지 않으면 누군가가 해고 당할 수 있기를 바랍니다 .

약간 더 이해하기 쉬운 표현 :

org 0x100
bits 16
cpu 8086

; Assumes the following start values for registers (as per http://www.fysnet.net/yourhelp.htm):
;
;   AX = 0
;   BX = 0
;   CX = 0x00ff
;   SI = 0x100

; Change e => P and z => O
    xor al, 0x35
    xor [si+0x3c], ax
    xor [si+0x41], ax

; Fix int 0x21 and ret
    push cx
    pop ax              ; AX = 0xFF
    xor [si+0x31], ax
    xor [si+0x33], ax

; Change <1 => _0
    inc cx              ; CX = 0x100
    push cx
    pop ax              ; AX = 0x100
    xor al, 0x63        ; AX = 0x163
    xor [si+0x44], ax

; We're using DOS interrupt 0x21, function 0x09 to output the final string.

; AH must equal 0x09 to select the function.
; DS:DX must point to the $-terminated string we want to output.

; Get DX to the correct value (0x13c)
    push cx
    pop ax              ; AX = 0x100
    xor al, 0x3c        ; AX = 0x13c
    push bx
    pop dx              ; DX = 0

; We use part of the Program Segment Prefix to temporarily store the value,
; since MOVing or PUSHing AX is impossible.
; The part in question is the second File Control Block, which we will not use anyway.
    and [bx+0x71], ax
    or [bx+0x71], ax
    xor dx, [bx+0x71]   ; DX = 0x13c

; NOPs to get int 0x21 and ret on high enough addresses
    inc bp
    inc bp
    inc bp
    inc bp
    inc bp

; Set AH to the correct value. AL is set too, but is ignored by the DOS interrupt.
    push bx
    pop ax              ; AX = 0
    xor ax, 0x0909      ; AX = 0x0909

; What will become instructions int 0x21 and ret
    db 0x32, 0x21
    db 0x3c

; Padding to have the password at an address we can refer to.
    times 60-($-$$) db '<'

; Password
    pw  db  "eASSWzRD<11$"

1

Befunge-98, 43 +10 = 53 바이트

"1qA·DR·WSSA·g"%,$,,,,$"s"%,,,$"c"%,%,,q

온라인으로 사용해보십시오!

10 바이트 페널티는 ,키 사용에 대한 것입니다 (이것이 왜 Shift+ 로 달성 할 수 없었는지 확실하지 <않지만 규칙 인 것 같습니다). 소스는 기술적으로 40 자이지만 ·UTF-8 인코딩으로 인해 3자가 추가로 3 바이트를 제공합니다.


1

05AB1E , 87 86 바이트

"."A1.$R24.$AT<.$R15>.$A21<.$R5.$.V.VD21s.V.V15>X.V"ASSW"15X.V"RD"122D<s2X.V.VTRTX.V.V

온라인으로 사용해보십시오!

아마도 가장 긴 05AB1E 코드일까요?

불행히도이 언어는 "Q"<"decrement Q to get P" 와 같은 것을 지원하지 않습니다

내 추가 키는 V입니다.

-1 바이트를위한 @Kevin Cruijssen에게 감사합니다.

암호:

Build the string ".b". This is the code to turn integers to upper case letters:
"."             push "."
A               push the lower case alphabet
1.$             drop the first letter of that
R               reverse the remaining string 
24.$            drop the first 24 letters of that, so only "b" remains
AT<.$R15>.$     do the same trick for "j"
A21<.$R5.$      and for "u" 
.V              run "u" as code to turn "j" to "J"
.V              run "J" as code, to join ".", "b" to ".b"

Save that string for later use:
D               duplicate
21              push 21
s               switch the top two elements [".b", 21, ".b"]
.V              run ".b" as code, to get "U"
.V              run "U" as code, to save ".b" in X

Build password string:
15>X.V          push the 16th letter of the alphabet ("P")
"ASSW"          push "ASSW"
15X.V           push "O"
"RD"            push "RD"
122D<s2X.V      push 121, 122, "B"
.V              run that as code to push "_"
TR              push 01
TX.V            push "J"
.V              run that as code, to join everything to the desired string 

비교 : "PASSWORD_01"을 인쇄하는 가장 짧은 방법은 6 바이트입니다.

온라인으로 사용해보십시오!


" 어쩌면 가장 긴 05AB1E 코드는 지금? "아니, 내이 하나의 거의 6 배 크다 . ; p 좋은 대답. 허용되는 ASCII 문자는 일정량 만 사용하기가 어렵습니다. 이 도전에는 많은 편리한 내장이 허용되지 않습니다. :(
Kevin Cruijssen

1
사용하여 -1 바이트 TR대신 1<1위한 01출력 부.
Kevin Cruijssen

1

이맥스, 26 바이트 (아마도 + 10 = 36 또는 − 2 = 24)

이 답변에 필요한 추가 키는 Esc입니다. 이것은 여전히 ​​키보드의 절반에 있지만 여전히 어떤 이유로 질문에 언급되지 않았으므로 점수에 불이익을 줄 수 있습니다. ( EscAlt이맥스에서 동일 것은, Alt이다 또한 키보드의 손상 절반하지만 질문에 언급되지 않지만 열린보다는 내가 내 여분의 열쇠로 사용할 수 없습니다 도청하는이 2 바이트를 저장합니다. 하지만 인코딩 시간 Esc이 짧기 때문 입니다.)

프로그램 자체 (쉼표는 Emacs가 입력을 승인하기 위해 사용하는 유선 형식의 바이트 간 경계를 구분 함) :

W, S, Esc, $, D, A, Ctrl- T, S, R, W, D, Esc, $, 5, Ctrl- Q, 5, f, Ctrl- X, r, Ctrl- Space, 1, Ctrl- X, r, g, 1, Ctrl-T

바이트 수를 증명하기 위해 이것을 원시 바이트로 인코딩 :

00000000: 5753 1b24 4441 1453 5257 441b 2435 1135  WS.$DA.SRWD.$5.5
00000010: 6618 7200 3118 7267 3114                 f.r.1.rg1.

(참고 : 일부 세부 정보는 Emacs 구성 방법에 따라 다를 수 있습니다.이 답변에는 quoted-char-radix 를 16으로 설정하고 Emacs가 영국 영어 시스템에서 기본적으로 맞춤법 검사 사전을 사용해야합니다. 합리적인 구성 설정과 비슷하지만 Emacs 사본이 다르게 구성 될 수 있습니다. 다른 사전은 여전히 ​​26 바이트 프로그램을 제공 할 수 있지만 원하는 수정 사항을 승인하려면 약간 다른 오타를 사용해야합니다. 총알이없는 키.)

설명

에디터 전쟁에 어떤 영향을 미칠지 잘 모르겠지만,이 질문에 대해서는 이맥스가 적어도 vim을이기는 것 같습니다. Emacs는 바이트 단위로 측정 된 편집기 골프에 매우 적합합니다. 여러 키를 누르지 만 단일 바이트 만 사용하는 코드에 크게 의존하기 때문입니다 (따라서 Emacs 프로그램은 종종 해당 Vim 프로그램보다 입력 속도가 느리지 만 디스크는 더 짧습니다). 또한, 가장 중요한 Emacs 명령의 대부분은 키보드의 왼쪽 하단에 있으며에 가깝습니다 Ctrl. 이와 같은 질문에 매우 유용합니다.

"글 머리 기호가 들어 오기 전에 인터프리터 쉘 / 소스 편집기가 열려 있다고 가정 할 수 있습니다. 슬프게도 키보드를 누르기 전에 아무 것도 쓰지 않았습니다."라고 Emacs에서 빈 파일이 열려 있다고 가정합니다. 비밀번호를 입력해야합니다. (나중에 파일을 저장하고 Emacs를 종료해야 할 수도 있지만 다른 사람들의 답변에 포함되지 않은 바이트 수는 여기에 포함되지 않습니다. 왼쪽의 왼쪽을 사용하여 완전히 수행 할 수 있습니다. 키보드, Ctrl- X,, Ctrl- S, Ctrl- X, Ctrl- C.)

한 번에 명령 (또는 유사한 명령 블록)을 가져옵니다.

  • W, S: WS문서를 입력하십시오 .
  • Esc, $: 맞춤법 검사기를 호출합니다. WS실제 단어는 아니지만 비슷한 두 글자로 된 단어를 많이 찾습니다.
  • D: 맞춤법 검사기를 사용하여 올바른 WSPS. ( 여기서 이맥스 와 동일하게) Alt-를 사용하여 맞춤법 검사기를 호출하면 한 단어 만 검사 하므로이 작업을 수행하면 비활성화됩니다.$EscAlt
  • A: 삽입 A제공 PSA.
  • Ctrl- T: 앞의 두 문자를 바꾸고을 제공 PAS합니다.
  • S, R, W, D: 유형 SRWD, 기부 PASSRWD.
  • Esc, $, 5: 우리는 우리의 철자 수정 원하기 때문에 우리는 다시 맞춤법 검사기를 호출 PASSRWDPASSWORD. PASSWRD가장 근접한 실제 단어를 받아들이는 열쇠는 0우리가 누를 수 없기 때문에 첫 번째 시도에서 원하는 단어를 추측 할 수는 없습니다. 결과적으로, 약간 더 극단적 인 철자 PASSRWD가 틀리면 우리가 원하는 단어를 5 번 위치로 밀어 넣을 수 있습니다.
  • Ctrl- Q, 5, f: 문자 코드 U + 5 층, 즉와 문자를 삽입합니다 _. 이제 문서가 읽 힙니다 PASSWORD_(또는 다음 명령을 입력하기 시작하면 다른 16 진수를 입력 할 경우 밑줄이 나타나지 않습니다).
  • Ctrl- X, r, Ctrl- Space, 1: 어떤 이상한 이유로 레지스터 (1)에서 (파일의 시작 부분을 기준으로) 현재의 커서 위치를 저장,이 커서 위치에, 1 인덱스 지금 (지금까지 9 개 문자를 작성하는 데)입니다 10.
  • Ctrl- X, r, g, 1: 문서에 레지스터 1의 내용을 복사합니다. 이제 읽습니다 PASSWORD_10.
  • Ctrl- T: 커서 앞에 두 문자를 바꿉니다. 우리는 이제 PASSWORD_01질문이 요구하는 것처럼 있습니다.

우리가 사용할 수 있다면 Alt, "inpell spellchecker"명령을 a4철자가 아닌 단일 바이트로 인코딩 할 수 있다 1b 24. 두 번 나타나므로 2 바이트를 절약 할 수 있습니다. (대부분의 현대 단말기 사용 1b 24에 대한 인코딩으로 Alt- $UTF-8과의 충돌을 피하기 위해,하지만 a4인코딩은 구성 옵션 때로는 가능한 시간에 시간에서 발생합니다.)

가능한 바이트 절약에는 아마도 골퍼 철자가 틀리면 수정 될 수 있습니다. PSASWRD입력하는 짧은 바이트가 될 것입니다,하지만 불행히도, 맞춤법 검사기는 이삭 줍기 할 수있는 것 같지 않습니다 PASSWORD그 중, 그래서 PASSRWD내가 지금까지 발견 한 가장 좋은 방법입니다. 등록에 기반을 둔 접근 방식 10은 엄청나게 다루기 힘들지만, Emacs의 어느 곳에서나 숫자를 생성하는 방법은 많지 않으며, 0그렇지 않으면 고통스런 성격입니다. (적어도 몇 가지 놀랍게도 유용한 우연의 일치가있었습니다. 커서가 위치에서 끝나고 필요할 때 바로 10포함 0합니다.) Emacs가 중복 g레지스터 작업을 수락하여 레지스터의 내용을 문서에 삽입 한다는 사실 더 직관적 인 것 외에도i.)

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