Ubah Kode, Ubah Urutan: Polisi

27

Ini adalah tantangan . 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 sehingga semua aturan golf biasa berlaku.
AdmBorkBork
sumber
Juga, pastikan jika Anda mengubah sesuatu dalam pertanyaan ini, Anda memperbarui perampok itu.
mbomb007
Bagaimana jika seorang polisi menyebutkan fungsi / variabel yang sangat besar sehubungan dengan kode aktual yang menghasilkan urutan? Akan dimungkinkan untuk membuat urutan apa pun dalam hal ini dengan jarak lev yang kurang dari itu(0.5*len(A))
hashcode55
@ hashcode55 Dua hal - 1) yang sepertinya tidak akan menjadi kandidat yang baik untuk memenangkan utas polisi. 2) jika sangat besar seperti itu, itu juga memberikan kelonggaran yang baik bagi perampok untuk memecahkannya.
AdmBorkBork
1
" ini kode-golf sehingga semua aturan golf biasa berlaku " Apakah ini berarti bahwa kode A harus golf sebanyak mungkin, atau bisakah itu sengaja dituliskan dengan cara yang terlalu verbose / canggung untuk membuatnya lebih mirip dengan kode B ?
smls

Jawaban:

10

Brain-Flak , 28 byte, Jarak 4, A002817 , A090809 Retak

Jawaban 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.

Wisaya Gandum
sumber
Ini mungkin akan lebih pendek dan lebih cepat untuk membaca jika Anda memiliki X = 4bukan Levenshtein distance of 4.
mbomb007
1
@ mbomb007 Saya pribadi agak bingung ketika tantangan menggunakan banyak variabel huruf untuk mendukung hal-hal yang saya coba hindari kebingungan. Saya telah membuatnya lebih pendek sekarang, semoga tanpa menimbulkan kebingungan.
Wheat Wizard
mengangkat bahu . Jika semua orang membaca pertanyaan, mereka harus mendapatkannya. Xbenar-benar satu-satunya variabel yang perlu mereka ketahui.
mbomb007
@ mbomb007 Meskipun, pertanyaannya juga meminta hitungan byte.
DLosc
1
Retak!
DJMcMayhem
6

7 , 33 karakter, 13 byte, X = 10, A000124A000142 , Aman

171720514057071616777023671335133

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):

00000000: 3cf4 2982 f1ce 3bfe 13dc b74b 7f         <.)...;....K.

(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

177172051772664057074056167770236713351353

Cobalah online!

Perbedaan dari aslinya:

17 172051 405707 1 61677702367133513 3
17 7 172051 77266 405707 405 61677702367133513 5 3

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
4

Perl 6 , 10 byte, X = 1, A000012A001477

Retak!

*[0]o 1***
  • 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.)

seseorang
sumber
3

Perl 6 , 13 byte, X = 1, A161680A000217

Aman!

{[+] [,] ^$_}
  • S 1 = A161680 = 0 0 1 3 6 10 15 21...= Nol diikuti oleh angka segitiga.
  • S 2 = A000217 = 0 1 3 6 10 15 21 28 ...= Angka segitiga.
  • Diindeks nol.

Cobalah online!

(Dikonfirmasi untuk bekerja dengan versi Perl 6 yang berjalan pada TIO.)

Larutan

{[+] [\,] ^$_}

Cara kerja aslinya:

{           }  # A lambda.
          $_   # Lambda argument.                     e.g. 4
         ^     # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [,]       # Reduce with comma operator.          e.g. 0, 1, 2, 3
 [+]           # Reduce with addition operator.       e.g. 6

Bagaimana solusinya bekerja:

{            } # A lambda.
           $_  # Lambda argument.                     e.g. 4
          ^    # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [\,]      # Triangle reduce with comma operator. e.g. (0), (0,1), (0,1,2), (0,1,2,3)
 [+]           # Reduce with addition operator.       e.g. 10

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... :)

seseorang
sumber
Ini memohon untuk dipaksa, jika saya punya waktu atau kecenderungan (dan pengetahuan tentang perl).
Rohan Jhunjhunwala
Ini telah bertahan cukup lama untuk ditandai sebagai aman
fəˈnɛtɪk
2

Jelly , 11 byte, X = 5, A005185A116881

ịḣ2S;
1Ç¡ḊḢ

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!

