Saya sedang memikirkan sebuah nomor (Cop's Thread)


32

Perampok Utas di sini

Dalam tantangan polisi polisi akan berpikir tentang bilangan bulat positif. Mereka kemudian akan menulis program atau fungsi yang menghasilkan satu nilai ketika memberikan angka sebagai input dan nilai lainnya untuk semua input bilangan bulat positif lainnya. Polisi kemudian akan mengungkapkan program itu dalam sebuah jawaban yang merahasiakan nomor itu. Perampok dapat memecahkan jawaban dengan menemukan nomornya.

Inilah intinya: ini bukan , alih-alih skor Anda akan menjadi nomor rahasia dengan skor yang lebih rendah lebih baik. Jelas Anda tidak dapat mengungkapkan skor Anda sementara perampok masih berusaha menemukannya. Jawaban yang belum di-crack satu minggu setelah postingannya mungkin skornya terungkap dan ditandai aman. Jawaban aman tidak dapat dipecahkan.

Mungkin tidak perlu dikatakan tetapi Anda harus bisa mencetak jawaban Anda. Itu adalah Anda harus tahu persis nilai apa yang diterima oleh mesin keputusan Anda. Hanya mengetahui bahwa ada satu saja tidak cukup.

Penggunaan fungsi kriptografi

Tidak seperti kebanyakan tantangan polisi dan perampok yang meminta Anda untuk tidak menggunakan fungsi kriptografi, tantangan ini tidak hanya sepenuhnya memungkinkan mereka tetapi mendorong mereka. Anda bebas membuat jawaban dengan cara apa pun selama Anda berusaha untuk menang. Yang sedang berkata, jawaban menggunakan metode lain juga diterima di sini. Tujuan dari tantangan ini adalah untuk menang, dan selama Anda tidak menipu, tidak ada yang salah.


1
Jika Anda mengizinkan fungsi kriptografi, saya akan merekomendasikan menempatkan batas waktu pada program.
Okx

12
Saya menurunkan tantangan ini karena, dalam sebagian besar bahasa, itu dapat dengan mudah dipecahkan menggunakan algoritma pemetaan atau loop sederhana. Saya menganggap itu agak terlalu mudah untuk tantangan polisi dan perampok .
Tn. Xcoder

2
Saya merasa akan ada banyak polisi yang mengetahui nilai yang diterima (mungkin yang terkecil) tetapi tidak tahu apakah ada jawaban yang lebih benar atau apa jawaban mereka.
histokrat

12
@ Mr.Xcoder Anda bebas untuk melakukan downvote namun saya akan menunjukkan bahwa itu adalah jenis tantangan dan bukan menurut saya cacat. Tantangannya sebagian besar menyenangkan bagi polisi yang harus membuatnya sesulit mungkin untuk melakukan kekerasan dengan memperlambat perhitungan. Jawaban yang lebih kreatif akan membuat kekerasan memaksa semakin dan semakin sulit memungkinkan mereka untuk menggunakan jumlah yang lebih kecil dan lebih kecil.
Wheat Wizard

1
@WheatWizard Saya menganggap itu tidak akan menang, tetapi tidak akan mungkin untuk memecahkan misalnya program yang hanya membandingkan input ke A(9,9)mana Afungsi Ackerman.
flawr

Jawaban:


10

Tampio , Retak

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ä

Jalankan dengan:

python3 suomi.py file.suomi --io

Instruksi untuk menginstal juru bahasa termasuk dalam halaman Github. Tolong beri tahu jika Anda mengalami kesulitan menjalankan ini.

Program dalam pseudocode. Program ini bekerja sangat lambat karena juru bahasa saya sangat tidak efisien. Juga, saya tidak menggunakan optimasi opt-in yang tersedia, yang dapat mengurangi waktu evaluasi dari beberapa menit menjadi sekitar 10 detik.


1
Apakah tidak ada penerjemah online untuk Tampio?
Shaggy

@ Shaggy Belum, sayangnya. Saya mungkin harus bertanya apakah itu dapat ditambahkan ke TIO.
fergusq


5

Perl 6 - Retak!

Dalam arti yang ketat, ini bukan pengiriman yang dapat diterima karena tidak berusaha sangat keras untuk menang. Sebaliknya, ia berharap untuk menawarkan teka-teki yang menyenangkan.

Ini adalah program "matematika murni" yang dimaksudkan untuk dipecahkan oleh perenungan. Saya yakin Anda bisa memaksakan solusi (setelah membersihkan beberapa program yang ceroboh yang saya lakukan dengan sengaja), tetapi untuk "kredit penuh" (: -)), Anda harus dapat menjelaskan apa yang dilakukannya dengan alasan matematika .

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 * $_) }
}

