"Chào thế giới!" (Chủ đề của kẻ cướp)


11

Đây là chủ đề của bọn cướp. Chủ đề của cảnh sát ở đây .

Thách thức của bạn là lấy một bản đệ trình không bị bẻ khóa từ luồng của cảnh sát và tìm, cho những gì đầu vào hoặc đầu vào, chương trình sẽ in Hello, World!và một dòng mới. Viết hoa, khoảng cách và dấu chấm câu phải chính xác.

Vui lòng nhận xét về trình của cảnh sát khi bạn bẻ khóa mã của họ.

Câu trả lời:


12

Bash của Sisyphus

Mã gốc:

[[ ! "${1////x}" =~ [[:alnum:]] ]]&&[[ $# = 1 ]]&&bash -c "$1"

Đầu vào:

__=; (( __++, __-- ));
(( ___        = __,        ___++));
(( ____       = ___,       ____++));
(( _____      = ____,      _____++));
(( ______     = _____,     ______++));
(( _______    = ______,    _______++));
(( ________   = _______,   ________++));
(( _________  = ________,  _________++));

${!__##-} <<<\$\'\\$___$______$_______\\$___$______$_____\\$___$_______$__\\$___$_______$_________\'\ \$\'\\$___$___$__\\$___$______$_______\\$___$_______$______\\$___$_______$______\\$___$_______$_________,\ \\$___$____$_________\\$___$_______$_________\\$___$________$____\\$___$_______$______\\$___$______$______\\$__$______$___\'

Giải trình:

Điều này mã hóa "echo Hello, World!" như các chuỗi thoát bát phân (\ xxx).

Ngoại trừ bạn cũng không thể sử dụng số, vì vậy phần đầu tiên sẽ tạo ra các biến cho các số 0-7. Bạn có thể sử dụng chúng để xây dựng một chuỗi với các chuỗi bát phân sẽ đánh giá để cung cấp cho bạn lệnh thực tế.

Nhưng evalcũng là chữ và số. Vì vậy, thay vào đó, ống này là chuỗi đầu vào của một thể hiện khác bash. $0chứa tên của lệnh được sử dụng để gọi Bash, thường chỉ bash(hoặc -bashcho vỏ đăng nhập) nếu bạn đang chạy bình thường (thông qua TIO hoặc bằng cách dán nó trong một thiết bị đầu cuối). (Điều này có nghĩa là nếu bạn cố chạy nó bằng cách dán nó vào một kịch bản, mọi thứ sẽ trở nên sai lầm khủng khiếp khi nó cố gắng tự rẽ nhánh một loạt lần.)

Nhưng dù sao, bạn không thể nói $0trực tiếp. Thay vào đó, $__chứa tên của $0("0") và bạn có thể sử dụng mở rộng gián tiếp để truy cập nó ( ${!__}tham khảo nội dung của $0).

Và cuối cùng, cung cấp cho bạn tất cả các phần bạn cần.


Chào mừng bạn đến với Câu đố lập trình & Code Golf! Tôi đã để lại một bình luận về câu trả lời của cảnh sát. Liên kết TIO cho người quan tâm: tio.run/##jc/ Kẻ
Dennis

Đẹp! Giải pháp của tôi trông khác, nhưng sử dụng cùng một ý tưởng - xây dựng một chuỗi bát phân và sử dụng cú pháp trích dẫn đơn đô la, và sử dụng chỉ định. Làm tốt lắm =)
Sisyphus




3

Thạch: EriktheOutgolfer

〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ

Thạch , 11 byte

sLƽ$Xṙ5O½Ọ

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

Giải trình

Mã ban đầu có thể được giải thích như vậy:

sLƽ$Xṙ5O½Ọ  Main link; argument is z
s            Split z into n slices, where n is:
    $
  ƽ         The integer square root of
 L                                      the length of z
     X       Random of a list. Returns a random row of the input put into a square
      ṙ5     Rotate the list left 5 times
        O    Get codepoints
         ½   Floating-point square root
          Ọ  From codepoints

Vì vậy, chỉ cần lấy "Xin chào, Thế giới!" và lấy các điểm mã, bình phương chúng, chuyển trở lại điểm mã, xoay đúng 5 lần, sau đó bình phương và làm phẳng kết quả.


3

Octave bởi Stewie Griffin

Không chắc đây có phải là giải pháp chính xác không (trên TIO nó in \00ký tự), nhưng trong octave-clivỏ của tôi, nó trông như thế này:

Vỏ bát

Ngoài ra, trong thử thách ban đầu, nó cho biết in không có gì (hoặc ký tự null) , vì vậy nếu không có gì giống như vậy \00thì điều này sẽ ổn.

[72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33, 0]

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



Nhưng đó không phải là thử thách trông như thế nào, nếu vậy điều này sẽ giúp tôi dễ dàng hơn nhiều (thay thế lần cuối 0bằng a 10).
ბიმო

@BruceForte Đó những gì thử thách yêu cầu: "Thử thách của bạn là viết một chương trình hoặc chức năng, với một đầu vào nhất định, in chuỗi chính xác Hello, World!và một dòng mới." là một trích dẫn chính xác từ các thách thức. Và thực sự, điều đó làm cho câu trả lời tầm thường.
hvd

@hvd Vâng, nhưng nếu bạn nhìn vào hình ảnh của OP thì giải pháp của anh ấy không có, đó là sự nhầm lẫn chính đến từ đâu.
ბიმო

1
@HyperNeutrino FWIW đây là những gì tôi nghĩ rằng phong cách dự định của giải pháp là.
Jonathan Allan


3

JavaScript (ES6) của Ephellon Dantzler

{length:1, charCodeAt:()=>(e='Hello, World!', String.fromCharCode=()=>'')}

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

Điều đó khá dễ dàng.

Tôi nhận thấy rằng bất kỳ đầu vào chuỗi nào cũng không thể xuất ra Hello, World!vì toàn bộ nội dung bên trong String.fromCharCodesẽ chỉ trả về bội số của 4 và !có mã char là 33. Vì vậy, rõ ràng chúng ta chỉ cần hack toàn bộ chương trình. Việc hack được tích hợp sẵn trong JavaScript là không đáng kể nếu một người không cố gắng ngăn chặn chúng (và ngay cả khi một người làm như vậy, thường có rất nhiều cách giải quyết ...).


3

JavaScript (ES6), Voile

Proxy đơn giản chỉ trả về ký tự mong muốn mỗi lần thứ 3 được gọi.

var i = 0;
var string = "Hello, World!";
var proxy = new Proxy([], {
  get: function(target, property) {
    if (!(++i%3)) {
      return string[property];
    }
    return [1];
  }
});

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


2
Vâng, đây là giải pháp dự định :) Proxy cần nhiều tình yêu hơn.
Voile

3

Ruby, bởi Lịch sử

Đầu vào ma thuật là: 1767707618171221 30191World!

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

Giải trình:

  • số 1767707618171221này là số nguyên tố, và, được viết trong cơ sở 36 "hello". Khi viết hoa, sản phẩm "Hello"này được in bằng$><<
  • dòng $><<", #$'"if/30191/tìm kiếm số 30191trong đầu vào và ghi vào đầu ra một chuỗi bao gồm dấu phẩy, dấu cách và bất cứ thứ gì có trong đầu vào sau 30191(sử dụng $POSTMATCH, được gọi ở đây bởi biến thể ngắn của nó, $').

3

Lua 5.1 bởi tehtmi

Vượt qua điều này như là đối số đầu tiên:

C=("").char;_G[C(112,114,105,110,116)](C(72,101,108,108,111,44,32,87,111,114,108,100,33))

Giả sử mã gốc nằm trong một tệp tehtmi.lua, hãy chạy (trong bash hoặc shell tương tự):

lua tehtmi.lua 'C=("").char;_G[C(112,114,105,110,116)](C(72,101,108,108,111,44,32,87,111,114,108,100,33))'

Nó cũng hoạt động trên Lua 5.3, đây là những gì TIO sử dụng, vậy tại sao bạn không thử trực tuyến ? Tôi chưa thử nghiệm triển khai sử dụng lõi "PUC-Rio's Lua 5.1" (vì tôi thực sự không thể tìm thấy bất kỳ thông tin nào), nhưng giải pháp của tôi có lẽ cũng hoạt động ở đó.

Làm sao?

Nó chạy đối số đầu tiên dưới dạng mã, nhưng chỉ khi nó chứa ít hơn 5 ký tự chữ thường.

Bí quyết là chạy print("Hello, World!"). Một cách khác có thể chạy này là sử dụng _G["print"]("Hello, World!"), chỉ sử dụng chuỗi.

Nhưng chúng ta không thể sử dụng chuỗi trực tiếp do hạn chế số lượng chữ thường, tuy nhiên, bạn có thể chạy ("").charđể lấy hàm string.char, có thể chuyển đổi từ một chuỗi byte thành chuỗi. Tôi đã gán nó cho một biến chữ hoa (vì vậy chúng tôi không đạt giới hạn) để chúng tôi có thể sử dụng nó để xây dựng cả chuỗi printHello, World!chuỗi có thể được sử dụng như trên.


À, làm tốt lắm! Tôi đã nghĩ đến việc sử dụng nextthay vì charkhông hoạt động trên Lua 5.3 do ngẫu nhiên hóa thứ tự lặp.
tehtmi

3

JavaScript (ES6) bởi Voile

Đầu vào phải là một chuỗi chứa này:

e(
`\
_\
=\
>\
"\
H\
e\
l\
l\
o\
,\
 \
W\
o\
r\
l\
d\
!\
"\
+\
\`
\`
`)

Hãy thử nó bằng cách này:

const e=eval,p=''.split,c=''.slice,v=[].every,f=s=>(t=c.call(s),typeof s=='string'&&t.length<81&&v.call(p.call(t,`\n`),l=>l.length<3)&&e(t)(t))

input='e(\n`\\\n_\\\n=\\\n>\\\n\"\\\nH\\\ne\\\nl\\\nl\\\no\\\n,\\\n \\\nW\\\no\\\nr\\\nl\\\nd\\\n!\\\n\"\\\n+\\\n\\`\n\\`\n`)'
console.log(f(input))

Nếu bạn không quan tâm đến yêu cầu dòng mới cho đầu ra, bạn có thể thay thế 6 dòng cuối cùng bằng thay thế này:

!"
`)

Làm thế nào tôi làm điều đó

Các hạn chế đối với đầu vào là một chuỗi, mỗi dòng dài từ hai byte trở xuống và tổng chiều dài là 80 byte trở xuống. Nỗ lực đầu tiên của tôi sau khi hiểu chính xác là đây:

_
=>
`\
H\
e\
l\
l\
o\
,\
 \
W\
o\
r\
l\
d\
!
`

Lưu ý: \s là bỏ qua các dòng mới trong chuỗi trong đầu vào. Điều này cực kỳ quan trọng đối với câu trả lời và tôi không thể tin rằng mình đã tình cờ gặp nó. (Tôi đã quen với nó trước đây nhưng quên nó)

Nhưng điều này không hiệu quả, vì =>nó phải nằm trên cùng một dòng với các đối số. Rất may, tôi đã có ý tưởng gói một cái gì đó tương tự trong một chuỗi và đặt một eval vào đầu vào của tôi để giảm nó xuống một dòng, dẫn đến câu trả lời cuối cùng của tôi. Sau khi eval trong đầu vào xảy ra, sau đây được tạo dưới dạng một chuỗi (sau đó được eval'd đến một chức năng và sau đó chạy):

_=>"Hello, World!"+`
`

Điều này thực sự khó khăn để bẻ khóa, nhưng cuối cùng tôi đã thành công.

Ngoài ra, vết nứt đầu tiên bao giờ hết!


3

Về cơ bản bởi MD XF

Tôi tưởng tượng điều này luôn nguy hiểm, nhưng tôi nghĩ rằng tôi có một vết nứt, đang chờ xử lý rằng tôi đúng vì có một lỗi trong trình thông dịch (mà tôi mới biên dịch).

Đầu vào của tôi

0 1 0 1 0 1 0 1 1 0 1 0 0

Đầu ra là Hello, World!\n\n\n\n\n\n\n\n\n\n.....với dòng mới không có hồi kết.

Nhưng tôi nhận thấy phần cuối của mã:

:1/1+1$(@6)7

đặt notepad thành 0x0A(dòng mới) theo cách đáng sợ, đọc đầu vào thành mặt 7 (mặt đầu vào), sau đó in liên tục 6 mặt (mặt notepad) cho đến khi mặt 7 bằng 0. Nếu bạn đặt mặt 7 thành 0, bạn chỉ nên nhận một dòng mới. Tuy nhiên, tôi nhận được dòng mới vô hạn và đầu vào thứ 13 của tôi là 0 và tôi có thể xác minh rằng 7 mặt luôn luôn bằng 0 bằng cách chèn "số in từ 7 mặt" vào vòng lặp:

:1/1+1$(@6%7)7

sau đó nó in \n0các cặp không có hồi kết .

Tôi đang xem xét các thông số kỹ thuật trên trang github hình khối và hành vi này trông rất giống một con bọ. Thay đổi ký tự cuối cùng của chương trình gốc từ a 7thành 0kết quả trong hành vi dự kiến. Trình thông dịch TIO thể hiện hành vi không chính xác.


Nên được sửa ngay bây giờ, ngay khi Dennis kéo theo Cubally, nó sẽ được sửa trên TIO.
MD XF


2

C # (Lõi .NET) , Grzegorz Puławski

Giải pháp tôi tìm thấy sử dụng rất đáng kể các ký tự không thể in được, vì vậy cố gắng dán nó ở đây không hoạt động tốt. Các giá trị byte cho đầu vào là:

109, 89, 4, 121, 3, 11, 8, 29, 37, 38, 27, 25, 72, 4, 4, 4, 3, 3, 3, 4, 4, 37, 3, 27, 4, 3

Hoặc phiên bản chuỗi có sẵn trong trường đầu vào của liên kết TIO.

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

Chương trình ban đầu sẽ lấy các ký tự riêng biệt trong đầu vào, sau đó đảo ngược đầu vào và nhân các phần tử của hai danh sách. Do đó, tôi đã tạo ra một chuỗi dài 26 ký tự trong đó 13 ký tự đầu tiên là khác biệt, tất cả 13 ký tự cuối cùng cũng xuất hiện trong 13 ký tự đầu tiên và mỗi cặp chỉ số [i, 26-i]nhân với giá trị byte của ký tự thứ i trong Hello, World!.


Bạn đã làm rất tốt! Bạn đã quản lý để bỏ qua bẫy Take (a.First () - 33). Nó cũng khiến tôi nhận ra tôi đã quên Disctinc on the Reverse, nhưng ồ, tôi vẫn nghĩ cho một thử thách thú vị. Ngoài ra, nó có% 255 để bạn có thể sử dụng số cao hơn, trong ASCII có thể in được.
Grzegorz Puławski

2

Ly , Lyric

n[>n]<[8+o<]

2 25 92 100 106 103 79 24 36 103 100 100 93 64

Hãy thử ở đây (mặc dù trang không hiển thị dòng mới).

nlấy đầu vào, trys để phân chia trên khoảng trắng và chuyển thành ints, chúng được đặt vào ngăn xếp. oin các điểm thứ tự, và 8+làm những gì người ta sẽ nghĩ. Vì vậy, đầu vào cần phải ít hơn 8 so với các điểm mã theo thứ tự ngược được phân chia theo khoảng trắng.


Điều này không in một dòng mới, phải không?
LyricLy

Ah oops, dễ dàng chỉnh lưu!
Jonathan Allan

... thực sự là nó? Tôi đã có thể nghĩ2 sẽ hoạt động - đó chỉ là trang herokuapp không hiển thị nó?
Jonathan Allan

1
Vâng, thêm 2 tác phẩm. Trang này không hiển thị các dòng mới.
LyricLy

2

C (gcc), bởi Felix Palmen

Mã gốc:

#define O(c)(((char**)v)+c)
#define W(c)*(O(c)-**O(2)+x)
main(x,v){puts(W(42));}

Tranh luận:

"Hello, World!" ","

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

Giải trình:

W(c)đang tính toán địa chỉ của một chuỗi từ danh sách đối số để in ra. Nó bắt đầu bằng địa chỉ của đối số cth ( O(c)), là đối số thứ 42 trong trường hợp này và sau đó trừ ký tự đầu tiên của đối số thứ hai ( **O(2)) dưới dạng bù nguyên, sau đó thêm vào x, đó là số lượng đối số.

W(c)sử dụng đối số thứ hai, vì vậy bạn biết cần phải có ít nhất 3 trong số chúng (0, 1, 2). Rồi "Xin chào, Thế giới!" có thể đi vào đối số đầu tiên và sau đó để giải quyết đối số đó, bạn cần một ký tự có giá trị ASCII phù hợp với phương trình "42-x + 3 = 1". Điều đó xảy ra là ",".


Giải thích tuyệt vời, tôi sẽ chỉnh sửa bài viết của mình ngay khi tôi ở trên PC :)
Felix Palmen

2

JavaScript: ThePirateBay

Tôi ghi đè lên valueOf()toString()các phương thức của các đối tượng được phân tích cú pháp để việc ép buộc không thành công với a TypeError.

{"valueOf": 7, "toString": 7}

12
Umm, tôi dường như không thể hiểu. Xin hãy giải thích hay gì đó? Đặc biệt là phần dalksdjalkdjaS djalksdjalksdja , nó hơi làm tôi bối rối.
Erik the Outgolfer

@EriktheOutgolfer Tôi đã chỉnh sửa phần spam, nhưng tôi không biết tại sao nó lại ở đó.
NoOneIsHãy là

@EriktheOutgolfer oh lol. Đó là thông qua để ngăn câu trả lời của tôi từ tự động chuyển đổi sang một nhận xét.
Maltysen

1
@Maltysen Vâng, có một nút chỉnh sửa ngay tại đó có thể hữu ích vào lần tới;)
Erik the Outgolfer

2

Hội 6502 (C64) - Felix Palmen

Câu trả lời đúng là, 52768,23

Lời giải thích có chút liên quan.

00 c0                          ;load address
20 fd ae      jsr $aefd        ; checks for comma
20 eb b7      jsr $b7eb        ; reads arguments

Đầu tiên mã kiểm tra một dấu phẩy (sự cần thiết của cú pháp) và sau đó đọc thành hai đối số, đầu tiên là một WORD, được lưu trữ cuối cùng ở vị trí bộ nhớ 0014 và 0015, sau đó được lưu trữ trong thanh ghi X.

8a              TXA            ;Store second argument into A (default register)
0a              ASL            ; bitshifts the second argument left (doubles it)
45 14           EOR $14        ; XOR that with the low byte of first argument
8d 21 c0        STA $c021      ; Drop that later in the program

Điều đó khá thông minh, sử dụng đầu vào của chúng tôi để viết lại chương trình. Cuối cùng nó viết lại bộ đếm cho vòng lặp đầu ra ở cuối chương trình.

45 15           EOR $15        ; XOR that with the high byte of the first argument
85 15           STA $15        ; Put the result in $15
49 e5           EOR #$e5       ; XOR that with the number $e5
85 14           STA $14        ; Put that in $14

Đây là phần quanh co:

8e 18 d0        STX $d018      ; stores the original second argument in d018

trên C64, d018 là một byte rất quan trọng. Nó lưu trữ các điểm tham chiếu cho những thứ liên quan đến đầu ra của màn hình. Xem ở đây để biết thêm. Nếu điều này nhận được một giá trị sai, nó sẽ làm hỏng C64 của bạn. Để in các chữ cái viết hoa và viết thường, điều này cần phải là $ 17.

Bây giờ chúng tôi bắt đầu vòng lặp đầu ra của chúng tôi:

a0 00               ldy #$00       ; zeroes out the Y register
b1 14               lda ($14),y    ; puts the memory referenced by the byte
                                   ;   starting at $14 (remember that byte?)
                                   ;   into the default register
20 d2 ff            jsr $ffd2      ; calls the kernal routine to print the char stored in A
c8                  iny            ; increment Y
c0 0e               cpy #$0e       ; test for equality with the constant $0e

Đó là hằng số đã được viết trước đó. Nó xác định rõ ràng bao lâu vòng lặp chạy. Nó đã xảy ra đúng giá trị rồi, nhưng chúng ta cần phải dán lại 0e ở đó.

d0 f6                   bne *-8        ; jump back 8 bytes if y and that constant weren't equal
60                      rts            ; ends the program

Phần còn lại chỉ là thông tin mà chúng ta cần in ra, bắt đầu từ địa chỉ bộ nhớ c025.

Vì vậy, nó chỉ theo toán học từ đó.


Hoàn toàn chính xác, chúc mừng. Tôi có thể mất một lúc để chỉnh sửa bài viết của mình, bây giờ tôi đang sử dụng điện thoại di động.
Felix Palmen

D018 rất thông minh, và tôi thích cách bạn đăng một gợi ý bí mật.
Một người đàn ông vàng

d018 là người mở cửa dự định ... gợi ý là tình cờ, ý tôi là $FFở đó, nhưng sau đó quyết định rời bỏ nó.
Felix Palmen

2

Mã máy 6502 (C64) - Felix Palmen

Đáp án đúng là

8bitsareenough

Mã này khá phức tạp, liên quan đến rất nhiều tự sửa đổi. Vì vậy, thay vì hoàn toàn đảo ngược kỹ thuật, bạn chỉ có thể sử dụng nó để tự bẻ khóa.

Đây là một sự tháo gỡ mã hữu ích hơn một chút, để giúp hiểu những gì đã xảy ra. Cú pháp dành cho KickAssembler.

*=$c000       // LOAD ADDRESS
jsr $aefd     //checks for a comma
jsr $ad9e     /*Reads in an argument. Stores length of it into
                $61, with the address of the stored arg in $62-3*/
jsr $b6a3     /*Evaluates the string, leaving the pointer on $22-3
                and the length on A*/ //I think

ldy #$00
loop: lda thedata,y   
cpy #$01
beq shuffle
cpy #$07
beq shuffle
cpy #$0b
beq shuffle
tricks: jsr output
iny
bne loop
output: eor ($22),y      //XOR's A with the y-eth letter of our input
jmp $ffd2               //good old CHROUT, returns to tricks above
thedata: .byte $f0,$48,$fa,$a2, $1c,$6d,$72,$30
.byte $06,$a9,$03,$48,$7c,$a3
shuffle: sta $c048      //drops A in mystery+4, over the constant
lda $c026,y
sta $c045               //overwrites the low byte of mystery
lda $c027,y
sta $c046               //overwrites the high byte of mystery
ldx #$00
mystery: lda $aefd,x              
eor #$23
jsr output
iny
inx
cpx #$03
bne mystery
cpy #$0e
bne loop
eor #$1a
sta $d018                
rts

Dán nhãn như thế này là đủ để tôi thấy rằng mã XOR tạo ra một loạt các hằng số được ẩn xung quanh để in ra những gì chúng ta cần. Vì XOR có thể đảo ngược, nếu bạn nhập đầu ra mong muốn, nó sẽ cho bạn biết khóa là gì.

Vì vậy, tôi đã chuyển dòng cuối cùng

/*from sta $d018 
to*/ jsr $ffd2

do đó, nó sẽ in đầu vào cần thiết cuối cùng thay vì đâm vào đầu vào sai.

Và đó là điều đó!

Nếu có hứng thú, tôi sẽ bẻ khóa mã nhiều hơn.


Wow, đây thực sự là một phím tắt rất lớn, có lẽ tôi đã buộc phải gặp sự cố với đầu vào sai trước đó trong quá trình xử lý. Có một lối tắt khác có thể btw, sử dụng trình gỡ lỗi của vice. Nhưng bất cứ điều gì, đó là giải pháp chính xác.
Felix Palmen

Tôi không biết rằng phó có một trình sửa lỗi. Đây là những gì tôi nhận được khi học một ngôn ngữ chỉ để bẻ khóa câu trả lời.
Một người đàn ông vàng

Chỉnh sửa bài viết của tôi, với một số giải thích. Tốt lắm, chỉ cần sửa đổi chương trình để không bị sập tất nhiên là một cách khá rõ ràng, tôi đã không nghĩ về điều này.
Felix Palmen

Nitpick: " drops A in mystery+1, over the constant" <- đó thực sự là mystery+4với nhãn của bạn. Vi phạm được tính bằng byte :) và FWIW, tự sửa đổi là khá phổ biến ngay cả trong mã 6502 nghiêm trọng , miễn là mã chạy từ RAM.
Felix Palmen

1

Phát nổ , Bước Hen

@_?&4_-j>5&f^~c>&6\|4>7

Rh / qi ?, Wcr + du

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

  • Cố gắng tìm ra những gì tất cả các "nhà thám hiểm" thực sự đang làm tổn thương đầu người quá nhiều, vì vậy tôi chỉ đảo ngược nó (nghĩa đen: p - bắt đầu từ ký tự ngoài cùng bên phải, tôi lần lượt bù trừ [và xung quanh] phạm vi ký tự có thể in được) .

Làm tốt lắm :) Tôi sẽ thêm một lời giải thích trong vài giờ nữa khi tôi quay lại PC của mình
Stephen

1

C (tcc) bởi Joshua

int puts(const char *s)
{
    printf("Hello, World!%s", s);
}

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


Chết tiệt. Tôi đã có bản crack chính xác này nhưng không thể để nó hoạt động trên TIO. +1
MD XF

Xin lỗi vì việc đó. Bây giờ nó đã được sửa.
Dennis

Bạn có biết vấn đề là gì không?
MD XF

Tôi biết tôi đã sửa nó như thế nào (tcc phải được xây dựng với sự hỗ trợ của SELinux), nhưng tôi không chắc chắn điều đó làm gì hoặc tại sao nó lại cần thiết ở nơi đầu tiên.
Dennis


1

Thạch của Jonathan Allan

Mã gốc:

œ?“¥ĊɲṢŻ;^»œ?@€⁸ḊFmṪ⁷

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

Đầu vào:

1,2586391,2949273,3312154,3312154,1134001,362881,2223505,766081,1134001,1497601,3312154,1860601,140

Giải trình:

Chủ yếu, cần phải hiểu những gì mã làm. Điều đầu tiên nó làm là lấy chuỗi"!,Word Hel"(với tất cả các ký tự cần thiết ngoại trừ dòng mới) và tạo ra một loạt các hoán vị của chúng. Các đầu vào xác định số hoán vị và mỗi cặp hoán vị từ đầu vào được áp dụng cho các cặp loại trừ chuỗi trong đó hoán vị đầu tiên được áp dụng đầu tiên. Về cơ bản, P2 (P1 (S)), P2 (P2 (S), P2 (P3 (S)), ..., P2 (PN (S)), P3 (P1 (S)), ..., P3 (PN (S)), ... ..., PN (P1 (S)), ..., PN (PN (S)). Tất cả đều được nối với nhau. Sau đó, đầu vào cuối cùng được sử dụng lại để lấy mọi PNth ký tự từ chuỗi lớn này. Vì vậy, tôi lấy PN = len (S) * N = 10 * N. Điều này có nghĩa là chúng ta sẽ lấy ký tự đầu tiên của P2 (P1 (S)), ký tự đầu tiên của P3 (P1 (S )), tất cả các cách tiếp cận với ký tự đầu tiên của PN (P1 (S)). Để đơn giản hóa hơn nữa, tôi đặt P1 = 1 là hoán vị danh tính. Sau đó, đủ để chọn bất kỳ P2 nào cho phép "H" vào đầu tiên Chức vụ, một P3 cho phép "e" vào vị trí đầu tiên và cứ thế. May mắn thay, các số hoán vị nhỏ như số đã được chọn cho PN không ảnh hưởng đến các ký tự trước đó trong chuỗi, vì vậy PN bỏ "!" ở đầu chuỗi. (Nếu điều này không đúng, vẫn có thể giải quyết bằng cách chọn một P1 khác.)


Phải mất 14 hoán vị của danh sách 14 hoán vị, làm phẳng, dequeues và sau đó mất mỗi 140 ký tự.
Jonathan Allan

1

C (GCC trên TIO) bởi MD XF

4195875

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

Làm sao?

Nó cố gắng in đối số thứ hai dưới dạng một chuỗi, đó là một con trỏ chúng ta có thể xác định trên đầu vào. Nó chỉ xảy ra rằng tại bộ nhớ vị trí 4195875bắt đầu "Hello, World!\n"chuỗi.

Số được xác định bằng cách thêm vào print("%p", "Hello, World!");trước printf, chuyển đổi số thập lục phân thành số thập phân và thử nó trên TIO ban đầu. Tuy nhiên, nó cho tôi thấy printfchuỗi định dạng. Bằng cách thử một số số, tôi phát hiện ra rằng chuỗi được đặt trước chuỗi định dạng.

Vì vậy, trong bộ nhớ, nó sẽ trông như thế này (dưới dạng chuỗi C):

Hello, World!\n\0%2$s\0

Điều này cũng có nghĩa là bất kỳ cập nhật nào cho trình biên dịch có thể phá vỡ giải pháp.






1

JavaScript (ES6), Voile

Với giới hạn 81 ký tự, đây có lẽ không phải là giải pháp dự định

global.g = ()=>"Hello, World!";
var str = "g";

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


Di truyền. vượt qua một chuỗi char với thao tác toàn cầu. Dường như, nó được thiết kế giải pháp
Евгений Новиков

Đó không phải là giải pháp dự định :(
Voile

Bây giờ tôi đang nghĩ về nó, tôi không nghĩ rằng nó được phép thực hiện hàng tấn thứ như thế này trước khi chuyển đầu vào trong một hàm, trừ khi các công cụ được nói cũng có thể được tạo thành như một phần của đầu vào (ví dụ bên trong hàm sẽ là được đánh giá bên trong), vì thử thách yêu cầu bạn tạo đầu vào sẽ dẫn đến 'Xin chào, Thế giới!', không phải là một chương trình đầy đủ. Nếu không thì khá nhiều không có gì có thể an toàn. Vì vậy, tôi nghĩ rằng vết nứt này có thể không hợp lệ?
Voile

@Voile Nó rất tốt có thể được. Tôi nghĩ thật công bằng khi đọc tác vụ như thể đầu vào phải đứng độc lập (nghĩa là không thay đổi hệ thống bên ngoài) - đặc biệt nếu đây không phải là giải pháp dự định :) Không cần phải đánh dấu cảnh sát của bạn là bị bẻ khóa.
Birjolaxew

1
Tôi đã thực hiện một bài viết meta thảo luận về điều này. Hãy để lại một số cuộc thảo luận ở đó.
Voile
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.