Nguy hiểm PPCG: Cướp


18

Làm thế nào để bạn biết trang web? Hãy cùng tìm hiểu.

Đây là một thử thách . Chủ đề của Cop .

Là một tên cướp, bạn cần phải:

  1. Tìm một thách thức không bị xóa, không đóng phù hợp với đệ trình của cảnh sát. Thách thức không thể có các thẻ sau đây: , , , , , , , . Thách thức phải có những hạn chế về đầu ra hợp lệ.
  2. Đăng thử thách ở đây và liên kết với cảnh sát mà bạn đang bẻ khóa
  3. Thêm một bình luận "Cracked" vào bài viết của cảnh sát, với một liên kết quay lại câu trả lời này

Bạn sẽ nhận được 1 điểm, cộng thêm 1 điểm cho mỗi khoảng thời gian 24 giờ, bài nộp vẫn không bị khóa (tối đa 7). Tiebreaker là tổng số Subisisons bị nứt.

Ghi chú:

  • Nếu một thách thức đòi hỏi công suất X, và bạn ra XYhoặc YXnơi Ylà bất cứ điều gì ngoài khoảng trắng, nộp là không hợp lệ cho thách thức đó.
  • Một thách thức mới hơn 2016-11-17 không được phép.
  • Tôi bảo lưu quyền cấm một số thách thức nhất định nếu chúng được áp dụng rộng rãi (có thể được áp dụng cho phần lớn tất cả các bài nộp).
  • Hãy chắc chắn rằng bạn thêm một hoặc hai câu làm lời giải thích (nó cũng giúp bài đăng của bạn không bị chuyển đổi thành nhận xét)
  • Cảm ơn Daniel vì ý tưởng ban đầu!


Câu trả lời:


5

Tính xác suất để có được một nửa số đầu khi tung đồng xu.

