Tôi đang nghĩ về một số (Chủ đề của Cop)


32

Chủ đề của Robber ở đây

Trong thách thức này, cảnh sát sẽ nghĩ về một số nguyên dương. Sau đó, họ sẽ viết một chương trình hoặc hàm xuất ra một giá trị khi được cung cấp số làm đầu vào và giá trị khác cho tất cả các đầu vào số nguyên dương khác. Cảnh sát sau đó sẽ tiết lộ chương trình trong một câu trả lời giữ bí mật số. Những tên cướp có thể bẻ khóa một câu trả lời bằng cách tìm số.

Đây là một nhược điểm: đây không phải , thay vào đó, điểm của bạn sẽ là con số bí mật với điểm thấp hơn sẽ tốt hơn. Rõ ràng bạn không thể tiết lộ điểm số của mình trong khi những tên cướp vẫn đang cố gắng tìm kiếm nó. Một câu trả lời đã không bị bẻ khóa một tuần sau khi bài đăng của nó có thể được tiết lộ điểm số và được đánh dấu an toàn. Câu trả lời an toàn không thể bị bẻ khóa.

Có lẽ không cần phải nói nhưng bạn sẽ có thể ghi được câu trả lời của bạn. Đó là bạn nên biết chính xác giá trị nào được chấp nhận bởi máy quyết định của bạn. Đơn giản chỉ cần biết rằng có một là không đủ.

Sử dụng các chức năng mã hóa

Không giống như hầu hết các cảnh sát và kẻ cướp thách thức yêu cầu bạn không sử dụng các chức năng mã hóa, thử thách này không chỉ hoàn toàn cho phép họ mà còn khuyến khích họ. Bạn có thể tự do tạo câu trả lời theo bất kỳ cách nào miễn là bạn đang cố gắng giành chiến thắng. Điều đó đang được nói, câu trả lời bằng các phương pháp khác cũng được chào đón ở đây. Mục tiêu của thử thách là giành chiến thắng, và miễn là bạn không gian lận thì không có gì ngoài bàn.


1
Nếu bạn cho phép các chức năng crytographic, tôi khuyên bạn nên đặt giới hạn thời gian cho các chương trình.
Okx

12
Tôi đã đánh giá thấp thách thức này bởi vì, trong hầu hết các ngôn ngữ, nó có thể bị bẻ khóa đơn giản bằng thuật toán ánh xạ hoặc một vòng lặp đơn giản. Tôi cho rằng một chút quá dễ dàng cho một thử thách cảnh sát và tên cướp .
Ông Xcoder

2
Tôi cảm thấy như sẽ có rất nhiều cảnh sát biết một giá trị được chấp nhận (có lẽ là nhỏ nhất) nhưng không biết liệu có câu trả lời đúng hơn hay không.
lịch sử

12
@ Mr.Xcoder Bạn có thể tự do downvote tuy nhiên tôi sẽ chỉ ra rằng đó là một phần của thách thức và theo ý kiến ​​của tôi không phải là một lỗ hổng. Thử thách này chủ yếu là thú vị đối với cảnh sát, những người phải làm cho nó trở nên khó khăn nhất có thể bằng cách làm chậm tính toán. Nhiều câu trả lời sáng tạo hơn sẽ khiến cho việc vũ phu buộc ngày càng khó khăn hơn khi cho phép họ sử dụng các số nhỏ hơn và nhỏ hơn.
Thuật sĩ lúa mì

1
@WheatWizard tôi cho rằng nó sẽ không phải là chiến thắng, nhưng nó sẽ không thể để crack ví dụ như một chương trình mà chỉ so sánh đầu vào đến A(9,9)nơi Alà hàm Ackerman.
flawr

Câu trả lời:


10

Tampio , Cracked

m:n tulos on luvun funktio tulostettuna m:ään, missä luku on x:n kerrottuna kahdella seuraaja, kun x on luku m:stä luettuna
x:n funktio on luku sadalla kerrottuna sadalla salattuna, missä luku on x alempana sadan seuraajaa tai nolla
x:n seuraajan edeltäjä on x
x:n negatiivisena edeltäjä on x:n seuraaja negatiivisena
nollan edeltäjä on yksi negatiivisena
x salattuna y:llä on örkin edeltäjä, missä örkki on x:n seuraajan seuraaja jaettuna y:llä korotettuna kahteen
sata on kiven kolo, missä kivi on kallio katkaistuna maanjäristyksestä
kallio on yhteenlasku sovellettuna mannerlaatan jäseniin ja tulivuoren jäseniin
tulivuori on nolla lisättynä kallioon
mannerlaatta on yksi lisättynä mannerlaattaan
maanjäristys on kallion törmäys
a:n lisättynä b:hen kolo on yhteenlasku kutsuttuna a:lla ja b:n kololla
tyhjyyden kolo on nolla
x:n törmäys on x tutkittuna kahdellatoista, missä kaksitoista on 15 ynnä 6
x ynnä y on y vähennettynä x:stä

Chạy với:

python3 suomi.py file.suomi --io

Các hướng dẫn để cài đặt trình thông dịch được bao gồm trong trang Github. Xin vui lòng cho biết nếu bạn có bất kỳ khó khăn khi chạy này.

Các chương trình trong mã giả. Chương trình thực hiện rất chậm vì trình thông dịch của tôi siêu kém hiệu quả. Ngoài ra, tôi đã không sử dụng bất kỳ tối ưu hóa chọn tham gia nào có sẵn, điều này có thể giảm thời gian đánh giá từ vài phút xuống còn khoảng 10 giây.


