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.
Cuplikan untuk menemukan kiriman yang tidak retak:
sumber
int main(){ do_evil_stuff(); }
mana harus pergi kode pengguna? Dalam suatu fungsi? Setelah semua pernyataan dimain
?Jawaban:
Gforth 0.7.3 (TIO) , 231 byte [SAFE]
Kode ini mendefinisikan kembali sebagai tidak berguna beberapa metode output yang diperlukan, serta penambahan dan sesuatu yang penting untuk mendeklarasikan fungsi. Semoga berhasil!
Input akan berupa dua bilangan bulat bertanda yang diambil dari bagian atas tumpukan sebagai parameter fungsi. Output ke STDOUT.
Jadi, Anda harus memperbaiki kerusakan yang terjadi, dan menetapkan fungsi yang mengambil dua nilai teratas dari tumpukan dan mencetak hasilnya sebagai integer (bukan float) ke STDOUT tanpa output tambahan (tanpa spasi tambahan).
Inilah templat , jika fungsi sasaran Anda dinamai
f
.Larutan:
sumber
Haskell, dipecahkan oleh Christian Sievers
Program lengkap, membaca dua bilangan bulat (termasuk yang negatif) dari stdin dan menulis ke stdout.
Saya baru saja menonaktifkan Prelude sehingga hampir tidak ada dalam ruang lingkup, dan kemudian menambahkan definisi; impor lebih lanjut tidak valid secara sintaksis. Saya memberi Anda
getLine
danprint
meskipun.Diedit untuk menambahkan solusi asli saya. Retak Christian berbeda, tetapi mengeksploitasi fitur dasar yang sama (Anda bisa mendapatkan jumlah perhitungan yang mengejutkan dengan mengakses fungsi yang memiliki gula sintaksis, bahkan ketika Anda tidak dapat memanggil apa pun yang dibangun secara langsung atau bahkan menyebutkan jenis yang terlibat).
Yang mungkin bukan golf super, tapi di sini lebih tepat:
sumber
Python 2 , Retak
Menerapkan penambahan sebagai fungsi bernama
Cobalah online!
Apa fungsinya?
Untuk membantu Anda sedikit, saya akan menjelaskan apa yang dilakukannya. Kode ini membuka file sumber dan memeriksa apakah sisa kode sesuai dengan kriteria berikut:
import
&)(,.:[]a`cdfijmonrt~
Jika gagal salah satu kriteria batas rekursi diatur ke
1
berarti bahwa setiap kode yang Anda tulis akan mencapai batas rekursi.Tidak ada trik di sini, saya telah menulis solusi yang hanya menggunakan karakter ini dan tidak ada impor, saya tidak melakukan apa pun yang subversif, tetapi saya akan mengatakan bahwa saya pikir ini akan sangat sulit untuk dipecahkan.
Untuk menghemat waktu Anda di sini adalah daftar singkat hal-hal berguna yang tidak dapat Anda lakukan dengan batasan ini
+
yah,eval
/exec
Tidak akan membiarkanmu lolos begitu sajaBilangan, Mereka mungkin lebih berguna daripada yang Anda pikirkan
Literal string
len
=
, Tidak ada variabel penetapan>
,<
,==
. . . Saya telah meninggalkan Anda tanpa perbandingan*
,-
,/
,%
,^
,|
,>>
,<<
Satu-satunya operator yang tersedia adalah~
dan&
__foo__
, Tidak ada satu pun dari metode garis bawah mewah yang diizinkan.sumber
This code is not allowed to crash or exit.
(lihat obrolan untuk diskusi tentang hal itu)Python 2 , Retak
Ini adalah iterasi keempat dari jawaban ini. Setiap jawaban terakhir telah di-crack dengan cara mereset kedalaman rekursi.
Menerapkan penambahan sebagai fungsi bernama
Cobalah online!
Apa fungsinya?
Untuk membantu Anda sedikit, saya akan menjelaskan apa yang dilakukannya. Kode ini membuka file sumber dan memeriksa apakah sisa kode dibuat hanya dari karakter
&)(,.:[]a`cdfijmonrt~
Jika gagal batas rekursi diatur ke
1
artinya setiap kode yang Anda tulis akan mencapai batas rekursi.Saya juga telah menonaktifkan semua modul, sehingga Anda tidak dapat mengimpor apa pun.
Tidak ada trik di sini, saya telah menulis solusi yang hanya menggunakan karakter ini dan tidak ada impor, saya tidak melakukan apa pun yang subversif, tetapi saya akan mengatakan bahwa saya pikir ini akan sangat sulit untuk dipecahkan.
Untuk menghemat waktu Anda di sini adalah daftar singkat hal-hal berguna yang tidak dapat Anda lakukan dengan batasan ini
+
yah,eval
/exec
Tidak akan membiarkanmu lolos begitu sajaBilangan, Mereka mungkin lebih berguna daripada yang Anda pikirkan
Literal string
len
=
, Tidak ada variabel penetapan>
,<
,==
. . . Saya telah meninggalkan Anda tanpa perbandingan*
,-
,/
,%
,^
,|
,>>
,<<
Satu-satunya operator yang tersedia adalah~
dan&
__foo__
, Tidak ada satu pun dari metode garis bawah mewah yang diizinkan.Solusi saya
Jadi sekarang xnor telah memecahkannya dengan cara saya cukup puas dengan saya akan mengungkapkan solusi saya
Kejutan, kejutan itu omong kosong omong kosong. Daripada memecah ini saya akan pergi melalui proses bagaimana saya membuat ini.
Saya mulai dengan algoritma penambahan yang cukup standar
Kemudian saya menggunakan trik bitwise untuk mewakili
^
dengan|
,&
,~
.Saya menggunakan trik bitwise lain untuk menyingkirkan
|
Sekarang yang tersisa hanyalah
<<
, tidak boleh terlalu sulit, bukan? Nah bersiap-siap untuk perjalanan yang bergelombang. Untuk mengganti bitshift, saya menggunakan string untuk menambahkan nol ke akhir representasi binernyaIni memiliki beberapa masalah tetapi yang utama menggunakan penambahan , jadi saya mengatasinya dengan menggunakan format sebagai gantinya
Kami tidak diizinkan menggunakan bin, jadi saya menggunakan pemformatan string untuk mengkonversi ke biner.
Karena string string dilarang, saya harus membuat string
{0:b}0
dari bagian yang dibuat dengan kutu belakang danjoin
mereka bersama-sama.String kosong cukup mudah, Anda bisa melakukannya
Nolnya adalah
dan
{:}
semuanya diambil dari kamus.b
tampaknya cukup sulit untuk didapatkan, itu tidak ada dalam rangkaian karakter kita, jadi bagaimana kita bisa mendapatkan objek yang memiliki objekb
di dalamnyarepr
? Nah begini caranya: Ketika Anda menggunakanrepr
pada fungsi builtin Anda mendapatkan sesuatu yang terlihat sepertiDan itu dari mana kita akan mendapatkan milik kita
b
.Sekarang yang tersisa hanyalah angka, saya hanya perlu -1, 0, 1, dan 2 jadi inilah cara saya menggambarkannya:
2 sebenarnya bisa lebih pendek satu byte
berdasarkan saran @ Blender di komentar, tapi saya tidak memikirkan ini sampai setelah fakta.
Jadi kami mengganti angka-angka ini di
Dan itulah celahnya.
sumber
C (gcc) Retak!
Cobalah online!
Input dari STDIN dan output ke STDOUT.
Ini berjalan tanpa kesalahan. Hahaha ini cukup jahat. Saya hanya mengujinya di TIO gcc. Seperti biasa, Anda harus menambahkan kode Anda setelah snippet ini agar berfungsi :) Komentarnya adalah salah, jangan dengarkan.
Diuji pada
gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
. Harus bekerja pada sistem linux apa pun.Solusi asli
sumber
__asm__
dan Anda memiliki banyak fungsi untuk dipilih :) jangan berpikir C dan C ++ adalah musuh yang baik di sini.C (GCC di Linux) (retak)
Alih-alih menggunakan teknik sandboxing membaca file konyol, kami melakukannya dengan cara yang tepat - dengan daftar putih SECCOMP!
Tugas Anda: mengimplementasikan penambahan dengan input dari STDIN dan output ke STDOUT.
Cobalah online!
WTF apakah ini !?
Untuk membantu Anda dalam tugas yang tidak dapat diatasi, saya akan menjelaskan apa yang dilakukan kode ini.
__attribute__ ((constructor(0)))
memastikans
fungsi dijalankan terlebih dahulu. Fungsi ini menutup semua deskriptor file terbuka untuk STDIN, STDOUT dan STDERR. Kemudian program membatasi dirinya dengan daftar putih SECCOMP yang ketat, yang membatasi panggilan sistem Anda sebagai berikut:Karenanya Anda tidak dapat membuka file baru (atau pada dasarnya melakukan apa saja). Kami kemudian datang ke main dan memanggil kode Anda, yang dibungkus dengan baik dengan
sandbox
fungsinya.Yang
syscall(SYS_exit, EXIT_SUCCESS);
di akhir hanya untuk memastikan program keluar dengan bersih - secara default GCC akan keluar denganexit_group(2)
yang tidak diizinkan oleh daftar putih SECCOMP. Fungsi keluar ini dipanggil setelah kode Anda dijalankan.Jadi Anda tidak memiliki deskriptor file terbuka, dan Anda tidak dapat membuka sesuatu yang baru. Tidak mungkin, kan? ;)
sumber
Haskell , dipecahkan oleh Ben
Cobalah online! Ini harus menjadi program penuh membaca dua angka dari stdin dan mengeluarkan jumlah ke stdout.
Setiap program lengkap dimulai dengan menjalankan
main
fungsi, tetapi di sinimain
memanggil dirinya sendiri dan menyebabkan loop tak terbatas. Untuk membuat keadaan menjadi lebih buruk, komentar baris dimulai dengan--
tepat di belakang panggilan rekursif untuk mencegah mengubahnya menjadi misalnyamain2
dan kemudian mendefinisikan bahwa untuk melakukan penjumlahan.Solusi yang dimaksudkan:
Cobalah online!
--
memulai komentar baris kecuali itu juga dapat diuraikan sebagai bagian dari operator. (Penyorotan sintaksis tampaknya tidak menyadari fakta ini.)--$
Adalah operator infiks yang valid yang menggunakanmain
argumen pertama dan beberapa argumen kedua tiruan()
. Kemudian didefinisikan untuk mengabaikan argumen dan untuk melakukan tugas yang diperlukan sebagai gantinya.sumber
x86 Perakitan mode nyata 16 bit ( Cracked )
Mudah jika tahu triknya.
sumber
or [bp], 256
tidak valid. Apakah itu seharusnyaor WORD PTR [bp], 256
?)hlt
instruksi (dering 0) sangat menyiratkan bahwa ini bukan mode terlindungi.Your submission must contain enough information before being revealed to be reproducible after being revealed
Javascript, Retak
Tantangan ini dibangun dari Grant Davis , tetapi memperbaiki solusi yang ada dalam pikirannya (yang menciptakan iframe dan menggunakan iframe
window
). Solusinya berjalan di konsol javascript di chromeabout:blank page
, dan mengambil duainput()
s, menambahkannya bersama-sama, danconsole.log
hasilnya. Masukkan kode Anda setelah:Pertama, kita mengkritik
prompt
danconsole
dan mengatur cara pintasd
. Kemudian, kami membuat pengamat mutasi dengan callback yang menghapus setiap target yang dimutasi. Kami menetapkan pengamat mutasi untuk mengamati dokumen, dan memberi tahuchildList
dansubtree
modifikasi. Alih-alih literaltrue
, kami menggunakan pintasan kami ke nilai yang sebenarnyadocument
( spek tidak mengizinkan ini, tetapi chrome melakukannya).Setelah saya memposting ini, saya menyadari clobber yang jauh lebih elegan. Solusi yang saya maksud masih berfungsi, tetapi celah yang diposting tidak:
sumber
Perl 5, retak oleh Ilmari Karonen
Input diterima pada jalur terpisah
STDIN
dan output dicetak keSTDOUT
.Semua kode berjalan setelah
__DATA__
marker. Ini menggunakan metode yang mirip dengan solusi @ WheatWizard karena kode diuraikan dan karakter yang tidak dapat digunakan dihapus.Ini telah diuji pada versi 5.8, 5.10 dan 5.16, dan tidak memerlukan flag baris perintah.
Cobalah online!
sumber
STDIN
dengan karakter pada baris yang terpisah danSTDOUT
. Saya akan menambahkan ini ke badan utama.Python 3, dipecahkan oleh zbw
Semua mod telah dihapus, yang berarti tidak ada bawaan tersedia dan tidak banyak lagi yang bisa dilakukan. Output ke STDOUT, masukan dari STDIN. Ini adalah iterasi kedua dari jawaban ini setelah yang sebelumnya rusak oleh celah sepele dengan menambahkan pernyataan istirahat.
sumber
APL (ngn-apl) , dipecahkan oleh ngn
Dibuat bekerja sama dengan rekan saya Marshall .
Masukan melalui argumen kiri dan kanan ke
+
. Yaitu tujuan Anda adalah menyisipkan kode setelah yang berikut, sehingga baris terakhir Anda membaca⎕←3+2
dan menghasilkan5
STDOUT.Cobalah online!
Bekerja dengan mengatur semua fungsi yang berguna
{}
yang mengambil satu atau dua argumen dan mengembalikan daftar numerik kosong. Juga diatur⍣
untuk hanya menulis fungsi.Retak
⍺⍵1/0
meniru 0 dengan argumen kiri dan argumen kanan dan 1⍋
dapatkan indeks yang akan mengurutkan itu (karena semua elemen nol, itu memberi 0 1 2 ... (a + b)⌈/
nilai maksimum (a + b)sumber
+
hanya menggunakan APL murni dan tidak ada trik kotor.Python 2 , Retak
Ini adalah pengulangan kedua dari jawaban yang telah dipecahkan sekali oleh @HyperNuetrino menggunakan metode yang tidak saya harapkan. Saya sekarang telah menambalnya sehingga mudah-mudahan satu-satunya solusi yang tersisa harus mematuhi batasan yang saya maksudkan.
Menerapkan penambahan sebagai fungsi bernama
Cobalah online!
sumber
u
, tapi saya terjebak tanpanya.u
?.count
. Saya bisa mendapatkan string selama output yang diinginkan, tetapi saya tidak punya cara untuk mengambilnya.__import__('sys').setrecursionlimit(100)
... dan tidak ada yang benar-benar ditambal. Saya tidak benar-benar merasa ingin mempostingnya di utas perampok, rasanya seperti curang. Cobalah onlineJava 8, Cracked oleh @ OlivierGrégoire
Inilah usaha saya. Cukup banyak, idenya adalah untuk membebani semua ruang nama yang dapat Anda gunakan untuk output (dan mencerminkan, saya harap). Output dimaksudkan untuk sdout (System.out).
Daftar hitam biasanya merupakan pendekatan yang lebih buruk daripada daftar putih, jadi saya yakin itu hanya masalah waktu sebelum seseorang membuat pendekatan yang tidak saya pertimbangkan.
sumber
class String{}
setelah pengujian tanpa menyadarinya akan gagalmain(String[] ...)
. Ini seharusnya bekerja sekarangint sum = 0; new Exception("" + sum) { public void printStackTrace() { ClassLoader cl = ClassLoader.getSystemClassLoader(); try { printStackTrace(new PrintStream((PrintStream)cl.loadClass("java.lang.System").getDeclaredField("out").get(null))); } catch (Exception e){} } }.printStackTrace();
cQuents, dipecahkan oleh Mayube
Ini seharusnya cukup mudah, tetapi Anda tidak pernah tahu.
"Masalahnya" adalah bahwa tanpa
C
kode Anda, Anda mendapat kesalahan.Solusi Mayube:
Setiap item dalam urutan adalah input pertama ditambah yang kedua kali ketiga (alias 1)
Solusi saya:
Urutan siklus antara input pertama ditambah input kedua, dan input ketiga (1). Item pertama di yang kedua adalah
A+B
.Mirip dengan solusi Mayube - alih-alih mengalikan
B*C
, tambahkan sajaC
lalu kurangi.Cobalah online!
Penjelasan
Saat ini, program ini menghasilkan
1
, karena tanpa input pengguna, input pertama adalah yang pertama1
di input default (#
).sumber
Default input is combined with user input to form the total input, which must align with the expected input (which is based on the highest input requested by the Sequence Definition)
A,B,C,D,E
dalam kode. Misalnya, jika suatu saat Anda memiliki variabelD
dalam program Anda, parser mengharapkan ada 4 input, tetapi jika ada jugaE
, parser mengharapkan ada 5 input. Tidak boleh kurang dari jumlah yang diharapkan. Namun, selalu ada input terakhir opsionaln
,, yang digunakan dalam berbagai cara oleh mode yang berbeda.A
, sehingga mencari satu input. Karena ada dua, keduanya berasal dari#
yang menentukan input default, ia menggunakan yang pertama sebagaiA
nilai dan yang kedua sebagain
.BC
, A akan menjadi input pertama, B akan menjadi yang kedua, C akan menjadi 1, dan n akan menjadi yang kedua?#1,1
(tanpa bilah), itu akan menjadi: A sebagai 1 pertama, B sebagai 1 kedua, C sebagai input pertama, dan n sebagai input kedua. Anda juga dapat melakukannya#1|1
, di mana A adalah yang pertama 1, B adalah input pertama, C adalah input kedua, dan n adalah 1.Node.JS versi 7.3.0 (Cracked oleh Dom Hastings)
Tempatkan blok kode kedua setelah yang pertama.
Penafian: blok kode kedua tidak akan berfungsi sendiri (tanpa ditempatkan setelah yang pertama). Namun, jika ini tidak diizinkan, saya dapat memodifikasi cuplikan kedua.
Ini adalah program lengkap. Output adalah
process.stdout
(STDOUT), input adalahprocess.argv
(argumen baris perintah)Ini polisi dan perampok pertamaku, semoga ini tantangan yang bagus :)
Cobalah online!
Tantangannya dijelaskan
Menghasilkan variabel acak
n
dari 0 hingga 1e7. Jika Anda memanggil tulis dengan benarn
, tidak mencetak apa pun tetapi menetapkanl
ke 0 yang "membuka" fungsi tulis, memungkinkan Anda untuk mencetak apa pun. Jika Anda mencoba menelepon write dengan non-string, mengirimkan Anda ke loop tanpa batas. Jika Anda mencoba menelepon menulis dengan apa pun selain yang benarn
saat menulis adalah "terkunci", mengirim Anda ke loop tak terbatas untuk mencegah tebakan.Solusi yang dimaksud
Menyelinap melewati tipe yang tampaknya memeriksa string hanya dengan menggunakan Simbol, yang juga dimulai dengan s. Ini melempar kesalahan dalam fungsi yang dihasilkan dari panggilan eval karena Anda tidak dapat menambahkan string "f" ke simbol. Kami menangkap kesalahan dan menggunakan regex untuk memulihkan
n
dari jejak tumpukan, di mana ia berada dalam nama fungsi. Kemudian kami mencoba menulisn
yang tidak mencetak apa pun, tetapi mengatur variabel "kunci"l
ke 0 untuk "membuka" fungsi tulis. Sekarang fungsi tulis tidak terkunci, kita cukup mencetak jumlahnya.sumber
RProgN2 , retak oleh Arnold Palmer
Menulis semua operator matematika, tanpa cara mengembalikannya. Secara khusus, ini menggantikan mereka dengan fungsi yang menghilangkan dua item teratas di stack.
Cobalah online!
Solusi Asli
Cobalah online!
sumber
²
simbol tersebut. Mau mencerahkanku?[[
dalam kasus ini, dan membungkusnya dalam fungsi @ArnoldPalmer«»
membuat variabel lokal sebagai ganti mengacaukan yang global akan sangat membantu.Haskell,
161144 bytes, Cracked oleh BlackCapInput ke STDIN, output ke STDERR. Tambahkan ke akhir program.
Sunting: Dimaksudkan untuk dikompilasi tanpa argumen GHC tambahan, hanya yang normal
ghc --make prog.hs
.Diedit lagi untuk menurunkan jumlah byte.
Selamat bersenang-senang!
sumber
main = do x <- readLn :: IO Integer; y <- readLn; print $ x + y
main
fungsi berada di modulMain
ketika tidak ada-main-is
flag yang disediakan.Mascarpone , dipecahkan oleh Ilmari Karonen
Input adalah angka gereja pada stdio, gunakan
i
untuk kenaikan danz
untuk nol. Misalnya, 2 + 3 adalah:Dengan trailing baris baru,
Output harus berupa angka pada stdout, dalam format yang sama seperti pada stdio. Misalnya, jika jawabannya lima, Anda harus menampilkan:
(mascarpone tidak memiliki konsep angka)
Solusi yang dimaksudkan:
Ini tidak segera terlihat dari dokumentasi, tetapi seperti @IlmariKaronen menyatakan dalam celahnya, string literal di Mascarpone sebenarnya gula sintaksis untuk mendorong urutan karakter.
Saya sengaja menulis komentar seperti
[this]$
membuatnya terlihat seperti saya mendorong string dan muncul segera setelahnya. Seorang cracker yang naif mungkin telah mencoba sesuatu seperti[:,>!]/*
mendorong string, menukarnya dengan interpreter, dan menafsirkannya.Saya juga berpura-pura memasang penerjemah yang saya tinggalkan di tumpukan
$
, tetapi$
sudah didefinisikan ulang menjadi NOP. Anda ditinggalkan dengan juru bahasa ini di tumpukan, dan Anda harus membawanya bersama seluruh program; melalui setiap karakter dari setiap string.sumber
C # (.NET Core) Retak oleh Ilmari Karonen
Juga retak oleh Joshua .
Membaca dua nilai dari stdin dan menulis hasilnya ke stdout. Diuji pada Windows dengan Framework Versi 3, 4.6 dan pada TIO .
Inilah program lengkap yang saya maksudkan.
Cobalah online!
sumber
GolfScript , dipecahkan oleh Dennis
Cobalah online!
Ini adalah sebuah kode-golf tantangan, setelah semua, jadi mengapa tidak mencoba GolfScript?
Solusi yang valid harus berupa potongan yang membaca dua bilangan bulat dari tumpukan, menambahkannya bersama-sama dan mengembalikan hasilnya pada tumpukan. Tangkapannya adalah ia masih harus bekerja bahkan setelah kode di atas telah mendefinisikan ulang hampir semua operator GolfScript bawaan untuk tidak melakukan apa-apa. Setidaknya saya tidak
;
tersentuh, sehingga Anda masih bisa mengeluarkan nilai dari tumpukan. ;-) Kode Anda harus bekerja pada penerjemah GolfScript standar, seperti yang diterapkan misalnya pada TIO (lihat tautan di atas).Solusi Dennis , seperti milik saya , bergantung pada fitur GolfScript yang jarang digunakan yang memungkinkan kode Ruby interpolasi dalam string yang dikutip ganda. Kami menggunakan fitur ini untuk menentukan operator tambahan baru yang bekerja persis seperti
+
operator bawaan, dan kemudian memanggilnya.(Salah satu alasan mengapa fitur interpolasi Ruby dalam GolfScript sangat jarang digunakan adalah bahwa, dengan canggung, kode Ruby interpolasi dieksekusi selama parsing , dan outputnya di-cache oleh interpreter GolfScript. Jadi, jika Anda memiliki string dengan kode Ruby interpolasi dalam satu loop, kode akan berjalan hanya sekali sebelum program yang sebenarnya dimulai dan setelah itu selalu mengembalikan nilai yang sama pada setiap iterasi dari loop. Anda dapat mengatasinya menggunakan string eval untuk menunda parsing, tetapi itu membuat sintaks yang sudah canggung bahkan lebih jelek dan verbose, dan dalam hal apa pun, untuk tantangan ini saya juga menonaktifkan operator eval.Namun
~
, ternyata mendefinisikan operator GolfScript built-in baru adalah satu hal fitur ini sebenarnya cukup baik dan bersih.)sumber
"#{var'_','gpush a+b'.cc2}";_
, yang bekerja persis seperti milik Anda kecuali menjadi beberapa byte lebih pendek.Node.js v8.2.0, Retak oleh Dom Hastings
Anda harus mengimplementasikan
logic
fungsinya. Input adalah argumen yang diberikan (dari stdin), output adalah apa pun fungsi Anda kembali (dicetak ke stdout).Gereja kode saya mengkodekan angka-angka dari input. Sisa kode ada hanya untuk mengintimidasi Anda.
Fungsi mess melakukan beberapa tipu daya untuk mengimplementasikan notasi point-free (
a . b == dot (a) (b)
), yang saya gunakan terutama untuk menambahkan. id .
ke tempat-tempat acak, yang tidak melakukan apa-apa, tetapi akan membingungkan siapa pun yang tidak terbiasa dengan pemrograman fungsional.Transformasi yang diterapkan pada angka-angka sebelum saya meneruskannya ke
logic
fungsi adalahx+1
dany-1
, yang menambahkan hingga 0, jadi NOP lain untuk menambah ketidakjelasan.Solusi yang dimaksud adalah:
sumber
Informasikan 7 , dipecahkan oleh ppperry
Input harus diketik oleh pemain sebagai perintah interaktif, misalnya
add 17 to 25
atausum 17 25
. Anda bebas memilih bentuk persis perintah yang harus dimasukkan, asalkan mencakup dua angka. Jumlah angka (misalnya42
) harus dicetak sebagai respons terhadap perintah.Tantangannya, tentu saja, melakukan itu sementara seluruh aktivitas "membaca perintah" digantikan oleh larangan. Mungkin ada beberapa cara untuk mengatasi masalah ini, tetapi setidaknya harus memerlukan keakraban dengan bahasa. Yang saya buat sebenarnya cukup sederhana, jika agak tidak terduga.
Saya telah menguji solusi saya di GNOME Inform 7 IDE, versi 6L38 , di Ubuntu Linux. Solusi yang dimaksud berfungsi pada Glulx dan back-end Z-machine, dan juga harus bekerja pada versi terbaru 7 Inform. Perhatikan bahwa (tanpa penyelesaian yang sesuai) kode di atas akan menyebabkan interpreter sibuk-loop ketika mencoba membaca perintah; interpreter mesin-Z tampaknya menjadi sama sekali tidak responsif ketika ini terjadi, dan tidak dapat dihentikan dari dalam IDE, jadi saya sarankan menggunakan Glulx untuk pengujian.
sumber
CPython 3 (lagi), retak oleh Sisyphus
Anda dapat melakukan apa pun yang Anda inginkan - asalkan tidak diimplementasikan dalam C. Ini berarti tidak
print
, tidakinput
- semua itu akan mencapai batas_(1)
dan berakhir. Input dari STDIN dengan angka pada dua garis yang terpisah, output ke STDOUT. Saya bertanya-tanya berapa lama ini akan berlangsung ... Butuh waktu cukup lama bagi saya untuk menemukan cuplikan yang berfungsi setelah muncul dengan trik mematikan ini. Menentukan Cpython secara eksplisit untuk menghindari cracked non implementasi alternatif sys.setprofile.sumber
functools
?Java 8 ( Cracked )
Usaha kedua. Kali ini saya menginvestasikan dua menit pengujian.
Kebanyakan hal shouuuld dibahas.
sumber
Python 2 retak
Cobalah online!
Saya akan mengawali ini dengan mengatakan jawaban ini adalah langkah brengsek, yang dimaksudkan sebagai jawaban dengan batas bawah.
Terinspirasi oleh jawaban Wheat Wizard dan HyperNeutrino .
Cuplikan membaca file sumber dan menolak untuk melanjutkan jika potongan kode yang dipisahkan spasi putih terakhir tidak dimasukkan ke dalam
e6400dd63733d10ec042e3c28033cfa85e1d25fbef80020810c354d7c942e843
.EDIT : Diedit sedikit untuk menanggapi komentar ini . Masalah inti tidak berubah, setiap upaya crack tidak dibatalkan.
sumber
This code is not allowed to crash or exit.
Java 8 Cracked oleh @ OlivierGrégoire
Saya mencoba membuatnya sekeras mungkin! :) Dan, tidak seperti jawaban Java lainnya sejauh ini, Anda harus mengikuti aturan tantangan yang tepat, dengan menempatkannya setelah seluruh potongan ini (jadi tidak, Anda tidak memasukkan kode Anda dalam
public static void main(String[] args)
metode, Anda meletakkannya setelah seluruh kelas. :) Semoga Sukses!Saya telah menambahkan komentar untuk menunjukkan apa yang sedang dibatasi.
( Terinspirasi oleh posting ini, yang tidak terlalu membatasi dan memuaskan dengan pendekatan yang sama yang bisa saya gunakan untuk jawaban saya. )
Coba di sini. (ideone.com bukannya TIO, karena sepertinya tidak berfungsi di sana .. Pengujian telah dilakukan di Eclipse IDE, tetapi solusi yang saya maksudkan berhasil jika Anda menggunakan ideone.com)
sumber
Jelly: Retak
Ini akan sangat mudah dibandingkan dengan jawaban Python Wheat Wizard yang luar biasa, tapi di sini kita mulai: P
Solusi terbaik untuk solusi penyelesaian masalah saya, termasuk cuplikan pertama, adalah
cfeb1e193ad77f66f039c0d6a792a3e4c311490f6412698e019ca1fae10c0e0a
.Catatan
Anda mungkin tidak memiliki baris baru dalam kode kecuali untuk string jika tidak, kode ini bahkan tidak akan dijalankan, yang mengalahkan tujuan dari tantangan ini.
Retak oleh DJMcMayhem
Agar adil, ini menggunakan baris baru, jadi saya ingin melihat solusi yang tidak menggunakan baris baru.
Juga solusi oleh Jonathan Allan
Ini tidak menggunakan baris baru, jadi sudah retak. : P
Solusi saya adalah ini:
Cuplikan pertama hanya menghapus atom karakter tunggal yang berarti bahwa Python eval masih berfungsi :)))
sumber
JavaScript, Retak
Input:
prompt()
dua kaliKeluaran:
console.log()
Solusi saya tidak berfungsi di jsfiddle. Bekerja pada about: halaman kosong dengan konsol JS Google chrome.
Solusi saya:
Penjelasan:
Saya menghapus prompt dan konsol dengan mengaturnya sama dengan 0.
Dalam solusi saya, saya membuat iframe, yang menciptakan kotak pasir, dan jendela contoh baru di mana prompt dan konsol berfungsi dengan baik.
sumber
Jawa, Retak
Ini
seharusnyasangat mudah retak.Solusi yang dimaksudkan
Cobalah online
sumber
java.io
... Tapi Anda mendapatkan solusi yang diinginkan ...