Hasilkan sandi yang diberi angka dan string
Tugas Anda sederhana. Diberikan string s
dan angka 0 <= n <= 9
sebagai input, masukkan karakter ASCII pseudo-acak yang dapat dicetak antara setiap karakter n
kali string . Sehingga untuk setiap karakter s
ada n
karakter acak di antara mereka. Spasi harus dipangkas.
Memasukkan:
s
frase string untuk mengenkripsi dalam sandi- integer
n
dalam kisaran0 <= n <= 9
Contoh:
Memasukkan:
The treasure is here
2
Keluaran:
T ! 0 h 32 e F4 t 0i r lk e hm a 7y s # 0 u * & r * h e ! 2 i H ^ s B, h ! @ E 0) r $ h e
Ini adalah kode-golf sehingga kode terpendek menang! Semoga berhasil dan selamat bersenang - senang!
code-golf
string
random
cryptography
jacksonecac
sumber
sumber
n
karakter terdiri darin
salinan karakter acak yang sama, mereka masih acak, tetapi mereka masih tidak independen secara statistik. Dan seterusnyaO
lebih mungkin daripada spasi atau~
? Jika harus seragam, maka Anda harus mengatakannya secara eksplisit. Dan jika itu tidak harus seragam, maka Anda setidaknya harus menyatakan sesuatu seperti setiap karakter harus memiliki probabilitas nol. Anda juga telah dinyatakan dalam komentar sebelumnya yang masing-masing karakter tidak harus memiliki distribusi independen, jadi jika ini penting, harus disebutkan dalam tantangan. Ada spektrum keacakan yang sangat luas.Jawaban:
C #,
141131 byteCukup mirip dengan jawaban Java @ Geobit , kecuali saat ini lebih lama :(
Barang lambda lengkap:
sumber
R=...
Anda bisa langsung menggunakannew System.Random().Next(...)
I think05AB1E , 11 byte
Cobalah online!
Penjelasan
sumber
Java 7,
132124 byteTidak ada yang mewah, hanya dua putaran seperti yang Anda harapkan. Luar untuk melingkarkan string, bagian dalam untuk mengisi tebusan:
sumber
k
:String f(int n,char[]a){String o="";for(char b:a)if(b>32){o+=b;for(int i=0;i++<n;o+=(char)(33+Math.random()*94));}return o;}
(125 byte)char
pemain. Terima kasih!Pyke,
12119 byteCoba di sini!
Mengejar karakter acak baik-baik saja menurut OP.
sumber
Oktaf, 43 byte
Ini membutuhkan string
s
dan integern
sebagai input. Sebuah string dalam Oktaf hanyalah sebuah array karakter.s>32
adalah peta logis dengan1
untuk karakter non-ruang apa pun. Kode menambahkan sebuah matriks dengann
baris dan jumlah kolom yang sama seperti yangs(s>32)
berisi angka floating point antara 33 dan 126. Secara implisit dibulatkan menjadi bilangan bulat dan dikonversi ke karakter ASCII saat digabungkan dengan strings
.(:)'
luruskan ini ke array karakter horizontal.Uji di sini!
sumber
Python 2,
123122118114 11498 BytesKawan, kuharap
random
tidak begitu mahal (dan kita tidak perlu menyaring ruang). Sekarang kami memiliki penghematan besar karena diizinkan untuk memiliki karakter sandi pada akhirnya :) Omong-omong, ini dia:sumber
JavaScript (Firefox 30+), 96 byte
ES6 murni lebih panjang dua byte:
Berikut adalah pendekatan yang sangat keren yang sayangnya 26 byte lebih lama:
sumber
/. *(?=.)/
tidak bekerja untuk string yang dimulai atau berakhir di ruang, tidak ada yang peduli. (Anda bahkan diizinkan membuntuti karakter acak sekarang.)(?=.)
yang mengurus ruang di akhir string.94+33
alih-alih95+32
R, 97 byte
Fungsi tanpa nama mengambil input
x
(string) dann
.Cobalah R-biola
sumber
CJam ,
2118 byteCobalah online!
Cetakan
n
karakter trailing acak.Penjelasan
sumber
Bash, 124 byte
Bash murni + coreutils , tidak ada struktur aliran kontrol, tidak ada sub-bahasa, tidak ada "eval"
Golf
Uji
sumber
Q / KDB +,
39 3634 BytesVariabel yang digunakan:
Ini menggunakan sebelumnya kata keterangan , yang menerapkan fungsi ke kiri antara setiap item di sebelah kanan dan pendahulunya. (Pada dasarnya, berlaku fungsi ke kiri antara setiap karakter di sebelah kanan.)
Hasilkan n angka acak antara 40 dan 126 kemudian mengonversinya menjadi karakter ekuivalen: (q tampaknya hanya memiliki karakter untuk ini)
Contoh output:
EDIT:
Disimpan 3 byte dengan mengubah raze q menjadi (, /) menggunakan notasi k dan juga diubah sebelum `: Terima kasih kepada @slackwear untuk pembaruan, dicukur 2 byte :)
sumber
10h$
Java 8, 114 byte
Golf
Lambda yang menerima Integer dan String. Terinspirasi oleh jawaban Java 7, double loop menggunakan beberapa sintaks Java 8 Stream (
String.chars
) untuk menyimpan beberapa byte.Memasukkan
Keluaran
sumber
Scala,
9594 BytesTidak ada yang terlalu mewah, selain penggunaan mkString pada sebuah String. Ini memperlakukan string sebagai daftar karakter, dan memungkinkan saya untuk memasukkan pemisah di antara mereka. Pemisah saya adalah jumlah karakter alfanumerik yang dihasilkan secara acak.
sumber
Random.alphanumeric
akan menyebabkan setiap potongan menjadi sama, jadi itu adalah sandi yang lumpuh ... Lihat contoh ini:scala> c("Hello", 1) res0: String = Hbeblblbo
filter
. MenggunakanmkString
String akan memperlakukannya sebagai koleksi karakter.> <> (Ikan),
107106103 byteCobalah online!
Itu bukan super acak, tapi itu acak. Tempatkan string dan integer di stack (Contoh: "Hello world!", 5).
Penjelasan Lengkap
Ini adalah versi kode yang sedikit lebih lama, hingga saya memperbarui penjelasannya. Sebagian besar sama, hanya mungkin sedikit lebih mudah dibaca:
Kami akan berpura-pura parameter string
s
dan parameter integeri
.The
<
memberitahu ikan untuk segera bergerak ke kiri, yang membungkus sekitar untuk" "
, yang menambahkan ruang characted ke stack. Kemudian, ikan berjalan&
, yang menambah ruang untuk register.r
membalik tumpukan dan{:}
menggeser tumpukan ke kiri (meletakkani
di ujung tumpukan), menyalin nilai di ujung tumpukan, lalu menggesernya ke kanan.v
memberitahu ikan untuk mulai bergerak ke bawah.x
memberi tahu ikan untuk bergerak ke arah acak, pada akhirnya menghasilkan ikan ke kanan dan terus ke bawah, atau melewati1+
atau2+
sebelumnya. Ini menambahkan 1 atau 2 masing-masing ke nomor di ujung tumpukan. Jika ikan melakukan perjalanan ke atas, ia mengenaiv
lagi dan kembali.}
menggeser tumpukan ke kanan, lalui
berada di posisi 1 di tumpukan dan variabel baru ini di posisi 0 (kami akan menyebutnyam
).Bagian ini adalah fungsi, sebut saja whitespaceTrimmer . Ini dimulai dari mana
<
. Ini hanya strip ruang yang ada di ujung tumpukan (jadi awal dari string) sampai berjalan ke karakter non-spasi.Jadi segera ikan berenang ke
<
dan harus pergi ke kiri. Kemudian berjalan ke:&:&
mana menyalin nilai di ujung tumpukan, menempatkan ruang dari register ke ujung tumpukan, menyalinnya, lalu menempatkannya kembali ke register.Kemudian ikan itu mengenai
=?!v ~
, atau lebih khusus lagi=
, yang mengeluarkan dua nilai terakhir (dua yang baru saja kita buat) dari tumpukan, membandingkannya, menempatkan 1 di ujung tumpukan jika nilainya sama, dan 0 pada akhir tumpukan jika mereka berbeda. The?
muncul nilai baru dari ujung stack, jika 0 tidak menjalankan instruksi berikutnya, yang dalam hal ini adalah!
, sebagai gantinya mengeksekusiv
, yang perintah ikan bergerak ke bawah (keluar fungsi).Namun jika itu 1, maka ia telah menemukan ruang, sehingga ia mengeksekusi
!
yang merupakan trampolin, dan itu menyebabkan ikan untuk melewatkan instruksi berikutnya, yaitu av
, sehingga ikan melanjutkan. Di depan ikan, ia melihat~
yang memberitahu untuk melepaskan nilai terakhir dari tumpukan (dikonfirmasi sebagai spasi), kemudian ikan melanjutkan, dan menjalankan fungsinya lagi.Ikan segera disuruh berenang tepat oleh a
>
, lalu mengeluarkan karakter terakhir pada tumpukan dengano
(yang, pertama kali ini dijalankan, adalah karakter pertamas
). Ia mendapatkan panjang tumpukanl
, menempatkan a2
di ujung tumpukan, lalu-
menyebabkan 2 dikurangil
. Itu hits?!;
yang, mengingat apa yang?
terjadi, menyebabkan ikan untuk melewatkan!
jika tumpukan kosong, dan mendarat;
, yang mengakhiri program.Mengikuti jika masih ada karakter di stack, kita mengeksekusi
!
yang menyebabkan ikan melambung di atas;
dan mengeksekusia6.
, yang menyimpana
(AKA10
), dan6
di ujung tumpukan, yang merupakanx, y
koordinat untuk.
, yang mengeluarkan mereka dari ujung tumpukan, lalu teleport ikan ke10, 6
, dan jalankan instruksi di sebelah kanan posisi itu (seperti ikan berenang dengan benar).Ini kurang rumit daripada kedengarannya ketika Anda menyadari
y
posisi 6 adalah garis di bawah ini.x
Posisi 10 adalah kemudianv
, dan di sebelah kanan itu, yang merupakan no-op. Hal ini menyebabkan ikan terus berenang dengan benar dan benar-benar memulai eksekusi pada awal baris ...
Jadi ini adalah fungsi yang menambahkan teks acak di antara karakter. Ini sedikit suap, tapi itu hanya karena aku mencoba membuatnya sedikit lebih acak. Sebut saja genRandomChars ini .
The
:{{:}l1-[rv
sebenarnya adalah setup untuk fungsi, dan kurang-jadi bagian dari fungsi yang sebenarnya itu sendiri. Ikan pertama berenang di:{{
mana salinan nilai pada ujung tumpukan, kemudian menggesernya ke kiri dua kali. Jika Anda ingati
itu pada posisi 1 di stack, maka Anda akan tahui
sekarang di ujung stack.Ikan kemudian berenang di atas
:}
salinan manai
, dan menggeser tumpukan ke kanan, menempatkani
keduanya di awal dan akhir tumpukan.l1-[
minta ikan untuk meletakkan panjang di ujung tumpukan, kurangi 1 dari itu, lalu[
buat tumpukan baru, bergerakl-1
(panjang tumpukan minus 1) nilai ke tumpukan baru (jadi hanya meninggalkani
tumpukan yang lama). Kemudian ikan hanya memukulrv
yang membalikkan tumpukan lagi (saya pikir membuat tumpukan baru membalikkannya untuk beberapa alasan), dan memerintahkan ikan untuk berenang ke bawah sekali lagi, benar-benar memulai fungsi di<
bawah.Jadi saat ini akhir dari tumpukan telah
m
dan sementara kamii
, yang akan kami panggilti
. Segera ikan berenang1-}
, yang mengurangi 1 dariti
dan memindahkannya ke awal tumpukan. Kemudian:}
yang cukup menyalinm
dan memindahkannya ke awal tumpukan (meletakkanti
di posisi tumpukan 1).Inilah saatnya kita mengenai hal kecil ini:
Ini sebenarnya sangat sederhana. The
!
menyebabkan ikan untuk melewati|
dan mengeksekusix
. Mengingat apax
terjadi, kita ingat ini membuat ikan bergerak ke 4 arah.|
hanyalah sebuah cermin, dan menyebabkan ikan berenang kembali kex
. Jadi pada dasarnya, ikan akan menempatkan 1, 2, atau 3 di ujung tumpukan, dan terus bergerak ke kiri, membungkus.Ikan kemudian dieksekusi
*+o
yang menyebabkan dua nilai terakhir pada tumpukan akan muncul, dikalikan bersama, dan hasilnya mendorong kembali, kemudian hal yang sama dengan penambahan, maka nilai akhir muncul dari tumpukan dan dikeluarkan dengano
. Tumpukan kami sekarang relatif normal kembali hanya berisi [m
,ti
,s
].:}}:
menyebabkan nilai di ujung tumpukan (pada dasarnyas
posisi 0) atau disalin, kemudian tumpukan digeser ke kanan dua kali (menempatkanti
di depan lagi), kemudianti
disalin.?!v
seharusnya sudah cukup mudah dimengerti sekarang. Pada dasarnya jikati
0 maka kita keluar dari fungsi denganv
, kalau tidak kita jalankan!
dan lewativ
(melakukan loop lain).Jika
ti
0 dan kita selesai mengeluarkan karakter yang sedikit acak, maka kita jalankanv
dan lihat:Tidak ada yang terlalu mewah di sini. Kami menghapus
ti
dari tumpukan via~
. Kemudian]
baru, ia mengeluarkan semua nilai kami dari tumpukan dan menempatkannya di tumpukan yang lama! Karena masalah pembalikan kita membalikkan denganr
, maka menggeser tumpukan kanan dua kali dengan}}~
, shufting tumpukan ke kanan, memberikan kita [m
,i
,s
], yang~
adalah untuk menghapus ekstra digandakans[0]
dari sebelumnya dalam fungsi seperti yang kita akan membutuhkannya jika kami melakukan perulangan (tapi tidak, kami keluar).v
memberitahu ikan untuk berenang ke bawah dan ke dalam>34.
(terbalik untuk menunjukkan perintah eksekusi), yang memberi tahu ikan untuk hanya berenang ke kiri dan ke dalam3, 4
(karena itu.
adalah lompatan!).3, 4
sebenarnya hanya di sebelah kanan awalwhitespaceTrimmer
, yang sempurna karena kita bepergian ke kiri.Mengikuti semua logika ini, kita dapat mengikuti ikan sampai tumpukan akhirnya kosong dan program keluar setelah
whitespaceTrimmer
dijalankan.sumber
Perl 5, 81 byte
Saya harap yang berikut ini membantu Anda memahami apa yang dilakukan liner:
sumber
Clojure,
126123118122 122117 bytePeta di atas pesan, memasukkan karakter acak ke dalam, lalu menyatukan hasilnya.
Instruksi menunjukkan bahwa semua spasi harus dilepaskan dari string hasil. Jika hanya spasi dari pesan asli yang seharusnya dihapus, saya bisa mengubahnya.
Tidak Disatukan:
sumber
Python 3, 127 Bytes
Mungkin jauh lebih lama dari yang diperlukan, tapi ini milikku golf sejauh ini.
sumber
PHP, 96 byte
Mengambil String sebagai argumen 1 dan Nomor sebagai argumen 2
Cobalah online
sumber
Python 3, 133 Bytes
sumber
Node.js, 88 byte
Output contoh:
Cobalah online!
sumber
C,
102100 byte-2 byte untuk dilewati
continue
.Tidak Disatukan:
Pemakaian:
sumber