Dennis
sumber
2

Javascript, 41 byte, Jarak 3, A061313 , A004526 , Retak

f=x=>{return x>1?x%2?f(x+1)+1:f(x/2)+1:0}

Cobalah secara Online

Menggunakan pengindeksan berbasis 1, solusi menggunakan pengindeksan berbasis 0.

Sekali lagi, solusi berbeda ...

f=x=>{return x>1?x<2?f(x-1)+1:f(x-2)+1:0}
fəˈnɛtɪk
sumber
Retak.
Dennis
3
By the way, Anda tidak harus menggunakan permalink tio.run . Mereka akan segera berhenti bekerja.
Dennis
^ Sebagai gantinya, gunakan tio.run/nexus .
mbomb007
1

Perl 6 , 19 byte, X = 1, A000045A000035

Retak!

{(0,1,*+*...*)[$_]}
  • S 1 = A000045 = 0 1 1 2 3 5 8 13 21 34...= "Angka-angka Fibonacci". ( Diindeks 0 )
  • S 2 = A000035 = 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.)

seseorang
sumber
Retak.
Dennis
1

WolframAlpha, 18 byte, X = 1

Retak oleh math_junkie!

(sum1to#of n^1)*2&

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&@5hasil 30.

S1 = A002378 (angka pronik)

S2 = A000537 (jumlah nkubus pertama )

Kedua sekuens diindeks 0.

Greg Martin
sumber
Retak!
pecandu matematika
1

Pyke, Levenshtein jarak 2, A008788 , A007526

Retak!

'th^

Coba di sini!

Mari kita sedikit lebih keras, bukan?

Jawaban pertama adalah berbasis 1 dan crack berdasarkan 0.

Biru
sumber
Retak.
Dennis
1

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.)

Komunitas
sumber
Retak . Juga, menambahkan kode yang benar-benar tidak berguna! + [] - (! + []) Tidak benar-benar sesuai semangat aturan
fəˈnɛtɪk
Asal tahu saja, jawaban ini menyebabkan beberapa masalah bagi OP tantangan ini. Rupanya itu menyebabkan seluruh halaman diblokir karena terlihat seperti JavaScript yang samar. Bisakah Anda memasukkan kode ke tautan eksternal? (Intisari, pastedump, dll)
DJMcMayhem
Sebenarnya, saya sendiri sudah memasukkan intinya. Jika Anda lebih suka memiliki kode di tempat lain, silakan mengeditnya lagi jika saya telah melampaui batas saya.
DJMcMayhem
Saya kira! + [] - (! + []) Membuatnya sehingga Anda tidak bisa membalikkan konversi. Tetapi beberapa sampah lainnya hanya membuatnya lebih lama. Kode yang setara hanya 15640 byte.
fəˈnɛtɪk
0

Javascript, 30 byte, Jarak dari 4, A000290 , A000079 , - Cracked!

f=x=>{return x?2*x-1+f(x-1):0}

Pengindeksan berbasis 0

Solusi @Kritixi Lithos sebenarnya berbeda dari milik saya

f=x=>{return x?f(x-1)+f(x-1):1}

Cobalah online

fəˈnɛtɪk
sumber
1
Ini x**2dan bukan2**x
Kritixi Lithos
Saya pikir ini A000290 , bukan A000079.
betseg
@ KritixiLithos seharusnya keduanya. Saya mengubah tautan urutan yang salah di atas ketika saya mengubah ujung lainnya.
fəˈnɛtɪk
Cracked
Kritixi Lithos
0

Javascript (ES6), jarak 1, A000079 dan A000004 - retak

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

Jawaban asli (yang ini) adalah berbasis 0. Sekarang sudah retak, berikut adalah fungsi B asli:

as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}
Komunitas
sumber
1
Saya bisa mendapatkan crack codegolf.stackexchange.com/a/109976/64505 saya untuk berperilaku tidak konsisten antara dua lingkungan yang berbeda.
fəˈnɛtɪk
0

Java 7, Levenshtein jarak 4, A094683 , A000290 , Cracked

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

Diindeks 0.
Coba di sini!

Peech
sumber
@LliwTelracs melakukan itu untuk 15 bilangan bulat non-negatif pertama, lihat jawaban saya yang diperbarui.
peech
Cracked
fəˈnɛtɪk