TUYỆT VỜI BOMB!


214

Bạn đã được thuê vì kiến ​​thức công nghệ của bạn với tư cách là một người hỗ trợ bí mật để đảm bảo rằng người tốt có thể hoàn thành công việc của mình và thế giới có thể được cứu.

Đây là nhiệm vụ cuối cùng của bạn trước khi nghỉ hưu với mức lương cao và lòng biết ơn của cả thế giới. Nhưng trước khi bạn phải giải giới BOMB Big Overly Massive khổng lồ của Evil Genius (dường như thiên tài tà ác là một người thông minh, thích viết tắt đệ quy). Dù sao, bạn và bạn của bạn đang ở trong cốt lõi của căn cứ bí mật Evil Genius, sẵn sàng giải giới BOMB có thể quét sạch lục địa này. Trong nhiệm vụ trước đây, bạn đã quản lý để có được mã giải giáp mà sự ngạc nhiên của bạn chỉ là "PASSWORD_01". Bạn kết nối bàn phím của mình với BOMB nhưng khi bạn đã sẵn sàng, tay sai của Evil Genius bước vào với một loạt đạn. Thật không may, một trong những viên đạn này tác động lên bàn phím của bạn. "Hoàn thành công việc trong khi tôi đánh lạc hướng những cái d * đó!" nói bạn thân của bạn và sau đó bắt đầu bắn súng của mình.

THÔNG TIN

  1. Viết chương trình xuất ra theo bất kỳ cách nào bạn muốn chuỗi PASSWORD_01(chữ hoa).
  2. Vì bàn phím của bạn đã bị trúng đạn, bạn chỉ có thể sử dụng các phím này:

    1 2 3 4 5

    Q W E R T

    A S D F G

    < > Z X C

    Ctrl Shift Tab Space

    Sử dụng Shiftphím, bàn phím của bạn cho phép bạn sử dụng các ký tự này:

    ! " · $ %

  3. Bạn không có bất kỳ phần cứng nào khác ngoài bàn phím và màn hình (ví dụ chuột), cũng không phải là tệp có mật khẩu được ghi trong máy tính của bạn.

  4. Bạn không có kết nối Internet.

  5. Bạn có thể giả sử rằng bạn đã mở trình soạn thảo trình bao / trình biên dịch nguồn trước khi đạn vào. Đáng buồn là bạn không viết bất cứ điều gì trong đó trước khi bàn phím được nhấn.

  6. Bạn không có bàn phím ảo. Trong thực tế, BOMB có một bộ phát hiện TẤT CẢ sẽ làm cho nó phát nổ nếu bạn cố gắng sử dụng các sơ hở Tiêu chuẩn .

  7. Vì bạn thân của bạn đang đợi bạn hoàn thành sớm để thoát khỏi Căn cứ bí mật, bạn sẽ phải viết mã nhỏ nhất có thể (vì vậy, nó !).

Chúc may mắn vì đếm ngược đã bắt đầu!

CHẾ ĐỘ GIÚP: Cũng là một KEY(chỉ một Khóa bạn muốn từ bàn phím, nhưng không phải là Shift + Key hoặc bất kỳ sự kết hợp nào khác) cũng đã sống sót một cách kỳ diệu. Ví dụ: Bạn có thể sử dụng =hoặc 0hoặc /Khóa này Phím phụ này không thể là bất kỳ chữ cái nào trong PASSWORD_01(vì vậy bạn không thể thêm Phoặc O). Đặt tên cho khóa đó trong câu trả lời của bạn. Bạn bị phạt 10 ký tự vì sử dụng khóa này bất kể bạn sử dụng khóa bao nhiêu lần.


67
Tôi có thể thay đổi bố cục của bàn phím thành DVORAK không?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

42
Chúng ta có nhận được khóa enter ít nhất không?
urous

72
Khoảng trắng, đây là cơ hội lớn của bạn!
German_guy

43
Tại sao mật khẩu không được stewardesses?
viết mã

24
Trò đùa trả lời: Tôi là gián điệp, tôi chuyển sang bàn phím dự phòng ẩn trong đồng hồ.
Nzall

Câu trả lời:



136

bash, vim và dc (343)

