Buat sandi

15

Hasilkan sandi yang diberi angka dan string

Tugas Anda sederhana. Diberikan string sdan angka 0 <= n <= 9sebagai input, masukkan karakter ASCII pseudo-acak yang dapat dicetak antara setiap karakter nkali string . Sehingga untuk setiap karakter sada nkarakter acak di antara mereka. Spasi harus dipangkas.

Memasukkan:

  • sfrase string untuk mengenkripsi dalam sandi
  • integer ndalam 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 sehingga kode terpendek menang! Semoga berhasil dan selamat bersenang - senang!

jacksonecac
sumber
3
acak karakter ASCII yang dapat dicetak Anda perlu menentukan apa arti acak di sini. Apakah semua karakter ASCII yang dapat dicetak memiliki probabilitas yang sama? Haruskah mereka mandiri secara statistik? Fleksibilitas apa yang kita miliki mengenai hal ini?
Luis Mendo
3
@ jacksonecac saya tidak setuju. Mengatakan acak saja tidak cukup. Misalnya, jika saya hanya memilih karakter acak bahkan dengan kode ASCII, itu masih acak tapi itu mungkin tidak diterima (atau masih?) Jika setiap seri nkarakter terdiri dari nsalinan karakter acak yang sama, mereka masih acak, tetapi mereka masih tidak independen secara statistik. Dan seterusnya
Luis Mendo
5
@jacksonecac "random" adalah istilah yang sangat luas. Dapatkah saya memilih karakter dengan distribusi normal, sehingga karakter di sekitar Olebih 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.
Martin Ender
3
Ini sebenarnya bukan sandi. Mungkin steganografis.
Greg Martin
2
Itu bukan respons yang tepat untuk titik valid @MartinEnder. Solusinya adalah dengan menentukan secara eksplisit bahwa karakter harus seragam dan independen secara statistik satu sama lain dan komentar akan berhenti. Spesifikasi alternatif (tetapi lebih terbuka untuk disalahgunakan) adalah bahwa distribusi miring atau yang karakternya bergantung satu sama lain adalah OK selama semua karakter memiliki kemungkinan nol terjadi. Dalam kode, spesifikasi golf penting untuk keadilan. Karena Anda tampaknya tidak mau membahas komentar yang valid ini tentang tantangan yang baik, saya memilih untuk menutup.
Level River St

Jawaban:

7

C #, 141 131 byte

Cukup mirip dengan jawaban Java @ Geobit , kecuali saat ini lebih lama :(

(I,n)=>{var R=new System.Random();var o="";int i,r;foreach(var c in I)if(c>32)for(i=r=0,o+=c;i++<n;){r=R.Next(33,127);o+=(char)r;}return o;};

Barang lambda lengkap:

Func<string, int, string> a = (I,n) =>
{
    var R=new System.Random();
    var o="";
    int i;
    foreach(var c in I)
        if(c>32)
            for(i=0,o+=c;i++<n;o+=(char)R.Next(33,127));
    return o;
};
Yodle
sumber
mengapa R=...Anda bisa langsung menggunakan new System.Random().Next(...)I think
Roman Gräf
2
@ RomanGräf msdn.microsoft.com/en-us/library/h343ddh9(v=vs.110).aspx C # Kelas acak, tanpa seed, akan menggunakan jam Sistem, jadi jika Anda memanggil suksesi cepat (seperti di dalam loop di sana), sebagian besar nilai akhirnya menjadi identik, yang tidak akan berfungsi dalam kebanyakan kasus :( Percayalah, saya selalu mencoba dan kemudian ingat itu.
Yodle
7

05AB1E , 11 byte

ð-vy²FžQ.RJ

Cobalah online!

Penjelasan

ð-           # remove spaces from input string
  v          # for each char in the string
   y         # push the char
    ²F       # input-2 number of times do:
      žQ.R   # push a random ascii character
          J  # join to string
Emigna
sumber
Menutup! rapikan spasi! :)
jacksonecac
@ jacksonecac: Merindukan bagian itu, maaf. Diperbaiki sekarang :)
Emigna
pekerjaan yang baik! itu bekerja!
jacksonecac
1
@carusocomputing: Itu menambahkan karakter acak setelah huruf terakhir juga. Bukan hanya di antara surat-surat.
Emigna
1
@Emigna Setelah komentar baru-baru ini di bawah pertanyaan ini tampaknya baik-baik saja :)
geisterfurz007
6

