Loker vs Kerupuk: Urutan Lima Elemen


31

Tantangan

Tantangan "mata-mata versus mata-mata" yang sederhana.

Tulis program dengan spesifikasi berikut:

  1. Program dapat ditulis dalam bahasa apa pun tetapi tidak boleh melebihi 512 karakter (seperti yang diwakili dalam blok kode di situs ini).
  2. Program harus menerima 5 bilangan bulat 32-bit yang ditandatangani sebagai input. Ini dapat mengambil bentuk fungsi yang menerima 5 argumen, fungsi yang menerima array 5-elemen tunggal, atau program lengkap yang membaca 5 bilangan bulat dari input standar apa pun.
  3. Program harus mengeluarkan satu bilangan bulat 32-bit yang sudah ditandatangani.
  4. Program harus mengembalikan 1 jika dan hanya jika lima input, ditafsirkan sebagai urutan, cocok dengan urutan aritmatika tertentu dari pilihan programmer, yang disebut "kunci". Fungsi harus mengembalikan 0 untuk semua input lainnya.

Urutan aritmatika memiliki sifat bahwa setiap elemen berurutan sama dengan pendahulunya ditambah beberapa konstanta tetap a.

Sebagai contoh, 25 30 35 40 45adalah urutan aritmatika karena setiap elemen urutan sama dengan pendahulunya ditambah 5. Demikian juga, 17 10 3 -4 -11adalah urutan aritmatika karena setiap elemen sama dengan pendahulunya ditambah -7.

Urutan 1 2 4 8 16dan 3 9 15 6 12bukan urutan aritmatika.

Kunci dapat berupa urutan aritmatika yang Anda pilih, dengan batasan tunggal bahwa urutan yang melibatkan bilangan bulat bilangan bulat tidak diizinkan. Artinya, urutannya harus benar-benar meningkat, sangat menurun, atau memiliki semua elemen yang sama.

Sebagai contoh, misalkan Anda memilih kuncinya 98021 93880 89739 85598 81457. Program Anda harus mengembalikan 1 jika input (sesuai urutan) cocok dengan lima angka ini, dan 0 sebaliknya.

Harap dicatat bahwa cara melindungi kunci harus dari desain novel Anda sendiri. Juga, solusi probabilistik yang dapat mengembalikan false positive dengan probabilitas bukan nol tidak diizinkan. Khususnya, jangan gunakan hash kriptografi standar, termasuk fungsi pustaka untuk hash kriptografi standar.

Skor

Pengajuan non-retak terpendek per jumlah karakter akan dinyatakan sebagai pemenang.

Jika ada kebingungan, jangan ragu untuk bertanya atau berkomentar.

Counter-Challenge

Semua pembaca, termasuk mereka yang telah mengirimkan program mereka sendiri, didorong untuk "memecahkan" kiriman. Kiriman retak ketika kuncinya diposting di bagian komentar terkait. Jika kiriman bertahan selama 72 jam tanpa diubah atau di-crack, itu dianggap "aman" dan setiap keberhasilan selanjutnya dalam cracking itu akan diabaikan demi kontes.

Lihat "Penafian" di bawah ini untuk perincian tentang kebijakan skor retak yang diperbarui.

Pengajuan yang retak dihilangkan dari pertikaian (asalkan tidak "aman"). Tidak boleh diedit. Jika pembaca ingin mengirimkan program baru, ia harus melakukannya dalam jawaban yang terpisah.

Para cracker dengan skor tertinggi akan dinyatakan sebagai pemenang bersama dengan pengembang dari program yang menang.

Harap jangan merusak kiriman Anda sendiri.

Semoga berhasil. :)

Papan peringkat

Klasemen Penultimate (keamanan tertunda dari pengajuan Dennis 'CJam 49).

Loker Aman

  1. CJam 49, Dennis
  2. CJam 62, Dennis aman
  3. CJam 91, Dennis aman
  4. Python 156, Maarten Baert aman
  5. Perl 256, aman chilemagic
  6. Java 468, Geobits aman

Kerupuk yang tak terhentikan

  1. Peter Taylor [Ruby 130, Java 342, Mathematica 146 *, Mathematica 72 *, CJam 37]
  2. Dennis [Pyth 13, Python 86 *, Lua 105 *, GolfScript 116, C 239 *]
  3. Martin Büttner [Javascript 125, Python 128 *, Ruby 175 *, Ruby 249 *]
  4. Tyilo [C 459, Javascript 958 *]
  5. freddieknets [Mathematica 67 *]
  6. Ilmari Karonen [Python27 182 *]
  7. nitrous [C 212 *]

* pengiriman yang tidak sesuai

Penafian (Diperbarui 11:15 PM EST, 26 Agustus)

Dengan masalah skor yang akhirnya mencapai massa kritis (mengingat dua pertiga dari kiriman yang retak sejauh ini tidak memenuhi persyaratan), saya telah memberi peringkat kerupuk teratas dalam hal jumlah kiriman yang retak (primer) dan jumlah total karakter dalam kiriman retak yang sesuai (sekunder).

Seperti sebelumnya, pengiriman persis retak, panjang pengiriman, dan status patuh / tidak patuh mereka semua ditandai sehingga pembaca dapat menyimpulkan peringkat mereka sendiri jika mereka percaya peringkat resmi baru itu tidak adil.

Maafkan saya karena mengubah aturan di akhir permainan.


6
Bagaimana Anda akan memverifikasi bahwa program memenuhi poin 4? Apakah Anda mengharapkan orang mengedit jawaban aman mereka untuk menambah bukti? Apakah pengiriman probabilistik diizinkan berdasarkan asumsi bahwa fungsi hash ideal dan kemungkinan tabrakan dengan elemen lain dari 48-bit (menurut perkiraan Anda di atas) ruang dapat diabaikan?
Peter Taylor

2
Sistem penilaian tampaknya mendorong kerupuk untuk mengabaikan kunci terpendek karena skor mereka lebih baik dengan memecahkan dua kunci panjang daripada dua yang kecil.
Peter Taylor

3
@COTO Saya pikir masalahnya adalah Anda hanya bisa mendapatkan 2 skor retak, dan hanya yang terpendek. Jadi mengapa tidak menunggu dan berharap dan satu lagi muncul? Sebagai contoh, Martin sekarang tidak memiliki insentif untuk memecahkan kunci saya (lebih lama), karena dia sudah memecahkan dua yang lebih pendek. Siapa pun yang memecahkan milikku sekarang akan memukulnya tanpa harus melakukan yang kedua.
Geobits

1
Saya pikir sistem penilaian yang lebih baik mungkin jumlah total waktu antara pertanyaan dan celah. Dengan begitu, meretakkan banyak yang mudah bisa dikalahkan, dan hadiah nyata datang dari meretakkan yang benar-benar sulit.
isaacg

1
Saya baru bermain golf, jadi mungkin itu pertanyaan bodoh, maaf untuk itu. Mengapa panjang kode diukur dalam karakter dan bukan dalam byte? Yang terakhir secara harfiah adalah ruang memori yang ditempati suatu program, jadi bagi saya sepertinya lebih logis. Misalnya. jawaban CJam adalah yang terpendek dalam karakter, tetapi ketika melihat ukurannya (326 karena unicode) itu bahkan tidak di atas 5. Jadi, saya bertanya-tanya, apakah itu kebiasaan umum dalam bermain golf untuk menghitung karakter alih-alih byte?
freddieknets

Jawaban:


3

CJam, 62 karakter

"ḡꬼ쏉壥떨ሤ뭦㪐ꍡ㡩折量ⶌ팭뭲䯬ꀫ郯⛅彨ꄇ벍起ឣ莨ຉᆞ涁呢鲒찜⋙韪鰴ꟓ䘦쥆疭ⶊ凃揭"2G#b129b:c~

Stack Exchange cenderung untuk menganiaya karakter yang tidak patut, tetapi menyalin kode dari tempel ini dan menempelkannya pada juru bahasa CJam berfungsi baik untuk saya.

Bagaimana itu bekerja

Setelah mengganti string Unicode dengan string ASCII, kode berikut ini dijalankan:

" Push 85, read the integers from STDIN and collect everything in an array.               ";

85l~]