Tôi đang ngồi tại một dấu nhắc bash đã được cấu hình bởi Evil Genius và dĩ nhiên anh ta có VISUAL=vimtrong môi trường mặc định. Sử dụng liên kết bash mặc định cho edit-and-execute-command( C-x C-e) bash gọi $VISUALvà sẽ thực thi nội dung bộ đệm của nó trên exit ( ZZ). Tôi gõ theo trình tự sau (Lưu ý: kbd-mode là các lệnh được ban hành ở chế độ bình thường và trình tự điều khiển):

  1. C-xC-e
  2. amèo <<< 45 C-c4C-aaa

    Bây giờ bộ đệm vim chứa cat<<<49a. Tiếp tục ...

  3. 45 C-c3C-aaa

  4. 54 C-c41C-aamột
  5. 55 C-c13C-aamột

    Bây giờ bộ đệm vim chứa cat<<<49a48a95a68a. Tiếp tục ...

  6. 51 C-c31C-aamột

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

    Bây giờ bộ đệm vim chứa cat<<<49a48a95a68a82a79a87a83a83a65a80a>s

    Thoát khỏi chế độ chèn, lưu và thoát

  13. C-cZZ

    Các stập tin bây giờ chứa một dckịch bản mà tạo ra chuỗi mong muốn trên stack, bây giờ chúng ta cần phải thêm lệnh in.

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

    Lặp lại lệnh trên 9 lần.

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

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

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

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

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

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

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

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

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

  24. C-xC-eamèo <<< f >> s

    Thực thi tập lệnh dc:

  25. C-xC-eađC-cZZ

Đầu ra:

PASSWORD_01

Nội dung của stập tin:

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

4
Tôi đã suy nghĩ để làm một vimkịch bản vì Ctrlnhân vật; suy nghĩ tốt để ghép nó với dc! Ngoài ra, giải pháp tuyệt vời :)
nneonneo

2
Bạn mất bao lâu để viết tất cả các thẻ <kbd> </ kbd> đó?
cần

15
@justhalf: Tôi đã viết nó bằng vim với <Leader>kràng buộc như thế này map <Leader>k i<kbd></kbd>^[F>a, vì vậy nó không tệ như vẻ ngoài của nó :-).
Thor

18
Bây giờ rõ ràng là Đặc vụ Thor biết công cụ của mình một cách kỹ lưỡng. Bạn xứng đáng được nghỉ hưu, thưa ông!
ngay

67

Ruby, 57 + 10 ( *) = 67

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

Câu trả lời này sử dụng *%để xây dựng các giá trị ASCII của các ký tự bị thiếu (và 0 là Fixnum) và đẩy chúng vào $*( ARGV). Mảng này sau đó được sử dụng kết hợp với một chuỗi định dạng để tạo mật khẩu chính xác, được in bằng $><<( $>là thiết bị xuất chuẩn).

Ruby, 62 + 10 ( .) = 72, không ngắt dòng

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

Nguyên tắc gần giống với phiên bản trên, ngoại trừ ở đây, mảng được xây dựng từ một mảng trống ( %w%%). Một số vấn đề .cần thiết để có được quyền ưu tiên toán tử mong muốn.


13
"Đây là nhiệm vụ cuối cùng của bạn trước khi nghỉ hưu với mức lương cao và lòng biết ơn của cả thế giới." Xin chúc mừng, tất cả chúng tôi cảm ơn bạn :)
Timtech

4
Bằng chứng cuối cùng cho thấy Perl là một trong những nguồn cảm hứng lớn nhất của Ruby.
Pierre Arlaud

11
Làm thế nào bạn làm linebreak?
Cephalepad

4
@Arian Cách tương tự nneonneo chạy mã Python của anh ấy sau khi nhập nó vào REPL ... Tôi sẽ thêm một phiên bản mà không ngắt dòng.
Ventero

Có phải thiên tài ác đã cài đặt ruby?
Mhmd

36

Khoảng trắng (148 + 10 = 158)

Enter chìa khóa cần được sử dụng ở đây.

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

Giải thích của tôi:

  • S, +, 0Là không gian.
  • T, 1là các tab.
  • L là dòng mới.
  • // bắt đầu bình luận

Mỗi dòng là một lệnh trong ngôn ngữ khoảng trắng.

Bản giới thiệu