Mục nhập cảnh sát (được đăng bởi Conor O'Brien): /codegolf//a/100521/8927

Câu hỏi ban đầu: Tính xác suất nhận được một nửa số đầu khi tung đồng xu.


Các giải pháp được đăng có một vài kỹ thuật obfuscation được áp dụng, tiếp theo là nhiều lớp của cùng một kỹ thuật obfuscation. Khi đã qua một vài thủ thuật đầu tiên, nó trở thành một nhiệm vụ đơn giản (nếu tẻ nhạt!) Để trích xuất hàm thực tế:

nCr(a,b) = a! / ((a-b)! * b!)
result = nCr(x, x/2) / 2^x

Mất một lúc để nhận ra những gì tôi đang nhìn (trong một thời gian tôi đã nghi ngờ phải làm gì đó với entropy), nhưng một khi nó xoay, tôi đã tìm thấy câu hỏi một cách dễ dàng bằng cách tìm kiếm "xác suất tung đồng xu".


Vì Conor O'Brien đã thách thức một lời giải thích sâu sắc về mã của mình, đây là một danh sách các bit thú vị hơn:

Nó bắt đầu bằng cách làm xáo trộn một số cuộc gọi chức năng tích hợp. Điều này đạt được bằng cách mã hóa cơ sở 32 tên hàm, sau đó gán chúng cho tên không gian tên toàn cục mới của một ký tự. Chỉ 'atob' thực sự được sử dụng; 2 cái còn lại chỉ là cá trích đỏ (eval có cùng tốc ký như atob, chỉ bị ghi đè và btoa đơn giản là không được sử dụng).

_=this;
[
    490837, // eval -> U="undefined"       -> u(x) = eval(x) (but overwritten below), y = eval
    358155, // atob -> U="function (M,..." -> u(x) = atob(x)
    390922  // btoa -> U="function (M,..." -> n(x) = btoa(x), U[10] = 'M'
].map(
    y=function(M,i){
        return _[(U=y+"")[i]] = _[M.toString(2<<2<<2)]
    }
);

Tiếp theo là một vài kết hợp chuỗi tầm thường để ẩn mã. Đây là những dễ dàng đảo ngược:

u(["","GQ9ZygiYTwyPzE6YSpk","C0tYSki","SkoYSkvZChhLWIpL2QoYikg"].join("K"))
// becomes
'(d=g("a<2?1:a*d(--a)"))(a)/d(a-b)/d(b) '

u("KScpKWIsYShFLCliLGEoQyhEJyhnLGM9RSxiPUQsYT1D").split("").reverse().join("")
// becomes
"C=a,D=b,E=c,g('D(C(a,b),E(a,b))')"

Phần lớn của obfuscation là việc sử dụng ghàm, chỉ đơn giản là định nghĩa các hàm mới. Điều này được áp dụng đệ quy, với các hàm trả về các hàm mới hoặc yêu cầu các hàm làm tham số, nhưng cuối cùng đơn giản hóa ngay. Chức năng thú vị nhất được đưa ra là:

function e(a,b){ // a! / ((a-b)! * b!) = nCr
    d=function(a){return a<2?1:a*d(--a)} // Factorial
    return d(a)/d(a-b)/d(b)
}

Ngoài ra còn có một mẹo cuối cùng với dòng này:

U[10]+[![]+[]][+[]][++[+[]][+[]]]+[!+[]+[]][+[]][+[]]+17..toString(2<<2<<2)
// U = "function (M,i"..., so U[10] = 'M'. The rest just evaluates to "ath", so this just reads "Math"

Mặc dù vì bit tiếp theo là ".pow (T, a)", nên luôn có khả năng nó phải là "Toán học"!

Các bước tôi đã thực hiện dọc theo lộ trình mở rộng chức năng là:

// Minimal substitutions:
function g(s){return Function("a","b","c","return "+s)};
function e(a,b,c){return (d=g("a<2?1:a*d(--a)"))(a)/d(a-b)/d(b)}
function h(a,b,c){return A=a,B=b,g('A(a,B(a))')}
function j(a,b,c){return a/b}
function L(a,b,c){return Z=a,Y=b,g('Z(a,Y)')}
k=L(j,T=2);
function F(a,b,c){return C=a,D=b,E=c,g('D(C(a,b),E(a,b))')}
RESULT=F(
    h(e,k),
    j,
    function(a,b,c){return _['Math'].pow(T,a)}
);


// First pass
function e(a,b){
    d=function(a){return a<2?1:a*d(--a)}
    return d(a)/d(a-b)/d(b)
}
function h(a,b){
    A=a
    B=b
    return function(a){
        return A(a,B(a))
    }
}
function j(a,b){ // ratio function
    return a/b
}
function L(a,b){ // binding function (binds param b)
    Z=a
    Y=b
    return function(a){
        return Z(a,Y)
    }
}
T=2; // Number of states the coin can take
k=L(j,T); // function to calculate number of heads required for fairness
function F(a,b,c){
    C=a
    D=b
    E=c
    return function(a,b,c){return D(C(a,b),E(a,b))}
}
RESULT=F(
    h(e,k),
    j,
    function(a){return Math.pow(T,a)}
);


// Second pass
function e(a,b){...}
function k(a){
    return a/2
}
function F(a,b,c){
    C=a
    D=b
    E=c
    return function(a,b,c){return D(C(a,b),E(a,b))}
}
RESULT=F(
    function(a){
        return e(a,k(a))
    },
    function(a,b){
        return a/b
    },
    function(a){return Math.pow(2,a)}
);


// Third pass
function e(a,b) {...}
C=function(a){ // nCr(x,x/2) function
    return e(a,a/2)
}
D=function(a,b){ // ratio function
    return a/b
}
E=function(a){return Math.pow(2,a)} // 2^x function
RESULT=function(a,b,c){
    return D(C(a,b),E(a,b))
}

Cấu trúc của chức năng lồng nhau dựa trên tiện ích; hàm "D" / "j" ngoài cùng tính toán tỷ lệ, sau đó các hàm "C" / "h" và "E" (nội tuyến) bên trong tính toán số lần lật đồng xu cần thiết. Hàm "F", được loại bỏ trong đường chuyền thứ ba, chịu trách nhiệm kết nối những thứ này lại với nhau thành một tổng thể có thể sử dụng được. Tương tự, chức năng "k" chịu trách nhiệm chọn số lượng đầu cần quan sát; một tác vụ mà nó ủy nhiệm cho hàm tỷ lệ "D" / "j" thông qua chức năng liên kết tham số "L"; sử dụng ở đây để tham số cố định bđể T(ở đây luôn 2, là số của các quốc gia đồng xu có thể mất).

Cuối cùng, chúng tôi nhận được:

function e(a,b){ // a! / ((a-b)! * b!)
    d=function(a){return a<2?1:a*d(--a)} // Factorial
    return d(a)/d(a-b)/d(b)
}
RESULT=function(a){
    return e(a, a/2) / Math.pow(2,a)
}

Làm tốt lắm! Điều này hơi không chính xác - eval được đặt thành f. Nhưng phần còn lại là chính xác! Ngoài ra, một chút công phu về cách RESULTxuất phát có thể xứng đáng;)
Conor O'Brien

@ ConorO'Brien chắc chắn; Tôi đã thêm ghi chú của mình và giải thích về tiện ích của từng chức năng trước khi thu gọn tất cả.
Dave