1
Không có thông dịch viên trực tuyến cho Tampio?
Xù xì

@Shaggy Chưa, thật đáng tiếc. Tôi có lẽ nên hỏi nếu nó có thể được thêm vào TIO.
fergusq


5

Perl 6 - Nứt!

Theo một nghĩa nghiêm ngặt, đây không phải là một đệ trình có thể chấp nhận được vì nó không cố gắng để giành chiến thắng. Thay vào đó, nó hy vọng sẽ cung cấp một câu đố dễ chịu.

Đây là một chương trình "toán học thuần túy" dự định sẽ bị bẻ khóa bởi sự suy ngẫm. Tôi chắc chắn rằng bạn có thể đánh giá cao giải pháp (sau khi dọn dẹp một số chương trình cẩu thả mà tôi đã cam kết), nhưng với "tín dụng đầy đủ" (: -)), bạn sẽ có thể giải thích những gì nó làm trên cơ sở toán học .

sub postfix:<!>(Int $n where $n >= 0)
{
	[*] 1 .. $n;
}

sub series($x)
{
	[+] (0 .. 107).map({ (i*($x % (8*π))) ** $_ / $_! });
}

sub prefix:<∫>(Callable $f)
{
	my $n = 87931;
	([+] (0 .. $n).map({
		π/$n * ($_ == 0 || $_ == $n ?? 1 !! 2) * $f(2 * $_/$n)
	})).round(.01);
}

sub f(Int $in where $in >= 0)
{
	 { series($_)**11 / series($in * $_) }
}

Bạn có nghĩa vụ phải bẻ khóa hàm f (). (Đó là hàm lấy một số tự nhiên và trả về một trong hai kết quả.) Cảnh báo: Như được hiển thị bởi @Nitrodon, chương trình thực sự hoạt động sai và "chấp nhận" một số lượng đầu vào vô hạn . Vì tôi không biết làm thế nào để sửa nó, tôi chỉ nhận xét cho những người giải quyết trong tương lai rằng con số tôi có trong đầu là ít hơn 70000 .

Nếu bạn cố chạy cái này trong TIO, nó sẽ hết thời gian. Đây là cố ý. (Vì nó hoàn toàn không nên chạy!)

Cuối cùng, tôi đã cố gắng viết một số mã hợp lý rõ ràng. Bạn hầu như có thể đọc thành thạo ngay cả khi bạn không quen với ngôn ngữ này. Chỉ có hai nhận xét: dấu ngoặc vuông [ op ] có nghĩa là giảm ("gấp", trong biệt ngữ Haskell) một danh sách với toán tử op ; và phụ được gọi postfix:<!>thực sự định nghĩa một toán tử postfix có tên! (tức là được sử dụng như 5!- nó thực hiện chính xác những gì bạn mong đợi). Tương tự cho prefix:<∫>một.

Tôi hy vọng rằng ai đó thích cái này, nhưng tôi không chắc mình có gặp khó khăn đúng không. Hãy thoải mái bash tôi trong các ý kiến:.

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



4

JavaScript, bị bẻ khóa

Tôi đã che giấu điều này nhiều nhất có thể, đến mức nó không thể phù hợp với câu trả lời này.

Hãy thử nó ở đây! Bấm Chạy, sau đó gõ vào bảng điều khiểnguess(n)

Trả về không xác định nếu bạn nhận được câu trả lời sai, trả về đúng nếu không.

Chỉnh sửa: Bằng cách nào đó tôi đã bỏ qua phần về điểm số của tôi là số. Oh tốt, số của tôi là rất rất lớn. Chúc may mắn giải quyết nó dù sao.



3

Thạch , điểm: ... 1 ( bị nứt )

5ȷ2_c⁼“ḍtṚøWoḂRf¦ẓ)ṿẒƓSÑÞ=v7&ðþạẆ®GȯżʠṬƑḋɓḋ⁼Ụ9ḌṢE¹’

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

1 thực sự mong đợi tôi tiết lộ nó? Nào! Ồ, nó có điểm 134. Ở đó, tôi đã nói rồi!



@ Mr.Xcoder Nó tồn tại lâu ...
Erik the Outgolfer 28/08/17

Tôi vừa thêm Ç€Gvà phạm vi 1...1000làm đầu vào: P
Ông Xcoder

Bạn đã thấy 5ȷ2_một phần phải không?
Erik the Outgolfer

Không, tôi thậm chí không nhìn vào mã lol. Chỉ cần thêm bộ kiểm tra và thấy vị trí của 1nó, sau đó tôi đã dán chuỗi từ đầu cho đến khi 1trong tập lệnh Python và đếm số không trước nó ...
Ông Xcoder

3

Python 2 (đã bẻ khóa)

Tôi sẽ không đề nghị lực lượng vũ phu. Hy vọng bạn thích máy phát điện!

