Ini adalah tantangan polisi dan perampok . Untuk utas perampok, buka di sini .
Tantangan ini melibatkan dua sekuens OEIS yang dipilih oleh polisi - S 1 , S 2 - dan seberapa baik sekuens-sekuens tersebut dapat di-golf dan dikaburkan.
Tantangan Polisi
Tantangan Anda sebagai polisi adalah memilih bahasa yang tersedia secara bebas , dan dua urutan OEIS. Kemudian, tulis kode A dalam bahasa itu yang mengambil input n dan menghasilkan S 1 (n). Ketika kode yang dimodifikasi oleh jarak Levenshtein dari X karakter (dengan X tidak lebih dari 0.5 * (length A)
), dan berubah menjadi kode B dalam bahasa yang sama, maka harus menghasilkan S 2 (n). Anda harus benar-benar menulis kode B ini , tetapi jangan ungkapkan sampai tantangan Anda aman (lihat di bawah).
Pengajuan polisi harus menyertakan nama bahasa, kode lengkap A , jumlah byte A , nilai X dari berapa banyak perubahan untuk sampai ke kode B rahasia mereka , dan nomor urut S 1 dan S 2 yang dipilih . Anda dapat memilih apakah setiap urutan diindeks 0 atau diindeks 1, tetapi harap tentukan dalam kiriman Anda.
Untuk memecahkan kiriman tertentu, perampok harus membuat program C dalam bahasa yang sama (dan versi) yang menghasilkan S 2 (n) dan perubahan karakter Y menjauh dari A (dengan Y <= X
). Perampok tidak perlu menemukan kode B yang sama persis dengan yang dihasilkan oleh polisi (secara diam-diam).
Menang dan Mencetak Gol
Jika jawaban polisi Anda belum di-crack dalam 7 hari (168 jam), Anda dapat mengungkapkan solusi B Anda sendiri , yang pada saat itu jawaban Anda dianggap aman. Selama Anda tidak mengungkapkan solusi Anda, itu mungkin masih bisa dipecahkan oleh perampok, bahkan jika 7 hari telah berlalu. Jika jawaban Anda retak, harap tunjukkan ini di tajuk jawaban Anda, bersama dengan tautan ke jawaban perampok yang sesuai.
Polisi menang dengan memiliki pengajuan tanpa retak dengan A terpendek . Jika diikat, maka X terkecil akan digunakan sebagai tie-breaker. Jika masih terikat, pengajuan sebelumnya akan menang.
Aturan selanjutnya
- Anda tidak boleh menggunakan built-in apa pun untuk hashing, enkripsi, atau pembuatan nomor acak (bahkan jika Anda menyemai generator nomor acak ke nilai tetap).
- Program atau fungsi diizinkan, tetapi kode tidak boleh berupa cuplikan dan Anda tidak boleh menganggap lingkungan REPL.
- Anda dapat mengambil input dan memberikan output dalam format apa pun yang nyaman . Metode input / output harus sama untuk kedua urutan.
- Kalkulator pasti untuk jarak Levenshtein untuk tantangan ini adalah kalkulator yang ada di Planet Calc.
- Selain menjadi tantangan CnR, ini adalah kode-golf sehingga semua aturan golf biasa berlaku.
sumber
(0.5*len(A))
Jawaban:
Brain-Flak , 28 byte, Jarak 4, A002817 , A090809RetakJawaban ini menggunakan pengindeksan 1
Cobalah online
Bagi siapa pun yang tertarik ada 27475 program Brain-Flak yang valid dengan Levenshtein jarak 4 dari program ini dan 27707 dengan jarak 4 atau kurang. Jadi solusi brute force akan layak pada komputer kelas konsumen.
sumber
X = 4
bukanLevenshtein distance of 4
.X
benar-benar satu-satunya variabel yang perlu mereka ketahui.7 , 33 karakter, 13 byte, X = 10, A000124 → A000142 , Aman
Cobalah online!
Jarak Levenshtein diukur berdasarkan karakter, jadi saya telah menulis program berdasarkan karakter yang dikandungnya di atas (dan Coba online !, termasuk bahasa itu sendiri, senang menjalankan program yang disandikan dalam ASCII). Namun, program disimpan dalam disk menggunakan 7's sub-byte encoding, yang berarti bahwa program itu sendiri sebenarnya adalah hexdump berikut (panjangnya 13 byte):
(Karena jarak Levenshtein diukur berdasarkan karakter, Anda tidak perlu menambahkan / menghapus / mengubah 10 byte di sini, jadi mungkin yang terbaik untuk bekerja dengan ASCII asli.)
Program seperti yang tertulis mengimplementasikan A000124 (angka segitiga + 1); setiap celah harus menerapkan A000142 (faktorial). Kedua program mengambil input dari stdin (sebagai bilangan bulat desimal), menulis outputnya ke stdout, dan memperlakukan input 1 sebagai makna elemen pertama dari urutan (dan input 2 sebagai elemen kedua, dll.).
Mudah-mudahan nilai X yang sangat tinggi akan menghentikan orang-orang yang memaksa program, kali ini (yang selalu berisiko dengan entri polisi dan perampok di 7).
Solusinya
Cobalah online!
Perbedaan dari aslinya:
Saya tidak memiliki penjelasan yang disiapkan untuk bagaimana ini bekerja, jadi saya perlu beberapa saat untuk mendapatkan penjelasan, karena saya harus mencari tahu dari awal. Semoga nantinya ada penjelasan.
sumber
Pyke, Levenshtein jarak 1, A036487 , A135628 .
Retak!
Coba di sini!
sumber
Perl 6 , 10 byte, X = 1, A000012 → A001477
Retak!
S 1 = A000012 =
1,1,1,1,1,...
= Urutan semua 1. (Diindeks 0)S 2 = A001477 =
0,1,2,3,4,...
= Bilangan bulat tidak negatif. (Diindeks 0)Cobalah online!
Dikonfirmasi untuk bekerja dengan rilis Perl 6 2017.01 , dan dengan versi Perl6 berjalan di TIO.
( A bisa lebih jauh di-golf ke
1***
- Saya harap itu juga diizinkan seperti itu.)sumber
Perl 6 , 13 byte, X = 1, A161680 → A000217
Aman!
0 0 1 3 6 10 15 21...
= Nol diikuti oleh angka segitiga.0 1 3 6 10 15 21 28 ...
= Angka segitiga.Cobalah online!
(Dikonfirmasi untuk bekerja dengan versi Perl 6 yang berjalan pada TIO.)
Larutan
Cara kerja aslinya:
Bagaimana solusinya bekerja:
Mengeksploitasi fakta bahwa operator numerik seperti penambahan memperlakukan daftar sebagai jumlah elemennya, jadi dalam contoh jumlahnya
1 + 2 + 3 + 4 = 10
.Dan ya, "Mengurangi dengan koma operator" no-op dalam aslinya agak menyimpang dari aturan kode-golf, tapi saya lebih suka melihatnya sebagai algoritma konyol yang telah golf sebanyak mungkin (spasi putih dll) untuk apa itu... :)
sumber
Jelly , 11 byte, X = 5, A005185 → A116881
Ini adalah program lengkap yang menggunakan integer sebagai argumen baris perintah dan mencetak integer.
Kedua sekuens diindeks seperti pada OEIS, yaitu, A005185 adalah 1-diindeks dan A116881 adalah 0-diindeks.
Cobalah online!
sumber
Javascript, 41 byte, Jarak 3, A061313 , A004526 , Retak
Cobalah secara Online
Menggunakan pengindeksan berbasis 1, solusi menggunakan pengindeksan berbasis 0.
Sekali lagi, solusi berbeda ...
sumber
Perl 6 , 19 byte, X = 1, A000045 → A000035
Retak!
0 1 1 2 3 5 8 13 21 34...
= "Angka-angka Fibonacci". ( Diindeks 0 )0 1 0 1 0 1 0 1 0 1...
= "Periode 2". ( Diindeks 0 )Cobalah online!
(Dikonfirmasi untuk bekerja dengan versi Perl 6 yang berjalan pada TIO.)
sumber
WolframAlpha, 18 byte, X = 1Retak oleh math_junkie!
Terkadang WolframAlpha benar-benar dapat menampilkan fungsi murni seperti ini dalam bentuk fungsional (di lain waktu ia menjadi bingung); tapi itu bisa digunakan dengan riang dengan masukan yang diberikan — misalnya,
(sum1to#of n^1)*2&@5
hasil30
.S1 = A002378 (angka pronik)
S2 = A000537 (jumlah
n
kubus pertama )Kedua sekuens diindeks 0.
sumber
Pyke, Levenshtein jarak 2, A008788 , A007526
Retak!
Coba di sini!
Mari kita sedikit lebih keras, bukan?
Jawaban pertama adalah berbasis 1 dan crack berdasarkan 0.
sumber
Javascript, 15704 byte, jarak 2, A059841 dan A000004 - retak
Solusi ini sangat panjang, sehingga Anda dapat menemukan kode lengkap di github gist ini.
Jawaban asli (yang ini) adalah 1 yang diindeks. (Saya tahu ini terlalu lama, itu hanya untuk bersenang-senang.)
sumber
Brain-Flak , 16 byte, jarak Levenshtein dari 4, A000217 dan A002378 - Dipecahkan oleh Martin Ender!
Cobalah online!
Ini seharusnya cukup mudah retak.
sumber
Javascript, 30 byte, Jarak dari 4, A000290 , A000079 , - Cracked!
Pengindeksan berbasis 0
Solusi @Kritixi Lithos sebenarnya berbeda dari milik saya
Cobalah online
sumber
x**2
dan bukan2**x
Javascript (ES6), jarak 1, A000079 dan A000004 - retak
Jawaban asli (yang ini) adalah berbasis 0. Sekarang sudah retak, berikut adalah fungsi B asli:
sumber
Perl 6 , 7 byte, X = 2, A059841 → A001477
Retak!
1 0 1 0 1 0 1 0...
= "* Periode 2: Ulangi (1,0)". (Diindeks 0)0 1 2 3 4 5 6 7...
= "Bilangan bulat negatif". (Diindeks 0)Cobalah online!
(Dikonfirmasi untuk bekerja dengan versi Perl 6 yang berjalan pada TIO.)
sumber
Java 7, Levenshtein jarak 4, A094683 , A000290 , Cracked
Diindeks 0.
Coba di sini!
sumber