" Convert the array of base 4**17 digits into and array of base 2 digits.                 ";

4H#b2b

" Split into chunks of length 93 and 84.                                                  ";

93/~

" Do the following 611 times:

    * Rotate array A (93 elements) and B one element to the left.
    * B[83] ^= B[14]
    * T = B[83]
    * B[83] ^= B[0] & B[1] ^ A[23]
    * A[92] ^= A[26]
    * Rotate T ^ A[92] below the arrays.
    * A[92] ^= A[0] & A[1] ^ B[5].                                                        ";

{(X$E=^:T1$2<:&^2$24=^+\(1$26=^_T^@@1$2<:&^3$5=^+@}611*

" Discard the arrays and collects the last 177 generated bits into an array.              ";

;;]434>

" Convert the into an integer and check if the result is 922 ... 593.                     ";

2b9229084211442676863661078230267436345695618217593=

Pendekatan ini menggunakan Bivium-B (lihat analisis aljabar dari trivium-like ciphers ), versi pelemahan stream cipher Trivium .

Program ini menggunakan urutan bilangan bulat sebagai keadaan awal, memperbarui keadaan 434 kali (354 putaran mencapai difusi penuh) dan menghasilkan 177 bit output, yang dibandingkan dengan urutan yang benar.

Karena ukuran negara justru 177 bit, ini harus cukup untuk secara unik mengidentifikasi keadaan awal.

Contoh dijalankan

$ echo $LANG
en_US.UTF-8
$ base64 -d > block.cjam <<< IgThuKHqrLzsj4nlo6XrlqjhiKTrrabjqpDqjaHjoanmipjvpb7itozuoIDtjK3rrbLul7bkr6zqgKvvjafpg6/im4XlvajqhIfrso3uprrotbfvmL/hnqPojqjguonhhp7mtoHujLPuipzlkaLpspLssJzii5npn6rpsLTqn5PkmKbspYbnlq3itorlh4Pmj60iMkcjYjEyOWI6Y34=
$ wc -m block.cjam
62 block.cjam
$ cjam block.cjam < block.secret; echo
1
$ cjam block.cjam <<< "1 2 3 4 5"; echo
0

6

CJam, 91 karakter

q~]KK#bD#"᫖࿼듋ޔ唱୦廽⻎킋뎢凌Ḏ끮冕옷뿹毳슟夫΢眘藸躦䪕齃噳卤"65533:Bb%"萗縤ᤞ雑燠Ꮖ㈢ꭙ㈶タ敫䙿娲훔쓭벓脿翠❶셭剮쬭玓ୂ쁬䈆﹌⫌稟"Bb=

Stack Exchange cenderung untuk menganiaya karakter yang tidak patut, tetapi menyalin kode dari tempel ini dan menempelkannya pada juru bahasa CJam berfungsi baik untuk saya.

Bagaimana itu bekerja

Setelah mengganti string Unicode dengan integer (dengan mempertimbangkan digit karakter nomor 65533 basis), kode berikut ini dijalankan:

" Read the integers from STDIN and collect them in an array.                               ";

q~]

" Convert it into an integer by considering its elements digits of a base 20**20 number.   ";

KK#b

" Elevate it to the 13th power modulus 252 ... 701.                                        ";

D#
25211471039348320335042771975511542429923787152099395215402073753353303876955720415705947365696970054141596580623913538507854517012317194585728620266050701%

" Check if the result is 202 ... 866.                                                      ";

20296578126505831855363602947513398780162083699878357763732452715119575942704948999334568239084302792717120612636331880722869443591786121631020625810496866=

Karena 13 adalah coprime terhadap total modulus (totalnya adalah rahasia, jadi Anda hanya perlu mempercayai saya), basis yang berbeda akan menghasilkan hasil yang berbeda, yaitu solusinya unik.

Kecuali seseorang dapat mengeksploitasi eksponen kecil (13), cara paling efisien untuk memecahkan kunci ini adalah dengan memfaktisasi modulus (lihat masalah RSA ). Saya memilih integer 512-bit untuk modulus, yang harus tahan 72 jam dari upaya faktorisasi.

Contoh dijalankan

$ echo $LANG
en_US.UTF-8
$ base64 -d > lock.cjam <<< cX5dS0sjYkQjIgHuiJHhq5bgv7zrk4velOWUse6zjuCtpuW7veK7ju2Ci+uOouWHjOG4ju+Rh+uBruWGleyYt+u/ueavs+6boOyKn+Wkq86i55yY6Je46Lqm5KqV6b2D5Zmz75Wp5Y2kIjY1NTMzOkJiJSIB6JCX57ik4aSe74aS6ZuR54eg4Y+G44ii6q2Z44i244K/5pWr5Jm/5aiy7ZuU7JOt67KT7rO26IS/57+g4p2275+K7IWt5Ymu7Kyt546T4K2C7IGs5IiG77mM4quM56ifIkJiPQ==
$ wc -m lock.cjam
91 lock.cjam
$ cjam lock.cjam < lock.secret; echo
1
$ cjam lock.cjam <<< "1 2 3 4 5"; echo
0