print~~[all([c[1](c[0](l))==h and c[0](l)[p]==c[0](p^q) for c in [(str,len)] for o in [2] for h in [(o*o*o+o/o)**o] for p,q in [(60,59),(40,44),(19,20),(63,58),(61,53),(12,10),(43,42),(1,3),(35,33),(37,45),(17,18),(32,35),(20,16),(22,30),(45,43),(48,53),(58,59),(79,75),(68,77)]] + [{i+1 for i in f(r[5])}=={j(i) for j in [q[3]] for i in l} for q in [(range,zip,str,int)] for r in [[3,1,4,1,5,9]] for g in [q[1]] for s in [[p(l)[i:i+r[5]] for p in [q[2]] for i in [r[5]*u for f in [q[0]] for u in f(r[5])]]] for l in s + g(*s) + [[z for y in [s[i+a][j:j+r[0]] for g in [q[0]] for a in g(r[0])] for z in y] for k in [[w*r[0] for i in [q[0]] for w in i(r[0])]] for i in k for j in k] for f in [q[0]]]) for l in [int(raw_input())]][0]

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

Đầu ra 1cho số chính xác, 0nếu không.



@LeakyNun Wow, nhanh hơn một chút so với tôi dự đoán.
Sisyphus

Tìm một người giải sudoku trực tuyến không khó.
Leaky Nun

Có một số vấn đề với trình kiểm tra sudoku của bạn: bạn đã kiểm tra các đường ngang và các đường thẳng đứng đều ổn, nhưng bạn chỉ kiểm tra ba ô đầu tiên.
Nữ tu bị rò rỉ

@LeakyNun Bạn nói đúng, anên như vậy i+a. Tôi đã khắc phục nó, nhưng nó nứt nào nhún vai
Sisyphus

3

Haskell , nứt

Điều này hoàn toàn dựa trên số học. Lưu ý rằng đó myfunlà chức năng thực tế, trong khi hchỉ là chức năng trợ giúp.

h k = sum $ map (\x -> (x*x)**(-1) - 1/(x**(2-1/(fromIntegral k)))) [1..2*3*3*47*14593]
myfun inp | inp == (last $ filter (\k -> h k < (-7.8015e-5)  )[1..37*333667-1]) = 1
          | otherwise = 0

main = print $ show $ myfun 42 -- replace 42 with your input

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


Chương trình phải kết thúc mà không có lỗi trên tất cả các đầu vào. Điều này thậm chí kết thúc trong vòng một ngày trên bộ nhớ không giới hạn?
michi7x7

Bạn cần khá nhiều bộ nhớ nhưng chắc chắn bạn không cần bộ nhớ không giới hạn. Nó có thể phụ thuộc vào việc thực hiện và trên phần cứng của bạn. Nhưng rõ ràng nó được thiết kế để dành một chút thời gian để tính toán để làm cho các cuộc tấn công vũ phu trở nên khó khăn và khuyến khích phân tích chương trình. Chúc may mắn :)
flawr


2

Java, bị bẻ khóa bởi Nitrodon

import java.math.BigDecimal;

public class Main {
    private static final BigDecimal A = BigDecimal.valueOf(4);
    private static final BigDecimal B = BigDecimal.valueOf(5, 1);
    private static final BigDecimal C = BigDecimal.valueOf(-191222921, 9);
    private static BigDecimal a;
    private static BigDecimal b;
    private static int c;

    private static boolean f(BigDecimal i, BigDecimal j, BigDecimal k, BigDecimal l, BigDecimal m) {
        return i.compareTo(j) == 0 && k.compareTo(l) >= 0 && k.compareTo(m) <= 0;
    }

    private static boolean g(int i, int j, BigDecimal k) {
        c = (c + i) % 4;
        if (j == 0) {
            BigDecimal l = a; BigDecimal m = b;
            switch (c) {
                case 0: a = a.add(k); return f(C, b, B, l, a);
                case 1: b = b.add(k); return f(B, a, C, m, b);
                case 2: a = a.subtract(k); return f(C, b, B, a, l);
                case 3: b = b.subtract(k); return f(B, a, C, b, m);
                default: return false;
            }
        } else {
            --j;
            k = k.divide(A);
            return g(0, j, k) || g(1, j, k) || g(3, j, k) || g(3, j, k) || g(0, j, k) || g(1, j, k) || g(1, j, k) || g(3, j, k);
        }
    }

    private static boolean h(int i) {
        a = BigDecimal.ZERO; b = BigDecimal.ZERO; c = 0;
        return g(0, i, BigDecimal.ONE);
    }

    public static void main(String[] args) {
        int i = Integer.valueOf(args[0]);
        System.out.println(!h(i) && h(i - 1) ? 1 : 0);
    }
}

Tôi muốn thử một cái gì đó khác với hàm băm và hàm ngẫu nhiên thông thường. Bạn có thể truyền số dưới dạng đối số dòng lệnh. Đầu ra 1nếu số chính xác được đưa ra và 0nếu không. Đối với số lượng nhỏ, bạn cũng có thể thử nó trực tuyến .

Dấu:

Phần chính của chương trình thực hiện một biến thể của thuật toán rất nổi tiếng. Khi bạn biết những gì nó làm, bạn sẽ có thể tối ưu hóa chương trình đã cho để tính số bí mật.

Giải trình:

Chương trình này thực hiện chuyển động của biến thể bậc hai (loại 2) của đường cong Koch nổi tiếng (hình ảnh từ Wikipedia): Số bí mật là lần lặp đầu tiên không đi qua điểm (B, C). Như Nitrodon đã nhận ra một cách chính xác , ngoại trừ lần lặp đầu tiên, chúng ta có thể bỏ qua một cách an toàn sự đệ quy của tất cả các phần của đường cong, không đi qua điểm đã cho. Bằng cách thay đổi một dòng trong chương trình gốc cho phù hợp, chúng ta có thể kiểm tra số chính xác ngay cả trong trình thông dịch trực tuyến .

