ทำลายระเบิด!


214

คุณได้รับการว่าจ้างสำหรับความรู้ด้านเทคโนโลยีของคุณในฐานะเพื่อนสนิทของสายลับเพื่อให้แน่ใจว่าคนดีสามารถทำงานให้สำเร็จและโลกจะได้รับการช่วยเหลือ

นี่คือภารกิจสุดท้ายของคุณก่อนที่จะเกษียณพร้อมกับเงินเดือนสูงและความกตัญญูของทั้งโลก แต่ก่อนที่คุณจะต้องปลดอาวุธ Big Overly Massive BOMB ของ Evil Genius (ดูเหมือนว่าอัจฉริยะที่ชั่วร้ายนั้นเป็นสมาร์ทที่ชอบคำย่อแบบเรียกซ้ำ) อย่างไรก็ตามคุณและเพื่อนอยู่ในแกนกลางของ Secret Genius พร้อมที่จะปลดอาวุธ BOMB ที่สามารถกำจัดทวีป ในภารกิจก่อนหน้าของคุณคุณได้รับรหัสปลดอาวุธที่ความประหลาดใจของคุณเป็นเพียง "PASSWORD_01" คุณเชื่อมต่อแป้นพิมพ์ของคุณเข้ากับ BOMB แต่เมื่อคุณพร้อมที่จะไปแล้วลูกน้องชั่วร้ายของ Genius ก็เข้ามาพร้อมกับกระสุนปืน น่าเสียดายที่หนึ่งในสัญลักษณ์แสดงหัวข้อย่อยเหล่านี้กระทบกับแป้นพิมพ์ของคุณ "ทำงานให้เสร็จในขณะที่ฉันเบี่ยงเบนความสนใจ d * ckheads!" บอกเพื่อนของคุณแล้วเริ่มยิงปืนของเขา

SPECS

  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

    การใช้Shiftคีย์แป้นพิมพ์ของคุณช่วยให้คุณสามารถใช้อักขระเหล่านี้:

    ! " · $ %

  3. คุณไม่มีฮาร์ดแวร์อื่น ๆ นอกเหนือจากแป้นพิมพ์และหน้าจอ (เช่นเมาส์) หรือไฟล์ที่มีรหัสผ่านที่เขียนในคอมพิวเตอร์ของคุณ

  4. คุณไม่มีการเชื่อมต่ออินเทอร์เน็ต

  5. คุณสามารถสมมติว่าคุณเปิดล่ามเชลล์ / ซอร์สโค้ดไว้ก่อนที่กระสุนจะมาน่าเสียดายที่คุณยังไม่ได้เขียนอะไรเลยก่อนที่คีย์บอร์ดจะถูกโจมตี

  6. คุณไม่มีแป้นพิมพ์เสมือนจริง ในความเป็นจริงระเบิดมีเครื่องตรวจจับ TOO_FUNNY ที่จะทำให้มันระเบิดได้หากคุณพยายามที่จะใช้ช่องโหว่มาตรฐาน

  7. เนื่องจากเพื่อนของคุณกำลังรอให้คุณเสร็จในเร็ว ๆ นี้เพื่อหลบหนีออกจากฐานลับคุณจะต้องเขียนรหัสที่เล็กที่สุดเท่าที่จะเป็นไปได้ (ดังนั้นจึงเป็นรหัสที่และ !)

ขอให้โชคดีเพราะการนับถอยหลังเริ่มขึ้นแล้ว!

โหมดช่วยเหลือ:นอกจากนี้ยังมีKEY(มีเพียงคีย์เดียวที่คุณต้องการจากแป้นพิมพ์ แต่ไม่ใช่แป้น Shift + หรือชุดค่าผสมอื่น ๆ ) ก็รอดชีวิตมาได้อย่างน่าอัศจรรย์เช่นกัน เช่น: คุณสามารถใช้=หรือ0หรือ/... คีย์พิเศษนี้ไม่สามารถเป็นตัวอักษรใด ๆ ในPASSWORD_01(ดังนั้นคุณจึงไม่สามารถเพิ่มPหรือO) ตั้งชื่อคีย์นั้นในคำตอบของคุณ คุณมีการลงโทษ 10 ตัวสำหรับการใช้คีย์นี้โดยไม่คำนึงว่าคุณใช้คีย์กี่ครั้ง