Anda seharusnya memecahkan fungsi f (). (Itulah fungsi yang mengambil satu bilangan asli dan mengembalikan salah satu dari dua hasil.) Peringatan: Seperti yang ditunjukkan oleh @Nitrodon, program sebenarnya berperilaku salah dan "menerima" jumlah input yang tak terbatas . Karena saya tidak tahu bagaimana cara memperbaikinya, saya hanya berkomentar untuk pemecah masa depan bahwa jumlah yang saya pikirkan adalah kurang dari 70000 .

Jika Anda mencoba menjalankan ini di TIO, waktu akan habis. Ini disengaja. (Karena itu tidak seharusnya dijalankan sama sekali!)

Akhirnya, saya mencoba menulis beberapa kode yang cukup jelas. Sebagian besar Anda harus dapat membacanya dengan lancar bahkan jika Anda tidak terbiasa dengan bahasanya. Hanya dua komentar: tanda kurung siku [ op ] berarti mengurangi ("melipat", dalam bahasa Haskell) daftar dengan op operator ; dan sub yang dipanggil postfix:<!>sebenarnya mendefinisikan operator postfix bernama! (Yaitu digunakan seperti 5!- itu tidak persis apa yang Anda harapkan). Demikian pula untuk yang prefix:<∫>satu.

Saya harap seseorang menikmati yang ini, tetapi saya tidak yakin apakah saya berhasil dengan benar. Jangan ragu untuk menampar saya di komentar :—).

Cobalah online!



4

JavaScript, Retak

Saya telah mengaburkan ini sebanyak yang saya bisa, ke titik di mana itu tidak sesuai dengan jawaban ini.

Coba di sini! Klik Jalankan, lalu ketik konsolguess(n)

Pengembalian tidak terdefinisi jika Anda mendapatkan jawaban yang salah, mengembalikan true sebaliknya.

Sunting: Entah bagaimana saya mengabaikan bagian tentang skor saya menjadi nomor. Oh well, nomor saya sangat besar. Semoga berhasil menyelesaikannya.



3

Jelly , skor: ... 1 ( retak )

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

Cobalah online!

1 Benar-benar mengharapkan saya untuk mengungkapkannya? Ayolah! Oh well, itu memiliki skor 134. Di sana, saya mengatakannya!



@ Mr.Xcoder Ini berlangsung lama ...
Erik the Outgolfer

Saya baru saja menambahkan ǀGdan kisaran 1...1000sebagai input: P
Mr. Xcoder

Anda melihat 5ȷ2_bagian itu, kan?
Erik the Outgolfer

Tidak, saya bahkan tidak melihat kode lol. Baru saja menambahkan test suite dan melihat di mana tempatnya 1, maka saya telah menempelkan string dari awal hingga 1dalam skrip Python dan menghitung jumlah nol sebelum itu ...
Mr. Xcoder

3

Python 2 (retak)

Saya tidak akan menyarankan kekerasan. Semoga Anda menyukai generator!

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]

Cobalah online!

Output 1untuk nomor yang benar, 0jika tidak.



@ LeakyNun Wow, sedikit lebih cepat dari yang saya harapkan.
Sisyphus

Menemukan pemecah sudoku online tidak sulit.
Leaky Nun