Quadratic_Koch_curve_type2_iterations.png


Tôi nghĩ là bị nứt ; thời gian chạy quá dài để xác minh trực tiếp, nhưng tôi đã kiểm tra với các giá trị dễ dàng hơn và vết nứt của tôi dường như hoạt động.
Nitrodon


1

Octave, điểm số: ???

Nó được đảm bảo khá nhiều rằng không có số nào khác có cùng 20 số ngẫu nhiên ở cuối danh sách 1e8các số.

function val = cnr(num)
rand("seed", num);
randomints = randi(flintmax-1,1e4,1e4);
val = isequal(randomints(end+(-20:0))(:), ...
 [7918995738984448
  7706857103687680
  1846690847916032
  6527244872712192
  5318889109979136
  7877935851634688
  3899749505695744
  4256732691824640
  2803292404973568
  1410614496854016
  2592550976225280
  4221573015797760
  5165372483305472
  7184095696125952
  6588467484033024
  6670217354674176
  4537379545153536
  3669953454538752
  5365211942879232
  1471052739772416
  5355814017564672](:));
end

Đầu ra 1cho số bí mật, 0nếu không.

Tôi đã chạy nó trong Octave 4.2.0.


"Giấc ngủ và sự chậm lại khác có thể được loại bỏ khi bruteforcing."

Chúc may mắn với điều đó :)


nó dường như thậm chí không chạy trên tio
Okx

1
@Okx Nó hết thời gian trên TIO, nhưng nó chạy trong phiên bản máy tính để bàn.
Rɪᴋᴇʀ

1
Tại sao các downvote?
Thuật sĩ lúa mì

3
@WheatWizard có lẽ vì về mặt lý thuyết có thể có nhiều số. Ngoài ra, đó là một tbh nhàm chán. Tôi muốn thấy các giải pháp toán học hơn, RNG thật nhàm chán.
Rɪᴋᴇʀ

1
@Riker Nhưng vì bạn đang đoán hạt giống cho RNG, nên anh ta sử dụng chính RNG làm chức năng của mình, điều này thực sự mang tính quyết định. Nhưng vâng, xem xét nó dựa vào khó khăn trong việc đảo ngược những gì bạn hy vọng là chức năng một chiều, người ta cũng có thể, chỉ cần mã hóa một chuỗi "đúng" với một số ngẫu nhiên và sau đó thách thức gần như phá vỡ bất kỳ kế hoạch mã hóa nào đã được chọn để khám phá khóa riêng.
Shufflepants

1

Ly , điểm số 239, bị nứt

(1014750)1sp[l1+sp1-]28^RrnI24^=u;

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

Tôi đang giao dịch với không ai biết Ly ở đây, mặc dù tôi biết cách dễ dàng thay đổi ... đổ mồ hôi

Giải trình:

(1014750)1sp[l1+sp1-]              # meaningless code that counts up to 1014750 and discards the result
                     28^Rr         # range from 255 to 0
                          nI       # get the index from the range equal to the input
                            24^=   # check if it's 16
                                u; # print the result


1

Brain-Flak , điểm 1574 ( bị nứt )

<>(((((((((((((((((((([([(((()()()){}){}){}])]){})))){}{}{}{}()){}){})){}{})){}{})){}((((((((()()){}){}){}){}[()]){}){}){}){}())){})){}){}{}{}){})(((((((((((((((((((()()){}){}()){}){}){}()){}){}()){}){})){}{}())){}{})){}{}){}){}){})(((((((((((((((()()){}()){}()){}){}){}()){}){}){}()){}){}){}()){}()){}()){})<>{({}[()])<>({}({})<({}({})<({}({})<({}({}))>)>)>)<>}({}<>(){[()](<{}>)}<>)

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



1

đc

#!/bin/dc
[[yes]P] sy [[no]P] sn [ly sp] sq [ln sp] sr [lp ss] st [ln ss] su
?  sa
119560046169484541198922343958138057249252666454948744274520813687698868044973597713429463135512055466078366508770799591124879298416357795802621986464667571278338128259356758545026669650713817588084391470449324204624551285340087267973444310321615325862852648829135607602791474437312218673178016667591286378293
la %
d 0 r 0
=q !=r
10 154 ^ 10 153 ^ +
d la r la
<t !<u
1 la 1 la
>s !>n

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


Lưu ý: Nội dung này đã được sửa đổi kể từ khi được gửi. Đệ trình ban đầu (bên dưới) không hợp lệ và bị bẻ khóa bởi Sleafar trong các bình luận bên dưới. (Một đầu vào 1làm tăng đầu ra yes, nhưng có một số khác cho kết quả tương tự.)

#!/bin/dc
[[yes]P] sy [[no]P] sn [ly sp] sq [ln sp] sr
?  sa
119560046169484541198922343958138057249252666454948744274520813687698868044973597713429463135512055466078366508770799591124879298416357795802621986464667571278338128259356758545026669650713817588084391470449324204624551285340087267973444310321615325862852648829135607602791474437312218673178016667591286378293
la %
d 0 r 0
=q !=r
10 154 ^ 10 153 ^ +
d la r la
<p !<n

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


Trình thông dịch trực tuyến trả về "có" cho đầu vào "1". Điều này có được tính là nứt bây giờ không?
Sleafar