67
ฉันสามารถเปลี่ยนเค้าโครงของแป้นพิมพ์เป็น DVORAK ได้หรือไม่
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

42
พวกเราได้รับรหัส Enter อย่างน้อย?
Οurous

72
ช่องว่างนี่เป็นโอกาสที่ยิ่งใหญ่ของคุณ!
german_guy

43
ทำไมรหัสผ่านstewardessesไม่ถูก?
codebreaker

24
โจ๊กคำตอบ: ฉันเป็นสายลับฉันสลับไปใช้แป้นพิมพ์สำรองที่ซ่อนอยู่ในนาฬิกา
Nzall

คำตอบ:



136

bash, vim และ dc (343)

ฉันกำลังนั่งอยู่ที่พรอมต์ทุบตีซึ่งกำหนดค่าโดย Evil Genius และแน่นอนว่าเขาVISUAL=vimอยู่ในสภาพแวดล้อมเริ่มต้น การใช้ bash binding เริ่มต้นสำหรับedit-and-execute-command( C-x C-e) bash จะเรียกใช้$VISUALและจะดำเนินการเนื้อหาบัฟเฟอร์ใน exit ( ZZ) ฉันพิมพ์ตามลำดับต่อไปนี้ (หมายเหตุ: kbd- โหมดเป็นคำสั่งที่ออกในโหมดปกติและลำดับการควบคุม):

  1. C-xC-e
  2. aแมว <<< 45C-c4C-aa

    cat<<<49aตอนนี้บัฟเฟอร์เป็นกลุ่มมี ต่อเนื่อง ...

  3. 45 C-c3C-aa

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

    cat<<<49a48a95a68aตอนนี้บัฟเฟอร์เป็นกลุ่มมี ต่อเนื่อง ...

  6. 51 C-c31C-aaa

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

    ตอนนี้บัฟเฟอร์เป็นกลุ่มมี 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

15
@ justhalf: ฉันเขียนมันเป็นกลุ่มที่มี<Leader>kขอบเขตเช่นนี้map <Leader>k i<kbd></kbd>^[F>aดังนั้นมันจึงไม่เลวเท่าที่ดู :-)
ธ อร์

18
ตอนนี้เห็นได้ชัดว่า Agent Thor รู้จักเครื่องมือของเขาอย่างละเอียด คุณสมควรได้รับการเกษียณอายุแล้วครับ!
justhalf

67

Ruby, 57 + 10 ( *) = 67

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

คำตอบนี้ใช้*และ%สร้างค่า ASCII ของอักขระที่หายไป (และ 0 เป็น Fixnum) และส่งไปยัง$*( ARGV) อาร์เรย์นี้จะใช้ร่วมกับสตริงรูปแบบเพื่อสร้างรหัสผ่านที่ถูกต้องซึ่งพิมพ์ด้วย$><<( $>is stdout)

Ruby, 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 เรียกใช้รหัส Python หลังจากพิมพ์ลงใน REPL ... ฉันจะเพิ่มเวอร์ชันโดยไม่ต้อง linebreak
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̷̰̀ĥ̷̳


25

Python ( 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) ซึ่งสามารถหาได้จาก numpad (หรือในบางรูปแบบคีย์)

ใช่ BOMB อาจหายไปในขณะที่ฉันกำลังพิมพ์

วิธีการขั้นพื้นฐานคือการสร้างชุดตัวอักษรที่เคยมีขนาดใหญ่โดยใช้และexec "%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

@celtschk: จุดดี! ฉันจะแก้ไขสิ่งต่อไปนี้
nneonneo

1
แทนที่จะสร้างชุดตัวเลขที่มี execs ซ้อนกันคุณจะไม่ได้รับตัวเลขโดยใช้เลขคณิตหรือไม่? อดีต 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
เพราะคุณไม่สามารถรับทั้งสอง parens (ฉันได้พิจารณาเรื่องนี้!)
nneonneo