Java 7, 132 124 byte

String f(int n,char[]a){String o="";int i;for(char b:a)if(b>32)for(i=0,o+=b;i++<n;o+=(char)(33+Math.random()*94));return o;}

Tidak ada yang mewah, hanya dua putaran seperti yang Anda harapkan. Luar untuk melingkarkan string, bagian dalam untuk mengisi tebusan:

String f(int n,char[]a){
    String o="";
    int i;
    for(char b:a)
        if(b>32)
            for(i=0,
                o+=b;
                    i++<n;
                        o+=(char)(33+Math.random()*94));
    return o;
}
Geobit
sumber
Tidak perlu untuk 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)
Olivier Grégoire
Oooh benar. Saya menggunakannya dengan metode yang berbeda. Tidak berpikir tentang mengeluarkannya ketika saya pergi dengan para charpemain. Terima kasih!
Geobits
Salahku. Saya salah hitung, saran saya juga 124 byte: Saya memeriksa kolom alih-alih panjang;)
Olivier Grégoire
Ya, saya perhatikan ketika membandingkan keduanya :)
Geobits
5

Pyke, 12 11 9 byte

d-FQV~KHs

Coba di sini!

d-        -  remove spaces from input
  F       - for i in ^:
   QV     -  repeat (number) times:
     ~KH  -    random_from(printable)
        s -   sum(^)

Mengejar karakter acak baik-baik saja menurut OP.

Biru
sumber
5

Oktaf, 43 byte

@(s,n)[s(s>32);33+94*rand(n,nnz(s>32))](:)'

Ini membutuhkan string sdan integer nsebagai input. Sebuah string dalam Oktaf hanyalah sebuah array karakter. s>32adalah peta logis dengan 1untuk karakter non-ruang apa pun. Kode menambahkan sebuah matriks dengan nbaris dan jumlah kolom yang sama seperti yang s(s>32)berisi angka floating point antara 33 dan 126. Secara implisit dibulatkan menjadi bilangan bulat dan dikonversi ke karakter ASCII saat digabungkan dengan string s. (:)'luruskan ini ke array karakter horizontal.

Uji di sini!

Stewie Griffin
sumber
1
Pembulatan tersirat! Bagus
Luis Mendo
4

Python 2, 123 122 118 114 114 98 Bytes

Kawan, kuharap randomtidak 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:

from random import*
f=lambda s,n:s and(' '<s[0])*eval('s[0]'+'+chr(randint(32,126))'*n)+f(s[1:],n)
Kade
sumber
4

JavaScript (Firefox 30+), 96 byte

(s,n)=>s.replace(/. */g,x=>x[0]+String.fromCharCode(...[for(_ of Array(n))Math.random()*95+32]))

ES6 murni lebih panjang dua byte:

(s,n)=>s.replace(/. */g,x=>x[0]+String.fromCharCode(...[...Array(n)].map(_=>Math.random()*95+32)))

Berikut adalah pendekatan yang sangat keren yang sayangnya 26 byte lebih lama:

(s,n)=>String.raw({raw:s.split` `.join``},...[for(_ of s)String.fromCharCode(...[for(_ of Array(n))Math.random()*95+32])])
Produksi ETH
sumber
Tegasnya /. *(?=.)/tidak bekerja untuk string yang dimulai atau berakhir di ruang, tidak ada yang peduli. (Anda bahkan diizinkan membuntuti karakter acak sekarang.)
Neil
@Neil Trailing chars acak diizinkan? Saya kira saya bisa menghapus (?=.)yang mengurus ruang di akhir string.
ETHproduksi
Speknya tidak begitu jelas, tapi saya pikir Anda harus menghindari memasukkan ruang kosong, jadi 94+33alih-alih95+32
edc65
3

R, 97 byte

Fungsi tanpa nama mengambil input x(string) dan n.

function(x,n,l=nchar(x))for(i in 1:l)cat(substr(x,i,i),if(i<l)intToUtf8(sample(32:126,n)),sep="")

Cobalah R-biola

Billywob
sumber
3

CJam , 21 18 byte

