Terinspirasi oleh komentar ini ...
Terima kasih kepada pengguna, Step Hen , Wheat-Wizard , dan Dennis yang telah membantu saya memperkuat spesifikasi tantangan ini sebelum mempostingnya!
Ini adalah utas Polisi. Untuk utas Perampok, buka di sini
Dalam tantangan ini , Anda bertugas menjalankan beberapa kode yang membuatnya sehingga bahasa Anda tidak lagi memenuhi kriteria kami sebagai bahasa pemrograman. Dalam tantangan itu, itu berarti membuatnya agar bahasa tidak bisa lagi ...
Ambil input dan output numerik
Tambahkan dua angka bersamaan
Uji apakah angka tertentu prima atau tidak.
Ini adalah tantangan polisi dan perampok , di mana ada dua tantangan yang berbeda dengan dua tujuan yang berbeda: Polisi akan mencoba menulis beberapa kode yang membuat bahasa sebagian besar tidak dapat digunakan, dan perampok akan mencoba menemukan solusi tersembunyi yang memungkinkan polisi untuk memulihkan bahasa mereka.
Sebagai seorang polisi, Anda harus menulis dua cuplikan kode:
Salah satu yang membuat bahasa Anda sebagian besar tidak dapat digunakan, misalnya dengan menghapus fungsi bawaan untuk mengambil operasi input / output dan numerik. Semakin banyak fitur yang Anda hapus, semakin baik. Kode ini tidak diizinkan mogok atau keluar. Seharusnya mungkin untuk menambahkan kode ke akhir cuplikan ini, dan kode itu akan dievaluasi . Dan...
... potongan kode yang mengambil dua bilangan bulat non-negatif sebagai input, menambahkannya bersama-sama, dan mengeluarkan jumlah mereka. Cuplikan ini harus tetap berfungsi dengan benar bahkan setelah menjalankan cuplikan pertama. Saat kedua snippet digabungkan bersama, mereka harus membentuk program lengkap yang menambahkan dua angka, atau mendefinisikan fungsi yang menambahkan dua angka. Idealnya, cuplikan ini harus mengandalkan perilaku yang sangat tidak jelas, sehingga lebih sulit ditemukan.
Anda dapat memilih metode input dan output standar apa pun . Namun, Anda harus mengungkapkan dengan tepat format (input dan output) yang Anda gunakan. Perampok tidak dapat memecahkan jawaban Anda kecuali mereka menggunakan format yang sama dengan Anda.
Setelah menulis kedua cuplikan ini, Anda harus memposting yang pertama sebagai jawaban, tanpa mengungkapkan yang kedua. Jawaban Anda harus mengandung semua informasi berikut:
The pertama potongan (jelas tidak yang kedua).
Bahasa (termasuk versi minor, karena sebagian besar pengiriman mungkin bergantung pada kasus tepi yang aneh)
Format IO, termasuk apakah itu fungsi atau program penuh. Perampok harus menggunakan format yang sama agar crack mereka valid.
Semua kasus tepi aneh diperlukan untuk jawaban Anda untuk bekerja. Misalnya, hanya berjalan di linux , atau membutuhkan koneksi internet . Jelas, ini sedikit subjektif, tetapi jika seorang polisi memiliki beberapa kasus tepi ekstrem yang mencegahnya dari retak, dan kemudian hanya mengungkapkan ini setelah aman, saya menganggap sportif ini buruk. Perampok potensial harus memiliki semua informasi yang diperlukan untuk memecahkan jawaban Anda sebelum retak.
Anda tidak perlu mengungkapkan jumlah byte Anda sampai jawaban Anda aman.
Ini sebuah contoh. Untuk cuplikan pertama, Anda bisa mengirimkan program Python 3 berikut:
Python 3
print=None
Mengambil input dari STDIN dan output ke STDOUT
Dan sebagai cuplikan kedua, Anda dapat menulis:
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Ini valid karena akan mengambil dua angka sebagai input, dan mengeluarkan jumlah mereka meskipun Anda menggabungkan kedua snippet bersama, misalnya
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Namun, ini akan sangat mudah bagi perampok untuk menemukan solusi. Karena ini akan sangat mudah retak, Anda dapat mencoba menambal pendekatan khusus ini seperti:
import sys
sys.stdout=None
print=None
Namun, bahkan ini memiliki solusi yang sangat mudah:
del print
a,b=int(input()),int(input())
print(a+b)
Sebagai seorang polisi, tujuan Anda adalah membuat solusi tersembunyi menjadi tidak jelas, untuk mencegah perampok menemukannya.
The perampok akan melihat salah satu jawaban Anda, dan berusaha untuk memecahkannya. Mereka mungkin retak itu dengan menulis setiap potongan valid yang bisa bekerja sebagai potongan 2 (menambahkan dua angka bersama setelah bahasa dibuat sebagian besar tidak dapat digunakan). Ini tidak harus potongan yang sama seperti yang Anda maksudkan semula. Jika seorang perampok memecahkan jawaban Anda, mereka akan meninggalkan komentar pada jawaban Anda, dan kemudian Anda harus mengeditnya untuk menunjukkan bahwa jawaban itu telah di-crack. Jika kiriman Anda retak, Anda harus mengedit jawaban Anda untuk menunjukkan solusi (cuplikan 2) yang Anda maksudkan semula. Ini bukan aturan semata , hanya saran yang bersahabat untuk membuat permainan tetap menyenangkan. Anda tidak perlu.
Jika jawaban tetap tidak terpecahkan selama satu minggu penuh, Anda dapat mengedit cuplikan kedua Anda, dan mengindikasikan bahwa jawaban Anda sekarang aman . Jika Anda tidak mengeditnya setelah seminggu berlalu, pengguna lain masih dapat memecahkannya sampai Anda melakukannya. Jika Anda tidak mengungkapkan cuplikan kedua, Anda tidak dapat mengklaim poin untuk jawaban Anda, atau menyebutnya aman.
Pemenang utas polisi adalah jawaban aman terpendek termasuk kedua cuplikan , dihitung dalam byte, dan jawaban ini akan diterima setelah waktu yang cukup berlalu. Anda tidak perlu mengungkapkan jumlah byte Anda sampai jawaban Anda aman, karena jumlah byte tidak relevan dengan skor Anda sampai jawaban Anda aman. Dalam hal waktu yang cukup telah berlalu dan tidak ada jawaban yang tetap, pemenang akan menjadi jawaban yang tetap tidak terpecahkan untuk periode waktu terlama.
Selamat bersenang-senang!
Klarifikasi aturan
Cuplikan pertama harus berjalan dengan benar tanpa mengambil input apa pun . Mungkin output apa pun yang Anda suka, dan output ini akan diabaikan - selama setelah potongan selesai, potongan kedua berjalan dengan benar.
Cuplikan kedua harus benar-benar dieksekusi agar jawaban Anda valid. Ini berarti jawaban seperti
import sys sys.exit()
tidak valid karena tidak melanggar bahasa. Itu hanya berhenti. Demikian pula, memasukkan infinite loop tidak valid, karena snippet kedua tidak akan pernah dieksekusi.
Setelah aman, skor Anda adalah jumlah byte dari kedua cuplikan .
Ini kembali ke Harap mengungkapkan kasus tepi aneh yang diperlukan untuk jawaban Anda untuk bekerja ... Kiriman Anda harus berisi informasi yang cukup sebelum diturunkan untuk dapat direproduksi setelah diungkapkan. Ini berarti bahwa jika jawaban Anda menjadi aman, dan kemudian Anda edit di: Inilah jawaban saya. Oh ya, BTW ini hanya berfungsi jika Anda menjalankannya pada Solaris, lelucon ada pada Anda! jawaban Anda tidak valid dan akan dihapus dan tidak dianggap memenuhi syarat untuk menang.
Cuplikan kedua dibolehkan mogok setelah mengeluarkan jumlah - asalkan keluaran masih benar (misalnya, jika Anda memilih untuk menampilkan ke STDERR, dan kemudian Anda mendapatkan banyak informasi kerusakan, ini tidak valid).
Anda tidak boleh mengedit kode setelah mengirim jawaban.
Anda mungkin tidak mengandalkan fungsi kriptografi seperti enkripsi, fungsi hash, CSPRNGs dll.
int main(){ do_evil_stuff(); }
mana harus pergi kode pengguna? Dalam suatu fungsi? Setelah semua pernyataan dimain
?