Utas perampok dapat ditemukan di sini: The Mystery String Printer (Perampok)
Tantangan anda
- Tulis program, fungsi, atau skrip REPL yang mencetak string ke STDOUT.
- Perampok akan mencoba membuat program yang mencetak string yang sama.
- Jika mereka berhasil membuat program dalam 7 hari, kiriman Anda sudah di-crack.
- Jika tidak ada yang bisa membuat program yang mencetak string yang sama dalam 7 hari, kiriman Anda aman. Anda dapat memilih untuk mengungkapkan program Anda, atau membiarkannya menantang perampok masa depan. Namun, jika Anda tidak mengungkapkannya, Anda tidak bisa mendapatkan poin dari kiriman Anda (jangan cantumkan "aman" di tajuk jawaban jika Anda memilih untuk melakukan ini).
Batasan
- Program harus kurang dari atau sama dengan total 128 byte (lebih lanjut tentang ini nanti).
- Jika program tergantung pada nama program, atau nama / isi file eksternal, Anda harus mengatakan itu, dan memasukkannya ke dalam jumlah byte total Anda.
- String yang dicetak harus kurang dari atau sama dengan 2048 byte.
- String yang dicetak harus terdiri dari hanya karakter ASCII yang dapat dicetak (baris baru dapat dimasukkan).
- Program harus menghasilkan output yang sama setiap kali dijalankan.
- Primitif kriptografi bawaan (termasuk rng, enkripsi, dekripsi, dan hash) tidak diizinkan.
- Program tidak boleh mengambil input.
- Tidak ada celah standar.
Mencetak gol
- Jika kiriman retak sebelum tujuh hari, kiriman mendapat 0 poin.
- Pengajuan yang aman dari ≤128 karakter menghasilkan 1 poin.
- Pengajuan yang aman dari ≤64 karakter menghasilkan 2 poin. Jika kurang dari atau sama dengan 32 byte, ia menghasilkan 4 poin, dan seterusnya.
- Setiap pengiriman yang aman juga menghasilkan bonus 3 poin tambahan (terlepas dari panjangnya).
- Ada penalti kecil (1/2 poin) untuk setiap retak setelah yang pertama.
- Perhatikan bahwa solusi perampok harus dalam kisaran panjang program yang sama.
- Setiap orang dapat mengirimkan maksimum 1 program per rentang byte per bahasa (versi berbeda dan penggantian sewenang-wenang dari bahasa yang sama tidak dihitung sebagai bahasa terpisah). Contoh: Anda dapat memposting program pyth 32 byte dan 64 byte, tetapi Anda tidak dapat memposting program 128 byte di Java 7 dan Java 8.
- Orang dengan total poin tertinggi akan menang.
Pengajuan
Setiap pengajuan harus memiliki informasi berikut:
- Nama bahasanya. Semua solusi perampok baru harus bahasa yang sama.
- Rentang ukuran program (ini adalah kekuatan terdekat dua lebih tinggi dari ukuran program; misalnya, jika program Anda adalah 25 byte, ini akan menjadi "≤32").
- String aktual yang akan dicetak.
- Jika kiriman aman, masukkan "aman" dan panjang program (dengan kekuatan terdekat 2) di header Anda. Jika ada beberapa angka di tajuk Anda, taruh kekuatan 2 terakhir.
Cuplikan tumpukan ini menghasilkan papan peringkat dan daftar semua kiriman terbuka. Jika ada masalah dengan cuplikan, silakan tinggalkan komentar.
Gunakan format berikut untuk entri:
Language, (any text with the program size as the last number)
=
atau
Language
=
Length <= 16
Perhatikan bahwa cuplikan hanya akan menempatkan kata pertama di header sebagai bahasa jika tidak mendeteksi koma.
Untuk pengiriman yang aman, simpan aman di tajuk Anda. Cuplikan akan secara otomatis menempatkan program Anda di kolom "aman" jika waktunya habis, jadi ini lebih untuk memberi tahu perampok bahwa program Anda aman.
Untuk pengiriman yang retak, masukkan yang retak di header Anda.
Program juga harus dapat mengenali jika ada komentar yang mengatakan "crack" dan memiliki tautan; Namun, ini tidak dijamin.
Pesanan Tiebreak: Poin -> # pengiriman aman -> Jumlah paling sedikit dari pengiriman yang retak.
Perhatikan bahwa cuplikan menyortir dengan pengiriman terbuka sebelum setidaknya retak, tetapi pengiriman terbuka tidak akan dihitung pada akhir kontes.
Tantangan ini sekarang ditutup.
Pemenang poin terbanyak: Dennis
Kiriman paling aman: DLosc
(Perhatikan bahwa jumlah pengiriman yang aman tidak diterjemahkan ke jumlah poin, karena ukuran program dipertimbangkan dalam menghitung skor).
sumber
Jawaban:
Pyth, Safe, Range ≤ 8
Kode:
Penjelasan:
sumber
]
?VBA, [Aman]
Rentang <= 128 byte
Petunjuk kemana akan keluar
Output 255 byte
Larutan
Kode
Dijelaskan
sumber
Mathematica, aman, kisaran ≤ 64
Keluaran:
Sumber:
sumber
GenomeLookup
semuanya ...ngn APL (aman)
Kisaran ≤ 8
Larutan
Cobalah online.
Bagaimana itu bekerja
⍟⍣=42
menerapkan logaritma natural (⍟
) berulang kali ke 42 hingga titik tetap tercapai (⍣=
), menghasilkan 0,31813150520476413J1.3372357014306895 .Nilai awal tidak terlalu penting di sini, asalkan bukan 1 atau 0 .
3○
berlaku singgung argumen yang benar, menghasilkan 0,07343765001657206J0.8920713530605129 .*
menerapkan fungsi eksponensial alami ke argumen yang benar, menghasilkan output yang diinginkan.sumber
Pyth, dipecahkan oleh Sp3000
Kisaran ≤ 8
sumber
> <> (Aman)
Diuji pada penerjemah online dan resmi.
Rentang: <= 16
Tali:
4621430504113348052246441337820019217490490
Ini cukup 1337, ya?
Penjelasan:
Berikut kode sumber (15 byte):
f
mendorong 15 (penghitung kami) ke tumpukan (ini dilewati oleh!
pada akhir agar tidak mendorong lebih dari satu penghitung)1-
kurangi 1 dari penghitung:0(?;
Wajah berkerut menguji apakah penghitung kurang dari 0, sisanya mengakhiri program jika itu::
Gandakan penghitung dua kali0g
Raih karakter pada titik(c,0)
di kode sumber di manac
penghitung*
Mengalikan duplikat kedua penghitung dengan representasi ASCII dari karakter yang sebelumnya diraihn
Mencetak hasilnya.Jadi, berpisah, outputnya
[462, 1430, 504, 1133, 480, 522, 464, 413, 378, 200, 192, 174, 90, 49, 0]
. Ini sesuai dengan interpretasi ASCII dari kode secara terbalik dikalikan dengan angka 14 hingga 0 (yaitu[!*14, n*13, ... f*0]
).Mungkin bagian tersulit tentang memecahkan ini adalah mencari cara untuk membagi angka-angka dengan benar, tetapi jika Anda mendapatkan yang benar, itu hanya masalah mencoba sampai Anda mendapatkan sesuatu yang berhasil.
sumber
Snowman 1.0.2
Kisaran ≤32.
Solusinya adalah:
sumber
Matlab, ≤16. Retak oleh Wauzl
Kisaran ≤16 .
Ini bekerja di oktaf juga.
String yang dicetak adalah sebagai berikut:
sumber
Perl (aman)
Kisaran ≤ 32
Larutan
Cobalah online.
Bagaimana itu bekerja
for-951..1048
mengeksekusi perintah sebelumnya untuk setiap integer dalam rentang ini, menyimpannya dalam variabel implisit.y/124589//
melakukan transliterasi, menghilangkan digit yang ditentukan dari variabel implisit.y///
akan mengembalikan jumlah eliminasi, yaitu jumlah kemunculan digit tersebut dalam variabel implisit.print 2**
mencetak 2 dengan kekuatan eliminasi ( 1 , 2 , 4 atau 8 ).sumber
Python, <= 16 ( dipecahkan oleh kennytm )
Ini diproduksi melalui REPL (menjalankan perintah dalam shell Python).
Sementara saya mengedit ini, saya juga akan merangkum komentar untuk perampok bebas spoiler masa depan: ini tidak bekerja di semua Python. Itu berfungsi dalam membangun Python 2.7 di mana
sys.maxint = 9223372036854775807
.sumber
> <> , ≤ 8 [ retak ]
Itu total 12
o
detik. Program berhenti tanpa kesalahan, dan bekerja dengan penerjemah resmi dan penerjemah online .sumber
TI-BASIC, ≤4 byte, dipecahkan oleh Reto Koradi
Butuh 5 hari 23 jam untuk retak. Sangat dekat ...
Output (10 byte):
Program:
Karena pada dasarnya mustahil bagi seseorang untuk menebak ini, tujuan saya dalam mendesain program ini adalah menjadikan brute force sebagai satu-satunya pendekatan yang mungkin.
Untuk melakukan ini, saya mencegah output, atau output dengan salah satu fungsi terbalik ini diterapkan, muncul di ISC. ISC tidak memiliki garis singgung hiperbolik, dan saya pikir tidak akan ada alat serupa
tanh(7°
.Untuk menambahkan keamanan terhadap brute force, saya menggunakan konversi derajat ke radian, fitur yang sedikit tidak jelas, tetapi itu tidak cukup.
sumber
sin(
1 byte pada TI-BASIC. Jadi sesuatu sepertisin(sin(sin(e
hanya akan menjadi 4 byte.fPart(
.CJam, ≤ 8 [aman]
Saya tidak suka nomor yang panjang, jadi ini yang pendek. Jangan ragu untuk bermain-main baik offline maupun online .
Karena saya menemukan kiriman hanya nomor cukup membosankan, saya akan perlahan memberikan beberapa petunjuk untuk mengkompensasi.
Larutan
Programnya adalah
0W#
adalah0^-1
, yang bukannya memberi kesalahanInfinity
.s
kemudian melemparkan ini ke string (catatan yang`
memberikan1d0/
gantinya).Untuk setengah lainnya,
Wc
konversi -1 ke char, yang menjadi titik kode 65535 karena sampul untuk karakter (lihat tip ini ).i
kemudian mengubah char kembali ke int, yaitu 65535.Akhirnya,
b
ubah stringInfinity
ke basis 65535 untuk memberikan angka di atas.sumber
Javascript (konsol), <= 32 ( dipecahkan oleh insertusername di sini )
Diuji di konsol web Chrome dan Firefox. Itu string 43 karakter.
Solusi yang saya maksudkan sedikit lebih rumit daripada yang tertaut (mengutuk Anda, ES6!).
Penjelasan:
sumber
Python, <= 32 ( dipecahkan oleh Egor Skriptunoff)
Output adalah 1832 byte, termasuk baris baru:
sumber
CJam ( retak oleh Dennis)
Panjang <= 4
Saya tidak memberikan ini kesempatan hidup yang sangat tinggi, tetapi saya ingin mencoba solusi 4 byte.
Kode saya persis seperti yang direkayasa terbalik oleh Dennis:
CJam kemudian mencetak semua konten stack, digabungkan. Jadi hasilnya
17
disatukan dengan19^20
.sumber
KK#
, mencoba beberapa kekuatan lagi, dan akhirnya menemukanJK#
.Lua, ≤ 4 ( retak oleh feersum)
Keluaran:
Anda perlu menemukan string untuk Lua REPL yang menghasilkan konstanta "1 / M".
Ini sederhana, tetapi tidak terlalu sepele.
sumber
=
sebelum ekspresi.0x2p-21
Pip , <= 16 (aman)
Ini pengajuan Pip terakhir saya, saya janji. :)
Saya akan terkejut jika ada yang mendapatkan ini hingga 16 byte - saya butuh beberapa upaya untuk membuatnya cocok. (Anggap itu sebagai tantangan jika Anda mau!)
Menjawab:
Kode ini memanfaatkan variabel yang telah ditentukan
t
= 10 dans
= spasi.sumber
Ruby, dipecahkan oleh kennytm
Kisaran: ≤64.
(Dan ya, semua output ke STDOUT.)
Solusi yang dimaksudkan:
sumber
TI-BASIC ( dipecahkan oleh Thomas Kwa )
Kisaran varian TI-89 : ≤8
Panjang output: 460
Saya tidak berpikir Anda dapat menggunakan RIES untuk ini, tetapi saya ragu itu akan bertahan 7 hari. Baiklah.
Kode:
sumber
MATLAB, dipecahkan oleh Tom Carpenter
Rentang <= 16
sumber
Mathematica, Retak oleh Sp3000
Rentang: <= 32
sumber
Thue - <= 64 Bytes, dipecahkan oleh histocrat.
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
Itu tahun 2016 5-an; ngomong-ngomong.
sumber
CJam, ≤8 (aman)
Kode asli:
Artinya, untuk memulai
3.141592653589793
dan mengganti setiap karakter"3.141592653589793"
dengan karakter yang sesuai di"\"3.141592653589793\""
. Dengan duplikat dihapus, itu sebenarnya diganti".123456789
dengan""35\.49831
.sumber
Python 2 (aman 16)
Rentang ≤ 16. Jika versi penting (untuk presisi pencetakan?), Saya menggunakan ideone .
Saya tidak melihat cara menebak kode tanpa pencarian komputer, tetapi Anda semua telah membuat saya terkesan sebelumnya.
Menjawab:
sumber
dir(complex)
untuk melihat ops apa yang didefinisikan untuk bilangan kompleks. Saya tidak tahu Anda bisa menggunakan modulus. Perhatikan bahwa ini kemungkinan tidak akan membantu, tetapi mungkin ...JavaScript ES6, ≤128 byte - Retak
Output (1124 bytes):
Selamat bersenang-senang, dan semoga berhasil!
Kode asli:
sumber
Still safe :3
TI-BASIC (dipecahkan oleh Thomas Kwa)
Rentang: <= 2
Tali:
-10
Kode:
Xmin
Tidak ada yang bisa menipu orang ini ...
sumber
~9
(bit inversi)AppleScript, ≤ 2 Bytes Retak
"Brute terpaksa ... menggerutu ..."
Apa ini? Jawaban singkat AppleScript? :Hai
(ya, ini TIDAK cetak ke stdout)
sumber
a=
ataua-
1=
atau1-
atau? Saya tidak tahu =)say"Cracked."
, dan, jika Anda tidak keberatan tata bahasa, satu byte lagi dengansay"Cracked"
. c:> <> (Ikan) , Retak oleh Sp3000
Panjang <= 8
Output adalah 23
>
's dan program tidak menghasilkan kesalahan.sumber
GolfScript (aman)
Kisaran ≤ 8
Larutan
Cobalah online.
Bagaimana itu bekerja
{9?7*}
mendorong blok itu di tumpukan..%
menduplikasi blok dan memetakannya ... dengan sendirinya.GolfScript melakukan casting tipe seperti tidak ada hari esok. Dalam kasus ini, penerjemah mengharapkan iterable, sehingga blok asli akan dilemparkan ke array, menghasilkan array kode karakter berikut: [57 63 55 42] .
Blok itu sendiri mengangkat setiap kode karakter ke kekuatan kesembilan (
9?
), kemudian mengalikan hasilnya dengan tujuh (7*
).Untuk empat kode karakter dalam array, ini mendorong
Sebelum keluar, juru cetak mencetak empat bilangan bulat, tanpa pemisah.
sumber