lS-(ol~f{{95mrSc+\}*}

Cobalah online!

Cetakan n karakter trailing acak.

Penjelasan

lS-        e# Read line and remove spaces.
l~         e# Read and evaluate another line.
f{         e# For each character (passing in N)...
  {        e#   Do this N times...
    95mr   e#     Push random integer in [0, 95).
    Sc+    e#     Add to space character, giving a random printable ASCII character.
  }*
}
           e# All characters remaining on the stack are printed implicitly
           e# at the end of the program.
Martin Ender
sumber
3

Bash, 124 byte

Bash murni + coreutils , tidak ada struktur aliran kontrol, tidak ada sub-bahasa, tidak ada "eval"

Golf

E() { N=${1// /};paste <(fold -1<<<$N) <(tr -cd "\\40-\\176"<\/dev\/urandom|head -c$(($2*${#N}-$2))|fold -$2)|tr -d '\t\n';}

Uji

>E "The treasure is here" 2
TkZhf(e&Rt@FrS,edha+-sJTuh.rX@eVKi+3s<7hftey8r*/e
zeppelin
sumber
3

Q / KDB +, 39 36 34 Bytes

raze{""sv(raze x;`char$40+n?87)}prior s
(,/)({""sv((,/)x;`char$40+n?87)}':)s

(,/)({""sv((,/)x;10h$40+n?87)}':)s

Variabel yang digunakan:

s:"The treasure is here"
n:2

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)

`char$40+n?87

//Possible characters.
()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Contoh output:

TVghrveVp Rpti+r0sea3a9nsIjuRXrAReJ; +di=ys`{ ikhKTe4trTZesz

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

Adam J
sumber
1
dapat menyimpan beberapa byte dengan melakukan casting dengan10h$
skeevey
2

Java 8, 114 byte

Golf

(n,s)->s.chars().forEach((c)->{if(c>32)for(int i=0;i<=n;)System.out.print((char)(++i==1?c:33+Math.random()*94));})

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

3, "Hello world!"

Keluaran

HfKIedb3l<-Ul%}vod"Bw\"|oa`%rH-}l/-{dMS;!B#X
Xanderhall
sumber
2

Scala, 95 94 Bytes

def c(s:String,i:Int)=s.filter(_>32).mkString(scala.util.Random.alphanumeric.take(i).mkString)

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

Ethan
sumber
Tidak cukup menjawab pertanyaan itu. Sifat dari Random.alphanumericakan menyebabkan setiap potongan menjadi sama, jadi itu adalah sandi yang lumpuh ... Lihat contoh ini:scala> c("Hello", 1) res0: String = Hbeblblbo
Yakub
BTW, Anda bisa menghapus filter. Menggunakan mkStringString akan memperlakukannya sebagai koleksi karakter.
Yakub
@ Jacob filter adalah cara paling efisien yang bisa saya pikirkan untuk menghapus spasi. Saya meninggalkan acak seperti itu karena tampaknya cukup, tetapi jika saya punya waktu saya akan menambahkan fungsi terpisah untuk teks acak yang tepat.
Ethan
2

> <> (Ikan), 107 106 103 byte

<v}:{r&" "
1xv+
2<v+
v}<
<~v!?=&:&:
6.>ol2-?!;a
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o-+
^3<v ~}}r]~<
.40<

Cobalah online!

Itu bukan super acak, tapi itu acak. Tempatkan string dan integer di stack (Contoh: "Hello world!", 5).

Input: "Hello world!", 5
Output: H^\^]^eceeedldcdeclgfffhowhhfggojkkkkrdccedl]]\]\d

Penjelasan Lengkap

Ini adalah versi kode yang sedikit lebih lama, hingga saya memperbarui penjelasannya. Sebagian besar sama, hanya mungkin sedikit lebih mudah dibaca:

< v}:{r&" "
+1xv
+2<v
   }
:&:<~ v!?=&
?!;a6.>ol2-
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<

Kami akan berpura-pura parameter string sdan parameter integer i.

< v}:{r&" "

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. rmembalik tumpukan dan {:}menggeser tumpukan ke kiri (meletakkan idi ujung tumpukan), menyalin nilai di ujung tumpukan, lalu menggesernya ke kanan. vmemberitahu ikan untuk mulai bergerak ke bawah.

+1xv
+2<v
   }

