Thay đổi mã, thay đổi trình tự: Cảnh sát


27

Đây là một thử thách . Đối với chủ đề cướp, đi đến đây .

Thử thách này liên quan đến hai trình tự OEIS được lựa chọn bởi cảnh sát - S 1 , S 2 - và các trình tự đó có thể được đánh golf và che giấu tốt như thế nào.

Thử thách của cảnh sát

Thử thách của bạn với tư cách là một cảnh sát là chọn một ngôn ngữ có sẵn miễn phí và hai chuỗi OEIS. Sau đó, viết mã A bằng ngôn ngữ đó lấy đầu vào n và tạo S 1 (n). Khi mã đó được sửa đổi bởi khoảng cách Levenshtein của các ký tự X (với X không quá 0.5 * (length A)) và biến thành mã B trong cùng một ngôn ngữ, thì nó phải tạo ra S 2 (n). Bạn thực sự phải viết mã B này , nhưng đừng tiết lộ nó cho đến khi thử thách của bạn an toàn (xem bên dưới).

Việc gửi của cảnh sát phải bao gồm tên ngôn ngữ, mã đầy đủ A , số byte của A , giá trị X của số lượng thay đổi để nhận mã B bí mật của họ và số thứ tự S 1S 2 đã chọn . Bạn có thể chọn xem mỗi chuỗi là 0 chỉ mục hay 1 chỉ mục, nhưng vui lòng chỉ định điều đó trong bài gửi của bạn.

Để bẻ khóa một đệ trình cụ thể, những tên cướp phải đưa ra một chương trình C có cùng ngôn ngữ (và phiên bản) tạo ra S 2 (n) và ký tự Y thay đổi từ A (với Y <= X). Những tên cướp không nhất thiết phải tìm chính xác mã B mà cảnh sát (bí mật) tạo ra.

Chiến thắng và chấm điểm

Nếu câu trả lời của cảnh sát của bạn không bị bẻ khóa trong vòng 7 ngày (168 giờ), bạn có thể tiết lộ giải pháp B của riêng mình , tại thời điểm đó câu trả lời của bạn được coi là an toàn. Miễn là bạn không tiết lộ giải pháp của mình, nó vẫn có thể bị bọn cướp bẻ khóa, ngay cả khi 7 ngày đã trôi qua. Nếu câu trả lời của bạn bị bẻ khóa, vui lòng cho biết điều này trong tiêu đề câu trả lời của bạn, cùng với liên kết đến câu trả lời của tên cướp tương ứng.

Cảnh sát giành chiến thắng bằng cách đệ trình không bị theo dõi với A ngắn nhất . Nếu được buộc, thì X nhỏ nhất sẽ được sử dụng làm bộ ngắt kết nối. Nếu vẫn bị ràng buộc, đệ trình trước đó sẽ giành chiến thắng.

Quy tắc khác

  • Bạn không được sử dụng bất kỳ tích hợp nào để băm, mã hóa hoặc tạo số ngẫu nhiên (ngay cả khi bạn chọn trình tạo số ngẫu nhiên cho một giá trị cố định).
  • Các chương trình hoặc chức năng đều được cho phép, nhưng mã không được là đoạn trích và bạn không được giả sử môi trường REPL.
  • Bạn có thể lấy đầu vào và đưa ra đầu ra ở bất kỳ định dạng thuận tiện . Các phương thức nhập / xuất phải giống nhau cho cả hai chuỗi.
  • Máy tính dứt khoát cho khoảng cách Levenshtein cho thử thách này là cái này trên Planet Calc.
  • Ngoài việc là một thử thách CnR, đây là nên tất cả các quy tắc chơi golf thông thường đều được áp dụng.

Ngoài ra, hãy chắc chắn nếu bạn thay đổi điều gì đó trong câu hỏi này, rằng bạn cập nhật một tên cướp.
mbomb007

Điều gì xảy ra nếu một cảnh sát đặt tên cho một hàm / biến thực sự lớn đối với mã thực tế tạo ra chuỗi? Bạn có thể tạo bất kỳ chuỗi nào trong trường hợp này với khoảng cách lev của nó nhỏ hơn(0.5*len(A))
hashcode55

@ hashcode55 Hai điều - 1) không có khả năng trở thành ứng cử viên sáng giá để giành được chủ đề của cảnh sát. 2) nếu nó to lớn như vậy, nó cũng tạo ra một khoảng thời gian tốt để bọn cướp bẻ khóa nó.
admBorkBork

1
" Đây là môn đánh gôn, vì vậy tất cả các quy tắc chơi golf thông thường đều được áp dụng " Điều này có nghĩa là mã A phải được đánh golf càng nhiều càng tốt, hoặc nó có thể được viết một cách cố ý theo cách quá dài dòng / lúng túng để làm cho nó giống với mã B hơn ?
smls

Câu trả lời:


