Was ist der kürzeste Weg, um eine zufällige Zeichenfolge mit einer bestimmten Länge und nur alphanumerischen Zeichen zu generieren?
- Beispiel für eine zufällige Zeichenfolge: mit N = 9 wäre die Ausgabe
aZua7I0Lk
- Es kann angenommen werden, dass die angegebene Länge N immer größer als 0 ist
- Bei Bedarf können Sie 256 als Maximalwert für N annehmen. Lösungen mit höheren Grenzwerten für N und einer dennoch schnellen Berechnungszeit werden jedoch bevorzugt
- Zulässige Zeichen: 0-9, az und AZ
- Ein Zeichen kann in der Ausgabezeichenfolge mehrmals vorkommen
- Jede mögliche Zeichenfolge sollte gleich wahrscheinlich sein (entsprechend der Genauigkeit des Zufallszahlengenerators Ihrer Sprache).
Antworten:
Gelee , 4 Bytes
Probieren Sie es online!
Erläuterung
Die kartesische Potenz erzeugt im Grunde genommen alle Listen einer gegebenen Länge, die aus einer gegebenen Menge von Elementen gebildet werden können. Genau das brauchen wir hier.
quelle
Taxi , 2577 Bytes
Probieren Sie es online!
Taxi ist super dafür nicht gemacht aber man kann es schaffen! Ich werde versuchen zu erklären, was unter der nicht golfenen Version passiert.
Start: Get stdin
Nimm den stdin-Wert als Text, wandle ihn in eine Zahl um und klebe ihn irgendwo hin, um zu warten.
Planen Sie einen Teil 1: Holen Sie sich eine zufällige Ganzzahl 1-62
Holen Sie sich eine zufällige Ganzzahl und dann
62
als Zahl. Dupliziere sowohl die zufällige Ganzzahl als auch die,62
weil wir sie später brauchen werden. Sie können nur drei Passagiere befördern einmal , so dass wir am Ende mitrand
,rand
und62
. (Der andere62
wartet, bis wir zurück sind.) Teilen Sierand
durch62
und kürzen Sie das Ergebnis, um eine Ganzzahl zu erhalten. Gehen Sie zurück, um die andere Kopie von zu erhalten,62
und multiplizieren Sie sie mit der abgeschnittenen Ganzzahl aus der Division. Zuletzt subtrahieren Sie das Produkt von der ersten Kopie vonrand
. Dies gibt uns eine Nummer 0-61. Jetzt müssen wir zurückgehen, um a aufzunehmen1
und zum Ergebnis zu addieren, um eine Zahl von 1-62 zu erhalten. Ja, all diese vielen Textzeilen sind gerechtmod(rand(),62)+1
.Planen Sie einen Teil 2: Erstellen Sie ein Array von Zeichen, aus dem Sie auswählen können. Wählen Sie
eine Zeichenfolge mit allen gültigen Zeichen und einer am Ende, die wir nicht möchten (dazu später mehr). Das, was
63
wir früher abgeholt haben, passt zu dieser Saitenlänge. Bringen Sie es zu Chop Suey, um es in einzelne Passagiere aufteilen zu lassen.Plan B: Verschieben Sie das Array, damit wir einen Charakter
nach dem anderen auswählen können. Verschieben Sie jeden Charakter in den Narrow Path Park. Es ist der einzige verfügbare Stapel und der einzige Weg, nicht restliche Passagiere im Weg zu haben. Alles andere in Townsburg ist FIFO, also müsste ich bei jeder Wiederholung der gesamten Runde alle Passagiere räumen. Auf diese Weise kann ich sie einfach im Park lassen und sie werden jedes Mal von den 63 neuen Charakteren aus dem Weg gestoßen. Das allererste
A
ist wahrscheinlich nie entkommen .Plan C: Bereite dich auf die Auswahl eines Charakters vor
Dies sind nur ein paar Stationen, die nicht in Plan D enthalten sein mussten. Positionieren Sie das Taxi in Vorbereitung neu.
Plan D: Holen Sie sich alle Zeichen, die wir nicht wollen.
Beginnen Sie mit dem ersten Zeichen im umgekehrten "Array" (dies ist das 63. Zeichen, das wir nicht wollen) und sammeln und verketten Sie die Zeichen, während wir vom Ergebnis der
mod
Funktion abwärts zählen in Plan A. Sobald Sie Null getroffen haben, ist das nächste Zeichen das gewünschte.Plan E: Ertrinke die, die du nicht willst, und gib den Auserwählten zurück.
"[P] Assenger, die an der Riverview Bridge abgesetzt wurden, scheinen immer über die Seite und in den Fluss zu fallen ..." Nun, das wird die verkettete Reihe von Verlierern los. Nimm das nächste Zeichen und sende es an stdout. Lassen Sie uns abschließend überprüfen, wie viele Zeichen wir bisher gedruckt haben. Zurück zu Sunny Skies, um den Standardwert zu ermitteln, den wir vor langer Zeit verlassen haben. Subtrahieren Sie eins und senden Sie es zurück, um zu warten, falls das Ergebnis größer als null ist. Beginnen Sie dann erneut bei Plan A.
quelle
code-bowling
and was revised down. The longestcode-golf
answer I could find is the original Brain-Flak submission on the basic quine challenge. It comes it at 9.5*10^580 bytes. The longest current answer I found was a prime tester in Unary: 1.65*10^56 bytes.C (gcc),
575552 bytesThanks to 2501 for the pointers...
Try it online!
quelle
rand()%74
should berand()%75
&&putchar(i)
instead of the ternary operator.Jelly, 5 bytes
Missed a trick - see ais523's 4 byter
Try it online!
How?
quelle
Shell + pwgen, 13 bytes
Sample output
quelle
Java 8,
1831499788 bytesTry it online.
-9 bytes by porting @2501's C answer, so make sure to upvote him as well!
Old answer, 97 bytes
Try it online.
Explanation:
quelle
C, 60 bytes
See it work here.
See the distribution here.
It is uniformly distributed, assuming
rand() % 62
produces a uniform distribution. Since 62 usually doesn't evenly divide RAND_MAX, there is a very small bias.quelle
Snowman, 58 bytes
Try it online!
This is a subroutine that takes an integer as input and returns the random string.
quelle
((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR))
.PowerShell,
5854 Bytes-4 thanks to Andrei Odegov - casting to a char array instead of looping to create a char array.
generates a range
1..2+4..5 = 1,2,4,5
of all the acceptable charachter codes, then selects$args
number of elements randomly usingrandom -Count
- the resulting elementsare looped throughare cast to an array of chars using|%{}
and turned into[char]
s,[char[]]
- then the whole thing is encapsulated in brackets and-join
ed together.Does not work for an input of 0 as
Get-Random
only accepts numbers above 1 for the-Count
parameter.quelle
-join[char[]](65..90+97..122+48..57|random -C "$args")
PHP, 56 Bytes
Online Version
ctype_alnum
quelle
05AB1E, 6 bytes
Try it online!
Explanation
quelle
Perl 5, 41 bytes
40 bytes of code +
-p
flag.Try it online!
(a..z,A..Z,0..9)
creates an array containing all letters and numbers,[rand 62]
returns an random element of this array, which is append (.=
) to$\
, which is implicitly printed at the end thanks to-p
flag with}{
.Or, for the same bytecount, but using the parameters rather than the standart input:
Try it online!
quelle
R, 51 bytes
Same length as the other R answer, but a different approach.
letters
andLETTERS
both are built-in variables containing all lower and uppercase letters respectively. Adding0:9
to that and we have the entire set of alphanumeric characters.quelle
R,
54525149 bytesExplanation:
scan()
c(65:90,97:122,48:57)
sample(c(65:90,97:122,48:57),scan(),T)
intToUtf8
quelle
JavaScript (ES6),
6154395264 bytesThis is almost like reverse-golf! Took a big hit on the byte count ensuring that the full range of characters from all three groups would be used.
Try it
quelle
[0-5w-z]
exclusively.btoa(String.fromCharCode(Math.random()*248))[0]
to cover the whole range uniformly.toString
and then encode) in order to guarantee a full range of characters from all 3 groups can be returned.014589ABEFIJMNQRUVYZcdghklopstwx
(and not uniform).Alice, 24 bytes
Try it online!
This layout is already a lot better than what I originally had (32 bytes), but I'm sure it's not optimal yet...
Explanation
quelle
Python + exrex, 81 bytes
quelle
Python 2,
798379 bytes+4 bytes (didn't account for repetition)
-4 bytes (Thanks to @Rod for the suggestion for using
printable[:62]
)quelle
(s.letters+s.digits)*x
insteads.letters+s.digits
`r.sample(...)`[2::5]
instead''.join(r.sample(...))
to save a byte (python 2 only) and(s.letters+s.digits)*x
can be switched tos.printable[:62]*x
to save 4 bytesprintable
, couldn't get the[2::5]
to work (maybe I was doing it wrong?)r.sample()
with backticks``
some info about itBrachylog, 14 bytes
Try it online!
Explanation
quelle
MATL, 8 bytes
Try it online!
quelle
Batch, 175 bytes
s
performs double duty here as it contains both the alphanumeric list and the randomly selected characters. After printing the result the code falls through to the subroutine whose result is ignored.quelle
Pyke, 4 bytes
Try it online!
quelle
MemoryError
Pyth,
711 bytesTry it online
Explanation
quelle
C# - 121 bytes
quelle
APL (Dyalog) with AGL, 17 bytes
Try it online!
(
…)[
…]
index into⎕A,∆a,⎕D
uppercase alphabet followed by lowercase alphabet followed by digitsusing
62
(the number of possible symbols⍴
reshaped by⎕
evaluated input (n)?
change each 62 into a random number in the range 1…62APL (APLX), 17 bytes
quelle
Bash, 43 bytes
Try it online!
quelle
Pip, 13 bytes
Try it online!
Explanation
quelle
Sinclair ZX81/Timex TS1000/1500 BASIC, ~63 tokenized BASIC bytes
There are no lower-case characters in ZX81 without using assembly or having some sort of UDG ROM or something, and for the time being, it only outputs
A-Z
. If zero is entered then the program halts and returns to direct mode.quelle
Japt,
128 bytesTry it
quelle
Stacked, 33 bytes
Try it online! Takes input from the top of the stack and leaves output on the top of the stack.
quelle