Tugas polisi adalah menulis fungsi atau program yang, ketika diberi input sendiri, menghasilkan string deterministik terbatas. Jika program diberikan input yang berbeda, itu harus mengembalikan output yang berbeda.
Aturan:
- Pengajuan terdiri dari
- Nama bahasa
- Jika ada bendera yang digunakan, mereka harus dibuka.
- Hitungan hitungan program
- Hitungan jumlah byte
- Keluaran
- Jika sangat panjang, harap berikan pastebin atau yang serupa
- Jika mengandung unsintables, berikan hexdump.
- Mengejar baris baru dan spasi putih harus dimasukkan dalam output
- Dari mana input berasal (STDIN, baris perintah, dll. )
- Nama bahasa
- Jika berlaku, Anda dapat mengasumsikan bahwa byte yang mewakili EOF tidak ada dalam input, kecuali jika Anda menggunakan byte itu dalam program Anda.
- Jika program Anda retak, tambahkan tautan ke jawaban yang sesuai di utas perampok di judul Anda.
- Program Anda tidak aman sampai satu minggu berlalu dan Anda menandainya.
- Saya tidak menyetujui teknik seperti penyemaian secara acak dengan fungsi hash input atau kriptografis. Saya tidak bisa menghentikan mereka, tetapi saya tidak akan menerima solusi yang memanfaatkan salah satu dari ini . Perhatikan juga bahwa beberapa teknik ini mungkin memiliki tabrakan, di mana string yang berbeda menghasilkan output yang sama.
- Tujuan Anda adalah mendapatkan hasil terpendek. Solusi aman terpendek yang diposting dalam waktu tiga minggu setelah memposting pertanyaan ini akan menang!
Tugas perampok adalah menemukan program berukuran sama atau kurang dari aslinya, yang juga mematuhi aturan di atas.
Jika seorang perampok memecahkan program Anda dengan solusi yang berbeda dari yang dimaksudkan, maka Anda memiliki kesempatan untuk 'membuka kembali' dengan membuktikan bahwa solusi perampok itu salah. Anda dapat melakukan ini dengan menemukan input ke program perampok yang akan menghasilkan output yang sama.
Pengiriman Contoh:
brainfuck, 10 byte, Nilai: 10
]<.[<],>[,
Solusi ini adalah , [>,] <[. <] Yang hanya membalikkan input
Semoga berhasil!
code-challenge
cops-and-robbers
Jo King
sumber
sumber
1
untuk dirinya sendiri dan0
sebaliknya1021111143210532105110321051101121171164041581121141051101164011111410040105414410111010061393941
untuk beberapa string lainnya.Jawaban:
7 , 31 karakter, skor 30, aman tapi mungkin rusak?
Program 7 biasanya hanya angka, tetapi bisa berisi spasi, membaginya menjadi beberapa angka. Oleh karena itu pengajuan ini terdiri dari dua angka (yang secara implisit digabungkan oleh 7 penerjemah), dan program juga mengambil dua angka sebagai input, melalui input standar. (The "31 karakter" di header adalah total panjang dari dua angka, ditambah satu karakter spasi putih yang terpisah; digit yang membentuk angka ditafsirkan sebagai oktal ketika digunakan sebagai program, tetapi desimal saat digunakan sebagai input, dan itu digit yang sama dalam dua kasus, bukan angka yang sebenarnya. Perhatikan bahwa itu tidak relevan baik ketika diperlakukan sebagai program, atau ketika diperlakukan sebagai input, apakah Anda memisahkannya dengan spasi atau baris baru, saya harap itu tidak dapat membatalkan pengajuan.)
Output yang diharapkan adalah angka berikut (dinyatakan di sini dalam desimal, karena itulah format output yang digunakan oleh 7 juru bahasa):
Perhatikan bahwa 7 penerjemah yang ditautkan dari wiki Esolang secara internal menyimpan angka di unary, artinya Anda tidak mungkin memiliki cukup memori untuk benar-benar menjalankan program itu sendiri untuk melihat apa yang dilakukannya. Saya memverifikasi program melalui mengetahui perilakunya secara manual, dan mengujinya pada input kecil untuk memverifikasi bahwa ia melakukan apa yang saya harapkan. Pendekatan alternatif adalah menulis juru bahasa yang menggunakan metode yang lebih efisien untuk menyimpan angka.
Menghindari keretakan di sini adalah sesuatu yang menyusahkan, tapi saya akhirnya sekarang puas bahwa tidak ada dua angka selain yang ada dalam program itu sendiri yang mampu menghasilkan 238363505302130098723162537059 sebagai output. ( EDIT 1 minggu kemudian: Saya mungkin salah, tergantung bagaimana Anda menginterpretasikan pertanyaan; lihat di bawah. )
Larutan
Program aslinya adalah:
Dimaksudkan bahwa tidak ada input lain yang akan memberikan hasil yang diinginkan karena:
Namun, tergantung pada bagaimana Anda menginterpretasikan pertanyaan, mungkin ada input kedua yang menghasilkan output yang diinginkan (sehingga membatalkan solusi ini):
Penjelasan
Begini cara fungsi solusi yang dimaksud:
sumber
Node.js v10.9.0 , 40 byte, Nilai: 40, Retak
Memasukkan
Ini adalah fungsi yang mengambil tepat satu parameter.
Keluaran
sumber
o=>[...j=o,].sort(n=>(j+=113)&69).join``
, tetapij
tidak bisa pergi ke integerA Pear Tree , 46 byte ASCII, skor 0, Retak
Input diambil dari input standar. Output yang diharapkan (pada output standar) adalah string kosong (yaitu ketika program diberikan sendiri sebagai argumen, tidak ada output yang harus dicetak).
Dengan kata lain, tantangannya di sini adalah untuk menulis program A Pear Tree yang tidak menghasilkan apa pun pada output standar ketika diberikan sendiri pada input standar, dan yang melakukan output sesuatu pada output standar ketika diberi sesuatu selain dirinya pada input standar, tanpa menggunakan lebih dari 46 byte. (Saya sudah berhasil melakukan ini sambil memegang program untuk dicetak ASCII, juga, meskipun A Pear Tree sering menggunakan karakter non-ASCII dan tidak patut dicetak.) Ini secara efektif tugas menulis sebuah program identifikasi diri , dengan format output spesifik (yaitu string nol ketika identifikasi diri berhasil); namun, A Pear Tree memiliki setidaknya dua putaran yang membuat tugasnya agak lebih sulit daripada yang terlihat ketika dilakukan dalam bahasa khusus ini (itulah sebabnya saya memilihnya untuk pengiriman polisi saya).
Solusi saya
Solusi saya agak berbeda dari crack:
Cobalah online!
Alih-alih menggunakan
exit
, saya malah mengatur$_
(output implisit) dan$\
(baris baru setelah output, termasuk output implisit) ke string nol jika ada kecocokan (dan1
jika tidak ada kecocokan). Aprint
masih diperlukan karena output implisit hanya diaktifkan jika ada setidaknya satu byte input (dengan demikian, kita perlu secara eksplisit mencetak sesuatu jika kita diberi string kosong sebagai input, yang berbeda dari program).Setiap program Pear Tree perlu mengandung sebuah checksum di suatu tempat (itulah
MZpa
solusi ini). Solusi saya dan crack memilih nama variabel (dan memvariasikan detail minor lainnya dari kode) untuk membuat checksum seluruhnya terdiri dari huruf ASCII.sumber
Perl 5
-p0777
, 10 byte, skor 10, amanKarakter terakhir di sini adalah "shift out", kode karakter 14 (desimal) / 0E (hex). Semua yang lain dapat dicetak ASCII.
Karena kita menggunakan argumen I / O tersirat dari Perl
-p0777
, input berasal dari input standar, dan output menuju ke output standar.Larutan
Program melakukan hal berikut:
yang berarti bahwa program itu sendiri, satu-satunya input yang menghasilkan output yang diinginkan, adalah:
Cobalah online!
Penjelasan
sumber
Python 3, 50 byte retak
Input dan output dari / ke stdin / -out. Output berbeda untuk setiap input yang berbeda. Output unik ketika diberi kode sumber:
(Itu 150 digit)
Semoga berhasil!
sumber
05AB1E , 35 byte, Nilai: 7
Input:
Dari
stdin
Keluaran:
QÕ Ƿe
sumber
Cubix , 18 byte, Skor 18, aman
Sayang sekali tantangan ini tidak mendapat perhatian lebih, tapi begitulah yang terjadi kadang-kadang. Saya akan meninggalkan ini tidak aman, tetapi memutuskan untuk mengirim solusi sebelum saya melupakannya.
Ini seharusnya cukup mudah retak.
Masukan dari
stdin
Keluaran
Sunting: Saya harus menyebutkan bahwa ini mengharapkan sumber dalam bentuk yang lebih pendek ... dan sekarang saya perhatikan ada byte yang hilang (tidak dapat dicetak) dari hasil yang saya hancurkan ketika saya memposting. Harus menyalin sekarang. Nilai hex adalah
24 60 2a 13 32 61 4a 50 4a 23 37 34 28 6f 29 3b 38 39
Konsepnya adalah untuk menghapus cetak karakter pertama dan kemudian hapus indeks terbalik dari karakter, misalnya [karakter] - [0, len ([karakter]) .. 2]
Kodenya adalah
yang memetakan ke kubus berikut
Coba di sini
sumber
Jelly , 14 byte, Nilai: 21, Aman
Baik ukuran program dan output dihitung menggunakan codepage Jelly.
Memasukkan
Argumen baris perintah pertama.
Keluaran
Larutan
Cobalah online!
sumber
v⁼
akan menghasilkan1
jika input dievaluasi sebagai kode Jelly dengan input input sama dengan input dan akan menghasilkan0
atau kesalahan (jika inputnya adalah kode Jelly tidak valid) jika tidak.JavaScript Firefox, <10 byte, Nilai: 52, dari input argumen fungsi, Cracked
btoa(btoa)
menyandikan string berikut:pemberian yang mana:
baru saja disalin
sumber
GCC 61-> 61 byte
Program penuh, ambil input dari stdin dan output ke stdout
sumber
50
?Perl 6, 43 byte, Nilai: 15, dari stdin
sumber
Pepe , 23 byte, skor: 23, dipecahkan oleh MickyT
Memasukkan:
standar
Keluaran:
sumber
J , 26 byte, Nilai: 52, Aman
Program ini bukan REPL, tetapi skrip lengkap yang menerima
stdin
dan secara eksplisit dicetakstdout
.Memasukkan
Input standar.
Keluaran
Tidak, ini bukan metode enkripsi.
Larutan
Cobalah online!
sumber
Keg , 6 byte, Nilai: 6
Memasukkan
Dari
stdin
, menggunakan?
Keluaran
Pikiran Anda bahwa mereka adalah urutan melarikan diri untuk byte yang tidak diinginkan. Ganti lolos dengan karakter literal. Teks mentah tersedia di sini
Semoga berhasil dengan yang satu ini! Sampai jumpa minggu depan!
sumber
Perl 6, 31 byte, Nilai: 39, dari stdin - Cracked
Retak di sini
Solusi kasar. Mungkin bertahan hidup
sumber