Bir şifre oluşturun


15

Bir sayı ve dize verilen bir şifre oluşturma

Göreviniz basit. Girdi olarak bir dize sve bir sayı verildiğinde 0 <= n <= 9, dize nsürelerinin her karakteri arasına sahte rastgele yazdırılabilir ASCII karakteri ekleyin . Öyle ki, her karakter içins aralarında nrastgele karakterler var . Boşluklar kesilmelidir.

Giriş:

  • Şifrede sşifrelemek için dize ifadesi
  • naralığında tamsayı0 <= n <= 9

Misal:

Giriş:

The treasure is here
2

Çıktı:

T ! 0 saat 32 e F4 t 0i R lk E hm bir 7y s # 0 U * ve R *, H , e ! 2 ı , H ^ s B h ! @ E 0) R $ H , e


Bu yani kısa kod kazanır! İyi şanslar ve iyi eğlenceler!


3
rastgele yazdırılabilir ASCII karakteri Burada rastgele ne anlama geldiğini tanımlamanız gerekir . Yazdırılabilir tüm ASCII karakterleri aynı olasılığa sahip mi? İstatistiksel olarak bağımsız olmalılar mı? Bununla ilgili ne tür bir esnekliğe sahibiz?
Luis Mendo

3
@jacksonecac Katılıyorum. Sadece rastgele söylemek yeterli değildir. Örneğin, yalnızca ASCII kodlarıyla bile rastgele karakterler seçersem, bu hala rastgele ama muhtemelen kabul edilmiyor (veya ist?) Her nkarakter dizisi naynı rastgele karakterin kopyalarından oluşuyorsa , yine de rastgele, ancak bunlar istatistiksel olarak bağımsız değil. Ve benzeri
Luis Mendo

5
@jacksonecac "random" çok geniş bir terimdir. Normal dağılımlı karakterleri seçebilir miyim, böylece etraftaki karakterlerin Oboşluklardan daha fazla olması veya ~? Düzgün olması gerekiyorsa, bunu açıkça söylemelisiniz. Tekdüze olması gerekmiyorsa, en azından her karakterin sıfır olmayan bir olasılığa sahip olması gerektiği gibi bir şey belirtmelisiniz. Ayrıca her karakterin bir önceki yorumda ifade ettik gelmez bağımsız bir dağılıma sahip olması gerektiğinden, bu önemli ise, bu mücadeleden de belirtilmesi gerekir. Bir Orada çok rastgelelik geniş spektrumlu.
Martin Ender

3
Bu gerçekten bir şifre değil. Belki steganografiktir.
Greg Martin

2
Bu @MartinEnder'in geçerli noktasına uygun bir yanıt değil. Bir çözüm, karakterlerin birbirinden eşit ve istatistiksel olarak birbirinden bağımsız olması gerektiğini belirtmek olacaktır ve yorumlar duracaktır. Alternatif (ancak kötüye kullanıma daha açık) bir spesifikasyon, çarpık dağılımların veya karakterlerin birbirine bağımlı olduğu durumların, tüm karakterlerin sıfır dışında oluşma olasılığı olduğu sürece Tamam olması olacaktır. Kural olarak, golf özellikleri adalet için önemlidir. Aksi takdirde iyi bir mücadelede bu geçerli yorumları ele almak istemiyor gibi göründüğünüz için, kapatmaya oy veriyorum.
Level River St

Yanıtlar:


7

C #, 141131 bayt

@ Geobit'in Java yanıtına oldukça benzer , ancak şu anda daha uzun :(

(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;};

Tam lambda şeyler:

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;
};

neden R=...sadece doğrudan kullanabilirsiniz new System.Random().Next(...)düşünüyorum
Roman Gräf

2
@ RomanGräf msdn.microsoft.com/tr-tr/library/h343ddh9(v=vs.110).aspx C # 'ın Rastgele sınıfı, tohumsuz olarak , Sistem saatini kullanır, bu nedenle hızlı bir şekilde (örneğin Döngü), değerlerin çoğu aynı olur, bu çoğu durumda işe yaramaz :( Bana inanın, bunu her zaman denerim ve hatırlarım.
Yodle