@Sleafar Thở dài ... vâng, đó là một sai lầm ngu ngốc về phía tôi.
John Gowers

Tuy nhiên, điều đó có nghĩa là thách thức này hiện không hợp lệ, vì có hai yếu tố đầu vào khiến nó được in có, vì vậy tôi không chắc liệu bạn có được phép yêu cầu không. Tôi sẽ thêm một phiên bản sửa chữa cho bài viết này, nhưng để lại bản gốc trong trường hợp bạn đang có.
John Gowers

1

Ruby , an toàn, điểm số:

63105425988599693916

#!ruby -lnaF|
if /^#{eval [$F,0]*"**#{~/$/}+"}$/ && $_.to_i.to_s(36)=~/joe|tim/
  p true
else
  p false
end

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

Giải trình:

Điều kiện đầu tiên kiểm tra số đầu vào cho lòng tự ái . Chủ đề tôi viết ban đầu là tình cờ bị va đập vào khoảng thời gian tôi đăng bài này, nhưng tôi đoán không ai để ý. Cái thứ hai chuyển đổi số thành cơ sở 36, sử dụng các chữ cái làm chữ số và kiểm tra xem chuỗi có chứa "joe" hay "tim" hay không. Có thể chứng minh (thông qua kiệt sức) rằng chỉ có một số tự ái tên là Joe hoặc Tim (Joe), bởi vì các số tự sự là hữu hạn. Bằng chứng là chúng hữu hạn: kết quả của việc lấy số n chữ số, nâng từng chữ số lên lũy thừa thứ n và tính tổng được giới hạn ở trênn*9^n, trong khi giá trị của một số n chữ số được giới hạn dưới n ^ 10. Tỷ lệ giữa các điều khoản này là n * (9/10) ^ n, cuối cùng sẽ giảm đơn điệu khi n tăng. Một khi nó giảm xuống dưới 1, không thể có số tự ái n chữ số.


1

PHP, an toàn, điểm số:

60256

<?php

$a = $argv[1];

$b ='0123456789abcdefghijklmnopqrstuvwxyz';

$c = strlen($b);

$d = '';
$e = $a;
while ($e) {
    $d .= $b[$e % $c];
    $e = floor($e / $c);
}

echo ((function_exists($d) && $d($a) === '731f62943ddf6733f493a812fc7aeb7ec07d97b6') ? 1 : 0) . "\n";

Đầu ra 1 nếu đúng, 0 khác.

Chỉnh sửa: Tôi không nghĩ bất cứ ai thậm chí đã cố gắng để phá vỡ điều này bởi vì:

nó sẽ dễ dàng để vũ phu

Giải trình:

Tôi lấy đầu vào và chuyển đổi nó thành "cơ sở 36", nhưng tôi không đảo ngược phần còn lại để tạo ra số cuối cùng. Số 60256 là "1ahs" trong cơ sở 36. Không thay đổi, đó là "sha1", là một hàm trong PHP. Kiểm tra cuối cùng là sha1 (60256) bằng với hàm băm.



0

Python 3, điểm: ???

Hy vọng rằng điều này, nếu có bất cứ điều gì, chứng tỏ sự hỏng hóc của vấn đề này thực sự là như thế nào:

from hashlib import sha3_512

hash_code = 'c9738b1424731502e1910f8289c98ccaae93d2a58a74dc3658151f43af350bec' \
            'feff7a2654dcdd0d1bd6952ca39ae01f46b4260d22c1a1b0e38214fbbf5eb1fb'


def inc_string(string):
    length = len(string)
    if length == 0 or all(char == '\xFF' for char in string):
        return '\x00' * (length + 1)
    new_string = ''
    carry = True
    for i, char in enumerate(string[::-1]):
        if char == '\xFF' and carry:
            new_string = '\x00' + new_string
            carry = True
        elif carry:
            new_string = chr(ord(char) + 1) + new_string
            carry = False
        if not carry:
            new_string = string[0:~i] + new_string
            break
    return new_string


def strings():
    string = ''
    while True:
        yield string
        string = inc_string(string)


def hash_string(string):
    return sha3_512(string.encode('utf-8')).hexdigest()


def main():
    for string in strings():
        if hash_string(string) == hash_code:
            exec(string)
            break


main()

Về cơ bản, những gì mã này làm là lười biếng tạo ra mọi chuỗi có thể cho đến khi một trong các chuỗi có hàm băm khớp chính xác hash_codeở trên. Mã chưa xóa có dạng cơ bản là:

num = int(input('Enter a number:\n'))
if num == <insert number here>:
    print(1)
else:
    print(0)

Ngoại trừ <insert number here>được thay thế bằng một số và có ý kiến ​​trong mã cho mục đích làm cho mã gần như không thể truy cập được.

Tôi đã thực hiện mọi biện pháp phòng ngừa để đảm bảo rằng tôi không được hưởng lợi từ bài đăng này. Đối với người mới bắt đầu, đó là wiki cộng đồng vì vậy tôi sẽ không nhận được đại diện cho nó. Ngoài ra, điểm số của tôi khá lớn, vì vậy hy vọng một câu trả lời sáng tạo hơn sẽ xuất hiện và giành chiến thắng.

Hy vọng tất cả các bạn không quá tức giận với phản ứng của tôi, tôi chỉ muốn thể hiện tại sao cảnh sát và bài viết của kẻ cướp thường cấm các thuật toán băm.