10

Brain-Flak , 28 byte, Khoảng cách 4, A002817 , A090809 Cracked

Câu trả lời này sử dụng lập chỉ mục 1

(({({}[()])}{}){({}[()])}{})

Dùng thử trực tuyến

Đối với bất kỳ ai quan tâm, có 27485 chương trình Brain-Flak hợp lệ với khoảng cách Levenshtein 4 từ chương trình này và 27707 với khoảng cách 4 hoặc ít hơn. Vì vậy, một giải pháp vũ phu sẽ khả thi trên một máy tính cấp tiêu dùng.


Nó có thể ngắn hơn và nhanh hơn để đọc nếu bạn có X = 4thay vì Levenshtein distance of 4.
mbomb007

1
@ mbomb007 Cá nhân tôi có một chút bối rối khi các thách thức sử dụng một loạt các biến chữ cái để thay thế cho những điều tôi đang cố gắng tránh nhầm lẫn. Tôi đã làm cho nó ngắn hơn bây giờ, hy vọng mà không gây ra bất kỳ sự nhầm lẫn.
Thuật sĩ lúa mì

nhún vai . Nếu mọi người đọc câu hỏi, họ sẽ nhận được nó. Xthực sự là biến số duy nhất họ cần biết.
mbomb007

@ mbomb007 Mặc dù, câu hỏi cũng yêu cầu số byte.
DLosc


6

7 , 33 ký tự, 13 byte, X = 10, A000124A000142 , An toàn

171720514057071616777023671335133

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

Khoảng cách Levenshtein được đo bằng các ký tự, vì vậy tôi đã viết chương trình theo các ký tự có ở trên (và Dùng thử trực tuyến!, Bao gồm cả ngôn ngữ, rất vui khi chạy các chương trình được mã hóa trong ASCII). Tuy nhiên, chương trình được lưu trữ trong đĩa bằng cách sử dụng mã hóa byte phụ của 7, nghĩa là bản thân chương trình thực sự là hexdump sau (do đó dài 13 byte):

00000000: 3cf4 2982 f1ce 3bfe 13dc b74b 7f         <.)...;....K.

(Vì khoảng cách Levenshtein được đo bằng các ký tự, nên bạn không nhất thiết phải thêm / xóa / thay đổi 10 byte ở đây, vì vậy có lẽ tốt nhất để làm việc với ASCII ban đầu.)

Chương trình dưới dạng văn bản thực hiện A000124 (số tam giác + 1); bất kỳ vết nứt nào cũng phải thực hiện A000142 (giai thừa). Cả hai chương trình đều lấy đầu vào từ stdin (dưới dạng số nguyên thập phân), ghi đầu ra của chúng vào thiết bị xuất chuẩn và coi đầu vào là 1 có nghĩa là phần tử đầu tiên của chuỗi (và đầu vào là 2 là phần tử thứ hai, v.v.).

Hy vọng rằng giá trị X rất cao sẽ ngăn chặn mọi người bắt buộc chương trình, lần này (điều này luôn có rủi ro với các mục cảnh sát và cướp trong 7).

Giải pháp

177172051772664057074056167770236713351353

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

Sự khác biệt so với bản gốc:

17 172051 405707 1 61677702367133513 3
17 7 172051 77266 405707 405 61677702367133513 5 3

Tôi không có lời giải thích được chuẩn bị cho cách thức hoạt động của những thứ này, vì vậy tôi sẽ mất một lúc để giải thích, vì tôi sẽ phải tìm ra nó từ đầu. Hy vọng sẽ có một lời giải thích cuối cùng.




3

Perl 6 , 13 byte, X = 1, A161680A000217

An toàn!

{[+] [,] ^$_}
  • S 1 = A161680 = 0 0 1 3 6 10 15 21...= Zero theo sau là các số tam giác.
  • S 2 = A000217 = 0 1 3 6 10 15 21 28 ...= Các số tam giác.
  • Không có chỉ mục.

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

(Được xác nhận sẽ hoạt động với phiên bản Perl 6 chạy trên TIO.)

Dung dịch

{[+] [\,] ^$_}

Cách thức hoạt động của bản gốc:

{           }  # A lambda.
          $_   # Lambda argument.                     e.g. 4
         ^     # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [,]       # Reduce with comma operator.          e.g. 0, 1, 2, 3
 [+]           # Reduce with addition operator.       e.g. 6

Cách thức hoạt động của giải pháp:

{            } # A lambda.
           $_  # Lambda argument.                     e.g. 4
          ^    # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [\,]      # Triangle reduce with comma operator. e.g. (0), (0,1), (0,1,2), (0,1,2,3)
 [+]           # Reduce with addition operator.       e.g. 10

Khai thác thực tế là các toán tử số như phép cộng cũng coi một danh sách là số phần tử của nó, vì vậy trong ví dụ tổng là 1 + 2 + 3 + 4 = 10.

