Riffle mengacak string - Polisi


8

Perampok pos

Sebuah mengocok riffle adalah cara mengocok kartu di mana dek dibagi menjadi 2 bagian kira-kira sama dan bagian yang riffled satu sama lain dalam kelompok-kelompok kecil. Ini adalah cara mengacak-acak sebuah string:

  • Pisahkan string menjadi bagian yang sama.
  • Balikkan string, dan mulai dari awal setiap string.
  • Masukkan run dengan panjang acak seragam antara 1 dan jumlah karakter yang tersisa di string saat ini ke string terakhir
  • Kemudian hapus karakter ini dari string.
  • Ulangi untuk separuh lainnya, sampai kedua bagiannya kosong.

Sebuah contoh

"Hello World!"      Output string = ""
"Hello ", "World!"  ""
"Hell", "World!"    " o"
"Hell", "World"     " o!"
"Hel", "World"      " o!l"
"Hel", "Wo"         " o!ldlr"
"H", "Wo"           " o!ldlrle"
"H", ""             " o!ldlrleoW"
"", ""              " o!ldlrleoWH"

Produk akhir dari Hello World!dapat o!ldlrleoWHdan itulah yang akan Anda hasilkan.

Polisi

Tugas Anda adalah membuat program (atau fungsi) yang akan mengacak-acak string. Jika string yang dimasukkan memiliki panjang ganjil, cukup bagi menjadi dua dawai panjang tidak rata dengan panjang relatif dari +1dan +0( abc => [ab, c] or [a, bc]). Anda dapat mengambil input dalam mode normal dan menghasilkan output dalam mode normal.

Pengajuan Polisi Anda akan terdiri dari 4 hal

  • Bahasa yang Anda gunakan
  • Panjang program Anda dalam byte
  • Program Anda, riffle shuffled.
  • Ada lagi yang ingin Anda tambahkan

Anda bertujuan untuk menjaga kode Anda agar tidak diretas oleh Perampok selama 7 hari. Setelah periode itu, program Anda aman dan Anda harus mengedit di program asli Anda. Kiriman Anda mungkin masih retak sampai Anda mengungkapkan solusi Anda. Solusi terpendek dan aman akan menjadi pemenang!



Perubahan menjadi acak seragam membuat saya naga sedih. Saya senang membuat entri menggunakan Wald Distribution (invers gaussian). Saya ingin mempostingnya.
Draco18s tidak lagi mempercayai

Jawaban:


2

Jelly, 11 byte, Retak

Ini adalah versi golf sehingga seseorang mungkin dapat memecahkannya dengan mudah hanya dengan membuat versi golf. Mungkin ada beberapa pendekatan berbeda tetapi saya menduga pendekatan ini akan cukup umum dengan bahasa golf.

Ṗ/Œż€X€U2sœ

Hash SHA-384 dari program yang saya maksudkan adalah 86025a659b3c5fc38e943f72b1f26e28e2e751a7118a589073f1d24fa61ff6b02753d6a0f3f0c7fee6555de69fd06a74(menggunakan pengkodean UTF-8).



@ fireflame241 pekerjaan bagus +1
HyperNeutrino

2

> <> , 46 byte

 }lr]l:l~\r[-r}x>o?