Ada beberapa masalah dengan pemeriksa sudoku Anda: Anda memeriksa garis horizontal dan garis vertikal dengan baik, tetapi Anda hanya memeriksa tiga sel pertama.
Leaky Nun

@ LeakyNun Anda benar, aseharusnya i+a. Saya sudah memperbaikinya, tapi tetap saja retak mengangkat bahu
Sisyphus

3

Haskell , retak

Ini murni berdasarkan aritmatika. Perhatikan bahwa itu myfunadalah fungsi sebenarnya, sementara hitu hanyalah fungsi pembantu.

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

Cobalah online!


Program harus selesai tanpa kesalahan pada semua input. Apakah ini bahkan selesai dalam sehari dengan memori yang tidak terbatas?
michi7x7

Anda memang membutuhkan sedikit memori tetapi Anda tentu saja tidak membutuhkan memori tanpa batas. Mungkin tergantung pada implementasi dan pada perangkat keras Anda. Tapi itu jelas dirancang untuk mengambil beberapa waktu untuk menghitung untuk membuat serangan brute force menjadi sulit dan mendorong analisis program. Semoga berhasil :)
flawr


2

Jawa, Retak oleh 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);
    }
}

Saya ingin mencoba sesuatu yang berbeda dari fungsi hash dan acak yang biasa. Anda bisa meneruskan nomor sebagai argumen baris perintah. Keluaran 1jika nomor yang benar diberikan dan 0sebaliknya. Untuk jumlah kecil Anda juga dapat mencobanya secara online .

Petunjuk:

Bagian utama dari program mengimplementasikan varian dari algoritma yang sangat terkenal. Setelah Anda tahu apa fungsinya, Anda akan dapat mengoptimalkan program yang diberikan untuk menghitung nomor rahasia.

Penjelasan:

Program ini mengimplementasikan traversal dari varian kuadrat (tipe 2) dari kurva Koch yang terkenal (gambar dari Wikipedia): Nomor rahasia adalah iterasi pertama yang tidak melewati titik (B, C). Sebagaimana dikenali dengan benar oleh Nitrodon , kecuali iterasi pertama kita dapat dengan aman mengabaikan rekursi semua bagian kurva, yang tidak melewati titik yang diberikan. Dengan mengubah garis dalam program asli yang sesuai, kita dapat memeriksa nomor yang benar bahkan dalam juru bahasa online .

Quadratic_Koch_curve_type2_iterations.png


Retak , saya pikir; waktu yang berjalan terlalu lama untuk memverifikasi secara langsung, tetapi saya memeriksa dengan nilai yang lebih mudah dan celah saya tampaknya berfungsi.
Nitrodon


1

Oktaf, skor: ???

Ini cukup banyak dijamin bahwa tidak ada nomor lain akan memiliki 20 angka acak yang sama persis di akhir daftar 1e8angka.

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

Keluaran 1untuk nomor rahasia, 0jika tidak.

Saya menjalankan ini di Octave 4.2.0.


"Tidur dan pelambatan lainnya bisa dihilangkan saat memaksa."

Semoga beruntung dengan itu :)


tampaknya bahkan tidak berjalan pada tio
Okx

1
@ OKx Ini habis pada TIO, tetapi berjalan dalam versi desktop.
Rɪᴋᴇʀ

1
Mengapa downvote?
Wheat Wizard

3
@WheatWizard mungkin karena secara teori dimungkinkan bahwa ia memiliki beberapa nomor. Juga, ini agak membosankan tbh. Saya ingin melihat lebih banyak solusi matematika, RNG agak membosankan.
Rɪᴋᴇʀ

1
@Riker Tapi karena Anda menebak seed ke RNG, ia menggunakan RNG itu sendiri sebagai fungsinya yang sebenarnya deterministik. Tapi ya, mengingat itu bergantung pada kesulitan pembalikan apa yang Anda harapkan adalah fungsi satu arah, orang mungkin juga, hanya mengenkripsi string "benar" dengan nomor acak dan kemudian tantangan hampir sama dengan memecahkan skema enkripsi apa pun yang dipilih untuk menemukan kunci pribadi.
Shufflepants