Và vâng, "Giảm với toán tử dấu phẩy" trong bản gốc là không tuân theo các quy tắc golf-code, nhưng tôi thích xem nó như một thuật toán ngớ ngẩn đã được chơi golf nhiều nhất có thể (khoảng trắng, v.v.) cho nó là gì ... :)


Điều này là cầu xin để bị ép buộc, nếu tôi có thời gian hoặc thiên hướng (và kiến ​​thức về perl).
Rohan Jhunjhunwala

Điều này đã tồn tại đủ lâu để được đánh dấu là an toàn
fnɛtɪk


2

Javascript, 41 byte, Khoảng cách 3, A061313 , A004526 , Cracked

f=x=>{return x>1?x%2?f(x+1)+1:f(x/2)+1:0}

Dùng thử trực tuyến

Sử dụng lập chỉ mục dựa trên 1, giải pháp sử dụng lập chỉ mục dựa trên 0.

Một lần nữa, một giải pháp khác ...

f=x=>{return x>1?x<2?f(x-1)+1:f(x-2)+1:0}


3
Nhân tiện, bạn không nên sử dụng permalinks tio.run . Họ sẽ ngừng làm việc sớm.
Dennis

^ Sử dụng tio.run/nexus thay thế.
mbomb007


1

WolframAlpha, 18 byte, X = 1

Bị bẻ khóa bởi math_junkie!

(sum1to#of n^1)*2&

Đôi khi WolframAlpha thực sự sẽ có thể hiển thị một chức năng thuần túy như thế này ở dạng chức năng (lần khác nó bị lẫn lộn); nhưng nó có thể được gọi một cách vui vẻ với đầu vào cho trước, ví dụ, (sum1to#of n^1)*2&@5năng suất 30.

S1 = A002378 (số nguyên tố)

S2 = A000537 (tổng của các nhình khối đầu tiên )

Cả hai chuỗi đều được lập chỉ mục 0.




1

Javascript, 15704 byte, khoảng cách 2, A059841A000004 - đã bị bẻ khóa

Giải pháp này cực kỳ dài, vì vậy bạn có thể tìm thấy mã đầy đủ tại gistub này.

Câu trả lời ban đầu (cái này) là 1 chỉ mục. (Tôi biết điều này là quá dài, nó chỉ để cho vui.)


Nứt . Ngoài ra, việc thêm mã hoàn toàn vô dụng! + [] - (! + []) Không thực sự theo tinh thần của các quy tắc
fnɛtɪk

Chỉ để bạn biết, câu trả lời này đang gây ra một số vấn đề cho OP của thử thách này. Rõ ràng nó làm cho toàn bộ trang bị chặn vì nó trông giống như JavaScript sơ sài. Bạn có thể đặt mã trong một liên kết bên ngoài? (Gist, pastedump, v.v.)
DJMcMayhem

Trên thực tế, tôi đã đặt nó trong một ý chính. Nếu bạn muốn có mã ở nơi khác, vui lòng chỉnh sửa lại nếu tôi đã vượt quá giới hạn của mình.
DJMcMayhem

Tôi đoán rằng! + [] - (! + []) Làm điều đó để bạn không thể đảo ngược chuyển đổi. Nhưng một số rác khác chỉ làm cho nó dài hơn. Mã tương đương chỉ là 15640 byte.
fnɛtɪk


0

Javascript, 30 byte, Khoảng cách 4, A000290 , A000079 , - Đã bẻ khóa !

f=x=>{return x?2*x-1+f(x-1):0}

Lập chỉ mục dựa trên 0

Giải pháp của @Kritixi Lithos thực sự khác với tôi

f=x=>{return x?f(x-1)+f(x-1):1}

Dùng thử trực tuyến


1
Đây là x**2và không2**x
Kritixi Lithos

Tôi nghĩ đó là A000290 , không phải A000079.
betseg

@KritixiLithos nó được coi là cả hai. Tôi đã thay đổi liên kết trình tự sai trên đầu trang khi tôi thay đổi đầu kia.
fnɛtɪk


0

Javascript (ES6), khoảng cách là 1, A000079A000004 - đã bị bẻ khóa

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

Câu trả lời ban đầu (cái này) là 0 dựa. Bây giờ nó đã bị bẻ khóa, đây là chức năng B ban đầu:

as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

1
Tôi đã có thể nhận được crack codegolf.stackexchange.com/a/109976/64505 để hành xử không nhất quán giữa hai môi trường khác nhau.
fnɛtɪk


0

Java 7, Levenshtein khoảng cách 4, A094683 , A000290 , Cracked

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

Chỉ số 0.
Hãy thử nó ở đây!


@LliwTelracs đã làm điều đó trong 15 số nguyên không âm đầu tiên, xem câu trả lời cập nhật của tôi.
p336

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.