Tantangan
Saya mempersembahkan kepada Anda mata-mata lain vs obsesi pengadu mata-mata versus kerupuk. Namun dalam kasus ini, datum yang akan dilindungi bukanlah input tetapi output .
Aturan tantangannya sederhana. Tulis rutin dengan spesifikasi berikut:
- Rutin dapat ditulis dalam bahasa apa pun tetapi tidak boleh melebihi 320 byte.
- Rutin harus menerima tiga bilangan bulat bertanda 32-bit sebagai input. Ini dapat mengambil bentuk fungsi yang menerima 3 argumen, fungsi yang menerima array 3-elemen tunggal, atau program lengkap yang membaca 3 bilangan bulat dari input standar apa pun.
- Rutin harus menampilkan satu bilangan bulat 32-bit yang sudah ditandatangani.
- Dari semua input yang mungkin, rutin harus menghasilkan antara 2 dan 1000 (termasuk) nilai unik. Jumlah nilai unik yang bisa dihasilkan oleh rutin disebut kuncinya .
Sebagai contoh, program C.
int foo( int i1, int i2, int i3 ) {
return 20 + (i1^i2^i3) %5;
}
memiliki kunci dari 9, karena (mudah-mudahan) hanya bisa output nilai sembilan 16
, 17
, 18
, 19
, 20
, 21
, 22
, 23
, dan 24
.
Beberapa batasan tambahan adalah sebagai berikut:
- Rutin harus sepenuhnya deterministik dan waktu-invarian, mengembalikan output yang identik untuk input yang identik. Rutin seharusnya tidak membuat panggilan ke generator nomor pseudorandom.
- Rutin mungkin tidak bergantung pada "variabel tersembunyi" seperti data dalam file, variabel sistem, atau fitur bahasa esoterik. Misalnya, rutinitas umumnya tidak merujuk ke konstanta kecuali jika konstanta didefinisikan dengan jelas dalam kode itu sendiri. Rutin yang bergantung pada kebiasaan kompiler, output dari operasi yang tidak terdefinisi secara matematis, kesalahan aritmatika, dll. Juga sangat tidak disarankan. Jika ragu, harap tanyakan.
- Anda (pembuat kode) harus tahu persis berapa banyak output unik yang dapat dihasilkan oleh rutin, dan harus dapat memberikan setidaknya satu urutan input yang menghasilkan setiap output. (Karena berpotensi ada ratusan output unik, set ini hanya akan diminta jika kunci Anda diperebutkan.)
Karena masalah ini memiliki kemiripan yang jauh lebih sedikit dengan enkripsi klasik daripada yang sebelumnya, saya berharap ini akan dapat diakses oleh audiens yang lebih luas.
Semakin kreatif, semakin baik.
Skor
Pengajuan non-retak terpendek per byte byte akan dinyatakan sebagai pemenang.
Jika ada kebingungan, jangan ragu untuk bertanya atau berkomentar.
Counter-Challenge
Semua pembaca, termasuk mereka yang telah mengirimkan rutinitas 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.
Hanya satu upaya cracking per pengajuan per pembaca yang diizinkan. Misalnya, jika saya mengirim ke pengguna X: "kunci Anda adalah 20" dan saya salah, pengguna X akan menafikan tebakan saya sebagai salah dan saya tidak akan lagi dapat mengirimkan tebakan tambahan untuk pengiriman itu.
Pengajuan yang retak dihilangkan dari pertikaian (asalkan tidak "aman"). Tidak boleh diedit. Jika pembaca ingin mengirimkan rutinitas baru, ia harus melakukannya dalam jawaban yang terpisah.
Skor seorang cracker adalah jumlah pengajuan (baik yang memenuhi syarat atau tidak) yang dia crack. Untuk cracker dengan jumlah yang identik, peringkat ditentukan oleh jumlah byte total di semua pengiriman yang retak (semakin tinggi, semakin baik).
Para cracker dengan skor tertinggi akan dinyatakan sebagai pemenang bersama dengan para pengembang dari rutinitas yang menang.
Harap jangan merusak kiriman Anda sendiri.
Semoga berhasil. :)
Papan peringkat
Terakhir Diperbarui 2 September, 10:45 EST
Immovable Barriers (pengiriman tidak retak):
- CJam, 105 [Dennis]
Pasukan tak terhentikan (kerupuk):
- Dennis [ Jawa, 269 ; C, 58 ; Mathematica, 29 ]
- Martin Büttner [ Java, 245 ]
return
dll ...