Wygeneruj szyfr


15

Wygeneruj szyfr, podając liczbę i ciąg znaków

Twoje zadanie jest proste. Biorąc pod uwagę ciąg si liczbę 0 <= n <= 9jako dane wejściowe, wstaw pseudolosowy drukowalny znak ASCII między każdym znakiem czasów ciągu n. Tak, że dla każdej postaci sznajdują się nmiędzy nimi losowe znaki. Przestrzenie należy przyciąć.

Wejście:

  • Ciąg sfraza do szyfrowania w szyfru
  • liczba całkowita nz zakresu0 <= n <= 9

Przykład:

Wejście:

The treasure is here
2

Wynik:

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


To jest więc wygrywa najkrótszy kod! Powodzenia i miłej zabawy!


3
losowy znak ASCII do wydruku Musisz tutaj zdefiniować, co oznacza losowy . Czy wszystkie drukowane znaki ASCII mają takie samo prawdopodobieństwo? Czy powinny być statystycznie niezależne? Jaką mamy elastyczność w tym zakresie?
Luis Mendo

3
@jacksonecac Nie zgadzam się. Samo powiedzenie losowe nie wystarczy. Na przykład, jeśli wybiorę tylko losowe znaki z nawet kodami ASCII, to nadal jest losowe, ale prawdopodobnie nie jest akceptowane (czy istnieje?) Jeśli każda seria nznaków składa się z nkopii tego samego losowego znaku, są one nadal losowe, ale są nie statystycznie niezależny. I tak dalej
Luis Mendo

5
@jacksonecac „random” jest bardzo szerokim pojęciem. Czy mogę wybrać postacie o rozkładzie normalnym, aby postacie w okolicy Obyły bardziej prawdopodobne niż spacje lub ~? Jeśli musi być jednolity, powinieneś to wyraźnie powiedzieć. A jeśli nie musi być jednolity, powinieneś przynajmniej powiedzieć coś takiego, że każda postać musi mieć niezerowe prawdopodobieństwo. Ty również zaznaczono w poprzednim komentarzu, że każda postać ma mieć niezależną dystrybucję, więc jeśli to jest ważne, należy wspomnieć w wyzwaniu. Istnieje bardzo szerokie spektrum losowości.
Martin Ender

3
To nie jest tak naprawdę szyfr. Być może jest to steganograficzne.
Greg Martin

2
To nie jest odpowiednia odpowiedź na ważny punkt @MartinEnder. Rozwiązaniem byłoby wyraźne sprecyzowanie, że znaki muszą być jednolite i statystycznie niezależne od siebie, a komentarze zostaną zatrzymane. Alternatywną (ale bardziej otwartą na nadużycia) specyfikacją byłoby to, że wypaczone dystrybucje lub te, w których znaki są od siebie zależne, są OK, o ile wszystkie znaki mają niezerową możliwość wystąpienia. W kodzie specyfikacja golfa jest ważna dla uczciwości. Ponieważ wydajesz się nie chcieć odnieść się do tych ważnych komentarzy na temat skądinąd dobrego wyzwania, głosuję za jego zamknięciem.
Level River St

Odpowiedzi:


7

C #, 141 131 bajtów

Całkiem podobna do odpowiedzi Java @ Geobit , z wyjątkiem obecnie dłuższych :(

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

Pełna zawartość lambda:

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

dlaczego myślę, że R=...możesz po prostu użyć bezpośrednionew System.Random().Next(...)
Roman Gräf

2
@ RomanGräf msdn.microsoft.com/en-us/library/h343ddh9(v=vs.110).aspx Klasa losowa w języku C #, bez zarodka, będzie używać zegara systemowego, więc jeśli będziesz wywoływać w krótkich odstępach czasu (na przykład w ciągu pętla), większość wartości kończy się na identycznych wartościach, co w większości przypadków nie zadziałałoby :( Uwierz mi, zawsze staram się to zapamiętać.
Yodle,

7

05AB1E , 11 bajtów

ð-vy²FžQ.RJ

Wypróbuj online!

Wyjaśnienie

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

blisko! przycinaj przestrzenie! :)
jacksonecac

