Ini adalah bagian dari tantangan polisi dan perampok . Buka di sini untuk bagian polisi.
Tantangan Perampok
Jawaban polisi dapat di-crack dengan menghapus subset karakter apa pun dari program Haystack, sehingga hasilnya dikeluarkan Needle
alih-alih Haystack
(sementara masih menjadi pengiriman yang valid dalam bahasa yang sama). Anda tidak harus menemukan solusi yang sama persis seperti yang dimaksudkan oleh polisi, asalkan milik Anda valid oleh kendala di atas.
Jika Anda mengelola ini, posting jawaban dengan solusi, tautkan ke jawaban polisi, dan tinggalkan komentar pada jawaban polisi yang menghubungkan kembali ke jawaban Anda.
Perampok yang memecahkan sebagian besar jawaban polisi menang. Ikatan rusak oleh jumlah ukuran jawaban polisi yang retak (mendukung perampok yang retak pengiriman lagi).
Setiap jawaban polisi hanya dapat di-crack satu kali, dan tentu saja, Anda tidak diizinkan untuk memecahkan jawaban Anda sendiri. Jika jawaban polisi ternyata tidak valid sebelum atau setelah retak, itu tidak dihitung terhadap skor perampok.
Contohnya
Berikut adalah beberapa contoh sederhana dalam berbagai bahasa:
Ruby
Haystack: puts 1>0?"Haystack":"Needle"
Delete: XXXXXXXXXXXXXXX
Needle: puts "Needle"
Python 2
Haystack: print "kcatsyaHeldeeN"[-7::-1]
Delete: XXXXXXXX XX
Needle: print "eldeeN"[::-1]
Perhatikan bahwa subset karakter yang dihapus tidak harus bersebelahan.
sumber
hashing, encryption or random number generation
diizinkan? (Meskipun kemungkinan kecil)Jawaban:
JavaScript, 85 byte (ES6)
Retak jawaban Arnauld
Demo "Needle"
Tampilkan cuplikan kode
Penjelasan
Fungsi aslinya adalah:
yang lebih mudah dibaca sebagai:
Perhatikan bahwa ketika
n=21625674
, makan.toString(35)
adalah'eedle'
.35 dalam input mungkin tidak dapat diubah menjadi subset (karena kami ingin basis yang cukup besar untuk memuat semua huruf 'del', jadi kami membutuhkan basis yang setidaknya 22). Jadi angka-angka untuk mengubah adalah
74837258394056219
,268435455
, dan124038877
. Kami ingin menggantinya dengan angka a, b, c, masing-masing dibentuk dengan subset digit angka asli, sehingga fungsinyag(k) = (k * a & b)
, dimulai dengank=35
dan diulang 35 kali, dan kemudian XOR dengan c, memberi21625674
.Untuk yang satu ini, setelah berpikir sedikit, karena panjang kecil (maksimal yang
a
memiliki panjang 17,b
danc
memiliki panjang 9), saya hanya menggunakan brute-force :-) Menulis C ++ Program untuk menghasilkan semua nomor mungkina
,b
,c
dibentuk sebagai subset nomor asli, beralih melalui semuaa
danb
, dan periksa apakah yang diperlukanc
ada di set. Berjalan di sekitar 15 detik, dan satu-satunya outputa=4853461
,b=268435455
,c=12408877
(bergantian keluar nomorb
tidak perlu diubah). Saya tidak yakin apakah ada cara yang lebih pintar untuk membalikkan fungsi ini.sumber
Tumpukan jerami , 82 byte
Retak HyperNeutrino ini Jawaban
Cobalah online!
sumber
0
di awal: P Senang melihat pendekatan lain sekalipun! +1Brain-Flak , 96 byte
Retak jawaban Funky Computer Man .
Cobalah online!
Ini adalah tantangan yang menyenangkan.
The -24 pada awal yang bertobat
y
kea
dalam bahasa aslinya sekarang digunakan untuk mengkonversie
keM
, yang kemudian diubah keN
dalam tempat dengan mengubah seluruh akhir loop untuk())
. Huruf push pertamak
diubah menjadie
hanya dengan menghapus push-pop yang menambahkan 6 ke dalamnya. Sisanya sebagian besar hanya jatuh pada tempatnya, dengan beberapa langkah keliru lucu di sepanjang jalan (termasuk satu program yang outputnyaMeddle
).Perbandingan kedua program:
sumber
N
itu 77 bukannya 78, jadi saya tidak menangkapnya.Haskell
Retak @ jawaban Laikoni ini .
Cobalah online!
Kode asli:
mengganti karakter yang dihapus dengan garis bawah:
Bagaimana
Needle
dikonstruksi: string di akhir kode dipecah menjadi kata-kata. Karakter pertama dari setiap kata bertambah beberapa kali karena ada karakter dalam kata tersebut, misalnyaHaysta
->H
ditambah 6 karakter ->N
.sumber
Hexagony , 17 byte, H.PWiz
Cobalah online!
Perbandingan dengan yang asli:
Visualisasi:
Penjelasan
Tanda bonus - menggunakan semua 6 IP dan semua kecuali satu dari sel!
IP # 0 dimulai dengan menuju ke kanan di sepanjang jalur hitam ke
]
.Kami kemudian beralih ke IP # 1, yang mengarah di sepanjang jalur merah, mencetak
N
denganN;
kemudian membungkus kembali ke jalur]
lagi.Kami kemudian transisi ke IP # 2, yang kepala sepanjang jalur biru, menyimpan
e
dalam sel memori saat ini, maka sepanjang jalan hijau, mengeksekusi (dengan refleksi di\
);;(;
yang cetakanee
, decrements sel memori darie
ked
cetakan kemudiand
.IP melanjutkan sepanjang jalur oranye, mengeksekusi
Nl;se
yang mencetakl
, dan menyimpane
dalam sel memori saat ini. Terus sepanjang jalur coklat, mencetake
dengan;
. Pada titik ini kita sudah mencetakNeedle
, jadi sisanya baru selesai. IP menyimpanc
, lalu klik]
. Kami kemudian beralih ke IP # 3, yang mengarah di sepanjang jalur biru, memukul , memantul ke mana memantul ke dalam . Kami kemudian beralih ke IP # 4, yang mengarah di sepanjang jalur hijau, memantul , lalu bercabang ke (karena positif). Akhirnya, kami beralih ke IP # 5, yang kemudian disimpan dengan toko .\
_
]
_
\
]
c
e
@
sumber
Python 2 , 123 byte
Jawaban Agtoever retak
repl.it
Perbandingan:
Saya memiliki banyak kesenangan menemukan solusi yang dicetak
Meedle
danNeedlf
dengan memasang polinomial ke median indeks simbol-simbol numpy yang dimulai dengan masing-masing huruf dalamNeedle
. Saya kemudian mencoba untuk menemukan koefisien yang sama dengan himpunan bagian dari program asli dengan tangan, tetapi saya akhirnya harus terpaksa memaksa memaksa satu untuk menemukan solusi yang valid.sumber
Javascript, 91 byte
Pecahkan ini . Sebenarnya menyenangkan.
Tampilkan cuplikan kode
sumber
Jelly , 14 byte
Jawaban Crack Jonathan Allan
Cobalah online!
Perbandingan:
Saya dulu
œc
beralih melalui berbagai himpunan bagian dari string literal, digunakantr -d
untuk setiap filter yang mungkin, dangrep
ed untuk Needle. Menggunakan asumsi bahwa tidak ada karakter yang digunakan dalam string pertama yang digunakan dalam jawaban, biarkan ia menemukan jawaban dalam waktu kurang dari 15 detik.sumber
Nebbed
+ruble
tanpa salahrub
.Python 2 , 73 byte
Retak Jawaban user71546 .
Cobalah online!
Dipecahkan dengan program ini .
sumber
Java (OpenJDK 8), 191 byte
Retak jawaban Luke Steven
Cobalah online!
Karakter yang dihapus:
Ini membuat
d
evaluasi ke078101101100108101
, yang mengejaNeedle
.sumber
Ruby , 149 byte
Retak ini: /codegolf//a/144790/74216
Modulnya cukup kecil, jadi saya menulis ulang tahun multi-threaded dan berharap yang terbaik.
Sunting: Dan setelah itu menemukan jawaban yang bahkan lebih pendek.
Cobalah online!
Perubahan:
sumber
dc , 34 byte
Pecahkan ini . TIO .
Saya mulai dengan mendapatkan representasi numerik dari Haystack (5215583380252484459) dan Needle (86197399743589). Selanjutnya, saya melakukan factorisation yang terakhir, yaitu 47 * 432323 * 4242169. Dari sini, cukup mudah untuk merekonstruksi angka-angka itu.
Menandai karakter yang digunakan:
sumber
Hexagony , 19 byte, Martin Ender
Cobalah online!
Perbandingan dengan aslinya
Kode dibuka
Jadi, saya tidak pernah menulis apa pun di Hexagony, tapi saya pikir hanya dengan 37 byte yang bisa saya dapatkan dengan crack. Martin, kuharap kau tahu, aku meluangkan banyak waktu untuk mencari tahu ini. :)
Saya mungkin salah, tetapi saya akan menjelaskan apa yang saya pikir kode ini lakukan:
Program dimulai dengan
[
, yang secara otomatis beralih ke IP # 5. IP ini dimulai di sudut barat, menuju[
sekali lagi, yang memindahkannya ke IP # 4. Dari sini, ia mengeksekusiN;e
kemudian menuju ke sudut tenggara dan mengeksekusi;
, memantul ke kanan untuk yang lain;
kemudian membungkus(
yang mengurangi aruse
ke ad
. Kemudian berlanjut (dengan bungkus) untuk...;.
kemudian memantul kel
dan sampai ke yang[
terakhir kalinya, pindah ke IP # 3. Ini dijalankan;
,>
dialihkan ke barat laut untuk.
kemudian<
dialihkan ke barat, memukule
, membungkus;
, dan berakhir di@
.Versi verbal
Tampilkan cuplikan kode
Saya sangat senang bahwa Anda menggunakan ukuran segi enam normal untuk program Needle; Saya sedang memeriksa program ukuran 19 (untuk segi enam sisi panjang-3) ketika saya menyadari Anda dapat menghapus sejumlah karakter dan itu akan secara otomatis mengisi segi enam dengan
.
s pada akhirnya, yang akan membuatnya secara dramatis lebih sulit untuk dipecahkan. Karena itu, Hexagony adalah bahasa jahat untuk tantangan ini karena (sebagian besar) karakter apa pun yang dihapus mengubah keseluruhan jalur eksekusi program. Yang sedang berkata, saya menikmati mencoba untuk datang dengan ini, bahkan jika saya akhirnya benar-benar memaksanya pada akhirnya. :)sumber
Java (OpenJDK 8) , 151 byte
Cracks Jawaban Kevin Cruijssen
Cobalah online!
Perbandingan:
Saya merasa bagian terakhir tidak dimaksudkan.
sumber
v->{String h="Haystack";int x=7;return new String(new java.math.BigInteger(new byte[]{(byte)((~-~-~-~-~-~-~-~1^-x++*x)+15),new Byte(""+10+((x=h.length()*4/x)+x-7))}).toByteArray())+(new StringBuffer("hidden".substring(++x%3,x).replaceFirst("d","e"+(char)(x*21+3))).reverse());}
(tidak tahu mengapa saya memasukkan BigInteger karena hanya byte-array sudah cukup ..) , tapi aku lebih suka milikmu lebih baik .. :)Brain-Flak , 102 byte
Retak jawaban H.PWiz ini .
Cobalah online!
sumber
Ly , 21 byte
Cobalah online!
Retak jawaban LyricLy .
sumber
Java oleh Johnathan S.
TiO
Cukup lepaskan loop yang menambahkan Hay dan tidak ada yang tersisa di tumpukan kecuali jarum.
sumber
equals
metode juga berfungsi.Pyth , 21 byte
retak ini .
Cobalah online!
sumber
T-SQL oleh phroureo , 757 byte
Entah bagaimana saya tidak berpikir itu adalah solusi yang dimaksudkan. Menggunakan karakter yang dikelilingi oleh
{}
:sumber
PHP
Retak Titus menjawab
Cobalah online
sumber