Đầu vào được lấy từ stdin. Đầu ra là 1 (cho một số được đoán chính xác) hoặc 0 (cho một số được đoán không chính xác).
sonar235

Tôi không biết tại sao bạn lại biến nó thành wiki cộng đồng. Đây là câu trả lời của bạn có vẻ như phải mất nhiều công sức để thực hiện. Tôi chắc chắn sẽ không gọi câu trả lời này bằng chứng về câu hỏi bị phá vỡ. Đây là một câu trả lời thông minh, có khả năng đạt điểm cao, (tôi thậm chí không thể chứng minh điều này không hiệu quả trong 1). Mục đích của câu hỏi là luôn thu hút các câu trả lời tiếp cận câu hỏi theo những cách thú vị thông minh (và cũng để vui chơi nhưng tôi không thể đảm bảo cho việc giải trí của bạn), và theo như tôi quan tâm thì điều này làm được.
Thuật sĩ lúa mì

3
Trong thực tế câu trả lời này là không hợp lệ. Nó gần như chắc chắn (với xác suất thiên văn không có chuỗi có độ dài 512 bit khớp với hàm băm) exec () một thứ khác có lẽ không phải là mã python hợp lệ trước khi đạt được mã dự định.
Joshua

1
@ sonar235: Mẫu phân đoạn của bạn có hơn 512 bit trong đó.
Joshua

1
Để mở rộng câu trả lời của Joshua: bit mã của bạn dài 102 ký tự. Cụ thể, chương trình của bạn sẽ lặp lại qua mỗi chuỗi 100 ký tự trước khi mã được mã của bạn. Vì mã của bạn lặp lại các ký tự trong phạm vi 0x00-0xFF, đó là 256 ^ 100hoặc 2 ^ 800chuỗi. Trong khi đó, chỉ 2 ^ 512có các giá trị băm 512 bit. Điều đó có nghĩa là các chuỗi bạn lặp đi lặp lại nhiều hơn số băm có thể ít nhất là 2 ^ 288một - số lượng lớn hơn 10.000 lần so với số lượng nguyên tử trong vũ trụ. Xác suất băm cụ thể đó sẽ không được sử dụng là rất nhỏ .
John Gowers

0

Python 3 , 49 byte, bị bẻ khóa bởi sonar235

x = input()
print(int(x)*2 == int(x[-1]+x[0:-1]))

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


Zero không phải là một số nguyên fyi. Tôi không biết nếu đó là giải pháp dự định nhưng nó hoạt động.
Thuật sĩ lúa mì

0 không phải là giải pháp dự định.
ED

8
Uhh, trang TIO của bạn đang hiển thị giải pháp ...
LyricLy

2
Đồng thời "viết chương trình hoặc hàm xuất một giá trị khi được cung cấp số làm đầu vào và giá trị khác cho tất cả các đầu vào số nguyên dương khác "
Jonathan Allan


0

Java, ghi: 3141592 ( Cracked )

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u004d\u0061\u006e\u0067\u006f\u0020\u007b
\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u0063\u006f\u006e\u0076\u0065\u0072\u0074\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0073\u0029\u007b\u0066\u006f\u0072\u0028\u0063\u0068\u0061\u0072\u0020\u0063\u0020\u003a\u0020\u0073\u002e\u0074\u006f\u0043\u0068\u0061\u0072\u0041\u0072\u0072\u0061\u0079\u0028\u0029\u0029\u007b\u0020\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u0028\u0022\u005c\u005c\u0075\u0030\u0030\u0022\u002b\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u002e\u0074\u006f\u0048\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0063\u0029\u0029\u003b\u007d\u007d
\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0061\u0072\u0067\u0073\u0029\u0020\u007b\u0069\u006e\u0074\u0020\u0078\u0020\u0020\u003d\u0020\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u002e\u0070\u0061\u0072\u0073\u0065\u0049\u006e\u0074\u0028\u0061\u0072\u0067\u0073\u005b\u0030\u005d\u0029\u003b
\u0064\u006f\u0075\u0062\u006c\u0065\u0020\u0061\u003d\u0020\u0078\u002f\u0038\u002e\u002d\u0033\u0039\u0032\u0036\u0039\u0039\u003b\u0064\u006f\u0075\u0062\u006c\u0065\u0020\u0062\u0020\u003d\u0020\u004d\u0061\u0074\u0068\u002e\u006c\u006f\u0067\u0031\u0030\u0028\u0028\u0069\u006e\u0074\u0029\u0020\u0028\u0078\u002f\u004d\u0061\u0074\u0068\u002e\u0050\u0049\u002b\u0031\u0029\u0029\u002d\u0036\u003b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0028\u0061\u002f\u0062\u003d\u003d\u0061\u002f\u0062\u003f\u0022\u0046\u0061\u0069\u006c\u0022\u003a\u0022\u004f\u004b\u0022\u0020\u0029\u0029\u003b
\u007d\u007d

1
Tôi không nghĩ rằng obfuscation sẽ làm bất cứ điều gì ngoại trừ thêm một bước đầu tiên khó chịu.
Kỹ sư Toast


2
@EngineerToast không, không thực sự, nó hoàn toàn là để dọa những người lười biếng.
dùng902383

0

Python 3, điểm 1 (an toàn)

Không phải là một giải pháp rất thú vị, nhưng tốt hơn là một cảnh sát an toàn hơn một cảnh sát chết.

import hashlib

def sha(x):
    return hashlib.sha256(x).digest()