<!l>x![; ?=\?(0:2i
:,2-%2:

Hampir tidak ada kebingungan dalam kode asli, tapi saya kira bahasa 2D akan cukup sulit untuk dipecahkan.

Penafian: Ditulis sebelum ditetapkan bahwa itu harus acak acak. Ini bukan acak seragam, dan saya tidak yakin bagaimana saya akan menerapkan algoritma acak seragam di> <> untuk memulai.


1

Python 3, 154 byte (daftar karakter -> daftar karakter) (fungsi) Retak

[=o;]1-::[]:s[i,]1-::[]s:[i=R,L;2//)i(nel=s    
:)i(r fed
*tropmi modR+L+o nruter    
]:s[L,R=R,L;]s:[L=+o;))L(nel,1(tnidnar=s:R dna L elihw    
]nar morf

Saya ragu ini akan terlalu sulit untuk retak, terutama karena riffling sekali agak tidak efektif (Anda dapat melihat seluruh komponen program dalam output ...). Ini sebagian besar hanya untuk membuat segalanya bergulir. Mungkin ada spasi putih (termasuk baris baru) yang tidak saya salin dengan benar. Hash SHA-384 dari solusi yang saya maksudkan adalah 5924530418bf8cd603c25da04ea308b124fdddfc61e7060d78b35e50ead69a7fbde9200b5ee16635cc0ee9df9c954fa1.


@ H.PWiz Python. Ups, lupa menambahkannya (juga bytecount, terima kasih atas pengingatnya!)
HyperNeutrino

Secara teori, bisakah Anda mencoba membalikkan riffle mengocok kode dan menjalankannya dengan python hingga berfungsi?
fəˈnɛtɪk

@ fəˈnɛtɪk Secara teoritis itu harusnya berfungsi ... Mungkin perlu beberapa saat: P
HyperNeutrino

@ fəˈnɛtɪk Itu seperti mencoba memecahkan kuis bahasa pemrograman dengan TIO brute force. Tidak ada kesenangan dalam melakukannya.
user202729


1

Röda , 118 byte

2//x#=z}][=]:y[x
}]0>)b..a(#[]1-::[]:y[x
x#%)(reelihw}]0>b#[fi)b(g
getnI]0>a#[fi)a(g{]mo:z[x=b]zdnar=y|x|{=:[g{xx=a
 f

Dibutuhkan aliran karakter sebagai input dan output aliran karakter.


1

R , 283 byte, Retak

/n,s(daeh-<l
))'',s(tilpsrts(le::sdohtem-<s
)s(rahcn-<n{)s(noitcnufhtgnel(fi
})x-,l(liat-<l
)))x,l(daeh(ver,o(c-<o
)1,)l(htgnel(elihw
}{-<o
)2/n,s(liat-<r
)2'=pes,o(tac
}})y-,r(liat-<r
)))y,r(daeh(ver,o(c-<o
)1,)r(htgnel(elpmas-<y{))r(l(fi{))r(htgnel|)l(htgnel()'htgne}(lpmas-<x{))le

Saya menyadari sekarang bahwa menulis jawaban yang lebih panjang memiliki lebih banyak "berlari" karakter yang dilestarikan, sayangnya.

Semoga berhasil!



@Tr. Xcoder terima kasih atas hasil editnya
Giuseppe


0

Brainfuck acak , 273 byte

]<.[<<]<[<<]<[<]<,.[<]-<<<]>>>>>]<+>-[<]<+>-[<<]>]>+<]<]>[>>]]>[>>]<]<+>-[[<<]>]>[>>]<-[[[>>]]>[>]<+>-[[<]<[[?>>]<+>-[[<]-<]>]<[>>]<<+>>+>-[[<<,[>]<.[<]>[>]<+>-[<]>[>]->>>]<<<<<]>+-[<<-[>]>+<-[>>]<]<+>-[[[<<]]<[<]>+<-[[><]<[[>]<+>-[>],]<+>-[<]<->>+]>[[<-[<?<<+>>>[,]>+<-[[>

Brainfuck acak sama dengan brainfuck normal, tetapi memperkenalkan ?karakter, yang menetapkan sel saat ini ke nilai acak. Catatan menyenangkan; Saya memiliki versi ini yang hanya berfungsi untuk input kurang dari 256 karakter, untuk alasan yang jelas, tetapi kode itu sendiri lebih panjang dari itu. Ketika saya mengubahnya untuk menangani lebih lama, ternyata satu byte lebih pendek dari aslinya. ¯ \ _ (ツ) _ / ¯.



0

APL (Dyalog Unicode) , 62 byte

(g÷f¨()⍵(≢~⊃⍵⍺⍉⍨⍨}(←(←'')⊂f≢(g∘⌈¨}{?↑-⍵↑⋄)≢)))≢⊂{,⋄⍵⍵↑2f≢∘⊃?()

SHA-384 dari solusi yang saya maksudkan: 3209dba6ce8abd880eb0595cc0a334be7e686ca0aa441309b7c5c8d3118d877de2a48cbc6af9ef0299477e3170d1b94a

Ini mungkin cukup mudah, terutama karena sebagian besar orang di obrolan APL membantu saya membangun jawaban ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.