7

05AB1E , 11 bayt

ð-vy²FžQ.RJ

Çevrimiçi deneyin!

açıklama

ð-           # 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

kapat! boşlukları kırpın! :)
jacksonecac

@ jacksonecac: Üzgünüm o kısmı kaçırdım. Şimdi düzeltildi :)
Emigna

iyi iş! bu çalışır!
16:14, jacksonecac

1
@carusocomputing: Son harften sonra rastgele karakterler de ekler. Sadece harflerin arasında değil.
Emigna

1
@Emigna Sorunun altındaki son bir yorumdan sonra bu iyi görünüyor :)
geisterfurz007

6

Java 7, 132 bayt

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;}

Hiçbir şey fantezi, beklediğiniz gibi sadece bir çift döngü. Dize döngü dış, rastgele doldurmak için iç:

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;
}

Gerek yok 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 bayt)
Olivier Grégoire

Oooh doğru. Farklı bir yöntemle kullanıyordum. Ben charoyuncu kadrosu ile gittiğimde dışarı çıkarmayı düşünmüyordu . Teşekkürler!
Geobits

Benim hatam. Yanlış saydım, önerim de 124 bayt oldu: Uzunluğun yerine sütunu kontrol ettim;)
Olivier Grégoire

Evet, ikisini karşılaştırırken fark ettim :)
Geobits

5

Pyke, 12 11 9 bayt

d-FQV~KHs

Burada deneyin!

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

OP'ye göre rastgele karakterler izlemek iyidir.


5

Oktav, 43 bayt

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

Bu girdi olarak bir dize sve bir tam sayı alır n. Octave'deki bir dize sadece bir karakter dizisidir. herhangi bir boşluk olmayan karakter için s>32mantıklı bir harita 1. Kod , 33 ve 126 arasında kayan nokta sayıları içeren nsatırlara ve aynı sayıda sütuna sahip bir matris ekler s(s>32). Örtük olarak tamsayılara yuvarlanır ve dizeyle birleştirildiğinde ASCII karakterlerine dönüştürülür s. (:)'bunu yatay bir karakter dizisiyle düzeltir.

Burada test edin!


1
Örtük yuvarlama! Güzel
Luis Mendo

4

Python 2, 123 122 118 114 98 Bayt

Dostum, keşke randomo kadar pahalı olmasaydı (ve boşluklara filtre uygulamak zorunda değiliz). Şimdi sonunda şifre karakterlerine izin verilmesinden büyük tasarruflarımız var :) Neyse, işte gidiyorsunuz:

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

4

JavaScript (Firefox 30+), 96 bayt

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

Saf ES6 iki bayt daha uzun:

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

Maalesef 26 bayt daha uzun olan gerçekten harika bir yaklaşım:

(s,n)=>String.raw({raw:s.split` `.join``},...[for(_ of s)String.fromCharCode(...[for(_ of Array(n))Math.random()*95+32])])

Kesinlikle konuşmak /. *(?=.)/, boşluklarda başlayan veya biten dizelerde işe yaramıyor, kimsenin umurunda değil. (Artık rastgele karakterleri takip etmene bile izin veriliyor.)
Neil

@ Neil Sondaki rastgele karakterlere izin veriliyor mu? Ben sadece (?=.)dizeleri sonunda boşluk ilgilenir kaldırabilirim .
ETHproductions 23:16

Spec çok net değil, ama o yüzden boş boşluk eklemeyi önlemek shold düşünüyorum 94+33yerine95+32
edc65

3

R, 97 bayt

Adsız işlev alma girişleri x(dize) ve 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="")

R-fiddle'da deneyin


3

CJam , 21 18 bayt

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

Çevrimiçi deneyin!

nRastgele sondaki karakterleri yazdırır .

açıklama

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.

3

Bash, 124 bayt

Saf bash + coreutils , kontrol akış yapısı yok, alt dil yok, "eval" yok

golfed

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

Ölçek

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

3

Q / KDB +, 39 36 34 Bayt

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

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

Kullanılan değişkenler:

s:"The treasure is here"
n:2