@jacksonecac: Przepraszam, tę część mi brakowało. Naprawiono teraz :)
Emigna

dobra robota! to działa!
jacksonecac

1
@carusocomputing: Dodaje także losowe znaki po ostatniej literze. Nie tylko pomiędzy literami.
Emigna,

1
@Emigna Po niedawnym komentarzu do pytania wydaje się, że jest w porządku :)
geisterfurz007

6

Java 7, 132 124 bajty

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

Nic szczególnego, tylko podwójna pętla, której można się spodziewać. Zewnętrzne, aby zapętlić ciąg, wewnętrzne, aby wypełnić losowe:

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

Nie ma potrzeby 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 bajtów)
Olivier Grégoire

Oooch racja. Użyłem go z inną metodą. Nie myślałem o tym, żeby go wyjąć, kiedy poszedłem z charobsadą. Dzięki!
Geobits,

Mój błąd. Źle przeliczyłem, moja sugestia zawierała również 124 bajty: sprawdziłem kolumnę zamiast długości;)
Olivier Grégoire,

Tak, zauważyłem, że porównując dwa :)
Geobits

5

Pyke, 12 11 9 bajtów

d-FQV~KHs

Wypróbuj tutaj!

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

Końcowe losowe znaki są w porządku według OP.


5

Oktawa, 43 bajty

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

Pobiera na wejściu ciąg znaków si liczbę całkowitą n. Ciąg w Octave to po prostu tablica znaków. s>32jest logiczną mapą 1dla dowolnych znaków spacji. Kod dołącza macierz z nwierszami i taką samą liczbą kolumn, jak s(s>32)ma, zawierającą liczby zmiennoprzecinkowe od 33 do 126. Jest domyślnie zaokrąglana do liczb całkowitych i konwertowana na znaki ASCII, gdy jest łączona z łańcuchem s. (:)'prostuje to do poziomej tablicy znaków.

Sprawdź to tutaj!


1
Niejawne zaokrąglenie! Nicea
Luis Mendo

4

Python 2, 123 122 118 114 98 bajtów

Człowieku, chciałbym, żeby randomnie było tak drogie (i żebyśmy nie musieli filtrować spacji). Teraz mamy duże oszczędności, ponieważ możemy mieć na końcu znaki zaszyfrowane :) W każdym razie, proszę:

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 bajtów

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

Pure ES6 ma dwa bajty dłużej:

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

Oto naprawdę fajne podejście, które jest niestety o 26 bajtów dłuższe:

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

Ściśle mówiąc /. *(?=.)/, nie działa na ciągi znaków rozpoczynające się lub kończące spacjami, nie na tym, że nikogo to nie obchodzi. (Teraz możesz nawet śledzić losowe postacie.)
Neil,

@Neil Końcowe losowe znaki są dozwolone? Chyba mogę po prostu usunąć to, (?=.)co zajmuje spacje na końcu łańcuchów.
ETHprodukcje

Specyfikacja nie jest tak jasna, ale myślę, że powinieneś unikać wstawiania spacji, więc 94+33zamiast95+32
edc65

3

R, 97 bajtów

Nienazwana funkcja przyjmująca dane wejściowe x(ciąg) i 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="")

Wypróbuj na skrzypcach R.


3

CJam , 21 lat 18 bajtów

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

Wypróbuj online!

Drukuje nlosowe znaki końcowe.

Wyjaśnienie

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 bajty

Pure Bash + Coreutils , brak struktur kontroli przepływu, brak podjęzyków, brak „eval”

Grał w golfa

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

Test

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

3

Q / KDB +, 39 36 34 bajtów

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

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

Zmienne w użyciu:

s:"The treasure is here"
n:2

To wykorzystuje wcześniejsze przysłówka, który stosuje funkcję po lewej stronie między każdym elementem po prawej stronie a jego poprzednikiem. (Zasadniczo stosuje funkcję po lewej stronie między każdą postacią po prawej stronie.)

Wygeneruj n liczb losowych od 40 do 126, a następnie przekonwertuj je na znaki ekwiwalentne: (wydaje się, że q ma tylko te znaki)