1

Ly , skor 239, retak

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

Cobalah online!

Saya mengandalkan siapa pun yang mengenal Ly di sini, meskipun saya tahu betapa mudahnya itu bisa berubah ... berkeringat

Penjelasan:

(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 , skor 1574 ( retak )

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

Cobalah online!



1

dc

#!/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

Cobalah online!


Catatan: Kiriman ini telah dimodifikasi sejak diajukan. Pengajuan asli (di bawah) tidak valid dan dipecahkan oleh Sleafar dalam komentar di bawah. (Suatu input 1menimbulkan output yes, tetapi ada satu nomor lain yang memberikan hasil yang sama.)

#!/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

Cobalah online!


Interpreter online mengembalikan "ya" untuk input "1". Apakah ini dianggap retak sekarang?
Sleafar

@Leafar Sigh ... ya, itu adalah kesalahan bodoh di pihak saya.
John Gowers

Namun, itu berarti bahwa tantangan ini sekarang tidak valid, karena ada dua input yang membuatnya mencetak ya, jadi saya tidak yakin apakah Anda diizinkan untuk mengklaimnya. Saya akan menambahkan versi yang sudah diperbaiki ke posting ini, tetapi biarkan yang asli tetap ada jika Anda ada.
John Gowers

1

Ruby , aman, skor:

63105425988599693916

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

Cobalah online!

Penjelasan:

Persyaratan pertama memeriksa nomor input untuk narsisme . Utas yang semula saya tulis adalah kebetulan berbenturan pada waktu yang sama ketika saya memposting ini, tapi saya kira tidak ada yang memperhatikan. Yang kedua mengkonversi nomor ke basis 36, yang menggunakan huruf sebagai digit, dan memeriksa apakah string berisi "joe" atau "tim". Dapat dibuktikan (kelelahan) bahwa hanya ada satu nomor narsis yang bernama Joe atau Tim (Joe), karena angka narsisnya terbatas. Bukti bahwa mereka terbatas: hasil dari mengambil nomor n-digit, menaikkan setiap digit ke kekuatan ke-n, dan penjumlahan dibatasi di atas olehn*9^n, sedangkan nilai angka n-digit dibatasi di bawah ini oleh n ^ 10. Rasio antara istilah-istilah ini adalah n * (9/10) ^ n, yang akhirnya menurun secara monoton ketika n meningkat. Setelah jatuh di bawah 1, tidak akan ada angka narsisistik n-digit.


1

PHP, aman, skor:

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

Output 1 jika benar, 0 sebaliknya.

Sunting: Saya tidak berpikir ada orang yang mencoba memecahkan ini karena:

akan mudah untuk brute force.

Penjelasan:

Saya mengambil input dan mengubahnya menjadi "base 36", tapi saya tidak membalikkan sisanya untuk menghasilkan angka terakhir. Angka 60256 adalah "1ahs" di base 36. Unreversed, yaitu "sha1", yang merupakan fungsi dalam PHP. Pemeriksaan terakhir adalah sha1 (60256) sama dengan hash.



0

Python 3, skor: ???

Semoga ini, jika ada, menunjukkan betapa rusaknya masalah ini sebenarnya:

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()

Pada dasarnya, apa yang dilakukan kode ini adalah menghasilkan setiap string dengan malas sampai salah satu string memiliki hash yang sama persis hash_code atas. Kode yang tidak rusak mengambil bentuk dasar:

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

Kecuali <insert number here>diganti dengan angka dan ada komentar dalam kode untuk tujuan membuat kode hampir tidak dapat dilewati.

Saya telah mengambil setiap tindakan pencegahan untuk memastikan bahwa saya tidak mendapat manfaat dari posting ini. Sebagai permulaan, ini adalah wiki komunitas jadi saya tidak akan mendapatkan perwakilan untuk itu. Juga, skor saya agak besar, jadi semoga jawaban yang jauh lebih kreatif akan datang dan menang.

Semoga kalian semua tidak terlalu marah pada tanggapan saya, saya hanya ingin memamerkan mengapa pos polisi dan perampok biasanya melarang algoritma hashing.


Input diambil dari stdin. Output adalah 1 (untuk angka yang ditebak dengan benar) atau 0 (untuk yang salah menebak).
sonar235

Saya tidak tahu mengapa Anda menjadikan ini sebagai wiki komunitas. Ini jawaban Anda yang sepertinya butuh banyak kerjaan. Saya tentu tidak akan menyebut jawaban ini sebagai bukti dari pertanyaan yang rusak juga. Ini adalah jawaban yang cerdas, yang kemungkinan bisa mendapat skor bagus, (Saya bahkan tidak bisa membuktikan ini tidak berhasil untuk 1). Inti dari sebuah pertanyaan adalah untuk selalu menarik jawaban yang mendekati pertanyaan dengan cara-cara menarik yang cerdas (dan juga untuk bersenang-senang tetapi saya tidak dapat menjamin hiburan Anda), dan sejauh yang saya ketahui, hal ini dapat dilakukan.
Wheat Wizard

3
Sebenarnya jawaban ini tidak valid. Hampir pasti (dengan probabilitas astronomi tidak ada untaian panjang 512 bit yang cocok dengan hash) exec () sesuatu yang lain yang bahkan mungkin bukan kode python yang valid sebelum mencapai kode yang dimaksud.
Joshua

1
@ sonar235: Templat fragmen Anda memiliki lebih dari 512 bit di dalamnya.
Yosua

1
Untuk memperluas jawaban Joshua: panjang kode Anda adalah 102 karakter. Secara khusus, program Anda akan mengulangi setiap string 100 karakter sebelum sampai ke kode Anda. Karena kode Anda berulang lebih dari karakter dalam kisaran 0x00-0xFF, itu adalah 256 ^ 100atau 2 ^ 800string. Sementara itu, hanya ada 2 ^ 512hash 512-bit yang mungkin. Itu berarti bahwa string yang Anda ulangi melebihi jumlah hash yang mungkin setidaknya 2 ^ 288satu - jumlah 10.000 kali lebih besar dari jumlah atom di alam semesta. Probabilitas hash tertentu yang tidak digunakan sangat kecil .
John Gowers

0

Python 3 , 49 byte, Retak oleh sonar235

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

Cobalah online!


Nol bukan fyi bilangan bulat postive. Saya tidak tahu apakah itu solusi yang dimaksudkan tetapi itu berhasil.
Wheat Wizard

0 bukan solusi yang dimaksudkan.
ED

8
Uhh, halaman TIO Anda menunjukkan solusinya ...
LyricLy

2
Juga "tulis program atau fungsi yang menampilkan satu nilai ketika memberikan angka sebagai input dan nilai lain untuk semua input bilangan bulat positif lainnya "
Jonathan Allan


0

Java, skor: 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
Saya tidak berpikir kebingungan akan melakukan apa pun kecuali menambahkan langkah pertama yang mengganggu.
Engineer Toast


2
@ EngineerToast tidak, tidak juga, itu murni untuk menakut-nakuti orang malas.
user902383

0

Python 3, skor 1 (aman)

Bukan solusi yang sangat menarik, tetapi lebih baik polisi yang aman daripada polisi yang mati.

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))