Bu, her bir öğe arasında sağa ve öncekine bırakılan işlevi uygulayan önceki zarfı kullanır . (Temel olarak, sağdaki her karakter arasında sola işlev uygular.)

40 ve 126 arasında n rasgele sayı üret ve sonra bunları bir karakter denklemine dönüştür: (q sadece bunlar için karakter içeriyor gibi görünüyor)

`char$40+n?87

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

Örnek çıktı:

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

DÜZENLEME:
q göstergesini k gösterimini kullanarak (, /) biçimine dönüştürerek 3 bayt kaydetti ve `` Güncelleme için @slackwear'a teşekkürler, 2 bayt traş :)


1
döküm ile birkaç bayt kurtarabilirsiniz10h$
skeevey

2

Java 8, 114 bayt

golfed

(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));})

Bir Tamsayı ve bir String kabul eden Lambda. Java 7 yanıtından esinlenerek, bazı Java 8 Stream sözdizimini kullanarak çift döngü (String.chars birkaç bayt kaydetmek için ) .

Giriş

3, "Hello world!"

Çıktı

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

2

Scala, 95 94 Bayt

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

Bir dize mkString kullanımının yanı sıra aşırı süslü bir şey yok. Dizeyi bir karakter listesi olarak ele alır ve aralarına bir ayırıcı eklememe izin verir. Ayırıcı, rasgele oluşturulmuş alfasayısal karakter sayısıdır.


Soruyu tam olarak cevaplamıyor. Doğası, Random.alphanumericher bir yığının aynı olmasına neden olur, bu yüzden topal bir şifre ... Bu örneğe bakın:scala> c("Hello", 1) res0: String = Hbeblblbo
Jacob

BTW, kaldırabilirsiniz filter. Bir Dizgeyi çağırmak mkStringkarakter dizisi olarak kabul edilir.
Jacob

@Jacob filtre, boşlukları kaldırmayı düşünebildiğim en etkili yoldur. Rastgele yeterli göründüğü gibi bıraktım, ancak zamanım varsa uygun rastgele metin için ayrı bir işlev ekleyeceğim.
Ethan

2

> <> (Balık), 107 106 103 bayt

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

Çevrimiçi deneyin!

Süper rastgele değil, ama rastgele. Dizeyi ve tamsayıyı yığına yerleştirin (Örnek: "Merhaba dünya!", 5).

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

Tam Açıklama

Açıklamayı güncelleyene kadar bu, kodun biraz daha eski bir sürümüdür. Çoğunlukla aynı, belki de okumak biraz daha kolay:

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

String parametresinin sve integer parametresinin taklit edeceğiz i.

< v}:{r&" "

<Etrafında sarar sola hemen taşımak için balık, söyler " "yığınına characted bir boşluk ekler. Daha sonra balık dolaşır &, bu da sicile alan ekler. ryığını tersine çevirir ve yığını {:}sola kaydırır (yığının isonuna koyarak ), yığının ucundaki değeri kopyalar, sonra sağa kaydırır. vbalıklara aşağı doğru hareket etmelerini söyler.

+1xv
+2<v
   }

xbalığa rastgele bir yönde hareket etmesini söyler, sonuçta balığın sağa doğru gitmesine ve aşağı doğru devam etmesine veya üstünden 1+veya önünden geçmesine neden olur 2+. Bunlar yığının sonundaki sayıya sırasıyla 1 veya 2 ekler. Balık yukarı doğru hareket ederse,v tekrar ve aşağı doğru hareket eder. }yığını sağa kaydırır, ardından iyığında 1 ve bu yeni değişkeni 0 konumuna getirir (diyelim m).

:&:<~ v!?=&

Bu bölüm bir işlevdir, buna whitespaceTrimmer diyelim . Olduğu yerde başlar <. Sadece yığının sonundaki boşlukları (dizenin başlangıcını) boşluk olmayan bir karaktere gelene kadar sıyırır.

Böylece balık hemen yüzer <ve sola doğru hareket etmelidir. Daha sonra:&:& , yığının ucundaki değeri kopyalayan, kayıttaki boşluğu yığının sonuna yerleştiren, kopyalayan ve daha sonra tekrar kayıt defterine yerleştiren çalışır.

Sonra balık vurur =?!v ~veya daha spesifik olarak, =son iki değeri (az önce oluşturduğumuz iki değer) yığının dışına çıkarır, karşılaştırır, eşitse yığının sonuna 1 ve 0 eğer farklılarsa yığının sonu. ?0 sonraki talimat, bu durumda olduğu yürütmüyor ise, yığının sonuna kapalı yeni bir değer çıkar !, bunun yerine yürütür vbalık aşağı yönde hareket etmesine emir (function çıkmadan).

Eğer 1 ise, o zaman bir boşluk bulmuştur, bu yüzden !bir trambolin olanı yürütür ve bu da balığın bir sonraki talimatı atlamasına neden olur v, bu da balık devam eder. Balığın önünde ~, son yığının (boşluk olduğu onaylandı) son değeri göstermesini söyler, sonra balık devam eder ve işlevi tekrar çalıştırır.

?!;a6.>ol2-

Balığın hemen a ile yüzmesi söylenir >, daha sonra yığındaki son karakteri çıktısı verilir o(bu ilk çalıştırıldığında, ilk karakteridir s). Yığının uzunluğunu alır, yığının sonuna la 2yerleştirir, sonra -2'nin çıkarılmasına neden olur l. Bu ?!;, ne yaptığının hatırlanmasıyla ?, balığın !yığın boşsa atlamasına neden olur ;ve programı bitirir.

Yığın üzerinde hala karakterler varsa !, balıkların zıplamasına ;ve yürütülmesine neden olan a6., hangi depoları a(AKA 10) ve koordinat 6olan yığının sonunda, onları istifleyin, ardından balıkları teleport edin ve bu pozisyonun sağındaki talimatları uygulayın (balıklar doğru yüzerken).x, y.10, 6

y6. pozisyonun bunun altındaki çizgi olduğunu fark ettiğinizde bu, göründüğünden daha az karmaşıktır . xkonum 10 o zaman vve bunun sağında, bu bir hareketsizliktir. Bu, balığın yüzmeye devam etmesine ve hatta hattın başında uygulamaya başlamasına neden olur ...

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

Karakterler arasına rastgele metin ekleyen işlev budur. Biraz ağız dolusu, ama bunun sebebi biraz ekstra rastgele yapmaya çalıştığım için. Buna diyelim genRandomChars diyelim .

:{{:}l1-[rvAslında fonksiyonu için kurulum ve gerçek işlevinin kendisi bir parçası daha az böyledir. Balık önce yüzer :{{, yığının ucundaki değeri kopyalar, sonra iki kez sola kaydırır. Eğer iyığındaki 1. pozisyonda olduğunu hatırlarsanız,i , artık yığının sonunda .

Balık daha sonra :}hangi kopyaların üzerine yüzdüğünü ive istifin sağına kaydırarak yığının ihem başına hem de sonuna yerleştirir . l1-[balık uzunluğunu yığının ucuna yerleştirir, 1'i çıkarır, sonra [yeni bir yığın oluşturur, l-1değerleri (yığının uzunluğu eksi 1) yeni yığına taşır (böylece sadece ieski yığının üzerinde bırakarak ). Sonra balık basitçe rvyığını tekrar tersine çevirir (yeni bir yığın oluşturmanın bir nedenden ötürü tersine çevirdiğini düşünüyorum) ve balığın bir kez daha aşağıya doğru yüzmesini emreder, gerçekten <aşağıdaki fonksiyona başlar .

Yani şu anda yığının sonu mve bizim geçici olarak iadlandırılacak ti. Balık hemen yüzer 1-}, bu da 1'i çıkarır tive yığının başlangıcına taşır. Sonra :}sadece kopyalar mve yığının başlangıcına taşır.ti yığın konumu 1'e ).

Bu küçük şeye çarptığımızda:

v2<
<1x|!
^3<

Bu aslında çok basit. !Atlamak için balık neden olur |ve yürütmek x. Ne yaptığını xhatırlayarak, balığın 4 yönde hareket ettiğini hatırlıyoruz. |sadece bir aynadır ve balığınx . Temel olarak, balık yığının ucuna 1, 2 veya 3 yerleştirecek ve sola hareket etmeye devam edecektir.

Balık daha sonra *+oyığındaki son iki değerin fırlatılmasına, çoğalmasına ve sonuçun tekrar itilmesine, ardından da ekleme ile aynı şeye neden olur, daha sonra son değer yığından çıkarılır ve çıktısı alınır o. Bizim yığın şimdi sadece ihtiva eden yine nispeten normal [ m, ti, s].

:}}:yığının ucundaki değerin (temel olarak s0 konumu) kopyalanmasına neden olur, ardından yığın iki kez sağa kaydırılır ( titekrar öne yerleştirilir ), sonra tikopyalanır. ?!vanlaması oldukça kolay olmalı. Temelde ti0 ise , fonksiyondan ile vçıkarız, aksi takdirde yürütürüz !ve atlarız v(başka bir döngü yapıyoruz).

Eğer tibiraz rasgele karakterler çıkışı 0 ve biz yapılır, o zaman yürütme vve bakın:

   v ~}}r]~<
.43<

Burada çok süslü bir şey yok. tiİle yığından kaldırıyoruz ~. Sonra ]yeni, tüm değerlerimizi yığından çıkarır ve eski yığına yerleştirir! Birlikte ters ters konunun Çünkü r, daha sonra iki kez doğru yığını kayması }}~bize veren sağa yığını shufting, [ m, i, s], ~çoğaltılamaz ekstra kaldırmaktır s[0]eğer ihtiyacın olur diye fonksiyon bakımından önceki bir döngü yapıyorduk (ama değiliz, çıkıyoruz). vaşağı yüzmek ve içine balık söyler >34.sadece sol yüzmek için ve içine balık söyler, (yürütme sırasını göstermek için ters) 3, 4(çünkü .bir atlama olduğunu!). 3, 4aslında sadece başlangıcın sağındawhitespaceTrimmer , seyahat ettiğimiz için mükemmeldir.

Tüm bu mantığın ardından, yığın nihai olarak boş olana ve program whitespaceTrimmeryürütüldükten hemen sonra çıkana kadar balıkları takip edebiliriz .


Hmm karakterin basılabilir olması gerektiğini görmedim. Bu, daha az rastgele ve daha küçük hale getirebilecek küçük bir değişiklik gerektirecektir.
redstarcoder

Gerçekten çok daha az rastgele görünmüyor. Çoğu durumda çalışması gerektiğine inanıyorum, henüz başarısız olmadı. Kesinlikle büyük veya küçük harflerle ve bazı sembollerle çalışacaktır. Eminim ki bu meydan okuma şartlarını yerine getiriyor.
redstarcoder

2

Perl 5, 81 bayt

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

Umarım aşağıdakiler tek astarın ne yaptığını anlamanıza yardımcı olur:

($_, $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.

1

Clojure, 126 123 118 122 117 bayt

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

İletiyi eşler, rastgele karakterler ekler ve ardından sonucu birleştirir.

Talimatlar, tüm dizgilerin sonuç dizesinden çıkarılması gerektiğini önermektedir. Yalnızca orijinal mesajdaki boşlukların çıkarılması gerekiyorsa, bunu değiştirebilirim.

Ungolfed:

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

1

Python 3, 127 Bayt

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

Muhtemelen gerekenden daha uzun, ama bu benim şimdiye kadar golf.


1
Bu, ilk karakterin önüne rastgele karakterler ekler ve boşluklar kırpılmaz. Her ikisinin de kuralları ihlal ettiğini düşünüyorum.
Stewie Griffin

1

PHP, 96 bayt

String'i bağımsız değişken 1 ve Number'ı bağımsız değişken 2 olarak alır

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

Çevrimiçi deneyin


1

Python 3, 133 Bayt

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

1

Node.js, 88 bayt

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

Örnek çıktılar:

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

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

Çevrimiçi deneyin!


1

C, 102100 bayt

Atlamak için -2 bayt continue.

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

Ungolfed:

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

Kullanımı:

main(){
  char a[]="A   A A";
  f(a,3);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.