x = input().encode()
original = x

for _ in range(1000000000):
    x = sha(x)

print(int(x==b'3\xdf\x11\x81\xd4\xfd\x1b\xab19\xbd\xc0\xc3|Y~}\xea83\xaf\xa5\xb4]\xae\x15wN*!\xbe\xd5' and int(original.decode())<1000))

Đầu ra 1cho số mục tiêu, 0nếu không. Đầu vào được lấy từ stdin. Phần cuối cùng ( and int(original.decode())<1000) chỉ tồn tại để đảm bảo chỉ có một câu trả lời, nếu không thì rõ ràng sẽ có vô số câu trả lời.


1
Bạn có thể thêm một liên kết TIO không?
Xù xì

1
Đối với những tên cướp trong tương lai: Số nguyên dường như không nhỏ hơn 100000000.
Ông Xcoder

1
@Shaggy Nó sẽ hết thời gian trên TIO, mất khoảng nửa giờ trên máy tính của tôi để chạy hàng tỷ lần lặp của SHA256.
L3viathan

2
Bất kỳ tên cướp ưa thích thành lập một đội để giải quyết điều này? Chúng tôi chỉ cần phân chia số lượng ít hơn 1000 trong số chúng tôi để chúng tôi có thời gian để tính toán các bản tóm tắt-SHA trước thời hạn.
John Gowers

2
Trừ khi bạn có thể chứng minh rằng 1 là giải pháp duy nhất, câu trả lời này không hợp lệ. Gánh nặng của bằng chứng nên thuộc về người tuyên bố có câu trả lời hợp lệ.
Dennis

0

C (gcc) , điểm ???

#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <wmmintrin.h>

#include <openssl/bio.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>

union State
{
    uint8_t u8[128];
    __m128i i128[8];
} state;

void encrypt()
{
    BIO *key = BIO_new_mem_buf
    (
        "-----BEGIN PUBLIC KEY-----\n"
        "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5CBa50oQ3gOPHNt0TLxp96t+6\n"
        "i2KvOp0CedPHdJ+T/wr/ATo7Rz+K/hzC7kQvsrEcr0Zkx7Ll/0tpFxekEk/9PaDt\n"
        "wyFyEntgz8SGUl4aPJkPCgHuJhFMyUflDTywpke3KkSv3V/VjRosn+yRu5mbA/9G\n"
        "mnOvSVBFn3P2rAOTbwIDAQAB\n"
        "-----END PUBLIC KEY-----\n",
        -1
    );

    RSA *rsa = PEM_read_bio_RSA_PUBKEY(key, &rsa, NULL, NULL);

    uint8_t ciphertext[128];

    RSA_public_encrypt(128, state.u8, ciphertext, rsa, RSA_NO_PADDING);
    memcpy(state.u8, ciphertext, 128);
}

void verify()
{
    if (memcmp
    (
        "\x93\xfd\x38\xf6\x22\xf8\xaa\x2f\x7c\x74\xef\x38\x01\xec\x44\x19"
        "\x76\x56\x27\x7e\xc6\x6d\xe9\xaf\x60\x2e\x68\xc7\x62\xfd\x2a\xd8"
        "\xb7\x3c\xc9\x78\xc9\x0f\x6b\xf0\x7c\xf8\xe5\x3c\x4f\x1c\x39\x6e"
        "\xc8\xa8\x99\x91\x3b\x73\x7a\xb8\x56\xf9\x28\xe7\x2e\xb2\x82\x5c"
        "\xb8\x36\x24\xfb\x26\x96\x32\x91\xe5\xee\x9f\x98\xdf\x44\x49\x7b"
        "\xbc\x6c\xdf\xe9\xe7\xdd\x26\x37\xe5\x3c\xe7\xc0\x2d\x60\xa5\x2e"
        "\xb8\x1f\x7e\xfd\x4f\xe0\x83\x38\x20\x48\x47\x49\x78\x18\xfb\xd8"
        "\x62\xaf\x0a\xfb\x5f\x64\xd1\x3a\xfd\xaf\x4b\xaf\x93\x23\xf4\x36",
        state.u8,
        128
    ))
        exit(0);
}

static inline void quarterround(int offset)
{
    int dest = (offset + 1) % 8, src = offset % 8;

    state.i128[dest] = _mm_aesenc_si128(state.i128[src], state.i128[dest]);
}

int main(int argc, char *argv[])
{
    if (argc != 2)
        exit(0);

    uint64_t input = strtoull(argv[1], NULL, 0);

    state.i128[0] = _mm_set_epi32(0, 0, input >> 32, input);

    for (uint64_t round = 0; round < 0x1p45; round += 2)
    {
        quarterround(0);
        quarterround(2);
        quarterround(4);
        quarterround(6);

        quarterround(7);
        quarterround(1);
        quarterround(3);
        quarterround(5);
    }

    encrypt();
    verify();
    puts("something");
}

Vì các giải pháp mật mã được khuyến khích, ở đây. Chính xác một số nguyên dương sẽ in một cái gì đó , tất cả những số khác sẽ không in gì. Điều này mất một thời gian dài , vì vậy nó không thể được kiểm tra trực tuyến.


0

Java, 164517378918, an toàn