`char$40+n?87

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

Przykładowe dane wyjściowe:

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

EDYCJA:
Zapisano 3 bajty, przekształcając raze q w (, /) za pomocą notacji k i podobnie zmieniono przed `: Dzięki @slackwear za aktualizację, ogoliłem 2 bajty :)


1
może zaoszczędzić kilka bajtów, przesyłając za pomocą10h$
skeevey

2

Java 8, 114 bajtów

Grał w golfa

(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, który akceptuje liczbę całkowitą i ciąg. Zainspirowany odpowiedzią Java 7 podwójna pętla przy użyciu składni Java 8 Stream ( String.chars) w celu zaoszczędzenia kilku bajtów.

Wejście

3, "Hello world!"

Wynik

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

2

Scala, 95 94 bajtów

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

Nic nadzwyczajnego, oprócz użycia mkString na łańcuchu. Traktuje ciąg znaków jako listę znaków i pozwala mi wstawić między nimi separator. Moim separatorem jest odpowiednia liczba losowo generowanych znaków alfanumerycznych.


Nie do końca odpowiada na pytanie. Charakter Random.alphanumericspowoduje, że każdy fragment będzie taki sam, więc jest to kiepski szyfr ... Zobacz ten przykład:scala> c("Hello", 1) res0: String = Hbeblblbo
Jacob

BTW, możesz usunąć filter. Inwokacja mkStringciągu będzie traktować go jako kolekcję znaków.
Jacob

@Jacob filtr jest najbardziej wydajnym sposobem na usunięcie spacji. Zostawiłem losowy, ponieważ jest wystarczający, ale jeśli będę miał czas, dodam osobną funkcję dla poprawnego losowego tekstu.
Ethan

2

> <> (Ryba), 107 106 103 bajtów

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

Wypróbuj online!

To nie jest super losowe, ale jest losowe. Wystarczy umieścić ciąg i liczbę całkowitą na stosie (przykład: „Witaj świecie!”, 5).

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

Pełne wyjaśnienie

To jest nieco starsza wersja kodu, dopóki nie zaktualizuję wyjaśnienia. W większości jest taki sam, może nieco łatwiejszy do odczytania:

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

Udajemy, że parametrem ciągu jest, sa parametrem liczby całkowitej jest i.

< v}:{r&" "

<Mówi rybę od razu w lewo, który owija się wokół celu " ", który dodaje spację characted na stosie. Następnie ryba przemieszcza się &, co dodaje miejsce do rejestru. rodwraca stos i {:}przesuwa stos w lewo (umieszczenie ina końcu stosu), kopiuje wartość na końcu stosu, a następnie przesuwa go w prawo. vmówi rybie, aby zaczęła poruszać się w dół.

+1xv
+2<v
   }

xkaże rybom poruszać się w losowym kierunku, co ostatecznie prowadzi do tego, że ryba idzie w prawo i kontynuuje w dół, lub przechodzi 1+lub 2+wcześniej. Dodaje to odpowiednio 1 lub 2 do liczby na końcu stosu. Jeśli ryba przemieszcza się w górę, uderza vponownie i płynie z powrotem w dół. }przesuwa stos w prawo, a następnie ma ipozycję 1 na stosie i tę nową zmienną w pozycji 0 (nazwiemy to m).

:&:<~ v!?=&

Ta sekcja jest funkcją, nazwijmy ją whitespaceTrimmer . Zaczyna się tam, gdzie <jest. Po prostu usuwa spacje, które znajdują się na końcu stosu (czyli na początku łańcucha), aż napotka znak spacji.

Tak więc ryba natychmiast wpada do <i musi skręcić w lewo. Następnie biegnie do:&:& której kopiuje wartość na końcu stosu, umieszcza przestrzeń z rejestru na końcu stosu, kopiuje ją, a następnie umieszcza z powrotem na rejestrze.