Output 1untuk nomor target, 0jika tidak. Input diambil dari stdin. Bagian terakhir ( and int(original.decode())<1000) ada hanya untuk memastikan hanya satu jawaban, kalau tidak pasti akan ada banyak sekali jawaban.


1
Bisakah Anda menambahkan tautan TIO?
Shaggy

1
Untuk perampok masa depan: Bilangan bulat sepertinya tidak lebih kecil dari 100000000.
Tn. Xcoder

1
@Shaggy Ini akan kehabisan waktu di TIO, butuh sekitar setengah jam di komputer saya untuk menjalankan iterasi SHA256 miliar.
L3viathan

2
Adakah perampok yang suka membentuk tim untuk menyelesaikan yang ini? Kita hanya perlu membagi angka-angka kurang dari 1000 di antara kita sehingga kita punya waktu untuk menghitung mencerna iterasi-SHA sebelum batas waktu.
John Gowers

2
Kecuali Anda dapat membuktikan bahwa 1 adalah satu-satunya solusi, jawaban ini tidak valid. Beban pembuktian harus ada pada orang yang mengklaim memiliki jawaban yang valid.
Dennis

0

C (gcc) , skor ???

#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");
}

Karena solusi kriptografi dianjurkan, di sini. Tepat satu bilangan bulat positif akan mencetak sesuatu , semua yang lain tidak akan mencetak apa pun. Ini membutuhkan waktu lama , sehingga tidak dapat diuji secara online.