นอกจากนี้ Python ไม่มีโอเปอเรเตอร์จำนวนมากที่ผูกอย่างยิ่งกว่า% ** เป็นหนึ่งเดียว แต่มันก็ค่อนข้างไร้ประโยชน์สำหรับการสร้างคำศัพท์ส่วนใหญ่
nneonneo

25

โรคนอนไม่หลับ 39 35 31 29 29

ภาษานี้เกิดขึ้นเมื่อฉันมองหาภาษาที่เข้ารหัสคำแนะนำด้วยอักขระ ASCII เดียว ภาษาใช้งานจริงกับรหัส ASCII ทศนิยมของตัวละครดังนั้นจึงยังมีความยืดหยุ่นค่อนข้างมากกับครึ่งหนึ่งของแป้นพิมพ์ถูกทำลาย

วางมันลงไปอีก 29 ตัวอักษรซึ่งเป็นไปได้หลังจากลดการใช้หน่วยความจำและเพิ่มพื้นที่การค้นหา:

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

ฉันตัดสินใจรันโปรแกรม tweaked ของฉันบนชุดอักขระที่ได้รับอนุญาตเต็มชุดและลดโซลูชันลงเหลือ 31 ตัวอักษร:

FdFGt dtreeC>tt FFdx<Fdtr ztq4s

ฉันใช้โปรแกรมเพื่อค้นหาวิธีแก้ปัญหานี้ มันเป็นหนึ่งในหลาย ๆ โซลูชันที่ส่งคืนโดยโปรแกรมของฉันทั้งหมดมีขนาดเท่ากัน

Fddx>"eCeezdC>CefCdddzCzzfCqred>r4s

รุ่นเก่าสร้างด้วยมือ ฉันจำได้ว่าอยู่จนถึงเช้าเพื่อทำสิ่งนี้

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

นี่คือล่ามนอนไม่หลับสำหรับการทดสอบ


3
+1 สำหรับ "พักจนถึงเช้า" จับคู่กับตัวเลือกภาษาโปรแกรมของคุณ
justhalf

20

Vim + PHP บนตัวจัดการหน้าต่างบางตัว

65 คีย์ใน 44 จังหวะมีโทษ 10 =จุดสำหรับการใช้

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

รายละเอียด:

  • Alt+Tabดูเหมือนว่าจะทำงานเหมือนกับEscVim หรืออาจจะด้วย terminal emulator นี้ ขอบคุณที่สอนสิ่งใหม่ให้ฉัน!
  • 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ไปที่จุดสิ้นสุดของเส้นและเพิ่ม กลับสู่โหมดปกติ
  • ==: รูปแบบสายของ PHP นี้อย่างเปลี่ยน CamelCase ไป$aA $a_aสิ่งนี้จะย้ายเคอร์เซอร์กลับไปที่จุดเริ่มต้นของบรรทัด
  • wxx: ไปข้างหน้าคำ; เคอร์เซอร์อยู่ก่อนหน้า$นี้ ลบตัวละครสองตัว - The $และa- PASSWORD_aเพื่อให้
  • $r1: ไปที่จุดสิ้นสุดของบรรทัดและแทนที่ตัวอักษรในปัจจุบัน (คือa) ที่มีผลในการ1PASSWORD_1
  • ^X: PASSWORD_0พร่องจำนวนเต็มภายใต้เคอร์เซอร์ที่เกิดใน
  • a1: ในที่สุดผนวก1สำหรับPASSWORD_01!

ฉันไม่สามารถทำซ้ำ==คำสั่งได้เพียงแค่สลับโหมดการเยื้องขนาดใหญ่ในการตั้งค่า vi ของฉัน (debian 7, v7.3.547)
Cengiz Can

11

