Dalam sebuah kecelakaan yang sangat tidak biasa yang melibatkan sampel kecil radium, paus tersengat listrik, dan tiga beruang bergetah, beberapa kode sumber The Management ™ telah dimutasi. Atasan The Management ™ tidak tahu, sebenarnya para Polisilah yang bertanggung jawab, dalam upaya untuk menggagalkan rencana "jahat" Manajemen. Jadi Robbers® telah dipekerjakan dalam upaya untuk mengambil kode asli, karena siapa yang terkadang tidak suka menjadi jahat?
catatan: Tantangan ini sangat terinspirasi oleh Unscramble the Source Code .
Deskripsi
Ini adalah tantangan polisi dan perampok .
- The polisi akan menulis sebuah program (kode bermutasi) yang melakukan tugas # 1 (dan juga menulis sebuah program yang melakukan tugas # 2, tapi dirahasiakan).
- The perampok akan mencoba untuk membalikkan "mutasi" dan mengubah kode asli ini ke kode yang melakukan tugas # 2.
Dalam tantangan ini, Tugas # 1 akan menampilkan n
bilangan prima th , dan Tugas # 2 akan menampilkan n
bilangan Fibonacci th (yang entah bagaimana jahat, menurut Cops © pula). Urutan Fibonacci didefinisikan sebagai ( n=1
→ 1
; n=2
→ 1
; n=3
→ 2
;;)), dan bilangan prima didefinisikan sebagai ( n=1
→ 2
; n=2
→ 3
; n=3
→ 5
; → ) ...
Tujuan polisi adalah untuk meminimalkan perbedaan antara program yang menyelesaikan Tugas # 1 dan Tugas # 2, sekaligus mencegah para perampok menciptakan kembali kode yang menyelesaikan Tugas # 2.
Aturan Cop
Polisi akan menulis dua program (satu yang menyelesaikan Tugas # 1, dan satu yang menyelesaikan Tugas # 2), dan menjadikan informasi berikut ini publik:
- Program pertama (yang menampilkan
n
bilangan prima th) - The Levenshtein mengedit jarak antara program pertama dan program kedua
- Bahasa pemrograman tempat kedua program ditulis (harus bahasa yang sama untuk kedua program)
Batasan berikut berlaku untuk kedua program:
- Panjangnya harus 128 karakter atau kurang.
- Mereka hanya harus menggunakan ASCII yang dapat dicetak (ditambah baris baru, yang juga diperbolehkan).
- Mereka harus berjalan kurang dari 10 detik
n=45
, dan mereka tidak diharuskan untuk menghasilkan output yang benar untuk apa punn>45
. - Mereka tidak boleh menggunakan fungsi hashing atau kriptografi.
Aturan Perampok
Perampok akan berusaha mengubah program polisi (yang menyelesaikan Tugas # 1) menjadi program yang menyelesaikan Tugas # 2 (tidak harus program asli yang ditulis oleh polisi) dalam jarak sunting yang ditentukan oleh polisi.
Pengajuan yang sudah-retak tidak bisa dipecahkan lagi (hanya perampok pertama yang memecahkan kiriman yang mendapat kredit).
Setelah memecahkan kiriman, silakan lakukan hal berikut:
- Posting jawaban untuk pertanyaan yang menyertai tantangan ini (tautan) , berikan bahasa, solusi Anda, dan tautan ke jawaban asli.
- Tinggalkan komentar dengan teks "Retak" yang menautkan ke jawaban Anda yang diposting.
- Edit jawaban polisi jika Anda memiliki hak istimewa edit (jika tidak, tunggu sampai orang lain dengan hak istimewa yang diperlukan melakukannya untuk Anda atau menyarankan edit).
Mencetak gol
Jika program polisi tetap tidak terpecahkan selama 1 minggu, polisi dapat memposting kode asli yang menyelesaikan Tugas # 2 (dalam jarak edit yang ditentukan), dan pengiriman sejak saat itu dianggap "aman." Pengiriman aman yang memiliki jarak pengeditan terkecil akan menang. Dalam hal seri, program terpendek (asli yang menyelesaikan Tugas # 1) menang. Jika dua pengiriman masih terikat, satu yang diposting sebelumnya menang.
Jika seorang perampok berhasil memecahkan kiriman polisi, skor perampok naik oleh jarak pengeditan kiriman itu. Misalnya, seorang perampok yang memecahkan kiriman dengan jarak sunting 3 dan satu dengan jarak 5 menghasilkan 8 poin. Perampok dengan skor tertinggi menang. Dalam hal seri, perampok yang mendapatkan skor pertama menang.
Papan peringkat
Alat kecil untuk menghitung jarak Levenshtein
sumber
Jawaban:
Python 2, jarak = 8 [ retak ]
Akhirnya punya yang satu ini di bawah batas char. Seharusnya tidak terlalu sulit, tetapi saya pikir idenya menarik.
Solusi yang dimaksudkan:
Idenya adalah untuk menggunakan itu
F(n+2) = 1 + (sum over F(k) from k = 1 to n)
, dan fakta bahwa angka Fibonacci berturut-turut adalah coprime. The1
dalam mengurangi argumen seharusnya memberikan+1
.Sepertinya feersum menemukan garis serangan yang berbeda!
sumber
J, distance = 5 [ Cracked ]
Pemakaian:
sumber
Ruby, jarak 6 [aman]
Membuat pasangan rumus dengan jarak edit pendek itu menyenangkan, tetapi sepertinya pendekatan ini mungkin lebih efektif / menyebalkan. Anda mungkin mengerti persis apa yang saya lakukan, tetapi itu tidak berarti Anda bisa membalikkannya.
Larutan:
Penjelasan:
sumber
e
bawah sana ketika melakukan kekerasan. Solusi yang sangat licik. :)Python 2 - LD = 13 Retak
Yang bagus, mudah (mudah-mudahan tidak terlalu mudah) untuk memulai segalanya :)
Sepertinya itu terlalu mudah;) Saya merasa agak konyol karena saya lupa Anda dapat menggunakan komentar: /
sumber
Haskell, jarak = 13
Ini bisa lebih mudah dibaca, tetapi
import
memakan terlalu banyak byte, jadi saya harus sedikit golf.sumber
Ruby, jarak 14 ( Retak )
sumber
CJam, jarak 10 (Cracked)
Cukup pakai
n
STDIN. Uji di sini.Untuk referensi, solusi asli menggunakan yang langka
j
.Asli:
sumber
J, jarak = 4 [aman]
Larutan:
Metode:
sumber
Python 3, jarak = 14 [ retak ]
Saya punya beberapa karakter cadangan jadi saya menaruh beberapa spasi kosong untuk kejelasan :)
sumber
JAGL Alpha 1.2 - Distance = 16 [ Cracked ]
Seharusnya tidak terlalu sulit, Kita akan melihat apa yang terjadi ...
sumber
TI-BASIC , jarak 38
>
mewakiliSTO→
kunci dan$
mewakili simbol akar kuadrat.sumber
Python 2 - distance = 12 [ Cracked ]
Saya agak senang dengan bagaimana ini terjadi.
Mari kita lihat berapa lama ... Saya menganggap itu masih akan retak.
Sunting: kode singkat sedikit, tidak berpengaruh pada operasi / jarak.
Solusi yang dimaksudkan
Saya mencoba untuk pergi tanpa perubahan komentar atau baris baru.
sumber
Python 3 - Distance = 14 [ Cracked ]
Kami akan melihat berapa lama ini berlangsung ...
sumber