Saya telah memposting versi baru karena saya lupa menghapus karakter yang tidak perlu dari yang pertama. Urutan rahasia masih sama, sehingga Anda dapat mencoba memecahkannya.
Dennis

FYI, saya membatalkan upaya anjak piutang saya. msieve menetapkan sendiri batas waktu 276 jam, tapi itu hanya untuk membangun basis faktor. Pada waktu itu found 1740001 rational and 1739328 algebraic entries; karena sudah hampir 100 jam untuk memprosesnya, dan melaporkan sieving in progress b = 46583, 0 complete / 0 batched relations (need 44970493).
Peter Taylor

@PeterTaylor: Sepertinya 512 bit berlebihan. Apakah Anda mencoba memfaktorkan bilangan bulat dalam jawaban saya yang lain atau yang ini?
Dennis

Oh, oops. Ya, yang lain.
Peter Taylor

4

Python - 128

Mari kita coba yang ini:

i=input()
k=1050809377681880902769L
print'01'[all((i>1,i[0]<i[4],k%i[0]<1,k%i[4]<1,i[4]-i[3]==i[3]-i[2]==i[2]-i[1]==i[1]-i[0]))]

(Mengharapkan pengguna untuk memasukkan 5 angka yang dipisah koma, mis 1,2,3,4,5.)


3
32416190039,32416190047,32416190055,32416190063,32416190071
Martin Ender

Wow, itu cepat! Kamu benar! Dan saya keluar.
Falko

3
Btw, ini sebenarnya tidak valid, karena lima bilangan bulat Anda tidak cocok dengan bilangan bulat 32-bit.
Martin Ender

4

Jawa: 468

Input diberikan sebagai k(int[5]). Menalangi lebih awal jika jaraknya tidak merata. Kalau tidak, perlu sedikit mencari tahu apakah semua sepuluh hash benar. Untuk jumlah besar, "sedikit" bisa berarti sepuluh detik atau lebih, jadi itu bisa mencegah kerupuk.

//golfed
int k(int[]q){int b=q[1]-q[0],i,x,y,j,h[]=new int[]{280256579,123883276,1771253254,1977914749,449635393,998860524,888446062,1833324980,1391496617,2075731831};for(i=0;i<4;)if(q[i+1]-q[i++]!=b||b<1)return 0;for(i=1;i<6;b=m(b,b/(i++*100),(1<<31)-1));for(i=0;i<5;i++){for(j=1,x=b,y=b/2;j<6;x=m(x,q[i]%100000000,(1<<31)-1),y=m(y,q[i]/(j++*1000),(1<<31)-1));if(x!=h[i*2]||y!=h[i*2+1])return 0;}return 1;}int m(int a,int b,int c){long d=1;for(;b-->0;d=(d*a)%c);return (int)d;}

// line breaks
int k(int[]q){
    int b=q[1]-q[0],i,x,y,j,
    h[]=new int[]{280256579,123883276,1771253254,1977914749,449635393,
                  998860524,888446062,1833324980,1391496617,2075731831};
    for(i=0;i<4;)
        if(q[i+1]-q[i++]!=b||b<1)
            return 0;
    for(i=1;i<6;b=m(b,b/(i++*100),(1<<31)-1));
    for(i=0;i<5;i++){
        for(j=1,x=b,y=b/2;j<6;x=m(x,q[i]%100000000,(1<<31)-1),y=m(y,q[i]/(j++*1000),(1<<31)-1));
        if(x!=h[i*2]||y!=h[i*2+1])
            return 0;
    }
    return 1;
}
int m(int a,int b,int c){
    long d=1;for(;b-->0;d=(d*a)%c);
    return (int)d;
}

1
Kode Anda hang jika urutan aritmatika input menurun. Atau setidaknya, butuh waktu sangat lama. Yang membuat saya berpikir kode rahasia naik ...
Keith Randall

3
@KeithRandall Ups. Mari kita tambahkan empat byte untuk membuat urutan menurun membutuhkan waktu yang sangat singkat , semakin memperkuat keyakinan Anda.
Geobits

4

Jawa: 342

int l(int[]a){String s=""+(a[1]-a[0]);for(int b:a)s+=b;char[]c=new char[11];for(char x:s.toCharArray())c[x<48?10:x-48]++;for(int i=0;i<11;c[i]+=48,c[i]=c[i]>57?57:c[i],i++,s="");for(int b:a)s+=new Long(new String(c))/(double)b;return s.equals("-3083.7767567702776-8563.34366442527211022.4345579010483353.1736981951231977.3560837512646")?1:0;}

Berikut adalah pengunci berbasis string yang bergantung pada jumlah karakter input dan input spesifik. Urutan mungkin didasarkan pada referensi budaya pop yang tidak jelas. Selamat bersenang-senang!

Sedikit tidak ungolfed:

int lock(int[]a){
    String s=""+(a[1]-a[0]);
    for(int b:a)
        s+=b;
    char[]c=new char[11];
    for(char x:s.toCharArray())
        c[x<48?10:x-48]++;
    for(int i=0;i<11;c[i]+=48,
                     c[i]=c[i]>57?57:c[i],
                     i++,
                     s="");
    for(int b:a)
        s+=new Long(new String(c))/(double)b;
    return s.equals("-3083.7767567702776-8563.34366442527211022.4345579010483353.1736981951231977.3560837512646")?1:0;
}

2
8675309? 90210?
Maleakhi

1
@Malachi Dua referensi luar biasa, tidak diragukan lagi, tapi saya tidak bisa mengkonfirmasi atau menolak penerapannya untuk latihan ini.
Geobits

lol, saya belum sepenuhnya mengetahui bagaimana tantangan ini bekerja sepenuhnya, saya dapat mencobanya nanti ketika saya di rumah.
Maleakhi

1
Istilah awal adalah -8675309, delta adalah 5551212.
Peter Taylor

@PeterTaylor Bagus sekali :)
Geobits

4

Python, 147

