Cuộc thi này đã kết thúc.
Do tính chất của các thử thách cảnh sát và cướp , thử thách cảnh sát trở nên dễ dàng hơn rất nhiều khi sự quan tâm đến thử thách cướp liên quan đã giảm đi. Do đó, trong khi bạn vẫn có thể đăng các hàm băm, câu trả lời của bạn sẽ không được chấp nhận hoặc tạo thành một phần của bảng xếp hạng.
Thách thức này là tìm kiếm cách thực hiện ngắn nhất của hàm băm có khả năng chống va chạm , nghĩa là không thể tìm thấy hai thông báo khác nhau có cùng hàm băm.
Là một cảnh sát, bạn cố gắng phát minh và thực hiện hàm băm để tìm ra sự thỏa hiệp tốt nhất giữa kích thước mã và khả năng chống va chạm. Sử dụng quá nhiều byte và một cảnh sát khác sẽ vượt qua bạn!
Là một tên cướp, bạn cố gắng ngăn chặn các nỗ lực của cảnh sát bằng cách phá vỡ các chức năng của chúng, chứng tỏ rằng chúng không phù hợp. Điều này sẽ buộc họ sử dụng nhiều byte hơn để củng cố thuật toán của họ!
Cảnh sát thách thức
Bài tập
Thực hiện hàm băm mật mã H: I -> O theo lựa chọn của bạn, trong đó I là tập hợp tất cả các số nguyên không âm dưới 2 2 30 và O là tập hợp của tất cả các số nguyên không âm dưới 2 128 .
Bạn có thể triển khai H như một hàm thực tế chấp nhận và trả về một số nguyên duy nhất, biểu diễn chuỗi của một số nguyên hoặc một mảng số nguyên hoặc một chương trình đầy đủ đọc từ STDIN và in ra STDOUT trong cơ sở 10 hoặc 16.
Chấm điểm
H rằng nó phải chống lại các thách thức cướp được xác định dưới đây.
Nếu một tên cướp đánh bại trình của bạn trong 168 giờ đầu tiên sau khi đăng nó, nó được coi là bị bẻ khóa .
Việc thực hiện H nên càng ngắn càng tốt. Bài nộp ngắn nhất không bị theo dõi sẽ là người chiến thắng trong thử thách cảnh sát.
Quy tắc bổ sung
Nếu bạn triển khai H dưới dạng hàm, vui lòng cung cấp trình bao bọc để thực thi hàm từ bên trong chương trình hoạt động như đã giải thích ở trên.
Vui lòng cung cấp ít nhất ba vectơ kiểm tra cho chương trình hoặc trình bao bọc của bạn (ví dụ đầu vào và đầu ra tương ứng của chúng).
H có thể là thiết kế tiểu thuyết của bạn (ưa thích) hoặc một thuật toán nổi tiếng, miễn là bạn tự thực hiện nó. Nghiêm cấm sử dụng bất kỳ loại hàm băm dựng sẵn, hàm nén, mật mã, PRNG, v.v.
Bất kỳ tích hợp thường được sử dụng để thực hiện các chức năng băm (ví dụ: chuyển đổi cơ sở) là trò chơi công bằng.
Đầu ra của chương trình hoặc chức năng của bạn phải có tính xác định.
Cần có một trình biên dịch / trình thông dịch miễn phí (như trong bia) có thể chạy trên nền tảng x86 hoặc x64 hoặc từ trong trình duyệt web.
Chương trình hoặc chức năng của bạn phải có hiệu quả hợp lý và phải băm bất kỳ tin nhắn nào trong I dưới 2 2 19 trong chưa đầy một giây.
Đối với các trường hợp cạnh, thời gian (tường) dành cho máy của tôi (Intel Core i7-3770, 16 GiB RAM) sẽ là quyết định.
Do tính chất của thách thức này, không được phép thay đổi mã câu trả lời của bạn theo bất kỳ cách nào, cho dù nó có làm thay đổi đầu ra hay không.
Nếu bài đăng của bạn đã bị bẻ khóa (hoặc thậm chí nếu không có), bạn có thể đăng câu trả lời bổ sung.
Nếu câu trả lời của bạn không hợp lệ (ví dụ: nó không tuân thủ thông số I / O), vui lòng xóa nó.
Thí dụ
Python 2.7, 22 byte
def H(M): return M%17
Vỏ bánh
print H(int(input()))
Thử thách cướp
Bài tập
Crack bất kỳ cảnh sát đệ trình bằng cách đăng những điều sau đây trong tên cướp chủ đề : hai thông điệp M và N trong tôi như vậy H (M) = H (N) và M ≠ N .
Chấm điểm
Bẻ khóa mỗi bài nộp cảnh sát giúp bạn đạt được một điểm. Tên cướp có nhiều điểm nhất sẽ thắng.
Trong trường hợp hòa, kẻ cướp bị trói đã bẻ khóa bài nộp dài nhất sẽ thắng.
Quy tắc bổ sung
Mỗi cảnh sát đệ trình chỉ có thể bị bẻ khóa một lần.
Nếu một đệ trình cảnh sát phụ thuộc vào hành vi được xác định thực hiện hoặc không xác định, bạn chỉ phải tìm một vết nứt hoạt động (có thể kiểm chứng) trên máy của bạn.
Mỗi vết nứt thuộc về một câu trả lời riêng trong chủ đề của bọn cướp.
Đăng một nỗ lực bẻ khóa không hợp lệ cấm bạn bẻ khóa đệ trình cụ thể đó trong 30 phút.
Bạn không thể bẻ khóa trình của riêng bạn.
Thí dụ
Python 2.7, 22 byte bởi người dùng8675309
1
và
18
Bảng xếp hạng
Đệ trình an toàn
Bài dự thi
Bạn có thể sử dụng Stack Snippet này để có được danh sách các câu trả lời chưa bị bẻ khóa.
function g(p){$.getJSON('//api.stackexchange.com/2.2/questions/51068/answers?page='+p+'&pagesize=100&order=desc&sort=creation&site=codegolf&filter=!.Fjs-H6J36w0DtV5A_ZMzR7bRqt1e',function(s){s.items.map(function(a){var h=$('<div/>').html(a.body).children().first().text();if(!/cracked/i.test(h)&&(typeof a.comments=='undefined'||a.comments.filter(function(b){var c=$('<div/>').html(b.body);return /^cracked/i.test(c.text())||c.find('a').filter(function(){return /cracked/i.test($(this).text())}).length>0}).length==0)){var m=/^\s*((?:[^,(\s]|\s+[^-,(\s])+)\s*(?:[,(]|\s-).*?([0-9]+)/.exec(h);$('<tr/>').append($('<td/>').append($('<a/>').text(m?m[1]:h).attr('href',a.link)),$('<td class="score"/>').text(m?m[2]:'?'),$('<td/>').append($('<a/>').text(a.owner.display_name).attr('href',a.owner.link))).appendTo('#listcontent');}});if(s.length==100)g(p+1);});}g(1);
table th, table td {padding: 5px} th {text-align: left} .score {text-align: right} table a {display:block}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><table><tr><th>Language</th><th class="score">Length</th><th>User</th></tr><tbody id="listcontent"></tbody></table>