Untuk tujuan tantangan ini, kami akan mendefinisikan spasi putih sebagai hanya baris baris (0x0A) dan spasi (0x20). Perhatikan bahwa sebagian besar bahasa dan rasa regex mempertimbangkan banyak karakter lain sebagai spasi putih, baik di dalam maupun di luar rentang ASCII sehingga Anda mungkin tidak dapat menggunakan built-in yang sesuai.
Tantangan Polisi
Anda harus menulis sebuah program atau fungsi dalam bahasa pilihan Anda, yang mengambil string, yang terdiri dari karakter ASCII (kecuali NUL), sebagai input dan output dengan semua spasi putih dihapus. Misalnya jika Anda menerima input berikut:
H e l l o,
W o r l d!
Anda harus mengeluarkan
Hello,World!
Kiriman Anda kemudian akan menjadi kode sumber Anda dengan semua spasi kosong dihapus (proses yang sama seperti meneruskan solusi Anda sebagai input untuk dirinya sendiri, meskipun solusi Anda juga dapat berisi karakter di luar rentang ASCII). Tujuan Anda adalah membuatnya sesulit mungkin untuk mencari tahu di mana spasi putih perlu dimasukkan untuk memulihkan solusi yang valid dalam bahasa pilihan Anda. Perhatikan bahwa perampok dapat memasukkan lebih sedikit spasi daripada yang Anda hapus, tetapi tidak lebih. Ingat juga bahwa perampok tidak harus cocok dengan kode persis Anda, mereka hanya harus menemukan solusi yang valid.
Jawaban Anda harus berisi yang berikut:
- Bahasa (dan versi jika perlu) di mana Anda menulis solusi Anda.
- Jumlah byte solusi Anda sebelum menghapus spasi.
- Solusi Anda dengan spasi kosong dihapus.
Solusi Anda bisa berupa program atau fungsi, tetapi bukan cuplikan dan Anda tidak boleh menganggap lingkungan REPL. Anda dapat mengambil input melalui STDIN, argumen baris perintah atau argumen fungsi dan output melalui STDOUT, nilai pengembalian fungsi atau parameter fungsi (keluar).
Untuk kepentingan keadilan, harus ada juru bahasa atau kompiler yang tersedia secara bebas untuk bahasa pilihan Anda.
Anda tidak boleh menggunakan built-in untuk hashing, enkripsi atau pembuatan angka acak (bahkan jika Anda menyemai generator nomor acak ke nilai tetap). Solusi Anda harus dapat memproses string 100 karakter atau kurang dalam waktu kurang dari 10 detik pada mesin desktop yang masuk akal.
Jika jawaban Anda belum retak dalam 7 hari (168 jam), Anda dapat mengungkapkan solusi Anda sendiri di mana titik jawaban Anda dianggap aman . Selama Anda tidak mengungkapkan solusi Anda, itu mungkin masih dapat dipecahkan oleh perampok, bahkan jika 7 hari telah berlalu. Jawaban aman terpendek menang (diukur sebelum menghapus spasi putih).
Jika jawaban Anda retak, harap tunjukkan ini di tajuk jawaban Anda, bersama dengan tautan ke jawaban perampok yang sesuai.
Buka di sini untuk bagian perampok.
Pengajuan Tidak Rusak
<script>site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 103182;</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>
sumber
Jawaban:
Haskell, 100 byte, dipecahkan oleh nimi
Ini adalah program penuh dan puisi dadaistic.
Kode dengan spasi (Coba online!)
Masih terlihat cukup puitis, jika Anda bertanya kepada saya.
De-dikaburkan
Penjelasan
The
do
-notation hanya sintaksis gula, sehinggaf
dapat dipersamakan ditulis sebagaiUntuk daftar
>>=
-operator didefinisikan sebagaiconcatMap
, jadif
menjadiJadi diberi input
"a b\nc"
,lines
bagi input di baris baru["a b","c"]
, bagiwords
setiap baris di ruang putih menghasilkan[["a","b"],["c"]]
(seperti yang saya sadari sekarang ini termasuk baris baru, jadilines
sebenarnya tidak diperlukan). Menggabungkan sekali memberi["a","b","c"]
,id
adalah fungsi identitas dan dengan demikian tidak memiliki efek dan penggabungan akhir menghasilkan string"abc"
.sumber
C, 475 byte, dipecahkan oleh Riley
Bagian-bagian tertentu dari C membuatnya sangat sangat mudah untuk melihat ke mana spasi harus pergi. Namun, pra-prosesor c tidak. Jadi kode ini terbagi dalam dua bagian: hingga baris 17 (236 karakter dengan spasi putih) kode ini hampir tidak dikontrol, dan setelah itu (239 karakter dengan spasi putih), semoga berhasil!
Tidak akan memenangkan kompetisi ini dengan tembakan panjang, tapi saya ingin melihat apa yang bisa dilakukan dengan c pre-processor.
Kompilasi (dengan peringatan, jika Anda mengaktifkannya) dengan
gcc -std=c89 -ansi
dan berfungsi seperticat file | ./a.out
Ini retak jauh lebih cepat dari yang saya kira, selamat! Strategi saya adalah menggunakan
#defines
untuk menghapus batas-batas token yang jelas (seperti ';') dan kemudian menggunakan lebih banyak#defines
untuk membuatnya benar-benar tidak intuitif bagaimana mereka dibolak-balik.Ngomong-ngomong, ini adalah kode yang terlihat setelah hanya spasi kosong yang telah ditambahkan:
sumber
Oktaf, 69 byte, AMAN!
Format input: Baris baru tidak dapat dimasukkan secara langsung di command prompt. Buat string dengan gabungan seperti ini:
Panggil fungsi seperti ini (tambahkan spasi):
Kode asli:
Anda hanya perlu 66 byte agar ini berfungsi, tetapi saya menulis 69 di header agar tidak memberikan terlalu banyak informasi.
Kode aslinya terlihat seperti ini:
Penjelasan:
U
adalah titik kode85
pada tabel ASCII, sehingga akan tampak seperti spasi pertama setelahnya85
. Salah!Jika kita memasukkan spasi setelahnya
853
, kita harus mendapatkan nomor karakter853
, kan ..? Menggunakanchar
untuk memeriksa apakah itu karakter yang dikenali:Namun, kami tidak menggunakan
char
dalam kode, kami menggunakan versi yang lebih pendek di mana kami menggabungkan angka-angka dengan string kosong[853 '']
. Alih-alih memberikan kesalahan di luar jangkauan, versi yang lebih pendek hanya mengambil angka modulus 256.Kebetulan itu saja
85+3*256 = 853
. Sementarachar(853)
memberi peringatan,[853,'']
kembaliU
.Cara yang jelas untuk melakukan tugas ini dalam Oktaf adalah:
Kita tahu bahwa harus ada tanda kurung pembuka (titik kode 40) setelah yang pertama
U
.29
jelas tidak cocok jadi kami menggeser ruang lebih jauh ke kanan dan mendapatkan296
.mod(296,256) = 40
. Bingo!Lanjutkan seperti ini dan akhiri dengan urutan:
Akhirnya, kita gunakan
eval
untuk mengubah string menjadi kode.sumber
U
antara sekelompok angka :-)JavaScript ES6, 199 byte, dipecahkan oleh SLuck49
Entri yang agak tebal dengan 33 byte ruang kosong untuk ditambahkan.
sumber
[ 10, 0, 0, 0, 0, 9, 8, 1, 5, 0, 0 ]
untuk urutan kesenjangan dan fungsi iterasi saya untuk array(a)=>{for(var x=0;!a[x];x++);if(a.length-x>1){a[0]=a[x]-1;a[x]=(x==0?a[x]:0);a[x+1]++;}else{a[0]=a[x]+1;a[x]=0;i=0}}
. Saya mulai di[ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
.> <>, 40 byte, Retak oleh Teal pelican
Ngomong -ngomong, saya menggunakan fishlanguage.com , kalau-kalau ada perbedaan antara penafsir.
sumber
Befunge-93, 58 byte, Aman!
Cobalah online!
Program Asli
Cobalah online!
Trik untuk ini adalah bahwa jalur eksekusi lebih vertikal daripada horizontal, kemudian berbagai ruang dimasukkan secara acak dalam kode untuk lebih jauh mengocok jalur vertikal. Setelah garis putus dan spasi putih akhirnya dihapus, mudah-mudahan ada sangat sedikit untuk menunjukkan bagaimana operasi terkait satu sama lain.
Dalam hal itu tidak cukup sulit, saya juga melemparkan sedikit interleaving, sehingga sejumlah operasi akhirnya dieksekusi oleh jalur kode yang berbeda yang mengalir saling tegak lurus. Gagasannya adalah bahwa jika Anda pikir Anda telah menemukan posisi yang benar untuk perintah tertentu, Anda tidak akan menyadari bahwa Anda mungkin perlu menggunakannya lagi nanti dalam kode.
Tidak yakin apakah sepadan dengan semua usaha yang dilakukan untuk membuat hal-hal rumit, atau orang-orang bahkan tidak repot-repot mencoba menyelesaikannya. :)
Penjelasan Kode
sumber
C # 6, 201 byte, Retak oleh Link Ng
184 byte runtuh, meninggalkan Anda 17 byte spasi.
Solusi retak menggunakan
Concat
sedangkan solusi yang saya maksudkan menggunakanJoin
, inilah solusi yang dimaksud:sumber
MATL , 22 byte. Retak dan retak .
Ini adalah program yang mengambil input melalui STDIN dan menghasilkan output melalui STDOUT.
Kode tanpa spasi atau baris baru:
The format masukan sedikit canggung karena bagaimana MATL mengambil string input. String dengan baris baru tidak dapat dimasukkan secara langsung melalui STDIN, karena setiap input harus berupa satu baris (baris baru menandai akhir input). Jadi formatnya adalah sebagai berikut:
Sebuah string diapit dengan tanda kutip tunggal . Jika konten string menyertakan tanda kutip tunggal, mereka lolos dengan menduplikasi . Contoh:
'I''m a string'
Untuk memasukkan string dengan baris baru, kita perlu membagi string pada baris baru dan menggabungkan semuanya (dengan tanda kurung siku), termasuk angka sebagai kode ASCII . Misalnya, perhatikan string yang dibentuk oleh nama depan dan belakang saya dengan baris baru di antaranya. Itu akan dimasukkan sebagai
['Luis' 10 'Mendo']
.Ini memungkinkan memasukkan kode ASCII lainnya (mungkin tidak dapat dicetak). Jadi string pada item 1 di atas dapat dimasukkan sebagai alternatif
['I' 39 'm ' 97 32 'string']
. Lihat di sini .Satu-satunya syarat adalah bahwa setidaknya salah satu bagian dalam tanda kurung adalah string. Itu memaksa angka apa pun untuk ditafsirkan sebagai kode ASCII saat digabungkan.
Maaf tentang canggungSemoga sukses menggunakan format ini!Solusi asli
Masing
%
- masing adalah simbol komentar, dan sisa baris diabaikan.Spasi tidak melakukan apa pun, tetapi berfungsi sebagai pemisah. Misalnya,
1e5
tanpa spasi, akan diartikan sebagai angka100000
.t
mengambil input dan menduplikatnya.' @ *'
mendorong string itu, dand
menghitung perbedaan berturut-turut, yang memberi[32 -32 10]
(-32
tidak ada gunanya).m
memberikan larik baris logis yang menunjukkan karakter32
atau10
(atau-32
) mana.1
diikuti olehe
membentuk ulang sebagai baris. Ini bukan op di sini.5
diikuti olehM
dorongan1
lagi (input terakhir ke fungsi multi-input terbaru, yaitue
).d
menghitung perbedaan berturut-turut1
, dan memberi[]
(array kosong).w
swap, dan akhirnya(
ditugaskan[]
ke karakter spasi putih, yaitu menghapusnya.sumber
RProgN , 15 Bytes Retak!
Anda dapat mempermainkan kode di sini . Sebuah solusi yang relatif sederhana, mudah-mudahan sifat menyebalkan dari bagaimana RProgN menangani string akan meninggalkan masalah ini.
Program Asli
Penjelasan
Pertama, input secara implisit didorong ke stack. Tumpukan:
<INPUT>
Kemudian, kami menggunakan '' untuk mendorong spasi ke tumpukan. Tumpukan:
<INPUT> " "
`sebenarnya mencoba untuk mendorong string yang diwakili oleh` (WORD) tetapi karena ada spasi setelahnya, itu hanya mendorong string kosong. Tumpukan:
<INPUT> " " ""
R di sini adalah gula untuk perintah Ganti. Tumpukan:
<INPUTWITHOUTSPACES>
Selanjutnya, "NEWLINE" mendorong string yang berisi baris baru, yang bagus karena RProgN tidak menggunakan escapes, itu hanya lurus ke atas memungkinkan Anda mendorong string seperti itu. Tumpukan
<INPUTWOSPACES> "\n"
Kemudian, kami menggunakan `trik lagi, dan Ganti, yang memberikan hasil kami.
sumber
Ruby, 86 byte + 1 bendera = 87 ( retak oleh Dom Hastings )
Membutuhkan bendera baris perintah
-p
.Kode ini sebenarnya valid dalam formulir ini, hanya no-op.
sumber
Beam , 72 byte, Aman!
Sekarang untuk bahasa 2d. Dapat dimainkan dengan di TIO Nexus .
Program yang cukup lurus ke depan tanpa banyak di sana untuk mencoba menipu orang.
sumber
Labirin , 127 byte
Semoga saya melakukan ini dengan benar :) ini adalah entri polisi dan perampok pertama saya.
Kode Asli
sumber
Java, 3241 + 28 Bytes untuk impor bilangan bulat besar
Entri ini semata-mata untuk membuktikan kemungkinan entri yang murni aman secara kriptografis. Saya percaya ini ada dalam aturan, tetapi jika itu bertentangan dengan semangat, beri tahu saya dan saya akan menghapusnya dari keadilan. Saya akan membiarkan "tidak aman" ini tanpa batas waktu sampai saat (dan jika) celah ditemukan. Ini adalah monstrositas dan pasti bisa lebih dioptimalkan, tetapi ini dia.
Karena keadilan bagi para perampok, ini dia dengan semua ruang putih "jelas" yang ditambahkan.
Semoga beruntung, saya akan senang melihat ini retak. Bahkan saya akan melembagakan hadiah tak terbatas untuk ini. Jika suatu saat Anda melakukan crack ini, Anda akan diberikan penghargaan tak terbatas rep 500 rep pada pertukaran stack (serta kemungkinan makalah matematika yang bagus).
sumber
C, 140 byte, dipecahkan oleh Riley
Mari kita mulai dengan yang mudah.
(Saya harap saya melakukan ini dengan benar.)
sumber
Befunge 98, 65 byte, dipecahkan oleh Pietu1998
Program asli
sumber
V , 37 byte Retak oleh nmjcman101
Karena ini memiliki unsintables, inilah versi yang dapat dibaca:
Atau jika Anda lebih suka, hexdump:
sumber
Minkolang v0.15 , 88 byte, Retak!
Cobalah online!
sumber
JavaScript ES6, 380 byte, aman
Ini adalah jenis entri yang awalnya saya rencanakan untuk rilis. Ini sangat besar dan hampir tidak memiliki peluang untuk menang, tetapi saya pikir itu harus cukup kuat secara kriptografi untuk bertahan 7 hari. Sekarang, saya mungkin terbukti salah!
67 byte ruang kosong untuk ditambahkan.
Larutan
Ini adalah implementasi dari Algoritma Enkripsi Tiny Diperpanjang . Kunci yang dikodekan spasi 64-bit memperluas ke kunci 128-bit berikut:
Sumber: Wikipedia
Setelah didekripsi dan dikonversi ke ASCII, blok 64-bit
[x, y]
bertuliskanc3BsaXQ=
, yang merupakan representasi yang dikodekan dari Base64split
.Tampilkan cuplikan kode
sumber
Vitsy , 73 byte, aman
Ini benar-benar jahat.
Semoga berhasil! 13 item ruang kosong untuk ditambahkan.
Kode asli:
Cobalah online!
Ini secara kasar disederhanakan menjadi:
sumber
C #, 159 byte, Retak karena susu
153 runtuh sehingga hanya 6 byte ruang kosong untuk ditemukan, seharusnya tidak terlalu sulit ...
sumber
reticular, 43 byte, retak
Versi TIO sudah usang, tetapi Anda bisa mendapatkan salinannya sendiri dari github .
sumber
Wolfram, 132
Mungkin memiliki lebih dari satu solusi (petunjuk: Mersenne)
Larutan
sumber
Spasi ,
8174 byteVersi yang dapat dibaca manusia:
Saya tahu ini adalah tantangan lama tapi mudah-mudahan seseorang mau mencoba untuk memecahkan ini. Saya mencoba untuk mengoptimalkan bytecount tetapi dimungkinkan untuk membuat sesuatu yang lebih pendek dengan jumlah karakter tab yang sama.
sumber
tcc, 850 byte
Untuk menghindari menempelkan garis yang sangat panjang saya melewati ini melalui tr -d '\ n' | lipat -b -w 60.
sumber
SILOS , 159 byte Aman!
Harus cukup sepele. Ini adalah entri polisi dan perampok pertamaku.
Tidak ada yang menyerangnya, mungkin karena bahasa saya sendiri yang esoteris. Sepertinya cara curang untuk lewat, tetapi itu tidak terlalu penting karena yang lebih pendek aman.
Jangan ragu untuk mencobanya secara online
sumber