Thay đổi mã, thay đổi trình tự: Cướp


15

Đây là một thử thách . Đối với chủ đề cảnh sát, đ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.

Các cảnh sát đang xây dựng mã A tạo ra S 1 và đưa ra một số X mà họ tuyên bố là khoảng cách Levenshtein tốt nhất có thể (tính bằng ký tự) để tạo B tạo ra S 2 .

Thử thách của bọn cướp

Để bẻ khóa đệ trình của một cảnh sát 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) giống như câu trả lời 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. Đệ trình của tên cướp phải tuân thủ cùng một chỉ số 0 hoặc 1 chỉ số như được chỉ định bởi đệ trình của cảnh sát.

Nếu bạn quản lý vấn đề này, hãy đăng câu trả lời với giải pháp, liên kết đến câu trả lời của cảnh sát và để lại nhận xét về câu trả lời của cảnh sát liên kết lại với bạn.

Mỗi câu trả lời của cảnh sát chỉ có thể bị bẻ khóa một lần, và tất nhiên, bạn không được phép bẻ khóa câu trả lời của chính mình. Nếu câu trả lời của cảnh sát hóa ra không hợp lệ trước hoặc sau khi bị bẻ khóa, thì nó không được tính vào điểm số của tên cướp.

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

Những tên cướp được ghi điểm (X - Y)*5 + 5cho mỗi vết nứt của chúng, và tên cướp có tổng điểm cao nhất sẽ 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 đầu vào / đầu ra 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.

Câu trả lời:


7

Pyke, Levenshtein khoảng cách 1, A036487 , A135628 - điểm 5

Crack của một mục bởi bùn

wX*e

Hãy thử nó ở đây!

Mã ban đầu X*e, bình phương đầu vào, Xnhân số đó với đầu vào *và giảm một nửa rồi kết quả sàn e.

Thủ thuật là 'X'56 trong đại diện 96 của cơ sở w, do đó wXmang lại 56, nhân số đó với đầu vào sau đó là sàn và giảm một nửa và bạn nhận được 28 lần đầu vào khi cần.


Chính xác những gì tôi đã có. Kéo dài lâu hơn một chút so với tôi dự kiến
Màu xanh

Ngay khi nhìn thấy nó tôi biết đó là giải pháp dự định.
Jonathan Allan

4

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

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

Câu trả lời này đã được phát hiện với sự giúp đỡ của một bác sĩ vũ phu, người đã tạo ra 35.000 chương trình có thể (Rất nhiều trong số chúng bị mất cân bằng, và do đó, mã não không hợp lệ, nhưng dù sao tôi cũng đã tìm ra câu trả lời). Đây là khoảng 20 nghìn chương trình đã được thử nghiệm và phải mất khoảng một giờ để tìm thấy (mặc dù tôi không biết chính xác bao lâu kể từ khi tôi đi vắng khi nó kết thúc).

Tôi chưa muốn đăng câu trả lời này vì tôi chưa hiểu đầy đủ về cách thức hoạt động của chương trình này. Tuy nhiên, câu trả lời sắp an toàn nên tôi không muốn nó hết hạn. Tôi hy vọng sẽ cập nhật câu trả lời này nhiều hơn một khi tôi hoàn toàn hiểu nó, cũng như đăng mã tôi đã sử dụng để tìm câu trả lời này. Nhưng bây giờ, tôi sẽ chỉ đăng một phần giải thích.

#Push the sum of:
(

    #The (n-1)th triangular number, and the range [1, n] (The range doesn't count towards the sum I believe)
    ({(({})[()])}{})

    #Triangulate every number on the stack
    {{({}[()])}{}}

)

Điều này có ý nghĩa bởi vì OEIS tuyên bố:

Với n> 0, các điều khoản của chuỗi này có liên quan đến A000124 bởi a (n) = sum (i * A000124 (i), i = 0..n - 1). [Bruno Berselli, ngày 20 tháng 12 năm 2013]

Và A000124 là các số tam giác + 1. Tuy nhiên, tôi không biết chính xác diễn đàn là gì, vì vậy tôi không thể giải thích đầy đủ về cách thức hoạt động của nó.


3

Perl 6, 19 byte, X = 1, A000045 → A000035

{(0,1,*+<*...*)[$_]}

+>thay vì +<cũng sẽ làm việc

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

Làm thế nào nó hoạt động

infix ... khá hữu ích cho các chuỗi đệ quy đơn giản. Một (0,1,*+*...*)phần của mã gốc, là một tốc ký cho

(0, 1, -> $x, $y { $x + $y } ... *)

chỉ định một chuỗi bắt đầu bằng 01 , sau đó thêm các mục bằng cách tính tổng của hai mục trước đó của chuỗi.

Ngược lại, (0,1,*+<*...*)sử dụng dịch chuyển bit trái ( +>, dịch chuyển bit phải cũng sẽ hoạt động) để xây dựng chuỗi tương đương. Vì dịch chuyển 1 đơn vị 0 sang trái là 1 và dịch chuyển 0 một đơn vị sang trái là 0 , chúng tôi nhận được các mẫu xen kẽ mong muốn của các số và số 0.