Sunting: versi lebih pendek berdasarkan komentar Dennis. Saya memperbarui urutan juga untuk menghindari kebocoran informasi.

def a(b):
    c=1
    for d in b:
        c=(c<<32)+d
    return pow(7,c,0xf494eca63dcab7b47ac21158799ffcabca8f2c6b3)==0xa3742a4abcb812e0c3664551dd3d6d2207aecb9be

Berdasarkan masalah logaritma diskrit yang diyakini tidak dapat dipecahkan, namun yang utama saya gunakan mungkin terlalu kecil untuk diamankan (dan mungkin memiliki masalah lain, saya tidak tahu). Dan Anda dapat dengan paksa memaksakannya, karena satu-satunya yang tidak diketahui adalah dua bilangan bulat 32-bit.


Logaritma diskrit jauh lebih sulit dari yang saya kira. Cracker saya sudah di ini selama 26 jam. Saya menyerah.
Dennis

Anda dapat memecahkan masalah tanda dengan menginisialisasi c=1, menghitung c=(c<<32)+ddan mengubah konstanta yang sesuai.
Dennis

3

Javascript 125

Yang ini harus cepat retak. Saya akan menindaklanjuti dengan sesuatu yang lebih kuat.

function unlock(a, b, c, d, e)
{
    return (e << a == 15652) && (c >> a == 7826) && (e - b == d) && (d - c - a == b) ? 1 : 0;
}

6
0, 3913, 7826, 11739, 15652
Martin Ender

ya, Anda mendapatkannya :)
rdans

3

Ruby, 175

a=gets.scan(/\d+/).map(&:to_i)
a.each_cons(2).map{|x,y|x-y}.uniq[1]&&p(0)&&exit
p a[2]*(a[1]^a[2]+3)**7==0x213a81f4518a907c85e9f1b39258723bc70f07388eec6f3274293fa03e4091e1?1:0

Tidak seperti menggunakan hash kriptografi atau srand, hash ini terbukti unik (yang merupakan sedikit petunjuk). Mengambil lima angka melalui STDIN, dibatasi oleh karakter atau karakter non-baris baru. Output ke STDOUT.


Yap, lupa mereka sudah masuk.
histokrat

2
622238809,1397646693,2173054577,2948462461,3723870345(Dugaan saya sebelumnya memiliki kesalahan, tetapi yang ini diuji). Saya tidak berpikir ini valid, karena angka terakhir tidak cocok dengan bilangan bulat 32-bit yang ditandatangani.
Martin Ender

3

GolfScript (116 karakter)

Mengambil input sebagai bilangan bulat yang dipisahkan oleh ruang.