1
Ôi trời ... Tôi chỉ đang làm việc đó thôi :(
Teun Pronk

1
Tôi cũng vậy, nhưng tôi đã từ bỏ việc này vì biết ai đó sẽ nhanh hơn
German_guy

Tôi nghĩ 'L' không có sẵn?
500 - Lỗi máy chủ nội bộ

@ 500-InternalServerError: Trên thực tế Llà viết tắt của ký tự dòng mới. Kiểm tra bản Demo cho mã thật. Những gì tôi đăng là một phiên bản có thể đọc được.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

Ah, tôi hiểu rồi
500 - Lỗi máy chủ nội bộ

25

Con trăn ( 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"""

Tôi cần +nhân vật (giá 10 +), có thể được lấy từ numpad (hoặc trên một số bố cục quan trọng nhất định).

Vâng, BOMB có thể đã tắt trong khi tôi đang gõ nó.

Cách tiếp cận cơ bản là xây dựng các bộ ký tự lớn hơn bao giờ hết bằng cách sử dụng exec"%c"%(number). Có bốn execs lồng vào nhau. Dần dần, bộ chữ số của tôi tăng dần từ

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

để trong lần lặp lại cuối cùng, có thể thể hiện bất kỳ ký tự nào (để phiên bản trong cùng thực sự có thể chạy bất kỳ chương trình nào).

Khoảng 50% chương trình chỉ là trích dẫn các ký tự ( "%c"%34là trích dẫn kép), vì bản chất lồng nhau của các execcâu lệnh yêu cầu "thoát" các ký tự trích dẫn một cách mạnh mẽ.


Nếu bạn sử dụng "+" từ bàn phím số, bạn sẽ độc lập với ngôn ngữ bàn phím.
celtschk

@celtschk: Điểm tốt! Tôi sẽ chỉnh sửa nó trong.
nneonneo

1
Thay vì xây dựng các bộ chữ số với các thực thi lồng nhau, bạn không thể lấy số bằng cách sử dụng số học? Ví dụ. 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
Bởi vì bạn không thể có được cả hai mệnh. (Tôi đã xem xét điều này!)
nneonneo

Ngoài ra, Python không có nhiều toán tử liên kết mạnh hơn%. ** là một, nhưng nó có xu hướng khá vô dụng để xây dựng hầu hết các điều khoản.
nneonneo

25

Mất ngủ 39 35 31 29

Ngôn ngữ này xuất hiện khi tôi đang tìm kiếm một ngôn ngữ mã hóa các hướng dẫn của nó với một ký tự ASCII. Ngôn ngữ thực sự hoạt động dựa trên mã ASCII thập phân của ký tự, vì vậy nó vẫn khá linh hoạt với một nửa bàn phím bị phá hủy.

Thả nó xuống thêm 29 ký tự, điều này có thể sau khi giảm mức sử dụng bộ nhớ và tăng không gian tìm kiếm:

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

Tôi quyết định chạy chương trình đã điều chỉnh của mình trên toàn bộ các ký tự được phép và cắt giải pháp xuống còn 31 ký tự:

FdFGt dtreeC>tt FFdx<Fdtr ztq4s

Tôi đã sử dụng một chương trình để tìm kiếm giải pháp này. Đây là một trong nhiều giải pháp được chương trình của tôi trả về, tất cả đều có cùng kích thước.

Fddx>"eCeezdC>CefCdddzCzzfCqred>r4s

Phiên bản cũ được xây dựng bằng tay. Tôi nhớ thức đến sáng để làm điều này.

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

Dưới đây là thông dịch viên mất ngủ để thử nghiệm.


3
+1 cho kết quả "thức đến sáng" với lựa chọn ngôn ngữ lập trình của bạn.
vừa qua

20

Vim + PHP trên một số Trình quản lý cửa sổ

65 phím trong 44 nét, với hình phạt 10 điểm khi sử dụng =.

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

Một sự cố:

  • Alt+Tabdường như hoạt động như Escvới Vim, hoặc có lẽ với trình giả lập thiết bị đầu cuối này. Cảm ơn đã dạy tôi một cái gì đó mới!
  • aEACE<Alt+Tab>: Nhập chế độ chắp thêm và chèn vào EACE trực tuyến. Lối ra.
  • z=5<Alt+Tab>: Thực hiện sửa lỗi chính tả. Chọn 5, NGÀY PEACE. Lối ra. ( Escdường như làm việc như Enterở đây!)
  • $xxxxaASSWRD<Alt+Tab>: Đi đến cuối dòng. Xóa 4 ký tự và thêm ASSWRD, kết quả là PASSWRD. Trở lại chế độ bình thường. (Không, 4xsẽ không hoạt động.)
  • z=1<Alt+Tab>: PASSWORDlẽ sẽ là chỉnh đầu tiên cho việc này. Chọn nó
  • $a$aA<Alt+Tab>: Đi đến cuối dòng và thêm a $aA. Trở lại chế độ bình thường.
  • ==: Định dạng dòng PHP này một cách độc đáo, thay đổi camelCase $aAthành $a_a. Điều này cũng di chuyển con trỏ trở lại đầu dòng.
  • wxx: Đi về phía trước một từ; con trỏ bây giờ là trước đây $. Xóa hai ký tự - $và và a- để thực hiện PASSWORD_a.
  • $r1: Đi đến cuối dòng và thay thế ký tự hiện tại (nghĩa là a) bằng 1, kết quả là PASSWORD_1.
  • ^X: Giảm số nguyên dưới con trỏ, dẫn đến PASSWORD_0.
  • a1: Cuối cùng, nối 1, cho PASSWORD_01!

Tôi không thể sao chép ==lệnh, nó chỉ bật chế độ thụt lề lớn trong thiết lập vi của tôi (debian 7, v7.3.547)
Cengiz Can

11

Python 2, 75889 byte

Không có nhân vật phụ!

Thật không may, mã là siêu dài. Vì vậy, thay vào đó, đây là mã để tạo chương trình:

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

Dùng thử trực tuyến

(để chạy mã, thay đổi bên ngoài printthành một exec. Hoặc, tạo chương trình, sau đó dán và chạy. Hoặc sao chép từ pastebin được liên kết bên dưới.)

Giải trình:

Mục tiêu là để thực hiện:

print"PASSWORD_01"

Để tránh sử dụng ()+ký tự, chúng ta phải sử dụng nhiều thao tác định dạng chuỗi được nối với nhau. Điều này có nghĩa là mỗi bước được thêm một cách hiệu quả sẽ nhân đôi số lượng %ký tự cần thiết cho mỗi bước trước đó:

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

Điều này là không đủ, bởi vì một số số yêu cầu không thể được tạo ra và chúng tôi cũng không thể tạo ra print. Vì vậy, chúng tôi thêm một mức độ trừu tượng với execcho printing, và một mức độ cho các điểm mã ASCII chúng ta không thể tạo ra định dạng với. Sau đây về cơ bản là câu trả lời của tôi, nhưng với mỗi chuỗi được %rút gọn thành một chuỗi duy nhất (lưu ý rằng đó %s%s%s%s%skhông phải là một đại diện chính xác, không tính đến %yêu cầu nghĩa đen trước mỗi câu):

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

Bước đầu tiên: Bên ngoài 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, Dùng để 0PASSWORD_01
  2. 2531>>5: 79, được sử dụng cho exec bên trong để tạoO
  3. 321>>2: 80, được sử dụng cho exec bên trong để tạoP
  4. 1521>>4: 95, được sử dụng cho exec bên trong để tạo_
  5. 211>>1: 105, được sử dụng cho exec bên trong để tạoi
  6. 221>>1: 110, được sử dụng cho exec bên trong để tạon

Bước thứ hai: Chuẩn bị nội tâm exec

Sau những điều trên, bên trong execlà một cái gì đó như thế này:

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

Ngoại trừ việc bạn sẽ không nhận được điều đó. Vẫn đơn giản hóa, bạn sẽ nhận được điều này:

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

%Cần phải được bao gồm nghĩa đen . Vì vậy, về cơ bản, tôi đã phải thêm một loạt chúng trước khi %skết thúc với nghĩa đen %còn lại sau tất cả các định dạng. 2**11của họ. Lần năm.

Phần còn lại của các exechoạt động định dạng chuỗi bên ngoài là %112%34%34%34%34. Cái 112này là cho p, và những cái khác là dấu ngoặc kép. Sau khi áp dụng chúng, kết quả là như thế này:

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

Nhưng trong thực tế nó có một bó nhiều hơn %. Đây là:

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

Bước cuối cùng là chỉ cần chạy nó, sau đó bạn có được đầu ra cần thiết.


Mã đầy đủ ở đây: http://pastebin.com/rSFs6DiH


7
Ấn tượng! Bạn đã gõ tất cả những thứ đó bằng tay trước khi BOMB phát nổ? Không có bất kỳ sai lầm (không có phím backspace)? Bạn, thưa ông hoặc bà, xứng đáng nhận lương hưu của bạn. ; D
DLosc

10

bash + vim (56)

Mượn Ctrl-XCtrl-Emẹo bash từ giải pháp của Thor, đây là cách tôi sẽ làm trong bash + vim:

C-XC-E bắt đầu trình chỉnh sửa mặc định (thường là vim)

a bắt đầu chế độ chèn

.space ASSW

C-Vx4f chèn O

RD

C-Vx5f chèn _

1

C-3tương đương với escape(không chỉ trong vim, mà bất cứ nơi nào trong một thiết bị đầu cuối)

C-Xtrừ 1 từ 1tôi vừa gõ

a chèn chế độ một lần nữa

1 C-3

nội dung đệm bây giờ . ASSWORD_01

<< dòng không liên kết (không có op, vì dòng không được thụt lề) và di chuyển con trỏ đến cột thứ 1

a

C-X bắt đầu hoàn thành từ

C-V hoàn thành với lệnh ex

C-V 9 lần nữa chọn mục Print

C-3 trở lại chế độ bình thường

XXXxx xóa rint 

< < quay lại cột 1

sxóa ., bắt đầu chèn chế độ

e c C-X C-Vhoàn thành lệnh ex một lần nữa, mục echođã được chọn vì ectôi vừa gõ

space C-3 nội dung đệm bây giờ echo PASSWORD_01

Z Z lưu bộ đệm, đóng vim, bash thực thi nội dung tệp, tức là echo PASSWORD_01

Nhân tiện: C-3có nhiều anh em hữu ích: C-Jis Enter, C-Iis Tab, C-His Backspace, C-2is C-@(tức là một byte rỗng). Và đối với người dùng emacs, thật tuyệt khi biết rằng Escapetheo sau là một khóa khác tương đương với Alt+ khóa đó. Vì vậy, ngay cả khi không có EscapeAltbạn vẫn có thể gõ Meta-x như thế này:C-3x


9

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

( ^khóa được sử dụng, 3 cách)

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

  • Hợp lệ nếu chạy như một lệnh hệ thống đủ điều kiện là "đầu ra."

exec"QQZSqeasswsrdcqw"^"422<Q5    <  <AF"         # exec "echo PASSWORD_01"
  • Hợp lệ nếu tôi được phép sử dụng các lệnh bên ngoài / hệ điều hành. (Chạy ở đây)

exec"EQAXqwQqQZQxqeasswsrdcqwxqq"^q!5434QZ4S534$S5    <  <AF$SS! 
                  # exec "perl -e\"die\\\"PASSWORD_01\\\"\""
  • Hợp lệ nếu tôi có thể thực thi Perl thông qua hệ thống. (Chạy ở đây) <- cái này sử dụng printthay vìdie

Các tập lệnh sử dụng toán tử XOR chuỗi bit của Perl ^, thực hiện XOR trên các bit ký tự của hai chuỗi. Điều này cho phép tôi tạo lại các ký tự bị thiếu cho PASSWORD_01 và tạo các ký tự cho lệnh hệ thống.

Tôi đã thực hiện ba biến thể tùy thuộc vào mức độ khoan dung của các quy tắc. Tôi giả sử rằng vì các biến thể 2 và 3 thực sự xuất ra các từ trên Ideone, nên các giải pháp là hợp lệ. Tôi đã xóa câu chuyện nhỏ mà tôi có ở đây vì tôi nghĩ rằng sẽ không có ai đọc nó, nhưng bạn có thể đọc nó trong các chỉnh sửa nếu bạn tò mò!


4

Mã oOo (300)

QwerTaSdfGzxCqwertAsDfgZxCQwerTasDfgZxcQweRtaSDfgZxCqwertAsDFgZXcQWeRtaSdFGzxcQwERTasdfGzxc
QwErtAsdFgzxcqWeRtaSdFGzxcQweRtaSDfGZxCqWErTAsDFgZXCqWerTasDfgZxcQweRtaSdfGzxCQwErTAsDFgZXC
qWertAsDfgzxcQwERtASdFGzXcqWeRTasdFGzXcQWeRtAsDfgzxcQwERtASdFGzXCqWerTaSDfgzXcQWErTaSdFgZxc
QwertaSdFgzXcQWertASdFgZXCq

Dễ dàng. (Nguồn cấp dữ liệu là tùy chọn và chỉ ở đây để làm cho mã "dễ đọc hơn") Trình tạo mã được sử dụng:

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

Mã tương tự trong một mã hóa ít ngớ ngẩn hơn:

EeeeEeEeeEeeEeeeeeEeEeeEeEEeeeEeeEeeEeeEeeEeeEEeeEeEeeeeeEeEEeEEeEEeEeeEeEEeeeEeEEEeeeeEeee
EeEeeEeeEeeeeeEeEeeEeEEeeeEeeEeeEEeEEeEeEEeEEeEEeEEEeEeeEeeEeeEeeEeeEeeEeeEeeEEeEeEEeEEeEEE
eEeeeEeEeeeeeEeEEeEEeEEeEeeEeEEeeeEEeEeEEeEeEeEeeeeeEeEEeEEeEEeEEeEeeEeEEeeeEeEEEeEeEeEeEee
EeeeeeEeEeeEeEEeeeEEeEeEEEe


3

ferNANDo, 179 + 10 = 189 byte

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

Hãy thử trực tuyến!

Enterđã sử dụng. Tôi sẽ sử dụng 01để làm cho mã dễ đọc hơn nhưng tôi không thể sử dụng 0.


Tôi nghĩ rằng nhập được cho phép.
Conor O'Brien

2
OP không nói Enter được cho phép.
acrolith

3

JS-Forth, 103 byte

Chuỗi sẽ được trả về trên ngăn xếp dưới dạng một mảng các ký tự.

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

Dùng thử trực tuyến - Phiên bản đã nhận xét


Giải trình:

Lần đầu tiên tôi tìm thấy danh sách các từ được phép . Về cơ bản, những thứ duy nhất tôi có thể sử dụng sẽ hữu ích là:

  • 12345 Hằng số
  • << Sang trái
  • >> Chuyển sang phải
  • s>f Đẩy đơn để nổi stack
  • f>d Pop đôi từ float stack
  • fsqrt Căn bậc hai trên float float

Vì vậy, tôi có thể sử dụng hằng số, dịch chuyển bit và tính toán căn bậc hai bằng cách sử dụng như sau ( >>thay thế drop, dịch chuyển bằng cách 0loại bỏ 0):

s>f fsqrt f>d >>

May mắn thay, tôi đã tìm thấy các thay đổi bit có thể cho mọi hằng số tôi cần để tạo ra ngắn hơn so với sử dụng căn bậc hai. Đối với hầu hết các phần, tôi đã tìm kiếm bằng cách chỉ cần in mỗi số bình phương, hoặc sức mạnh lớn hơn của hai nếu bất kỳ trong số chúng có một chữ số 6-0. Sau đó, tôi nhận ra rằng tôi có thể sử dụng mất độ chính xác từ f>dđể tìm thêm khả năng. (Tôi có thể thêm vào số, nhưng vẫn nhận được cùng một căn bậc hai số nguyên.) Một lát sau, tôi bắt đầu sử dụng dịch chuyển bit để tìm một số, và sau đó là tất cả các hằng số. Độ >>dịch chuyển bit càng lớn , tôi càng có thể thêm vào "số ma thuật" và vẫn nhận được kết quả tương tự. Vì vậy, tôi đã tìm thấy những thay đổi bit nhỏ nhất mà tôi có thể sử dụng để có được kết quả cần thiết. Ngay cả số đôi khi có thể sử dụng <<, tỷ lệ cược phải sử dụng >>.

Mã nhận xét ( \bắt đầu nhận xét):

\ 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 không có từ <<hay >>. Thay vào đó, nó có lshiftrshifttôi không thể sử dụng .


3

Số thập phân , 190 180 + 10 = 190 byte

12055D12025D41D301212055D12010D41D301212055D12025D41D12003D41D30130112004D41D301212055D12024D41D30112003D41D301212055D12013D41D301212055D12040D41D301212045D12003D41D30112001D41D301

Hãy thử trực tuyến! Thập phân là một ngôn ngữ bí truyền không sử dụng gì ngoài số thập phân và chữ cái D. Tuy nhiên, tôi cần mức phạt +10 vì hầu hết mọi lệnh đều sử dụng 0.

May mắn thay, tất cả các lệnh cần thiết để in PASSWORD_01không yêu cầu bất kỳ số nào trên 6:

  • 12...D - đẩy một nhân vật
  • 2 - bật một giá trị
  • 41D - pop top hai giá trị ngăn xếp, nhân và kết quả đẩy
  • 301 - in DSI (chỉ mục ngăn xếp mặc định)

Bằng cách liên tục đẩy các giá trị ký tự chỉ sử dụng các chữ số 1 đến 5, sau đó thêm chúng, tôi có thể tạo các giá trị ký tự cho mỗi chữ cái PASSWORD_01.

Ungolfed và bình luận:

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

Khoảng trắng , điểm: 111 (101 byte + 10 cho 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]

Chữ cái S(dấu cách), T(tab) và N(dòng mới) được thêm vào dưới dạng chỉ tô sáng.
[..._some_action]chỉ thêm vào giải thích.

Dùng thử trực tuyến (chỉ có khoảng trắng, tab và dòng mới).

Giải thích bằng mã giả:

Giải pháp này ngắn hơn câu trả lời của Whitespace hiện tại ( @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ yêu cầu tôi đăng nó dưới dạng câu trả lời riêng biệt khi tôi đề xuất nó là golf) bằng cách sử dụng mẹo Whitespace này của tôi .

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

Hằng số 80đã được tạo với chương trình Java này , mà tôi đã tạo và sử dụng cho một số câu trả lời Whitespace trước đây của tôi.


2

Stax , 91 + 10 byte

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

Hãy thử trực tuyến!

Sử dụng ]để làm singletons.

Giải trình

Hãy xem cách "P"tạo và cách "ASSW"nối thêm mà không sử dụng thông thường +.

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

Phần còn lại chỉ là lặp lại cùng một mẹo.

"a"EEE$"$"a$Re]Rhoán đổi các chữ số của "a"hoặc [97]để thực hiện [79]hoặc "O"gắn nó vào chuỗi.

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

"$""a"EEEd$"$""5"Re]Rsử dụng "a"một lần nữa để có được "9"và loại bỏ "7", sau đó kết hợp "9"với một chữ "5"để tạo thành [95]hoặc "_", và thêm nó vào chuỗi.

"$"1 !$R lấy số 0 bằng logic không bằng 1 và nối nó vào chuỗi.

"$""1"Rnối thêm cuối cùng "1"và chúng tôi đã hoàn thành

Ngụ ý đầu ra.


1
O_O ... điều này thật thông minh.
đệ quy

Cảm ơn vì sự đánh giá cao của bạn. Tôi tin rằng nó có thể được thực hiện ngắn hơn (có lẽ bằng cách chọn một khóa khác?) Mặc dù.
Weijun Zhou

2

brainfuck , 400 + 10 ( +) = 410 byte

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

Hãy thử trực tuyến!


2

Mã máy MS-DOS .COM 8086 (72 byte)

Thời gian là quý giá, vì vậy không có thời gian để bổ sung trình biên dịch hoặc phiên dịch! Chỉ cần mở trình soạn thảo văn bản bạn chọn và nhập vào phần sau (thay thế \tbằng TAB):

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

Như một 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$

Lưu dưới dạng tệp .COM và chạy tệp đó để lưu ngày.

Mã giả định các giá trị bắt đầu nhất định cho các thanh ghi , do đó có thể không hoạt động đối với tất cả các hương vị DOS. Chỉ hy vọng rằng ai đó có nguy cơ bị sa thải bằng cách không mua IBM.

Đại diện dễ hiểu hơn một chút:

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 byte

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

Hãy thử trực tuyến!

Hình phạt 10 byte là dành cho việc sử dụng ,khóa (không chắc tại sao điều này không thể được thực hiện bằng Shift+ <, nhưng đó dường như là quy tắc). Và mặc dù nguồn về mặt kỹ thuật là 40 ký tự, ba ·ký tự đóng góp thêm ba byte vì mã hóa UTF-8 của chúng.


1

05AB1E , 87 86 byte

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

Hãy thử trực tuyến!

Có lẽ mã 05AB1E dài nhất từ ​​trước đến nay?

Thật không may, ngôn ngữ không hỗ trợ những thứ như "Q"<"giảm Q để lấy P"

Chìa khóa phụ của tôi là V.

Cảm ơn @Kevin Cruijssen cho -1 byte.

Mã số:

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 

Để so sánh: Cách ngắn nhất để in "PASSWORD_01" dài 6 byte

Hãy thử trực tuyến!


" Có lẽ mã 05AB1E dài nhất từ ​​trước đến nay? " Nah, cái này của tôi lớn gấp gần 6 lần . ; p Câu trả lời tốt đẹp bất kể. Thật khó để chỉ sử dụng một lượng ký tự ASCII được phép. Vì vậy, nhiều nội dung tiện lợi không được phép cho thử thách này. :(
Kevin Cruijssen

1
-1 byte bằng cách sử dụng TRthay vì 1<1cho 01phần đầu ra.
Kevin Cruijssen

1

Emacs, 26 byte (có thể + 10 = 36 hoặc - 2 = 24)

Chìa khóa bổ sung cần thiết trong câu trả lời này là Esc. Đây là một nửa của bàn phím vẫn còn nguyên vẹn, nhưng không được đề cập trong câu hỏi vì một số lý do, vì vậy có thể hoặc không thể đưa ra một hình phạt cho điểm số. ( EscAlttương đương trong Emacs; Altcũng trên nửa còn nguyên vẹn của bàn phím nhưng không được đề cập trong câu hỏi, nhưng phải được tổ chức chứ không phải khai thác vì vậy tôi không thể sử dụng nó như là chìa khóa phụ của tôi Nó sẽ tiết kiệm hai byte. mặc dù, bởi vì nó có mã hóa ngắn hơn Esc.)

Bản thân chương trình (dấu phẩy phân định ranh giới giữa các byte theo định dạng trên dây mà Emacs sử dụng để chấp nhận đầu vào của nó):

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

Mã hóa này dưới dạng byte thô, để chứng minh số byte:

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

(Lưu ý: một số chi tiết có thể thay đổi dựa trên cách Emacs được định cấu hình; câu trả lời này yêu cầu trích dẫn-char-radix được đặt thành 16 và để Emacs sử dụng từ điển kiểm tra chính tả mặc định trên hệ thống tiếng Anh của tôi. giống như cài đặt cấu hình hợp lý, nhưng có thể bản sao Emacs của bạn có thể được cấu hình khác. Một từ điển khác có thể vẫn cung cấp chương trình 26 byte, nhưng có thể cần phải sử dụng các lỗi chính tả khác nhau để có thể chấp nhận các chỉnh sửa mà chúng tôi muốn phím không đạn.)

Giải trình

Tôi không chắc liệu nó có ảnh hưởng gì đến cuộc chiến biên tập hay không, nhưng Emacs dường như đánh bại vim ít nhất là trong trường hợp của câu hỏi này. Emacs khá phù hợp với trình soạn thảo golf được đo bằng byte, vì nó phụ thuộc rất nhiều vào các hợp âm chiếm nhiều phím bấm nhưng chỉ có một byte duy nhất (do đó, một chương trình Emacs thường gõ chậm hơn chương trình Vim tương đương, nhưng ngắn hơn trên đĩa). Ngoài ra, hầu hết các lệnh Emacs quan trọng nhất nằm ở góc dưới bên trái của bàn phím, gần với Ctrl, rất hữu ích với một câu hỏi như câu hỏi này.

"Bạn có thể giả sử rằng bạn đã mở trình soạn thảo trình biên dịch / trình biên dịch nguồn trước khi các viên đạn xuất hiện. Đáng buồn là bạn không viết bất cứ điều gì trong đó trước khi bàn phím bị đánh.", Vì vậy tôi giả sử rằng chúng tôi có một tệp trống mở trong Emacs và cần phải nhập mật khẩu vào nó (Chúng ta cần lưu tệp sau đó và có thể thoát Emacs, nhưng các byte không được tính trong câu trả lời của người khác nên tôi cũng không đếm chúng ở đây. Hoàn toàn có thể sử dụng phía bên trái của bàn phím, mặc dù, Ctrl- X, Ctrl- S, Ctrl- X, Ctrl- C.)

Lấy một lệnh (hoặc khối các lệnh tương tự) tại một thời điểm:

  • W, S: Nhập WSvào tài liệu.
  • Esc, $: Gọi trình kiểm tra chính tả. WSkhông phải là một từ thực sự, nhưng nó tìm thấy rất nhiều từ hai chữ cái tương tự.
  • D: Sử dụng trình kiểm tra chính tả, sửa WSthành PS. (Khi trình kiểm tra chính tả được gọi bằng cách sử dụng Alt- $, như đã xảy ra ở đây ( EscAlttương đương với Emacs), nó chỉ kiểm tra một từ, do đó, nó sẽ tắt sau khi thực hiện việc này.)
  • A: chèn A, cho PSA.
  • Ctrl- T: Hoán đổi hai ký tự trước, cho PAS.
  • S, R, W, D: Loại SRWD, hiến PASSRWD.
  • Esc, $, 5: Chúng tôi gọi kiểm tra chính tả một lần nữa, bởi vì chúng tôi muốn sửa sai chính tả của chúng tôi PASSRWDvào PASSWORD. Lưu ý rằng chúng ta không thể đoán từ mà chúng ta muốn trong lần thử đầu tiên, giống như từ đó PASSWRD, bởi vì chìa khóa để chấp nhận từ thực gần nhất là từ 0mà chúng ta không thể nhấn. Kết quả là, lỗi chính tả cực đoan hơn một chút PASSRWDđược sử dụng để đẩy từ chúng ta muốn vào vị trí 5, nơi chúng ta có thể chấp nhận nó.
  • Ctrl- Q, 5, f: Chèn nhân vật với mã ký tự U + 5f, tức là _. Bây giờ tài liệu sẽ đọc PASSWORD_(hoặc sẽ khi chúng ta bắt đầu nhập lệnh tiếp theo; trước đó, dấu gạch dưới không xuất hiện trong trường hợp chúng ta nhập một chữ số hex khác).
  • Ctrl- X, r, Ctrl- Space, 1: Cất giữ vị trí con trỏ hiện hành (tương ứng với sự bắt đầu của tập tin) trong sổ đăng ký 1. Đối với một số lý do kỳ lạ, đây là 1 lập chỉ mục, vì vậy (đã viết 9 nhân vật cho đến nay) là con trỏ tại vị trí 10.
  • Ctrl- X, r, g, 1: Sao chép nội dung của đăng ký 1 vào tài liệu. Bây giờ nó đọc PASSWORD_10.
  • Ctrl- T: Hoán đổi hai ký tự trước con trỏ. Bây giờ chúng tôi có PASSWORD_01, giống như câu hỏi yêu cầu.

Nếu chúng ta được phép sử dụng Alt, có lẽ chúng ta có thể mã hóa lệnh "gọi trình kiểm tra chính tả" dưới dạng một byte a4thay vì đánh vần là 1b 24; nó xuất hiện hai lần, do đó dẫn đến hai byte tiết kiệm. (Hầu hết các thiết bị đầu cuối hiện đại sử dụng 1b 24làm mã hóa cho Alt- $để tránh xung đột với UTF-8, nhưng đôi khi a4mã hóa cũng gặp phải, đôi khi có sẵn dưới dạng tùy chọn cấu hình.)

Tiết kiệm byte có thể có thể liên quan đến lỗi chính tả golfier. PSASWRDsẽ là một byte ngắn hơn để gõ, nhưng thật không may, trình kiểm tra chính tả dường như không có khả năng lượm lặt được PASSWORDđiều đó, vì vậy đây PASSRWDlà cách tiếp cận tốt nhất mà tôi tìm thấy cho đến nay. Cách tiếp cận dựa trên đăng ký để đạt 10được cũng vô cùng khó sử dụng, nhưng không có nhiều cách tạo số từ hư không trong Emacs, và 0là một nhân vật đau đớn để nắm bắt bằng cách khác. (Ít nhất đã có một vài sự trùng hợp đáng ngạc nhiên hữu ích: con trỏ chỉ xảy ra với kết thúc ở vị trí 10, trong đó có một 0, ngay khi cần thiết, và thực tế là Emacs chấp nhận dự phòng ghoạt động đăng ký để chèn nội dung của một thanh ghi vào tài liệu , ngoài việc trực quan hơni.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.