Następnie ryba uderza =?!v ~, a ściślej mówiąc, =co wyrywa dwie ostatnie wartości (dwie, które właśnie utworzyliśmy) ze stosu, porównuje je, umieszcza 1 na końcu stosu, jeśli są równe, a 0 na koniec stosu, jeśli są różne. ?Wyskakuje nową wartość od końca stosu, jeśli jest 0 to nie wykonać następną instrukcję, która w tym przypadku jest !, zamiast tego Wykonuje v, który nakazuje ryby, aby przenieść w dół (wyjście z funkcji).

Jeśli jednak ma wartość 1, to znalazło miejsce, więc wykonuje !trampolinę, co powoduje, że ryba pomija następną instrukcję, czyli a v, więc ryba kontynuuje. Przed rybą widzi, ~co mówi mu, aby zrzuciła ostatnią wartość ze stosu (potwierdzoną spacją), a następnie ryba kontynuuje i ponownie uruchamia funkcję.

?!;a6.>ol2-

Ryba natychmiast przepływa przez a >, a następnie wypuszcza ostatnią postać na stosie o(która, przy pierwszym uruchomieniu, jest pierwszą postacią s). Pobiera długość stosu l, umieszcza a 2na końcu stosu, a następnie -powoduje odjęcie 2 l. Uderza, ?!;co, pamiętając o tym, co ?powoduje, powoduje, że ryba przeskakuje, !jeśli stos jest pusty, i ląduje; , co kończy program.

Następnie, jeśli na stosie nadal znajdują się postacie, wykonujemy polecenie, !które powoduje, że ryba odbija się od niego ;i wykonujemy a6., który przechowuje a(AKA 10), a 6na końcu stosu, którego x, ywspółrzędne są współrzędne ., co wyskakuje z końca stos, następnie teleportuje rybę 10, 6i wykonuje instrukcje po prawej stronie tej pozycji (gdy ryba płynie w prawo).

Jest to mniej skomplikowane, niż się wydaje, gdy uświadomisz sobie, że ypozycja 6 to linia poniżej tego. xpozycja 10 jest wtedy v, a po jej prawej stronie , co jest opcją. Powoduje to, że ryba dalej pływa w prawo i faktycznie zaczyna wykonywanie na początku linii ...

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

Jest to funkcja, która dodaje losowy tekst między znakami. To trochę kęs, ale tylko dlatego, że starałem się, aby było trochę bardziej losowe. Nazwijmy to genRandomChars .

W :{{:}l1-[rvrzeczywistości jest to konfiguracja funkcji, a tym bardziej część samej funkcji. Ryba najpierw przepływa, nad :{{którą kopiuje wartość na końcu stosu, a następnie dwukrotnie przesuwa ją w lewo. Jeśli przypomnisz sobie, że ibyło to w pozycji 1 na stosie, to wieszi teraz jest na końcu stosu.

Ryba następnie przepływa przez :}które kopie ii przesuwa stos w prawo, umieszczając izarówno na początku, jak i na końcu stosu. l1-[ryba umieszcza długość na końcu stosu, odejmuje 1 od niego, a następnie [tworzy nowy stos, przenosząc wartości l-1(długość stosu minus 1) na nowy stos (pozostawiając tylko istary stos). Następnie ryba po prostu uderza, rvco ponownie odwraca stos (myślę, że utworzenie nowego stosu odwraca go z jakiegoś powodu), i każe rybom ponownie opłynąć w dół, naprawdę rozpoczynając funkcję na< poniżej.

Tak więc obecnie koniec stosu ma mnasz tymczasowy i, który nazwiemy ti. Ryba natychmiast przepływa 1-}, co odejmuje 1 tii przenosi ją na początek stosu. Następnie, :}który po prostu kopiuje mi przenosi go na początek stosu (umieszczenie tiw pozycji stosu 1).

Właśnie wtedy uderzamy w tę małą rzecz:

v2<
<1x|!
^3<

To jest naprawdę bardzo proste. !Powoduje ryby do pominąć |i wykonania x. Pamiętając, co xrobi, pamiętamy, że powoduje to, że ryba porusza się w 4 dowolnych kierunkach. |jest po prostu lustrem i powoduje, że ryba wraca do x. Zasadniczo ryba umieści 1, 2 lub 3 na końcu stosu i będzie kontynuować ruch w lewo, owijając się wokół.

Ryba następnie wykonuje, *+oco powoduje, że ostatnie dwie wartości na stosie są usuwane, mnożone razem, a wynik przesuwa się z powrotem, potem to samo z dodawaniem, a następnie końcowa wartość jest usuwana ze stosu i generowana za pomocą o. Nasz stos jest teraz stosunkowo znowu normalny zawierający tylko [ m, ti, s].

:}}:powoduje sskopiowanie wartości na końcu stosu (zasadniczo pozycja 0), następnie stos jest dwukrotnie przesuwany w prawo ( tiponowne umieszczanie na przodzie), a następnie tikopiowany. ?!vdo tej pory powinno być dość łatwe do zrozumienia. Zasadniczo, jeśli tiwynosi 0, to wychodzimy z funkcji za pomocą v, w przeciwnym razie wykonujemy !i pomijamy v(wykonując kolejną pętlę).

Jeśli tima wartość 0 i skończyliśmy wyprowadzać nieco losowe znaki, wówczas wykonujemy vi widzimy:

   v ~}}r]~<