0

Java, 164517378918, aman

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, skor: 196164532 tidak bersaing

Mengembalikan 1 untuk nomor rahasia, 0 sebaliknya.

Ans→rand
rand=1

Lihat catatan di halaman ini pada randperintah untuk info lebih lanjut.


8
Apakah ini dijamin memiliki tepat satu nomor input yang cocok?
Rɪᴋᴇʀ

@Riker: Saya pikir kalkulator TI menggunakan semacam floating point secara internal; jika RAND menggunakan floating point yang sama dengan yang lainnya, saya cukup yakin hanya ada 1 solusi.
Yosua

@ Joshua, saya percaya ini menggunakan Algoritma L'Ecuyer's .
kamoroso94

@ Yosua "cukup yakin" tidak cukup. Kecuali Anda dapat membuktikan bahwa hanya 1 solusi yang ada, ini bukan jawaban yang valid.
Rɪᴋᴇʀ

1
@ Dennis: Penyelidikan untuk 196164532 * 2; jika itu bukan solusi daripada tidak ada solusi lain.
Joshua

0

Python 3 , skor :?

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-)"

Cobalah online!

Sederhana, tetapi mungkin perlu waktu untuk brute-force ;-) Menantikan crack cepat ;-)

Catatan kaki: dua yang pertama dan kondisi terakhir membuat jawabannya unik.

BTW bagaimana skor dihitung?

Petunjuk 1

Anda mungkin berharap akan ada 2 64 jawaban di dalam 0 <= x < [the 25-digit prime], tetapi sebenarnya hanya ada 4, dan kondisi terakhir menghilangkan yang lain 3. Jika Anda dapat memecahkan ini, maka Anda juga akan tahu 3 solusi lainnya.



0

Aceto , aman

  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

Output TrueFalse jika benar, FalseFalse sebaliknya

Jumlahnya adalah

15752963

Cobalah online!


-2

C #, Mono, Linux, Alpha, skor 1 (aman)

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

Cermat. Saya sungguh-sungguh. Ada banyak simulator alfa di luar sana. Gunakan satu dengan jitter atau ini tidak akan selesai.

Ini tergantung pada kenyataan bahwa Alpha adalah big-endian, menyebabkan System.BitConverter melakukan hal yang salah jika seseorang mencoba ini pada x86 atau x64. Saya menulis jawaban ini untuk menunjukkan kejahatan tantangan lebih dari apa pun.


1
Ini tidak dapat memiliki tepat satu solusi; ada bilangan bulat tak terhingga, dan fungsi MD5 memiliki jumlah kemungkinan keluaran yang terbatas, jadi harus ada tabrakan
pppery

@ppperry: Hanya ada 2 miliar dan ubah int positif.
Yosua

Jika Anda berpikir seperti itu, kesalahan input ini lebih besar dari 2 ^ 31 , dan karenanya tidak valid.
pppery

@pperry: Nah, sekarang tidak akan ada kesalahan.
Joshua

2
Kecuali Anda dapat membuktikan bahwa 1 adalah satu-satunya solusi, jawaban ini tidak valid. Beban pembuktian harus ada pada orang yang mengklaim memiliki jawaban yang valid.
Dennis
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.