@ ConorO'Brien cảm ơn vì tiền thưởng!
Dave

Luôn luôn là một niềm vui :)
Conor O'Brien

3

MATL, Luis Mendo , Đếm số thập phân khổng lồ giữa 2 số

&:"@FYAYm7>vs

Tôi đã tìm ra những gì nó làm bằng cách chơi với các đầu vào, nhưng tôi không thể tìm ra thử thách nào bạn phải tính toán số nguyên trong một phạm vi có tổng lớn hơn 7 lần số chữ số. Sau khi đọc các tài liệu MATL, tôi đưa ra một lời giải thích sơ bộ về những gì nó làm:

&    % Change default input format
:    % Implictly input two integers, create inclusive range
"    % For each item in this range:
  @    % Push the item
  F    % Push false
  YA   % Convert to base N digits; N is false, so this produces base-10 digits
  Ym   % Calculate arithmetic mean
  7>   % Push 1 if this is greater than 7, 0 otherwise
  v    % Concatenate result into array with previous result
  s    % Sum
     % Implicitly end loop and output

Sau đó, tôi đã chuyển từ tìm kiếm "tổng số chữ số lớn hơn 7 lần chiều dài" sang "chữ số trung bình lớn hơn 7", điều này mang lại thách thức mà tôi đang tìm kiếm.





2

Perl, Gabriel Benamy , Công cụ kiểm tra palindrom tiện lợi

Mã rõ ràng là một loại palindrom. Khi tôi chọn y- - -cấu trúc và nhận thấy những gì đang được phiên âm, tôi biết nó là thách thức gì.


Bạn đánh bại tôi vài giây ... nhưng mất quá nhiều thời gian để tải xuống perl.
Laikoni

@Laikoni Thành thật mà nói, sau khi một vài lần thử Ideone, tôi đã từ bỏ việc chạy mã và thay vào đó là thử đọc nó. ;)
DLosc



1

MATL, Luis Mendo , Tính trọng lượng hamming với trọng lượng hamming thấp

dP7EGn:q^1J2/h)ts_hX=Gs[BE]Wd=~>~GBz*

Tôi đã thử nghiệm đưa số lượng và tìm thấy điều nặng nề trên OEIS .

Sau đó, tôi đã tìm kiếm trên PPCG, thử đặt chuỗi và nó hoạt động.


Như tôi đã nhận xét trong thử thách cảnh sát, điều này không thực sự phá vỡ trình của tôi. Thật không may, tôi đoán câu trả lời này cần phải bị xóa
Luis Mendo


1

Ruby, histocrat , Thực hiện một cỗ máy sự thật

Mã xác định một hệ thống chức năng lặp f(n) = n*(3*n-1)/2chạy cho đến khi nmod 7 bằng 0. Đầu vào 0do đó chấm dứt ngay lập tức (sau khi in 0một lần). Đầu vào của 1cho 1, dẫn đến một vòng lặp vô hạn của in ấn 1. Đầu vào khác kết thúc sau 1-3 bước nếu ban đầu nphù hợp với 0, 2, 3, 5 hoặc 6 mod 7 hoặc phát triển mãi mãi nếu nó phù hợp với 1 hoặc 4 mod 7. Nhưng điều đó không liên quan.


1

Hexagony, 548 byte, Martin Ender

Đây là thử thách " In mọi nhân vật mà chương trình của bạn không có "!

Bản in:

Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look

Điều này rất giống với đầu ra trong cái này . Manh mối ở đây là cái cuối cùng .không được in. Ngoài ra, bản thân mã không có chữ cái và tất cả chúng ta đều biết rằng các cụm từ trong đầu ra chứa tất cả các chữ cái trong bảng chữ cái.



0

Python 3, /codegolf//a/100381/31343

Sử dụng công thức của xkcd để ước tính dân số thế giới

Tôi chỉ tìm kiếm những thách thức liên quan đến năm nhuận (vì sự phân chia được giải mã bởi bốn người kiểm tra) và điều đó không có đầu vào.


Vâng! Tôi biết nó sẽ là hiển nhiên vì sự %4strftime, nhưng công việc tốt cho việc tìm kiếm những phần quan trọng của mã (hầu hết của nó là vô nghia)
FlipTack

Ah dangit, tôi cũng đang đến gần. Tôi đã tìm ra nó là một cái gì đó để làm với ngày, đã nhận được năm 2005 và 2016/2017. Công việc tốt.
Yodle

Tôi ngạc nhiên khi cả hai bạn không đơn giản chạy mã, tạo ra đầu ra 7.3 328và tìm kiếm nó. Thách thức đến ngay lập tức.
FlipTack



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.