~]{2.5??:^(&}%^base 2733?5121107535380437850547394675965451197140470531483%5207278525522834743713290685466222557399=

2
-51469355 -37912886 -24356417 -10799948 2756521
Dennis

Kerja bagus. Apakah Anda mengeksploitasi eksponen kecil?
Peter Taylor

2
Tidak, saya memfaktorkan modulusnya. Hanya membutuhkan waktu 13 detik dengan menggunakan Multiple Polynomial Quadratic Sieve dan PyPy.
Dennis

Dalam hal ini saya mungkin juga meninggalkan golf saya saat ini dengan menggunakan modulus yang diekspresikan secara kompak. Jika hasilnya harus seperti 1024 bit agar aman dari anjak maka bahkan menggunakan representasi basis-256 itu akan terlalu lama.
Peter Taylor

Saya harap tidak. Jawaban saya menggunakan ide yang sama seperti milik Anda, tetapi dengan modulus 512 bit dan eksponen yang bahkan lebih kecil (13). Mengingat batas waktu 72 jam, itu mungkin cukup ...
Dennis

3

C 459 byte

ASK OLEH Tyilo - BACA EDIT DI BAWAH

int c (int* a){
int d[4] = {a[1] - a[0], a[2] - a[1], a[3] - a[2], a[4] - a[3]};
if (d[0] != d[1] || d[0] != d[2] || d[0] != d[3]) return 0;
int b[5] = {a[0], a[1], a[2], a[3], a[4]};
int i, j, k;
for (i = 0; i < 5; i++) { 
for (j = 0, k = 2 * i; j < 5; j++, k++) {
k %= i + 1;
b[j] += a[k];
}
}
if (b[0] == 0xC0942 - b[1] && 
b[1] == 0x9785A - b[2] && 
b[2] == 0x6E772 - b[3] && 
b[3] == 0xC0942 - b[4] && 
b[4] == 0xB6508 - b[0]) return 1;
else return 0;
}

Kami membutuhkan seseorang untuk menulis solusi C, bukan? Saya tidak mengesankan siapa pun dengan panjang, saya bukan pegolf. Saya harap ini tantangan yang menarik!

Saya tidak berpikir ada cara yang jelas untuk memecahkan yang ini, dan saya dengan sabar menunggu semua upaya! Saya tahu solusi ini unik. Kebingungan yang sangat minim, sebagian besar untuk memenuhi persyaratan panjang. Ini dapat diuji secara sederhana:

int main(){
    a[5] = {0, 0, 0, 0, 0} /* your guess */
    printf("%d\n", c(a));
    return 0;
}

NB Ada arti penting a[0]sebagai nomor dalam dirinya sendiri, dan saya ingin melihat seseorang menunjukkannya di komentar!

EDIT:

Larutan: 6174, 48216, 90258, 132300, 174342

Catatan tentang cracking:

Meskipun ini bukan metode yang digunakan (lihat komentar), saya kebetulan memecahkan sandi saya sendiri dengan bruteforce yang sangat mudah. Saya mengerti sekarang, sangat penting untuk membuat jumlahnya besar. Kode berikut dapat memecahkan setiap cipher di mana upper_boundbatas atas diketahui a[0] + a[1] + a[2] + a[3] + a[4]. Batas atas dalam cipher di atas adalah 457464, yang dapat diturunkan dari sistem persamaan b[]dan beberapa kerja-algoritma. Dapat ditunjukkan itu b[4] = a[0] + a[1] + a[2] + a[3] + a[4].

int a[5];
for (a[0] = 0; a[0] <= upper_bound / 5; a[0]++) {
    for (a[1] = a[0] + 1; 10 * (a[1] - a[0]) + a[0] <= upper_bound; a[1]++) {
        a[2] = a[1] + (a[1] - a[0]);
        a[3] = a[2] + (a[1] - a[0]);
        a[4] = a[3] + (a[1] - a[0]);
        if (c(a)) {
            printf("PASSED FOR {%d, %d, %d, %d, %d}\n", a[0], a[1], a[2], a[3], a[4]);
        }
    }
    printf("a[0] = %d Checked\n", a[0]);
}

Dengan a[0] = 6174, lingkaran ini memecah pekerjaan saya dalam waktu kurang dari satu menit.


6
Solusi: 6174, 48216, 90258, 132300, 174342.
Tyilo

Wow, itu cepat. Bagus Dipaksa, atau apakah Anda menemukan sesuatu yang pintar yang saya lewatkan?
BrainSteel

Saya menggunakan evaluasi simbolik Mathematica ini seperti: ghostbin.com/paste/jkjpf screenshot: i.imgur.com/2JRo7LE.png
Tyilo

Sunting: pada dasarnya saya melakukan hal yang sama, tetapi memalsukan bagian atas pada 500k. Mendapat jawaban dan melihat bahwa Tyilo sudah mempostingnya :(
Geobits

@ Geobits Itu dugaan yang sangat akurat. Seharusnya lebih dari 0 di ujung angka-angka itu.
BrainSteel

3

Mathematica 80 67

f=Boole[(p=NextPrime/@#)-#=={18,31,6,9,2}&&BitXor@@#~Join~p==1000]&

Berlari:

f[{1,2,3,4,5}] (* => 0 *)

Mungkin cukup mudah retak, mungkin juga memiliki beberapa solusi.

Pembaruan: Peningkatan golf dengan melakukan apa yang disarankan Martin Büttner. Fungsi fungsi dan kunci tidak berubah.


@ MartinBüttner Meningkatkan jawaban untuk mendapatkan skor lebih tinggi saat Anda memecahkannya. Smart; P
Tyilo

Huh, ternyata saya melewatkan paragraf tentang mencetak gol untuk tantangan kontra. Saya pikir itu hanya untuk bersenang-senang tanpa skor sama sekali. Meskipun saya pikir itu tidak masuk akal bagi saya untuk mempersingkat solusi, saya ingin memecahkannya karena itu akan mengurangi skor saya.
Martin Ender

4
{58871,5592,-47687,-100966,-154245}
freddieknets

@Freddieknets Bukan solusi yang saya gunakan saat membuatnya. Tidak tahu itu NextPrimebisa mengembalikan nilai negatif. Bagaimana caramu menemukannya?
Tyilo

Maka kunci Anda tidak unik: hal. Saya hanya menjalankan beberapa tes - benar-benar tidak banyak angka di mana NextPrime [#] - # mengevaluasi hingga 31, jadi itu cara mudah untuk memecahkannya.
freddieknets

2

Python27, 283 182

Baiklah, saya sangat percaya pada loker saya, namun cukup lama karena saya telah menambahkan perhitungan 'sulit untuk dibalik' ke input, untuk membuatnya baik - sulit untuk dibalik.

import sys
p=1
for m in map(int,sys.argv[1:6]):m*=3**len(str(m));p*=m<<sum([int(str(m).zfill(9)[-i])for i in[1,3,5,7]])
print'01'[p==0x4cc695e00484947a2cb7133049bfb18c21*3**45<<101]

sunting: Terima kasih kepada colevk untuk bermain golf lebih lanjut. Saya menyadari selama mengedit bahwa ada bug dan juga cacat pada algoritme saya, mungkin saya akan lebih beruntung di lain waktu.


5
Ini invarian dengan penataan ulang argumen, jadi ini bukan loker yang valid.
Peter Taylor

Selain itu, saya menduga kode yang diposkan adalah buggy: kuncinya 121174841 121174871 121174901 121174931 121174961berfungsi, tetapi hanya jika daftar [1,3,5,7]pada baris 7 diganti [1,3,5,7,11].
Ilmari Karonen

Sial, ya saya baru saja memperbaiki kesalahan ketik saya, di mana saya membuat kesalahan krusial dalam algoritme saya, membuatnya sangat mudah retak: |
stokastic

Sebenarnya, menemukan dan memperbaiki bug adalah bagian yang sulit; mengingat algoritma Anda, memfaktorkan konstanta adalah jenis hal yang jelas untuk dicoba.
Ilmari Karonen

2

Mathematica 142 146

Sunting : kunci itu tidak unik, menambahkan 4 karakter, sekarang.

n=NextPrime;
f=Boole[
    FromDigits /@ (
        PartitionsQ[n@(237/Plus@##) {1, ##} + 1] & @@@ 
            IntegerDigits@n@{Plus@##-37*Log[#3],(#1-#5)#4}
    ) == {1913001154,729783244}
]&

(Spasi dan baris baru ditambahkan agar mudah dibaca, tidak dihitung & tidak diperlukan).

Pemakaian:

f[1,2,3,4,5]   (* => 0 *)

1
Istilah awal 256208, delta -5.
Peter Taylor

Dang, tetap saja itu tidak unik, karena ini bukan kunci asli saya. Apakah Anda bruteforce?
freddieknets

Mengujinya, saya mungkin telah membuat kesalahan karena saya tidak memiliki akses ke Mathematica untuk menguji. Setiap tahap menggunakan kekerasan, tetapi tidak banyak waktu komputer. Pendekatannya adalah bekerja mundur ke output IntegerDigitsdan kemudian faktor untuk mendapatkan kandidat untuk istilah awal dan delta.
Peter Taylor

Tetapi tidak mungkin pendekatan ini unik. Input kedua dari lima hanya digunakan dalam jumlah yang diteruskan ke NextPrime; jika kita memvariasikannya dengan plus atau minus satu, setidaknya salah satu dari mereka akan memberikan perdana berikutnya yang sama.
Peter Taylor

ya tetapi untuk urutan aritmatika -sebagai input yang diperlukan- itu seharusnya unik.
freddieknets

1

Retak oleh @ Dennis dalam 2 jam


Hanya yang sederhana untuk memulai sesuatu - Saya sepenuhnya berharap ini cepat retak.

Pyth , 13

h_^ZqU5m-CGdQ

Mengambil input yang dipisahkan koma pada STDIN.

Jalankan seperti ini (-c berarti ambil program sebagai argumen baris perintah):

$ echo '1,2,3,4,5' | python3 pyth.py -c h_^ZqU5m-CGdQ
0

Memperbaiki program - Saya belum mengerti spesifikasi.

Bahasa ini mungkin terlalu esoteris untuk kompetisi ini - Jika OP berpikir begitu, saya akan menghapusnya.


7
Apakah Anda baru saja memberikan itu 1,2,3,4,5kuncinya?
Peter Taylor

1
Setiap input yang saya coba kembalikan 1, apakah Anda mengganti 1 dan 0 sebagai output?
Tyilo

Maaf, saya tidak mengerti perbedaan Keluaran vs. Pengembalian - program seharusnya bekerja sekarang. Algoritma yang mendasari yang sama.
isaacg

3
97,96,95,94,93(Saya baru saja membunuh skor retak saya.)
Dennis

@ Dennis Bagus. Sistem skor retak perlu diubah - itu menciptakan beberapa insentif yang sangat aneh.
isaacg

1

Lua 105

Saya curiga tidak akan lama sebelum retak, tapi di sini kita mulai:

function f(a,b,c,d,e)
   t1=a%b-(e-2*(d-b))
   t2=(a+b+c+d+e)%e
   t3=(d+e)/2
   print(t1==0 and t2==t3 and"1"or"0")
end

(spasi ditambahkan untuk kejelasan, tetapi bukan bagian dari perhitungan)


3, 7, 11, 15, 19atau6, 14, 22, 30, 38
Dennis

@ Dennis: sayangnya itu bukan keduanya. Saya harus mengerjakannya sedikit nanti untuk memastikan keunikannya.
Kyle Kanos

t1==0kapan Smeningkat. Juga, kedua kondisinya homogen; jika Smerupakan solusi, demikian pula halnya kS.
Dennis

1

Perl - 256

sub t{($z,$j,$x,$g,$h)=@_;$t="3"x$z;@n=(7,0,split(//,$g),split(//,$h),4);@r=((2)x6,1,1,(2)x9,4,2,2,2);$u=($j+1)/2;for$n(0..$#r+1){eval{substr($t,$j,1)=$n[$n]};if($@){print 0; return}$j+=$r[$n]*$u}for(1..$x){$t=pack'H*',$t;}eval$t;if($@||$t!~/\D/){print 0}}

Saya harus memasukkan banyak kesalahan dalam menangani logika dan ini pasti bisa diturunkan lebih banyak. Ini akan mencetak 1ketika Anda mendapatkan lima angka yang tepat. Mudah- mudahan akan mencetak a 0untuk segala sesuatu yang lain (mungkin kesalahan atau tidak sama sekali, saya tidak tahu). Jika ada yang ingin membantu meningkatkan kode atau golf lebih banyak, jangan ragu untuk membantu!


Telepon dengan:

t(1,2,3,4,5);

1

Ruby - 130

Berdasarkan Daftar Shift Umpan Balik Linier. Input dengan argumen baris perintah.
Harus unik berdasarkan sifat LFSR. Petunjuk: naik dan semuanya positif.

Akan memberikan lebih banyak petunjuk jika tidak ada yang menyelesaikannya segera.

x=($*.map{|i|i.to_i+2**35}*'').to_i
(9**8).times{x=((x/4&1^x&1)<<182)+x/2}
p x.to_s(36)=="qnsjzo1qn9o83oaw0a4av9xgnutn28x17dx"?1:0

3
Nilai awal 781783, selisih 17982811
Peter Taylor

@PeterTaylor Argh ... =)
Vectorized

1

Ruby, 249

a=gets.scan(/\d+/).map(&:to_i)
a.each_cons(2).map{|x,y|x-y}.uniq[1]&&p(0)&&exit
r=(a[0]*a[1]).to_s(5).tr'234','(+)'
v=a[0]<a[1]&&!r[20]&&(0..3).select{|i|/^#{r}$/=~'%b'%[0xaa74f54ea7aa753a9d534ea7,'101'*32,'010'*32,'100'*32][i]}==[0]?1:0rescue 0
p v

Harusnya menyenangkan. Siapa yang butuh matematika?


2
309, 77347, 154385, 231423, 308461tapi saya rasa itu tidak unik.
Martin Ender

Ya, tidak. Untuk regex yang sama (yaitu produk dari dua angka pertama), saya juga menemukan 103, 232041, 463979, 695917, 927855dan 3, 7966741, 15933479, 23900217, 31866955. Dan saya cukup yakin ada regex lain yang valid dengan menggunakan tambahan +.
Martin Ender

Maaf, kurasa aku mengacaukan string tes. Seharusnya hanya ada satu regexp dengan faktorisasi unik.
histokrat

Jika Anda ingin mencoba memperbaikinya, pastikan untuk memperhitungkan bilangan posesif. Saya juga dapat membuat regex yang lebih besar dan setara dengan menyisipkan ()atau serupa.
Martin Ender

1

CJam, 49 karakter

"腕옡裃䃬꯳널֚樂律ࡆᓅ㥄뇮┎䔤嬣ꑙ䘿휺ᥰ籃僾쎧諯떆Ἣ餾腎틯"2G#b[1q~]8H#b%!

Cobalah online.

Bagaimana itu bekerja

" Push a string representing a base 65536 number and convert it to an integer.            ";

"腕옡裃䃬꯳널֚樂律ࡆᓅ㥄뇮┎䔤嬣ꑙ䘿휺ᥰ籃僾쎧諯떆Ἣ餾腎틯"2G#b

" Prepend 1 to the integers read from STDIN and collect them into an array.               ";

[1q~]

" Convert that array into an integer by considering it a base 2**51 number.               ";

8H#b

" Push the logical NOT of the modulus of both computed integers.                          ";

%!

Hasilnya akan menjadi 1 jika dan hanya jika bilangan bulat kedua adalah faktor yang pertama, yang merupakan produk dari dua bilangan prima: yang sesuai dengan urutan rahasia dan yang lain yang tidak sesuai dengan urutan yang valid. Karena itu, solusinya unik.

Memfaktorkan integer 512 bit tidak terlalu sulit, tapi saya harap tidak ada yang bisa melakukannya dalam 72 jam. Versi saya sebelumnya menggunakan bilangan bulat 320 bit telah rusak .

Contoh dijalankan

$ echo $LANG
en_US.UTF-8
$ base64 -d > flock512.cjam <<< IuiFleyYoeijg+SDrOqvs+uEkNaa76a/5b6L4KGG4ZOF76Gi46WE64eu4pSO5JSk5ayj6pGZ5Ji/7Zy64aWw57GD5YO+7I6n6Kuv65aG7qK04byr6aS+6IWO7rSn7YuvIjJHI2JbMXF+XThII2IlIQ==
$ wc -m flock512.cjam
49 flock512.cjam
$ cjam flock512.cjam < flock512.secret; echo
1
$ cjam flock512.cjam <<< "1 2 3 4 5"; echo
0

Saya sudah menjalankan msieve lebih dari 24 jam, tetapi karena batas waktu yang ditentukan sendiri adalah 276,51 CPU-jam dan saya hanya memberinya satu CPU saya tidak optimis.
Peter Taylor

0

Javascript 958

Mengonversi input ke sejumlah tipe data dan melakukan beberapa manipulasi yang relevan dengan setiap tipe data di sepanjang jalan. Harus dibalik dengan mudah bagi siapa saja yang membutuhkan waktu.

function encrypt(num)
{
    var dateval = new Date(num ^ (1024-1) << 10);

    dateval.setDate(dateval.getDate() + 365);

    var dateString = (dateval.toUTCString() + dateval.getUTCMilliseconds()).split('').reverse().join('');

    var result = "";

    for(var i = 0; i < dateString.length; i++)
        result += dateString.charCodeAt(i);

    return result;
}

function unlock(int1, int2, int3, int4, int5)
{
    return encrypt(int1) == "5549508477713255485850495848483249555749321109774324948324410511470" && encrypt(int2) == "5756568477713252485848495848483249555749321109774324948324410511470" && encrypt(int3) == "5149538477713248485856485848483249555749321109774324948324410511470" && encrypt(int4) == "5356498477713256535853485848483249555749321109774324948324410511470" && encrypt(int5) == "5748568477713251535851485848483249555749321109774324948324410511470" ? 1 : 0;
}

5
Brute terpaksa:320689, 444121, 567553, 690985, 814417
Tyilo

@ Tyilo Jika Anda berhenti sekarang, saya pikir tidak ada cracker yang bisa mengalahkan skor Anda. ;)
Martin Ender

2
@ MartinBüttner Kecuali jika ini bisa golf di bawah 512 per OP, saya tidak berpikir itu penting.
Geobits

0

C, 239 (Cracked oleh Dennis)

Buka di sini untuk kiriman saya yang diperbarui.

Mungkin bisa bermain golf lebih teliti. Memang, saya belum meluangkan waktu untuk membuktikan bahwa kuncinya unik (mungkin tidak) tetapi pasti ada di urutan tabrakan hash. Jika Anda memecahkannya, silakan bagikan metode Anda :)

p(long long int x){long long int i;x=abs(x);
for (i=2;i<x;i++) {if ((x/i)*i==x) return 0;}return 1;}
f(a,b,c,d,e){char k[99];long long int m;sprintf(k,"%d%d%d%d%d",e,d,c,b,a);
sscanf(k,"%lld",&m);return p(a)&&p(b)&&p(c)&&p(d)&&p(e)&&p(m);}

1
Jadi 0 0 0 0 0,?
Dennis

Huh itu bug, tapi ya itu berhasil.
Orby

Saya telah memperbarui dengan versi yang diperbaiki yang seharusnya menjadi sedikit lebih menarik;)
Orby

Lihat versi yang diperbaiki di sini .
Orby

0

C, 212 oleh Orby - Cracked

https://codegolf.stackexchange.com/a/36810/31064 oleh Orby memiliki setidaknya dua kunci:

13 103 193 283 373
113 173 233 293 353

Orby meminta metode yang saya gunakan untuk memecahkannya. Fungsi p memeriksa apakah x adalah bilangan prima dengan memeriksa x%i==0semua i antara 2 dan x (meskipun menggunakan (x/i)*i==xbukan x%i==0), dan mengembalikan true jika x adalah bilangan prima. Fungsi f memeriksa bahwa semua a, b, c, d dan e adalah prima. Ia juga memeriksa apakah angka m, suatu gabungan dari representasi desimal dari e, d, c, b dan a (dalam urutan itu), adalah prima. Kuncinya adalah sedemikian rupa sehingga a, b, c, d, e, dan m semuanya prima.

Green dan Tao (2004) menunjukkan bahwa ada banyak deret aritmatika bilangan prima untuk panjang k, jadi kita hanya perlu mencari urutan ini yang juga memuaskan saya sebagai prima. Dengan memakan waktu lama yang dibatasi oleh -9.223372037e + 18 dan 9.223372037e + 18, kita tahu bahwa untuk string bersambung cocok menjadi panjang, angkanya memiliki batas atas 9999. Jadi dengan menggunakan skrip python untuk menghasilkan semua urutan aritmatika dalam semua bilangan prima <10.000 dan kemudian memeriksa apakah rangkaian kebalikannya adalah prima, kita dapat menemukan banyak solusi yang mungkin.

Untuk beberapa alasan saya datang dengan positif palsu, tetapi keduanya di atas sesuai dengan program. Selain itu mungkin ada solusi di mana e negatif dan sisanya positif (p menggunakan modulus x), tetapi saya tidak mencari mereka.

Kunci yang saya berikan adalah semua urutan aritmatika tetapi skrip Orby tampaknya tidak benar-benar memerlukan input untuk menjadi urutan aritmatika, jadi mungkin ada kunci yang tidak valid juga.


0

MATLAB: Tampaknya tidak valid

Sangat sederhana, Anda hanya perlu menghasilkan nomor acak yang tepat.

function ans=t(a,b,c,d,e)
rng(a)
r=@(x)rng(rand*x)
r(b)
r(c)
r(d)
r(e)
rand==0.435996843156676

Itu masih bisa error, tapi itu seharusnya tidak menjadi masalah.


1
Pendekatan ini dilarang dalam komentar. Jika tidak disebutkan dalam pertanyaan, usulkan edit. Maaf.
Peter Taylor

@PeterTaylor Saya kira saya keluar, saya hanya akan meninggalkannya di sini tanpa skor karena saya ingin tahu apakah seseorang dapat menemukan kelemahan.
Dennis Jaheruddin

0

MATLAB (dengan Symbolic Toolbox), 173 karakter

Ini bukan entri resmi dan tidak akan dihitung terhadap skor retak siapa pun, tetapi itu akan memberi Anda hak menyombongkan diri yang gila. ;)

function b=L(S),c=sprintf('%d8%d',S(1),S(2)-S(1));b=numel(unique(diff(S)))==1&&numel(c)==18&&all(c([8,9])==c([18,17]))&&isequal(c,char(sym(sort(c,'descend'))-sym(sort(c))));

Kotak alat simbolis hanya diperlukan untuk menangani pengurangan bilangan bulat besar.

Memaksa dengan kasar haruslah seekor anjing, tetapi jika Anda terbiasa dengan seri yang terlibat, solusinya sepele.


0

Python 2 (91)

Sunting: Ini tidak diizinkan karena argumen untuk keunikan adalah probabilistik. Saya menyerah.


s=3
for n in input():s+=pow(n,s,7**58)
print s==0x8b5ca8d0cea606d2b32726a79f01adf56f12aeb6e

Mengambil daftar bilangan bulat sebagai input, seperti [1,2,3,4,5].

Loop dimaksudkan untuk beroperasi pada input dengan cara yang menjengkelkan, meninggalkan menara penjumlahan dan eksponen. Idenya seperti log diskrit, tetapi dengan komplikasi berantakan bukan kesederhanaan matematis. Mungkin kekompakan modulus adalah kerentanan, dalam hal ini saya bisa membuatnya menjadi seperti 7**58+8.

Saya tidak benar-benar tahu bagaimana saya membuktikan bahwa kunci saya adalah satu-satunya, tetapi rentang output setidaknya 10 kali lebih besar dari kisaran input, jadi mungkin? Meskipun mungkin hanya sebagian kecil dari output potensial yang dapat dicapai. Saya selalu bisa menambah jumlah digit dengan mengorbankan karakter. Saya akan menyerahkan kepada Anda untuk memutuskan apa yang adil.

Senang retak!


0

Mathematica - 72

Versi 2 skrip saya, dengan kunci yang sama dengan yang dimaksudkan untuk versi saya 1.

Ini pada dasarnya menghilangkan bilangan prima negatif untuk NextPrime.

f=Boole[(p=Abs[NextPrime/@#])-#=={18,31,6,9,2}&&BitXor@@#~Join~p==1000]&

Berlari:

f[{1,2,3,4,5}] (* => 0 *)

Dengan asumsi bahwa saya sudah mengerti dengan benar apa yang kode Anda lakukan, saya mendapatkan beberapa solusi yang terkecil adalah istilah awal 9244115, delta 25.
Peter Taylor

@PeterTaylor saya dapat mengonfirmasi bahwa itu valid.
Martin Ender

@PeterTaylor benar, kunci lainnya adalah1073743739, 1073886396, 1074029053, 1074171710, 1074314367
Tyilo

0

Python, 86 karakter

a,b,c,d,e=input()
print 1if(a*c^b*e)*d==0xd5867e26a96897a2f80 and b^d==48891746 else 0

Masukkan angka seperti 1,2,3,4,5.

> python 36768.py <<< "1,2,3,4,5"
0
> python 36768.py <<< "[REDACTED]"
1

Ini bukan pengiriman yang valid; menerima input 1,0,1,63021563418517255630720,0.
Dennis

@Dennis Diperbaiki. Saya harap ini valid sekarang.
Snack

1
19960211, 31167202, 42374193, 53581184, 64788175
Dennis

@ Dennis Benar dan mengagumkan. Saya pikir saya sangat miskin dalam matematika.
Snack

2
@ Dennis, 63021563418517255630720bukan angka 32-bit.
Peter Taylor


0

CJam, 37 karakter (rusak)

"煷➻捬渓类ⶥ땙ዶ꾫㞟姲̷ᐂ㵈禙鰳쥛忩蔃"2G#b[1q~]4G#b%!

Cobalah online.

Bagaimana itu bekerja

Lihat jawaban baru saya.

Contoh dijalankan

$ echo $LANG
en_US.UTF-8
$ base64 -d > flock.cjam <<< IueFt+Keu+aNrOa4k+exu+K2peuVmeGLtuq+q+Oen+Wnsu6AhMy34ZCC47WI56aZ6bCz7KWb5b+p6JSDIjJHI2JbMXF+XTRHI2IlIQ==
$ wc -m flock.cjam
37 flock.cjam
$ cjam flock.cjam < flock.secret; echo
1
$ cjam flock.cjam <<< "1 2 3 4 5"; echo
0

1
737262825 208413108 3974530688 3445680972 2916831257bekerja tetapi bukan merupakan perkembangan aritmatika. Diperhitungkan dalam 3 jam 20 menit. Angka 512-bit tampaknya dapat dilakukan dalam 72 jam untuk $ 75 pada EC2 dua tahun lalu, jadi saya pikir itu akan aman.
Peter Taylor

@PeterTaylor: Itu mengembalikan 1, tetapi tiga bilangan bulat terakhir lebih besar dari MAX_INT, jadi itu bukan kunci yang valid. Yang sedang berkata, 3 jam 20 m cukup mengesankan. Algoritma yang saya gunakan memakan waktu 16 jam untuk semiprime 256-bit ...
Dennis

Saya pikir pasti ada angka negatif di sana karena delta-delta itu hampir benar tetapi tidak sepenuhnya. Saya akan membahasnya.
Peter Taylor

1
737262825 208413109 -320436607 -849286323 -1378136039
Peter Taylor

@PeterTaylor: Itu dia. Saya harap versi 512 bit bertahan lebih lama.
Dennis

-2

C, 212 (Retak)

Ini adalah ide yang sama dengan kiriman saya sebelumnya , bermain golf lebih teliti, dengan bug yang terkoreksi yang lulus 0,0,0,0,0 (Terima kasih kepada Dennis karena telah menunjukkan bug). Kompilasi dengan -std = c99.

#define L long long
p(L x){x=abs(x);for(L i=2;i<x;i++){if((x/i)*i==x)return 0;}return(x>1);}
f(a,b,c,d,e){char k[99];L m;sprintf(k,"%d%d%d%d%d",e,d,c,b,a);sscanf(k,"%lld",&m);
return p(a)&p(b)&p(c)&p(d)&p(e)&p(m);}

Setiap urutan (aritmatika atau tidak) bilangan prima negatif akan berfungsi. Dua contoh: -7 -37 -67 -97 -127,-157 -127 -97 -67 -37
Dennis

Ya, kode saya hanya penuh dengan bug. The Jawabannya nitrat memberi adalah sepanjang garis dari apa yang saya cari. Tapi pekerjaan yang bagus menunjukkan jawaban yang lebih jelas.
Orby
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.