xmemberi tahu ikan untuk bergerak ke arah acak, pada akhirnya menghasilkan ikan ke kanan dan terus ke bawah, atau melewati 1+atau 2+sebelumnya. Ini menambahkan 1 atau 2 masing-masing ke nomor di ujung tumpukan. Jika ikan melakukan perjalanan ke atas, ia mengenai vlagi dan kembali. }menggeser tumpukan ke kanan, lalu iberada di posisi 1 di tumpukan dan variabel baru ini di posisi 0 (kami akan menyebutnya m).

:&:<~ v!?=&

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 mengeksekusi v, 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 a v, 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.

?!;a6.>ol2-

Ikan segera disuruh berenang tepat oleh a >, lalu mengeluarkan karakter terakhir pada tumpukan dengan o(yang, pertama kali ini dijalankan, adalah karakter pertama s). Ia mendapatkan panjang tumpukan l, menempatkan a 2di ujung tumpukan, lalu -menyebabkan 2 dikurangi l. 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 mengeksekusi a6., yang menyimpan a(AKA 10), dan 6di ujung tumpukan, yang merupakan x, ykoordinat untuk ., yang mengeluarkan mereka dari ujung tumpukan, lalu teleport ikan ke 10, 6, dan jalankan instruksi di sebelah kanan posisi itu (seperti ikan berenang dengan benar).

Ini kurang rumit daripada kedengarannya ketika Anda menyadari yposisi 6 adalah garis di bawah ini. xPosisi 10 adalah kemudian v, 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 ...

:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<

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-[rvsebenarnya 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 ingat iitu pada posisi 1 di stack, maka Anda akan tahui sekarang di ujung stack.

Ikan kemudian berenang di atas :}salinan mana i, dan menggeser tumpukan ke kanan, menempatkan ikeduanya di awal dan akhir tumpukan. l1-[minta ikan untuk meletakkan panjang di ujung tumpukan, kurangi 1 dari itu, lalu[ buat tumpukan baru, bergerak l-1(panjang tumpukan minus 1) nilai ke tumpukan baru (jadi hanya meninggalkan itumpukan yang lama). Kemudian ikan hanya memukul rvyang 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 mdan sementara kami i, yang akan kami panggil ti. Segera ikan berenang 1-}, yang mengurangi 1 dariti dan memindahkannya ke awal tumpukan. Kemudian :}yang cukup menyalin mdan memindahkannya ke awal tumpukan (meletakkan tidi posisi tumpukan 1).

Inilah saatnya kita mengenai hal kecil ini:

v2<
<1x|!
^3<

Ini sebenarnya sangat sederhana. The !menyebabkan ikan untuk melewati |dan mengeksekusi x. Mengingat apax terjadi, kita ingat ini membuat ikan bergerak ke 4 arah. |hanyalah sebuah cermin, dan menyebabkan ikan berenang kembali ke x. Jadi pada dasarnya, ikan akan menempatkan 1, 2, atau 3 di ujung tumpukan, dan terus bergerak ke kiri, membungkus.

Ikan kemudian dieksekusi *+oyang 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 dengan o. Tumpukan kami sekarang relatif normal kembali hanya berisi [ m, ti, s].

:}}:menyebabkan nilai di ujung tumpukan (pada dasarnya sposisi 0) atau disalin, kemudian tumpukan digeser ke kanan dua kali (menempatkan tidi depan lagi), kemudian tidisalin. ?!vseharusnya sudah cukup mudah dimengerti sekarang. Pada dasarnya jika ti0 maka kita keluar dari fungsi dengan v, kalau tidak kita jalankan !dan lewati v(melakukan loop lain).

Jika ti0 dan kita selesai mengeluarkan karakter yang sedikit acak, maka kita jalankan vdan lihat:

   v ~}}r]~<
.43<

Tidak ada yang terlalu mewah di sini. Kami menghapus tidari tumpukan via ~. Kemudian ]baru, ia mengeluarkan semua nilai kami dari tumpukan dan menempatkannya di tumpukan yang lama! Karena masalah pembalikan kita membalikkan dengan r, maka menggeser tumpukan kanan dua kali dengan }}~, shufting tumpukan ke kanan, memberikan kita [ m, i, s], yang ~adalah untuk menghapus ekstra digandakan s[0]dari sebelumnya dalam fungsi seperti yang kita akan membutuhkannya jika kami melakukan perulangan (tapi tidak, kami keluar). vmemberitahu 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 dalam 3, 4(karena itu .adalah lompatan!). 3, 4sebenarnya 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 whitespaceTrimmerdijalankan.