.43<

Nic nadzwyczajnego. Usuwamy tize stosu za pośrednictwem ~. Następnie ]jest nowy, usuwa wszystkie nasze wartości ze stosu i umieszcza je na starym stosie! Z powodu problemu odwracania odwrócić się r, a następnie przesunąć stos prawo dwukrotnie }}~, shufting stos do prawej strony, przedstawiając nam [ m, i, s], sygnał ~jest usunięcie Extra kopiowane s[0]z wcześniej funkcji jak my potrzebujemy go, jeśli robiliśmy pętlę (ale nie, wychodzimy). vkaże rybom płynąć w dół i do >34.(odwrócony, aby pokazać kolejność wykonywania), co oznacza, że ​​ryba po prostu płynie w lewo i do 3, 4(bo .to skok!). 3, 4jest właściwie na samym początkuwhitespaceTrimmer, co jest idealne, ponieważ podróżujemy w lewo.

Postępując zgodnie z tą logiką, możemy podążać za rybą, aż stos będzie ostatecznie pusty i program zakończy się zaraz po whitespaceTrimmerwykonaniu.


Hmm, nie widziałem, że postać musi być do wydruku. Będzie to wymagać niewielkiej modyfikacji, która może sprawić, że będzie mniej losowa i mniejsza.
redstarcoder

To naprawdę nie wygląda na mniej losowe. Wierzę, że powinno to działać w większości przypadków, jeszcze nie miałem awarii. Na pewno będzie działał z dowolną wielką lub małą literą oraz niektórymi symbolami. Jestem prawie pewien, że spełnia to wymagania.
redstarcoder

2

Perl 5, 81 bajtów

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

Mam nadzieję, że poniższe informacje pomogą ci zrozumieć, co robi liniowiec:

($_, $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 bajtów

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

Mapuje wiadomość, wstawia losowe znaki, a następnie konkatenuje wynik.

Instrukcje sugerują, że należy usunąć wszystkie spacje z ciągu wynikowego. Jeśli mają zostać usunięte tylko spacje z oryginalnej wiadomości, mogę to zmienić.

Nie golfowany:

(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 bajtów

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

Prawdopodobnie znacznie dłużej niż to konieczne, ale do tej pory jest to moja gra w golfa.


1
Dodaje to losowe znaki przed pierwszym znakiem, a spacje nie są przycinane. Myślę, że obie te rzeczy łamią zasady.
Stewie Griffin

1

PHP, 96 bajtów

Pobiera Ciąg jako argument 1, a Liczba jako argument 2

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

Wypróbuj online


1

Python 3, 133 bajtów

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 bajtów

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

Przykładowe wyniki:

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

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

Wypróbuj online!


1

C, 102 100 bajtów

-2 bajty do pominięcia continue.

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

Nie golfowany:

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

Stosowanie:

main(){
  char a[]="A   A A";
  f(a,3);
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.