Erzeugen Sie eine Chiffre mit einer Zahl und einer Zeichenkette
Ihre Aufgabe ist einfach. Fügen Sie bei einer Zeichenfolge s
und einer Zahl 0 <= n <= 9
als Eingaben ein pseudozufälliges druckbares ASCII-Zeichen zwischen die Zeichen der Zeichenfolgenzeiten n
ein. So dass die für jedes Zeichen s
gibt es n
zufällige Zeichen zwischen ihnen. Leerzeichen sollten gekürzt werden.
Eingang:
- Zeichenfolge
s
, die in der Chiffre verschlüsselt werden soll - Ganzzahl
n
im Bereich von0 <= n <= 9
Beispiel:
Eingang:
The treasure is here
2
Ausgabe:
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
Das ist Code-Golf, also gewinnt der kürzeste Code! Viel Glück und hab Spaß!
code-golf
string
random
cryptography
jacksonecac
quelle
quelle
n
Zeichenfolge ausn
Kopien desselben zufälligen Zeichens besteht, sind sie dennoch zufällig nicht statistisch unabhängig. Und so weiterO
eher als Leerzeichen vorkommen oder~
? Wenn es einheitlich sein muss, sollten Sie dies ausdrücklich sagen. Und wenn es nicht einheitlich sein muss, sollten Sie zumindest so etwas wie die Wahrscheinlichkeit angeben, dass jedes Zeichen eine von Null verschiedene Wahrscheinlichkeit haben muss. Sie haben auch in einem frühen Kommentar erklärt , dass jeder Charakter hat eine unabhängige Verteilung haben, also , wenn dies wichtig ist, sollte es in der Herausforderung zu nennen. Es gibt ein sehr breites Spektrum an Zufälligkeiten.Antworten:
C #,
141131 BytesZiemlich ähnlich wie die Java-Antwort von @ Geobit , außer dass sie derzeit länger dauert :(
Volles Lambda-Zeug:
quelle
R=...
kann man einfach direkt benutzennew System.Random().Next(...)
ich denke05AB1E , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java 7,
132124 BytesNichts Besonderes, nur eine Doppelschleife, wie man es erwarten würde. Äußer, um die Zeichenfolge zu schleifen, inner, um Zufälligkeiten auszufüllen:
quelle
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 Bytes)char
Besetzung ging. Vielen Dank!Pyke,
12119 BytesProbieren Sie es hier aus!
Nachgestellte zufällige Zeichen sind laut OP in Ordnung.
quelle
Oktave, 43 Bytes
Hierfür werden eine Zeichenfolge
s
und eine Ganzzahln
als Eingabe verwendet. Ein String in Octave ist einfach ein Array von Zeichen.s>32
ist eine logische Karte1
für alle Nicht-Leerzeichen. Der Code hängt eine Matrix mitn
Zeilen und der gleichen Anzahl von Spalten ans(s>32)
, die Gleitkommazahlen zwischen 33 und 126 enthält. Sie wird implizit auf ganze Zahlen gerundet und in ASCII-Zeichen konvertiert, wenn sie mit der Zeichenfolge verknüpft wirds
.(:)'
Begradigt dies auf ein horizontales Array von Zeichen.Teste es hier!
quelle
Python 2,
12312211811498 BytesMann, ich wünschte,
random
es wäre nicht so teuer (und wir müssten nicht nach Leerzeichen filtern). Jetzt haben wir große Ersparnisse, wenn wir am Ende Chiffrierzeichen haben dürfen :) Wie auch immer, hier geht's:quelle
JavaScript (Firefox 30+), 96 Byte
Pure ES6 ist zwei Bytes länger:
Hier ist ein wirklich cooler Ansatz, der leider 26 Bytes länger ist:
quelle
/. *(?=.)/
funktioniert das nicht für Zeichenfolgen, die in Leerzeichen beginnen oder enden, und es interessiert niemanden. (Sie dürfen jetzt sogar zufällige Zeichen nachziehen.)(?=.)
die Leerzeichen am Ende der Zeichenfolgen entfernt.94+33
statt95+32
R 97 Bytes
Unbenannte Funktion, die Eingaben
x
(Zeichenfolge) undn
.Probieren Sie es auf R-Geige
quelle
CJam ,
2118 BytesProbieren Sie es online!
Druckt
n
zufällige nachgestellte Zeichen.Erläuterung
quelle
Bash, 124 Bytes
Pure bash + coreutils , keine Kontrollflussstrukturen, keine Untersprachen, kein "eval"
Golf gespielt
Prüfung
quelle
Q / KDB +,
39 3634 BytesVerwendete Variablen:
Dabei wird das vorherige Adverb verwendet, das die Funktion links zwischen jedem Element rechts und dem Vorgänger anwendet. (Wendet die Funktion im Wesentlichen links zwischen den einzelnen Zeichen rechts an.)
Generieren Sie n Zufallszahlen zwischen 40 und 126 und konvertieren Sie sie dann in ein Zeichen, das gleichberechtigt ist: (q scheint nur Zeichen für diese zu haben)
Beispielausgabe:
BEARBEITEN:
3 Bytes durch Konvertieren von qs raze in (, /) unter Verwendung der k-Notation gespeichert und in ähnlicher Weise vor `geändert: Danke an @slackwear für das Update, 2 Bytes rasiert :)
quelle
10h$
Java 8, 114 Bytes
Golf gespielt
Lambda, das eine Ganzzahl und eine Zeichenfolge akzeptiert. Inspiriert von der Java 7-Antwort, doppelte Schleife mit etwas Java 8-Stream-Syntax (
String.chars
), um ein paar Bytes zu sparen.Eingang
Ausgabe
quelle
Scala,
9594 BytesNichts Besonderes außer der Verwendung von mkString on a String. Die Zeichenfolge wird als Liste von Zeichen behandelt, und ich kann ein Trennzeichen zwischen ihnen einfügen. Mein Trennzeichen ist die entsprechende Anzahl zufällig generierter alphanumerischer Zeichen.
quelle
Random.alphanumeric
wird dazu führen, dass jeder Chunk gleich ist, so dass es eine lahme Chiffre ist ... Siehe dieses Beispiel:scala> c("Hello", 1) res0: String = Hbeblblbo
filter
. Beim AufrufenmkString
einer Zeichenfolge wird diese als Zeichensammlung behandelt.> <> (Fisch),
107106103 BytesProbieren Sie es online!
Es ist nicht super zufällig, aber es ist zufällig. Legen Sie einfach den String und die ganze Zahl auf den Stapel (Beispiel: "Hallo Welt!", 5).
Vollständige Erklärung
Dies ist eine etwas ältere Version des Codes, bis ich die Erklärung aktualisiere. Es ist meistens dasselbe, nur vielleicht ein bisschen einfacher zu lesen:
Wir werden so tun, als wäre der String-Parameter
s
und der Integer-Parameteri
.Der
<
Befehl weist den Fisch an, sich sofort nach links zu bewegen, woraufhin" "
der Stapel um ein Feld erweitert wird. Dann reist der Fisch vorbei&
, was dem Register den Platz hinzufügt.r
Kehrt den Stapel um und{:}
verschiebt den Stapel nach links (setzti
das Ende des Stapels auf), kopiert den Wert am Ende des Stapels und verschiebt ihn dann nach rechts.v
sagt dem Fisch, er solle sich nach unten bewegen.x
weist den Fisch an, sich in eine zufällige Richtung zu bewegen, was letztendlich dazu führt, dass der Fisch nach rechts und weiter nach unten geht oder über1+
oder vorüber geht2+
. Diese addieren jeweils 1 oder 2 zur Zahl am Ende des Stapels. Wenn der Fisch aufwärts reist, trifft erv
erneut und reist wieder abwärts.}
verschiebt den Stapel nach rechts und hat dann diei
Position 1 auf dem Stapel und diese neue Variable die Position 0 (wir nennen esm
).Dieser Abschnitt ist eine Funktion, nennen wir sie WhitespaceTrimmer . Es beginnt dort, wo es
<
ist. Leerzeichen am Ende des Stapels (also am Anfang der Zeichenfolge) werden entfernt, bis ein Nicht-Leerzeichen angezeigt wird.Also schwimmt der Fisch sofort in ein
<
und muss nach links fahren. Anschließend wird ausgeführt, in:&:&
welche der Wert am Ende des Stapels kopiert wird, der Speicherplatz aus dem Register auf das Ende des Stapels platziert wird, kopiert und dann wieder auf das Register zurückgesetzt wird.Dann trifft der Fisch
=?!v ~
, oder genauer gesagt,=
der die letzten beiden Werte (die beiden, die wir gerade erstellt haben) aus dem Stapel entfernt, vergleicht sie, setzt eine 1 am Ende des Stapels, wenn sie gleich sind, und eine 0 an das Ende des Stapels, wenn sie unterschiedlich sind. Das?
löscht den neuen Wert vom Ende des Stapels. Wenn er 0 ist, führt es nicht den nächsten Befehl aus. In diesem Fall!
führt es stattdessen den folgenden Befehl ausv
, der den Fisch auffordert , sich nach unten zu bewegen (die Funktion zu verlassen).Wenn es jedoch 1 ist, dann hat es ein Leerzeichen gefunden, so dass es das ausführt,
!
was ein Trampolin ist, und das den Fisch veranlasst, die nächste Anweisung zu überspringen, die a istv
, so dass der Fisch fortfährt. Vor dem Fisch sieht er,~
welcher ihn auffordert, den letzten Wert vom Stapel zu nehmen (bestätigt als Leerzeichen), dann fährt der Fisch fort und führt die Funktion erneut aus.Der Fisch wird sofort angewiesen, direkt von a zu schwimmen
>
, und gibt dann das letzte Zeichen auf dem Stapel von auso
(das erste Mal, wenn dies ausgeführt wird, ist das erste Zeichen vons
). Er erhält die Länge des Stapels vonl
, platziert a2
am Ende des Stapels und-
bewirkt dann, dass 2 von subtrahiert wirdl
. Es trifft auf?!;
das, was?
den Fisch veranlasst,!
den Stapel zu überspringen, wenn er leer ist, und landet auf dem Stapel;
, wodurch das Programm beendet wird.Wenn sich noch Zeichen auf dem Stapel befinden, wird ausgeführt
!
, wodurch der Fisch über den AKA- Speicher springt;
und ausgeführta6.
wird , und am Ende des Stapels werden die Koordinaten für dena
AKA- Speicher angezeigt , der sie vom Ende des AKA- Speichers abwirft stapeln, dann teleportieren Sie den Fisch zu und führen Sie die Anweisung rechts von dieser Position aus (da der Fisch richtig schwimmt).10
6
x, y
.
10, 6
Dies ist weniger kompliziert als es sich anhört, wenn Sie erkennen, dass
y
Position 6 die Linie unter dieser Position ist.x
Position 10 ist dannv
, und rechts davon ist, was ein No-Op ist. Dies führt dazu, dass der Fisch richtig weiter schwimmt und die Ausführung tatsächlich am Anfang der Linie beginnt ...
Dies ist also die Funktion, die den zufälligen Text zwischen den Zeichen hinzufügt. Es ist ein bisschen mundvoll, aber das ist nur, weil ich versucht habe, es ein bisschen extra zufällig zu machen. Nennen wir das genRandomChars .
Das
:{{:}l1-[rv
ist eigentlich das Setup für die Funktion, und weniger so einen Teil der eigentlichen Funktion selbst. Der Fisch schwimmt zuerst:{{
, kopiert den Wert am Ende des Stapels und verschiebt ihn dann zweimal nach links. Wenn Sie sich erinnern, dassi
sich das auf Position 1 des Stapels befand, wissen Sie, dassi
es sich jetzt am Ende des Stapels befindet.Der Fisch schwimmt dann über
:}
die Kopieni
und verschiebt den Stapel nach rechts, wobei eri
sowohl am Anfang als auch am Ende des Stapels platziert.l1-[
Lässt der Fisch die Länge am Ende des[
Stapels platzieren, zieht 1 davon ab und erstellt dann einen neuen Stapel, wobei diel-1
Werte (Stapellänge minus 1) zum neuen Stapel verschoben werden (so dass nuri
der alte Stapel übrig bleibt). Dann schlägt der Fisch einfach zu,rv
was den Stapel wieder umkehrt (ich denke, das Erzeugen eines neuen Stapels kehrt ihn aus irgendeinem Grund um), und befiehlt dem Fisch, noch einmal nach unten zu schwimmen, wobei die Funktion wirklich unten beginnt<
.Also hat derzeit das Ende des Stacks
m
und unsere temporärei
, die wir nennen werdenti
. Sofort schwimmt der Fisch vorbei1-}
, der 1 abziehtti
und an den Anfang des Stapels verschiebt. Dann wird es:}
einfach kopiertm
und an den Anfang des Stapels verschoben (ti
Position 1 des Stapels ).Dies ist, wenn wir dieses kleine Ding treffen:
Das ist eigentlich ganz einfach. Das
!
bewirkt, dass der Fisch überspringt|
und ausgeführt wirdx
. Wennx
wir uns erinnern, was passiert, bewegen sich die Fische in 4 Richtungen.|
ist einfach ein Spiegel und bewirkt, dass der Fisch zurückschwimmtx
. Im Grunde genommen wird der Fisch 1, 2 oder 3 auf das Ende des Stapels legen und sich weiter nach links bewegen und herumwickeln.Der Fisch wird dann ausgeführt
*+o
, wodurch die letzten beiden Werte auf dem Stapel abgehoben, multipliziert und das Ergebnis zurückgeschoben werden. Dann wird das Gleiche mit Addition ausgeführt. Dann wird der Endwert vom Stapel genommen und mit ausgegebeno
. Unser Stapel ist jetzt relativ normal wieder enthält nur [m
,ti
,s
].:}}:
bewirkt, dass der Wert am Ende des Stapels (im Grundes
Position 0) nicht kopiert wird, dann wird der Stapel zweimal nach rechts verschoben (ti
wieder vorne platziert) und dannti
kopiert.?!v
sollte mittlerweile ziemlich einfach zu verstehen sein. Im Grunde genommen verlassenti
wir die Funktion mitv
, wenn sie 0 ist , andernfalls führen wir eine andere Schleife aus!
und überspringenv
sie.Wenn
ti
0 ist und wir keine leicht zufälligen Zeichen mehr ausgeben, führen wir Folgendes ausv
und sehen:Nichts Besonderes hier. Wir entfernen
ti
vom Stapel über~
. Dann]
ist es neu, es wirft alle unsere Werte vom Stapel und legt sie auf den alten Stapel! Aufgrund der Umkehrung Problems , das wir mit umkehrenr
, dann den Stapel nach rechts verschieben zweimal mit}}~
, shufting den Stapel nach rechts, was uns [m
,i
,s
], das~
ist die zusätzliche dupliziert entfernens[0]
von früher in der Funktion , wie wir es brauchen würden , wenn Wir machten eine Schleife (aber wir sind nicht, wir verlassen).v
sagt den Fischen, dass sie hinunter und hinein schwimmen sollen>34.
(invertiert, um die Ausführungsreihenfolge anzuzeigen), was den Fischen sagt, dass sie einfach nach links und hinein schwimmen sollen3, 4
(weil das.
ein Sprung ist!).3, 4
ist eigentlich nur rechts vom anfangwhitespaceTrimmer
, was perfekt ist, weil wir links unterwegs sind.Nach all dieser Logik können wir den Fischen folgen, bis der Stapel endgültig leer ist und das Programm unmittelbar nach der
whitespaceTrimmer
Ausführung beendet wird.quelle
Perl 5, 81 Bytes
Ich hoffe, das Folgende hilft Ihnen zu verstehen, was der Einzeiler macht:
quelle
Clojure,
126123118122117 BytesOrdnet die Nachricht zu, fügt zufällige Zeichen ein und verkettet das Ergebnis.
Die Anweisungen schlagen vor, dass alle Leerzeichen aus der Ergebniszeichenfolge entfernt werden sollten. Wenn nur Leerzeichen aus der Originalnachricht entfernt werden sollen, kann ich das ändern.
Ungolfed:
quelle
Python 3, 127 Bytes
Wahrscheinlich viel länger als nötig, aber das ist meins, das bisher golfen hat.
quelle
PHP, 96 Bytes
Nimmt String als Argument 1 und Number als Argument 2
Probieren Sie es online aus
quelle
Python 3, 133 Bytes
quelle
Node.js, 88 Bytes
Beispielausgaben:
Probieren Sie es online!
quelle
C
102100 Bytes-2 Bytes zum Überspringen
continue
.Ungolfed:
Verwendung:
quelle