redstarcoder
sumber
Hmm saya tidak melihat bahwa karakter harus dicetak. Ini akan memerlukan sedikit modifikasi yang mungkin membuatnya kurang acak dan lebih kecil.
redstarcoder
Itu tidak terlihat terlalu acak. Saya percaya itu harus bekerja dalam banyak kasus, saya belum gagal. Ini akan bekerja dengan huruf kapital atau huruf kecil pasti, dan beberapa simbol. Saya cukup yakin ini memenuhi persyaratan tantangan.
redstarcoder
2

Perl 5, 81 byte

($_,$n)=<>;chomp;y/ //d;$\=chop;print map{$_,map{chr 33+int rand 94}1..$n}split//

Saya harap yang berikut ini membantu Anda memahami apa yang dilakukan liner:

($_, $n) = <STDIN>;  # Reads in the string into $_,
                     # and the number into $n, from standard input.
                     # (<STDIN> works slightly different from <>.)
chomp($_);           # Removes the newline from the string.
$_ =~ tr/ //d;       # `Tr/`ansliterates ASCII space characters
                     # into nothing, effectively `/d`eleting them.
$\ = chop($_);       # Chop()s off the last character out of $_ and
                     # appends it to the output when print()ing.
                     # (Perl always prints $\ after you call print().)
print( map {         # Each element of [List 1] will be mapped to:
    $_,              #   -- Itself, and
                     # (When mapping, each element is available as $_.)
    map {            # (`map` resembles `foreach` but returns a list.)
        chr(         #   -- A random ASCII character, in the range
          33 + int(rand(94)) ) # from 33 (!, hex 21) to 126 (~, hex 7E)
    } 1..$n          # ...$n times! (Over the range 1 to $n, actually.)
} split(//, $_) );   # [List 1] is $_, split() into characters.
g4v3
sumber
1

Clojure, 126 123 118 122 122 117 byte

(defn c[m n](apply str(remove #(=\space %)(mapcat #(apply str %(for [_(range n)](char(rand-nth(range 32 127)))))m))))

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

(defn cipher [message n]
  (apply str
    (remove #(= \space %)
        (mapcat #(apply str %
                     (for [_ (range n)]
                       (char (rand-nth (range 32 127)))))
                message))))
Carcigenicate
sumber
1

Python 3, 127 Bytes

import random
a,b=input(),input()
print(''.join([x+''.join([chr(random.randint(33,126))for c in range(int(b))]) for x in a]))

Mungkin jauh lebih lama dari yang diperlukan, tapi ini milikku golf sejauh ini.

Vedvart1
sumber
1
Ini menambahkan karakter acak di depan karakter pertama, dan spasi tidak dipangkas. Saya pikir kedua hal ini melanggar aturan.
Stewie Griffin
1

PHP, 96 byte

Mengambil String sebagai argumen 1 dan Nomor sebagai argumen 2

for(;($s=str_replace(' ','',$argv[1]))[$j]>'';)echo$i++%($argv[2]+1)?chr(rand(33,127)):$s[$j++];

Cobalah online

Crypto
sumber
1

Python 3, 133 Bytes

from random import *
c=int(input())
print(''.join([i+''.join([chr(randint(33,126))for i in range(c)])for i in input().strip(' ')])[:-c])
sonrad10
sumber
1

Node.js, 88 byte

(s,n)=>s.replace(/./g,c=>c!=" "?c+crypto.randomBytes(n).toString`base64`.substr(0,n):"")

Output contoh:

f("The treasure is here", 2)
// THphdwekAtMArbSeU1aDTsZWuqnr2yek1iyUsKshqXewvrVCeTi

f("The treasure is here", 2)
// TYshlcep6t4Iru7e29aQ1sl/uvQrlzeSJihysDhhOLe1urpte1m

Cobalah online!

Florent
sumber
1

C, 102 100 byte

-2 byte untuk dilewati continue.

i;f(char*s,int n){do{while(*s==32)++s;putchar(*s);i=n;while(i--)putchar(32+rand()%95);}while(*s++);}

Tidak Disatukan:

i;
f(char*s,int n){
 do{
  while(*s==32)++s;
  putchar(*s);
  i=n;
  while(i--)
    putchar(32+rand()%95);
 }while(*s++);
}

Pemakaian:

main(){
  char a[]="A   A A";
  f(a,3);
}
Karl Napf
sumber