import java.math.*;import java.util.*;
public class T{
    static boolean f(BigInteger i){if(i.compareTo(BigInteger.valueOf(2).pow(38))>0)return false;if(i.longValue()==0)return false;if(i.compareTo(BigInteger.ONE)<0)return false;int j=i.multiply(i).hashCode();for(int k=3^3;k<2000;k+=Math.abs(j%300+1)){j+=1+(short)k+i.hashCode()%(k+1);}return i.remainder(BigInteger.valueOf(5*(125+(i.hashCode()<<11))-7)).equals(BigInteger.valueOf(0));}
    @SuppressWarnings("resource")
    public static void main(String[]a){long l=new Scanner(System.in).nextLong();boolean b=false;for(long j=1;j<10;j++){b|=f(BigInteger.valueOf(l-j));}System.out.println(f(BigInteger.valueOf(l))&&b);}
}

0

TI-BASIC, điểm: 196164532 không thi đấu

Trả về 1 cho số bí mật, 0 nếu không.

Ans→rand
rand=1

Tham khảo ghi chú trên trang này trên randlệnh để biết thêm thông tin.


8
Điều này có đảm bảo có chính xác một số đầu vào phù hợp không?
Rɪᴋᴇʀ

@Riker: Tôi nghĩ rằng máy tính TI sử dụng một số loại dấu phẩy động trong nội bộ; nếu RAND sử dụng điểm nổi giống như phần còn lại của nó, tôi chắc chắn chỉ có 1 giải pháp.
Joshua

@Joshua Tôi tin rằng nó sử dụng Thuật toán của Người giao dịch .
kamoroso94

@Joshua "khá chắc chắn" là không đủ. Trừ khi bạn có thể chứng minh rằng chỉ có 1 giải pháp tồn tại, đây không phải là câu trả lời hợp lệ.
Rɪᴋᴇʀ

1
@Dennis: Thăm dò cho 196164532 * 2; nếu đó không phải là một giải pháp thì không có giải pháp nào khác.
Joshua

0

Python 3 , điểm :?

def check(x):
    if x < 0 or x >= 5754820589765829850934909 or pow(x, 18446744073709551616, 5754820589765829850934909) != 2093489574700401569580277 or x % 4 != 1:
        return "No way ;-("
    return "Cool B-)"

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

Đơn giản, nhưng có thể mất một chút thời gian để vũ phu ;-) Mong chờ một vết nứt nhanh ;-)

Chú thích: hai điều kiện đầu tiên và điều kiện cuối cùng làm cho câu trả lời trở nên độc đáo.

BTW được tính như thế nào?

Gợi ý 1

Bạn có thể mong đợi sẽ có 2 64 câu trả lời bên trong 0 <= x < [the 25-digit prime], nhưng thực tế chỉ có 4 và điều kiện cuối cùng sẽ loại bỏ 3. Nếu bạn có thể bẻ khóa này, thì bạn cũng sẽ biết 3 giải pháp còn lại.



0

Aceto , an toàn

  P'*o*7-9JxriM'lo7*9Yxx.P',xe*ikCKxlI.D+∑\a€'#o*84/si5s:i»I9Ji8:i+∑€isi.s1+.i2\H/iQxsUxsxxsxiss*i1dJi/3d2*Ji-d*id*IILCh98*2JixM'e9hxBNRb!p

Xuất ra TrueFalse nếu đúng, falseFalse nếu không

Số là

15752963

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


-2

C #, Mono, Linux, Alpha, điểm 1 (an toàn)

class Program
{
public static void Main()
{
//Excluding out-of-range inputs at ppperry's request; does not change solution
//original code:
//var bytes = System.BitConverter.GetBytes((long)int.Parse(System.Console.ReadLine()));
int i;
if (!int.TryParse(System.Console.ReadLine(), out i || i <= 0 || i > 1000000) { System.Console.WriteLine(0); Environment.Exit(0); }
var bytes = System.BitConverter.GetBytes((long)i);
using (var x = System.Security.Cryptography.HashAlgorithm.Create("MD5"))
{
    for (int i = 0; i < 1000000; ++i)
            for (int j = 0; j < 86400; ++j)
                    bytes = x.ComputeHash(bytes);
}
if (bytes[0] == 91 && bytes[1] == 163 && bytes[2] == 41 && bytes[3] == 169)
    System.Console.WriteLine(1);
else
    System.Console.WriteLine(0);
}
}

Cẩn thận. Ý tôi là thế Có rất nhiều mô phỏng alpha ngoài kia. Sử dụng một với jitter hoặc điều này sẽ không kết thúc.

Điều này phụ thuộc vào thực tế là Alpha là đại gia, khiến System.BitConverter làm sai nếu ai đó thử điều này trên x86 hoặc x64. Tôi đã viết câu trả lời này để chứng minh tính xấu của thử thách hơn bất kỳ điều gì khác.


1
Điều này không thể có chính xác một giải pháp; có vô số số nguyên và hàm MD5 có số lượng đầu ra hữu hạn, do đó phải có xung đột
pppery

@ppperry: Chỉ có 2 tỷ và thay đổi số nguyên dương.
Joshua

Nếu bạn nghĩ về nó theo cách đó, lỗi này trên các đầu vào lớn hơn 2 ^ 31 , và do đó không hợp lệ.
pppery

@ppperry: Bây giờ nó sẽ không có lỗi về điều đó.
Joshua

2
Trừ khi bạn có thể chứng minh rằng 1 là giải pháp duy nhất, câu trả lời này không hợp lệ. Gánh nặng của bằng chứng nên thuộc về người tuyên bố có câu trả lời hợp lệ.
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.