2

Perl 6 , 10 byte, khoảng cách 1 - điểm 5

Crack của một mục bởi smls

*[0]o 1***

Trở thành:

*[0]o 1*+*

Dùng thử trực tuyến!


Làm tốt lắm! Tôi đã không nghĩ đến giải pháp này, tôi đã khó khăn hơn một chút và thực sự cần *[0]o phải có mặt ở đó. Tôi đoán điều đó có nghĩa là tôi có thể đưa ra một thử thách khác dựa trên "mánh khóe" của mình ... :)
smls

Tôi thực sự không biết Perl, chỉ nhìn thấy ***và nghĩ rằng có vẻ như nó có thể mở ra hoạt động nhân giống dyadic *, với các đối số trước đó, tôi thực sự không biết mã thực sự làm gì. Hãy chỉnh sửa trong một số giải thích!
Jonathan Allan

2
1***được phân tích cú pháp dưới dạng 1 ** *, tức là lambda có "1 với sức mạnh của x". 1*+*được phân tích cú pháp dưới dạng 1 * (+*), tức là một lambda có "1 nhân với (x được chuyển đổi thành một số)".
smls

2

Perl 6 , khoảng cách 2, smls

Nguyên:

+(*%%2)

Crack:

+(*+0%2)

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


Chết tiệt, một lần nữa, một giải pháp đơn giản mà tôi đã không cân nhắc ... (Của tôi thì khó hiểu hơn nhiều +(^*Z%2). Tôi đoán tôi không giỏi trong việc phác thảo những thách thức này.
smls 14/2/2017

2

WolframAlpha, Khoảng cách 1, Greg Martin , A002378 , A000537

(sum1to#of n^1)^2&

Làm thế nào nó hoạt động

Tôi nhận ra rằng thật thú vị, (n * (n + 1) / 2) ^ 2 là một công thức cho chuỗi thứ hai. Vì tổng (1 đến n) tương đương với n * (n + 1) / 2, tôi chỉ cần chuyển * thành a ^.


Bạn nên thông báo cho anh ấy rằng bạn đã bẻ khóa câu trả lời của anh ấy
Post Rock Garf Hunter 14/2/2017

Cũng phát hiện ra! :)
Greg Martin



1

JavaScript (ES6), Khoảng cách 1, Advancid

Nguyên:

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

Crack:

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

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

hoặc là

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

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

Bằng cách nào đó tôi đã có thể khiến nó hoạt động khác đi giữa TIO và repl.it (hoàn toàn không có lý do tại sao 2 * 1 ^ ... sẽ bằng 0 như theo repl.it)


Tôi quá ngu ngốc, tôi đã không nghĩ đến việc thay đổi 2 thành 0. Đây là hàm B : as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}.


1

Java, Khoảng cách 4, Peech , A094683 , A000290

Nguyên:

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

Crack:

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%1==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)n*n:k;}
                                                                                                                                                          ^                                                         ^^^

trả về n * n


1

Javascript, Advancid , khoảng cách 2, A059841 A000004

Chỉ để lại mã phía sau liên kết TIO vì dường như nó đang phá vỡ trang web.

Cảm ơn @nderscore, có tôi dùng để giải mã các mã ban đầu

Có một số mã dự phòng như sử dụng !! [] + [] + [] thay vì !! [] + [].

Việc thêm! + [] - (! + []) (+ 1-1) ban đầu đã ngăn chặn quá trình giải mã.

Dùng thử trực tuyến


1

Pyke, Levenshtein khoảng cách 2, A008788, A007526

'SS^

Hãy thử nó ở đây!

Làm thế nào nó hoạt động

Điều này không chuyển đổi cơ sở hỗn hợp.

'Slấy n đầu vào và áp dụng, đẩy [1, ..., n] trên ngăn xếp. Tiếp theo Slấy đầu vào n và đẩy cùng một mảng một lần nữa. 'dường như khiến lệnh tiếp theo được áp dụng cho đỉnh trước đó trên ngăn xếp; Tôi hơi mờ về các chi tiết.

Cuối cùng, ^áp dụng chuyển đổi cơ sở hỗn hợp, vì vậy [1, ..., n] [1, ..., n] f tính toán
a (n): = [1] n + n + (n) (n-1) .. . + [n!] 1 trong đó dấu ngoặc chỉ giá trị vị trí và số ở bên phải chữ số.

Bây giờ, a (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) N = n ( a (n) + 1) , là công thức đệ quy tương tự xác định a (n) trong [A007526]. Vì tổng trống là 0, nên a (0) = 0 và trường hợp cơ sở cũng khớp.


Làm thế nào bạn có được nó với rất ít nỗ lực? Tôi quan tâm đến quá trình suy nghĩ của bạn
Blue

Chuyển đổi cơ sở hỗn hợp là một thủ thuật chơi golf khá phổ biến. Đây không phải là lần đầu tiên tôi sử dụng nó.
Dennis
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.