Python 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ได้ ดังนั้นเราจึงเพิ่มระดับของ abstraction ด้วยexecสำหรับprinting และระดับสำหรับจุดโค้ด ASCII ที่เราไม่สามารถสร้างเพื่อจัดรูปแบบด้วย ต่อไปนี้เป็นหลักคำตอบของฉัน แต่กับสตริงของแต่ละ%ลดลงเป็นหนึ่งเดียว (ทราบว่า%s%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ใช้สำหรับ0ในPASSWORD_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

ขั้นตอนที่สอง: เตรียม Inner 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ของพวกเขา. คูณห้า

ส่วนที่เหลือของนอกสตริงการดำเนินงานรูปแบบเป็นexec สำหรับ, และคนอื่น ๆ ที่มีเครื่องหมายอัญประกาศ หลังจากใช้สิ่งเหล่านี้ผลลัพธ์จะเป็นดังนี้:%112%34%34%34%34112p

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 จะระเบิด? หากไม่ทำผิดพลาด (ไม่มีคีย์ Backspace) คุณครับหรือคุณนายสมควรได้รับเงินบำนาญของคุณ ; D
DLosc

10

bash + vim (56)

การยืมCtrl-XCtrl-Eเคล็ดลับทุบตีจากโซลูชันของ Thor นี่คือวิธีที่ฉันจะทำใน bash + vim:

C-XC-E เริ่มแก้ไขเริ่มต้น (มักเป็นกลุ่ม)

a เริ่มโหมดแทรก

.space ASSW

C-Vx4f แทรก O

RD

C-Vx5f แทรก _

1

C-3เทียบเท่ากับescape(ไม่ใช่แค่เป็นกลุ่ม แต่ที่ใดก็ได้ในเทอร์มินัล)

C-Xลบ 1 จาก1i ที่เพิ่งพิมพ์

a โหมดแทรกอีกครั้ง

1 C-3

เนื้อหาบัฟเฟอร์คือตอนนี้ . ASSWORD_01

<< บรรทัด unindent (no-op เนื่องจากไม่มีการเยื้องบรรทัด) และเลื่อนเคอร์เซอร์ไปที่คอลัมน์ที่ 1

a

C-X เริ่มการเติมคำให้สมบูรณ์

C-V สมบูรณ์ด้วยคำสั่ง ex

C-V อีก 9 ครั้งเลือกรายการ Print

C-3 กลับสู่โหมดปกติ

XXXxx ลบ rint 

< < กลับไปที่คอลัมน์ 1

sลบ.เริ่มโหมดแทรก

e c C-X C-Vคำสั่ง ex เสร็จสิ้นอีกครั้ง, รายการที่echoเลือกไว้เนื่องจากecฉันเพิ่งพิมพ์

space C-3 เนื้อหาบัฟเฟอร์ทันที echo PASSWORD_01

Z Z บันทึกบัฟเฟอร์ปิดเป็นกลุ่มทุบตีรันเนื้อหาของไฟล์เช่น echo PASSWORD_01

โดยวิธีการ: C-3มีพี่น้องที่มีประโยชน์มากมาย: C-Jis Enter, C-Iis Tab, C-His Backspace, C-2is C-@(คือ null-byte) และสำหรับผู้ใช้ emac เรายินดีที่ได้ทราบว่าEscapeตามด้วยคีย์อื่นจะเท่ากับAlt+ คีย์นั้น ดังนั้นแม้จะไม่มีEscapeและAltคุณยังสามารถพิมพ์ Meta-x ดังนี้:C-3x


9

Perl, (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\\\"\""

สคริปต์ใช้ตัวดำเนินการ XOR สตริงของ bitcoin ของ Perl ^ซึ่งทำ XOR บนบิตอักขระของสองสตริง สิ่งนี้ทำให้ฉันสร้างอักขระที่หายไปสำหรับ PASSWORD_01 ใหม่และสร้างอักขระสำหรับคำสั่งระบบ

ฉันทำสามตัวแปรขึ้นอยู่กับว่ากฎจะผ่อนปรนอย่างไร ฉันคิดว่าเนื่องจากตัวแปร 2 และ 3 จริง ๆ แล้วเอาท์พุทคำบน Ideone การแก้ปัญหาที่ถูกต้อง ฉันลบเรื่องราวเล็ก ๆ น้อย ๆ ของฉันที่นี่ตั้งแต่ฉันคิดว่าจะไม่มีใครอ่าน แต่คุณสามารถอ่านได้ในการแก้ไขหากคุณสงสัย!


4

รหัส oOo (300)

QwerTaSdfGzxCqwertAsDfgZxCQwerTasDfgZxcQweRtaSDfgZxCqwertAsDFgZXcQWeRtaSdFGzxcQwERTasdfGzxc
QwErtAsdFgzxcqWeRtaSdFGzxcQweRtaSDfGZxCqWErTAsDFgZXCqWerTasDfgZxcQweRtaSdfGzxCQwErTAsDFgZXC
qWertAsDfgzxcQwERtASdFGzXcqWeRTasdFGzXcQWeRtAsDfgzxcQwERtASdFGzXCqWerTaSDfgzXcQWErTaSdFgZxc
QwertaSdFgzXcQWertASdFgZXCq

ง่าย. (Linefeeds เป็นตัวเลือกและที่นี่เพื่อทำให้โค้ด "อ่านง่ายขึ้น") ใช้ตัวสร้างโค้ด:

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

โชคดีที่ฉันพบบิตกะที่เป็นไปได้สำหรับค่าคงที่ทุกครั้งที่ฉันต้องการเพื่อสร้างให้สั้นกว่าการใช้รากที่สอง โดยส่วนใหญ่แล้วฉันค้นหาโดยพิมพ์ตัวเลขแต่ละตัวกำลังสองหรือกำลังสองที่มากขึ้นหากมีตัวเลข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 ไม่ได้มีคำพูดหรือ<< >>แต่ก็มีlshiftและrshiftที่ฉันไม่สามารถใช้


3

ทศนิยม , 190 180 + 10 = 190 ไบต์

12055D12025D41D301212055D12010D41D301212055D12025D41D12003D41D30130112004D41D301212055D12024D41D30112003D41D301212055D12013D41D301212055D12040D41D301212045D12003D41D30112001D41D301

ลองออนไลน์! ทศนิยมเป็นภาษาลึกลับที่ใช้อะไร 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 bytes + 10 for 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 นี้ซึ่งฉันได้สร้างและใช้สำหรับคำตอบของช่องว่าง Whitespace ก่อนหน้าของฉัน


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

ลองออนไลน์!

ใช้]เพื่อทำซิงเกิลตัน

คำอธิบาย

ลองดูว่า"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 และต่อท้ายสตริง

"$""1"Rต่อท้าย"1"และเราก็ทำเสร็จแล้ว

เอาต์พุตโดยนัย


1
O_O ... นี่ฉลาด
เรียกซ้ำ

ขอบคุณที่ชื่นชม ฉันเชื่อว่ามันสามารถทำให้สั้นลงได้ (บางทีโดยการเลือกรหัสอื่น)
Weijun Zhou

2

brainfuck , 400 + 10 ( +) = 410 ไบต์

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

ลองออนไลน์!


2

รหัสเครื่อง MS-DOS .COM 8086 (72 ไบต์)

เวลามีค่าดังนั้นไม่ต้องเสียเวลากับนักแปลหรือนักแปล! เพียงเปิดตัวแก้ไขข้อความที่คุณต้องการและพิมพ์ในรายการต่อไปนี้ (แทนที่\tด้วย TAB):

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

ในฐานะที่เป็น hexdump:

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 bytes

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

ลองออนไลน์!

การลงโทษ 10 ไบต์สำหรับการใช้,คีย์ (ไม่แน่ใจว่าทำไมไม่สามารถทำได้ด้วยShift+ <แต่ดูเหมือนจะเป็นกฎ) และถึงแม้ว่าแหล่งที่มาคือ 40 อักขระทางเทคนิคตัวละครทั้งสาม·มีส่วนเพิ่มอีกสามไบต์เนื่องจากการเข้ารหัสแบบ UTF-8


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"<"การลดคิวเพื่อรับ P"

กุญแจพิเศษของฉันคือ V.

ขอบคุณ @Kevin Cruijssen สำหรับ -1 ไบต์

รหัส:

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 ที่ยาวที่สุดที่เคย? " Nah, หนึ่งในเหมืองนี้เกือบ 6 ครั้งมีขนาดใหญ่ ; p คำตอบที่ดีโดยไม่คำนึงถึง เป็นการยากที่จะใช้อักขระ ASCII ที่อนุญาตจำนวนหนึ่งเท่านั้น ตัวอาคารที่สะดวกสบายจำนวนมากไม่ได้รับอนุญาตสำหรับความท้าทายนี้ :(
Kevin Cruijssen

1
ไบต์ -1 โดยใช้TRแทน1<1สำหรับ01ส่วนหนึ่งของการส่งออก
Kevin Cruijssen

1

Emacs 26 ไบต์ (อาจเป็น +10 = 36 หรือ - 2 = 24)

Escคีย์พิเศษที่จำเป็นในคำตอบนี้อยู่ นี่เป็นครึ่งหนึ่งของแป้นพิมพ์ที่ยังคงเหมือนเดิม แต่ไม่ได้กล่าวถึงในคำถามด้วยเหตุผลบางประการดังนั้นอาจมีหรือไม่มีโทษปรับกับคะแนน ( EscและAltเทียบเท่าใน Emacs; Altเป็นยังในครึ่งเหมือนเดิมของแป้นพิมพ์ แต่ไม่ได้กล่าวถึงในคำถาม แต่จะต้องมีการจัดขึ้นมากกว่าเคาะดังนั้นผมจึงไม่สามารถใช้มันเป็นกุญแจสำคัญพิเศษของฉันมันจะประหยัดไบต์ที่สอง. แต่เนื่องจากมีการเข้ารหัสที่สั้นกว่าที่Escทำ)

โปรแกรมเอง (คอมม่าคั่นขอบเขตระหว่างไบต์ในรูปแบบ on-the-wire ที่ 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 มีการกำหนดค่า; คำตอบนี้ต้องยกถ่านกี่ที่จะตั้ง 16 และสำหรับ Emacs ใช้พจนานุกรมตรวจการสะกดที่เป็นค่าเริ่มต้นในระบบอังกฤษของฉันทั้งสองเหล่านี้ดูเหมือน. ชอบการตั้งค่าที่สมเหตุสมผล แต่อาจเป็นไปได้ว่าสำเนาของ Emacs ของคุณอาจมีการกำหนดค่าที่แตกต่างกันพจนานุกรมที่ต่างกันน่าจะยังคงให้โปรแกรมขนาด 26 ไบต์ แต่อาจต้องใช้การสะกดที่แตกต่างกันเล็กน้อยเพื่อให้การแก้ไขที่เราต้องการ กุญแจที่ไม่ใช้กระสุน)

คำอธิบาย

ฉันไม่แน่ใจว่ามันควรจะมีอิทธิพลต่อสงครามเอดิเตอร์หรือไม่ แต่ดูเหมือนว่า Emacs จะเอาชนะกลุ่มอย่างน้อยในกรณีของคำถามนี้ Emacs นั้นค่อนข้างเหมาะสมกับเอดิเตอร์กอล์ฟที่วัดเป็นไบต์เนื่องจากต้องอาศัยคอร์ดที่ใช้คีย์มากหลายตัว แต่มีเพียงไบต์เดียว (ดังนั้นโปรแกรม Emacs มักจะพิมพ์ช้ากว่าโปรแกรม Vim ที่เทียบเท่า แต่สั้นกว่าบนดิสก์) นอกจากนี้คำสั่ง Emac ที่สำคัญที่สุดส่วนใหญ่จะอยู่ที่มุมล่างซ้ายของคีย์บอร์ดเพื่อให้ใกล้เคียงCtrlและมีประโยชน์มากสำหรับคำถามเช่นนี้

"คุณสามารถสันนิษฐานได้ว่าคุณเปิดล่ามเชลล์ / ซอร์สโค้ดก่อนที่กระสุนจะมาน่าเสียดายที่คุณไม่ได้เขียนอะไรลงไปก่อนที่คีย์บอร์ดจะถูกโจมตี" ดังนั้นฉันคิดว่าเราเปิดไฟล์ว่างใน Emacs และ ต้องพิมพ์รหัสผ่านลงไป (เราต้องการบันทึกไฟล์หลังจากนั้นและอาจออกจาก Emacs แต่จำนวนไบต์สำหรับสิ่งนั้นไม่ถูกนับในคำตอบของคนอื่นดังนั้นฉันจึงไม่นับพวกมันที่นี่เช่นกันมันทำได้โดยใช้มือซ้ายของ แป้นพิมพ์แม้ว่า, Ctrl- X, Ctrl- S, Ctrl- X, Ctrl- C.)

ใช้คำสั่ง (หรือบล็อกคำสั่งที่คล้ายกัน) ในแต่ละครั้ง

  • W, S: ป้อนWSลงในเอกสาร
  • Esc, $: เรียกใช้เครื่องมือตรวจการสะกดคำ WSไม่ใช่คำที่แท้จริง แต่พบคำสองตัวที่คล้ายกันจำนวนมาก
  • D: การใช้เครื่องตรวจตัวสะกดที่ถูกต้องไปWS PS(เมื่อเครื่องตรวจการสะกดถูกเรียกใช้Alt- $ตามที่เกิดขึ้นที่นี่ ( EscและAltเทียบเท่ากับ Emacs) จะตรวจสอบเพียงหนึ่งคำเท่านั้นดังนั้นจึงปิดการใช้งานหลังจากทำเช่นนี้)
  • A: ใส่ให้APSA
  • Ctrl- T: PASสลับตัวละครสองตัวก่อนหน้านี้ให้
  • S, R, W, D: ประเภทให้SRWDPASSRWD
  • Esc, $, 5: เราเรียกเช็คคำสะกดอีกครั้งเพราะเราต้องการที่จะแก้ไขสะกดผิดของเราเข้าไปPASSRWD PASSWORDโปรดทราบว่าเราไม่สามารถเดาได้ว่าคำที่เราต้องการในการลองครั้งแรกของเราจะเป็นเช่นPASSWRDไรเพราะกุญแจสำคัญในการยอมรับคำจริงที่ใกล้เคียงที่สุดคือ0สิ่งที่เราไม่สามารถกดได้ ผลที่ตามมาคือการสะกดผิดมากขึ้นเล็กน้อยPASSRWDใช้เพื่อผลักดันคำที่เราต้องการให้อยู่ในตำแหน่งที่ 5 ซึ่งเราสามารถยอมรับได้
  • Ctrl- Q, 5, f: ใส่ตัวอักษรที่มีรหัสตัวอักษร U + 5f _คือ ตอนนี้อ่านเอกสารPASSWORD_(หรือจะเมื่อเราเริ่มพิมพ์คำสั่งต่อไปก่อนหน้านั้นขีดเส้นใต้ไม่ปรากฏในกรณีที่เราพิมพ์เลขฐานสิบหกหลักอื่น)
  • Ctrl- X, r, Ctrl- Space, 1: เก็บตำแหน่งเคอร์เซอร์ปัจจุบัน (เทียบกับจุดเริ่มต้นของไฟล์) ในการลงทะเบียน 1. สำหรับเหตุผลที่แปลกประหลาดบางนี้เป็น 1 การจัดทำดัชนีเพื่อให้ (การเขียน 9 ตัวอักษรเพื่อให้ห่างไกล) 10เคอร์เซอร์อยู่ในตำแหน่ง
  • Ctrl- X, r, g, 1: คัดลอกเนื้อหาของการลงทะเบียน 1 ลงในเอกสาร ตอนนี้อ่านPASSWORD_10แล้ว
  • Ctrl- T: สลับอักขระสองตัวก่อนเคอร์เซอร์ ตอนนี้เรามีPASSWORD_01เหมือนคำถามที่ถาม

หากเราได้รับอนุญาตให้ใช้Altเราสามารถเข้ารหัสคำสั่ง "invoke spellchecker" เป็นไบต์เดียวa4แทนที่จะสะกดมันออกมาเป็น1b 24; มันปรากฏขึ้นสองครั้งดังนั้นจึงนำไปสู่การประหยัดสองไบต์ (เทอร์มินัลสมัยใหม่ส่วนใหญ่ใช้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.