What is the shortest way of generating a random string with a given length and with only alphanumeric characters allowed?
- example of a random string: with N = 9 output would be
aZua7I0Lk
- the given length N can be assumed to be always greater than 0
- if necessary you can assume 256 as a maximum value for N, but solutions with higher limits for N and still having a fast computation time are preferred
- allowed characters: 0-9, a-z and A-Z
- a character can occur more than once in the output string
- each possible string should be equally likely (to the accuracy of your language's random number generator)
-
1\$\begingroup\$ Can we assume a maximum value for N? \$\endgroup\$JAD– JAD2017年05月05日 14:11:44 +00:00Commented May 5, 2017 at 14:11
-
\$\begingroup\$ Related. \$\endgroup\$a spaghetto– a spaghetto2017年05月05日 15:36:44 +00:00Commented May 5, 2017 at 15:36
54 Answers 54
Taxi, 2577 bytes
Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 1 l 1 l 1 r.[a]Go to Heisenberg's:n 1 r 1 r 3 r.Pickup a passenger going to Cyclone.Go to Go More:n 1 l 3 l 3 l.Go to Starchild Numerology:e 2 r.62 is waiting at Starchild Numerology.Pickup a passenger going to Cyclone.Go to Cyclone:e 1 l 2 r.Pickup a passenger going to What's The Difference.Pickup a passenger going to Divide and Conquer.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:n 2 r 2 r 1 r.Pickup a passenger going to Trunkers.Go to Trunkers:e 1 r 3 r 1 l.Pickup a passenger going to Multiplication Station.Go to Cyclone:w 2 r.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:s 1 l 2 r 4 l.Pickup a passenger going to What's The Difference.Go to What's The Difference:n 2 l 1 r 3 l.Pickup a passenger going to Addition Alley.Go to Starchild Numerology:e 1 r 3 l 2 r.1 is waiting at Starchild Numerology.63 is waiting at Starchild Numerology.Pickup a passenger going to Addition Alley.Pickup a passenger going to The Underground.Go to Addition Alley:e 1 l 2 r 3 r 1 r.Pickup a passenger going to Joyless Park.Go to Writer's Depot:n 1 l 1 l.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- is waiting at Writer's Depot.Pickup a passenger going to Chop Suey.Go to Joyless Park:n 3 r 2 r 2 l.Go to Chop Suey:w 1 r 1 r 1 l.[b]Pickup a passenger going to Narrow Path Park.Go to Narrow Path Park:n 1 l 1 r 1 l.Go to The Underground:e 1 r.Switch to plan "c" if no one is waiting.Pickup a passenger going to The Underground.Go to Fueler Up:s.Go to Chop Suey:n 3 r 1 l.Switch to plan "b".[c]Go to Joyless Park:n 1 r.Pickup a passenger going to The Underground.Go to Narrow Path Park:w 1 r 3 l.[d]Pickup a passenger going to KonKat's.Go to KonKat's:e 1 r.Pickup a passenger going to KonKat's.Go to The Underground:s.Switch to plan "e" if no one is waiting.Pickup a passenger going to The Underground.Go to Fueler Up:s.Go to Narrow Path Park:n 4 l.Switch to plan "d".[e]Go to KonKat's:n.Pickup a passenger going to Riverview Bridge.Go to Riverview Bridge:n 1 l.Go to Narrow Path Park:e 1 l 1 r.Pickup a passenger going to Post Office.Go to Post Office:e 1 r 4 r 1 l.Go to Sunny Skies Park:s 1 r 1 l 1 r.Pickup a passenger going to The Underground.Go to The Underground:n 1 r 1 r 2 r.Switch to plan "f" if no one is waiting.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 3 l 2 l 1 l.Switch to plan "a".[f]
Taxi is super not made for this but you can do it! I'll try to explain what's happening below the un-golfed version.
Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park: north 1st left 1st left 1st right.
[a]
Go to Heisenberg's: north 1st right 1st right 3rd right.
Pickup a passenger going to Cyclone.
Go to Go More: north 1st left 3rd left 3rd left.
Go to Starchild Numerology: east 2nd right.
62 is waiting at Starchild Numerology.
Pickup a passenger going to Cyclone.
Go to Cyclone: east 1st left 2nd right.
Pickup a passenger going to What's The Difference.
Pickup a passenger going to Divide and Conquer.
Pickup a passenger going to Divide and Conquer.
Go to Divide and Conquer: north 2nd right 2nd right 1st right.
Pickup a passenger going to Trunkers.
Go to Trunkers: east 1st right 3rd right 1st left.
Pickup a passenger going to Multiplication Station.
Go to Cyclone: west 2nd right.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station: south 1st left 2nd right 4th left.
Pickup a passenger going to What's The Difference.
Go to What's The Difference: north 2nd left 1st right 3rd left.
Pickup a passenger going to Addition Alley.
Go to Starchild Numerology: east 1st right 3rd left 2nd right.
1 is waiting at Starchild Numerology.
63 is waiting at Starchild Numerology.
Pickup a passenger going to Addition Alley.
Pickup a passenger going to The Underground.
Go to Addition Alley: east 1st left 2nd right 3rd right 1st right.
Pickup a passenger going to Joyless Park.
Go to Writer's Depot: north 1st left 1st left.
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- is waiting at Writer's Depot.
Pickup a passenger going to Chop Suey.
Go to Joyless Park: north 3rd right 2nd right 2nd left.
Go to Chop Suey: west 1st right 1st right 1st left.
[b]
Pickup a passenger going to Narrow Path Park.
Go to Narrow Path Park: north 1st left 1st right 1st left.
Go to The Underground: east 1st right.
Switch to plan "c" if no one is waiting.
Pickup a passenger going to The Underground.
Go to Fueler Up: south.
Go to Chop Suey: north 3rd right 1st left.
Switch to plan "b".
[c]
Go to Joyless Park: north 1st right.
Pickup a passenger going to The Underground.
Go to Narrow Path Park: west 1st right 3rd left.
[d]
Pickup a passenger going to KonKat's.
Go to KonKat's: east 1st right.
Pickup a passenger going to KonKat's.
Go to The Underground: south.
Switch to plan "e" if no one is waiting.
Pickup a passenger going to The Underground.
Go to Fueler Up: south.
Go to Narrow Path Park: north 4th left.
Switch to plan "d".
[e]
Go to KonKat's: north.
Pickup a passenger going to Riverview Bridge.
Go to Riverview Bridge: north 1st left.
Go to Narrow Path Park: east 1st left 1st right.
Pickup a passenger going to Post Office.
Go to Post Office: east 1st right 4th right 1st left.
Go to Sunny Skies Park: south 1st right 1st left 1st right.
Pickup a passenger going to The Underground.
Go to The Underground: north 1st right 1st right 2nd right.
Switch to plan "f" if no one is waiting.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park: north 3rd left 2nd left 1st left.
Switch to plan "a".
[f]
Start: Get stdin
Pick up the stdin value as text, convert it to a number, and go stick it somewhere to wait.
Plan A Part 1: Get a random integer 1-62
Get a random integer and then get 62
as a number. Duplicate both the random integer and the 62
because we'll need them later. You can only carry 3 passengers at once so we end up with rand
, rand
, and 62
. (The other 62
will wait around until we get back.) Go divide rand
by 62
and truncate the result to get an integer. Go back to get the other copy of 62
and multiply it by the truncated integer from the division. Finally, subtract the product from the first copy of rand
. This gives us a number 0-61. Now we have to go back to pickup a 1
and add it to the result to get a number 1-62. Yes, all those many lines of text are just mod(rand(),62)+1
.
Plan A Part 2: Create an array of characters from which to choose
Pickup a string with all the valid characters and also one at the end we don't want (more on that later). The 63
we picked up earlier matches this string length. Take it over to Chop Suey to have it broken into individual passengers.
Plan B: Move the array so we can select a character
One by one, move every character over to Narrow Path Park. It's the only stack available and the only way to not have leftover passengers getting in the way. Everything else in Townsburg is FIFO so I would have to go back and clear out all the passengers every iteration of the overall loop. This way, I can just leave them at the park and they'll get pushed out of the way by the 63 new characters every time. The very first A
is likely to never escape.
Plan C: Prepare to select a character
This is really just a few stops that didn't need to be in Plan D. Re-position the taxi in preparation.
Plan D: Get all the characters we dont want
Starting with the first character in the reversed "array" (this is the 63rd character we don't want), keep picking up and concatenating characters as we count down from the result of the mod
function in Plan A. Once you hit zero, the next character is the one you want.
Plan E: Drown the ones you don't want and return the chosen one.
"[P]assengers dropped off at Riverview Bridge seem to always fall over the side and into the river..." Well, that gets rid of that concatenated string of losers. Go pick up the next character and send it to stdout. Finally, let's check how many characters we've printed thus far. Back to Sunny Skies to pick up the stdin value we left so long ago. Subtract one and, if the result is more than zero, send it back to wait and start over again at Plan A.
-
\$\begingroup\$ Is this a Turing complete language? I have never heard of it? If so, then this may qualify as the longest code golf answer in history! \$\endgroup\$maple_shaft– maple_shaft2017年05月05日 16:38:05 +00:00Commented May 5, 2017 at 16:38
-
4\$\begingroup\$ @maple_shaft Taxi is kind of fun but I can guarantee this is not the longest code golf answer. There are some Unary answers that seriously trump it. \$\endgroup\$Engineer Toast– Engineer Toast2017年05月05日 18:04:19 +00:00Commented May 5, 2017 at 18:04
-
1\$\begingroup\$ @maple_shaft I did some digging. The largest answer I can find on PPCG is the original version of this answer from @Dennis♦ (of course it's Dennis♦) but that's from
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. \$\endgroup\$Engineer Toast– Engineer Toast2017年05月08日 15:03:09 +00:00Commented May 8, 2017 at 15:03
C (gcc), (削除) 57 (削除ここまで) (削除) 55 (削除ここまで) 52 bytes
Thanks to 2501 for the pointers...
i;f(n){for(;n-=isalnum(i=rand()%150)&&putchar(i););}
-
\$\begingroup\$
rand()%74
should berand()%75
\$\endgroup\$2501– 25012017年05月05日 15:01:16 +00:00Commented May 5, 2017 at 15:01 -
\$\begingroup\$ @2501 good call. \$\endgroup\$cleblanc– cleblanc2017年05月05日 15:10:19 +00:00Commented May 5, 2017 at 15:10
-
1\$\begingroup\$ You can further reduce the size by using
&&putchar(i)
instead of the ternary operator. \$\endgroup\$2501– 25012017年05月05日 15:25:56 +00:00Commented May 5, 2017 at 15:25
Jelly, 5 bytes
Missed a trick - see ais523's 4 byter
ØBX$€
How?
ØBX$€ - Main link: n
€ - for each in range(n):
$ - last two links as a monad:
ØB - "base digits" - yields list of chars "01..9AB...Zab...z"
X - random choice
-
\$\begingroup\$ I would not consider a UTF-8 character as having a length of one byte oO ? \$\endgroup\$m13r– m13r2017年07月01日 15:00:01 +00:00Commented Jul 1, 2017 at 15:00
-
\$\begingroup\$ @m13r Jelly has its own code page - click bytes in the header of my answer to see it. \$\endgroup\$Jonathan Allan– Jonathan Allan2017年07月01日 16:17:13 +00:00Commented Jul 1, 2017 at 16:17
Java 8, (削除) 183 (削除ここまで) (削除) 149 (削除ここまで) (削除) 97 (削除ここまで) (削除) 88 (削除ここまで) 87 bytes
n->{for(int t;n-->0;t*=Math.random(),System.out.printf("%c",t+=t>9?55+t/36*6:48))t=62;}
-9 bytes by porting @2501's C answer, so make sure to upvote him as well!
-1 byte thanks to @ceilingcat
Explanation:
n->{ // Method with integer parameter and String return-type
for(int t; // Temp integer
n-->0 // Loop the input amount of times:
; // After every iteration:
t*=Math.random(), // Set `t` to a random integer in the range [0,62)
System.out.printf("%c", // Print as character:
t+= // The random integer, after we've added:
t>9? // If the random integer is larger than 9:
55 // Add 55
+t/36 // And if the random integer is larger than 35:
*6 // Add an additional 6
: // Else:
48)) // Add 48
t=62;} // (Re)set `t` to 62 for the random
Jelly, 4 bytes
ØBṗX
Explanation
ØBṗX
ØB All letters (uppercase and lowercase) and digits
ṗ Cartesian power with {the input}
X Select a random possibility
Cartesian power basically generates all list of a given length that can be formed out of a given set of elements; that's exactly what we need here.
-
\$\begingroup\$ If there are UTF-8 characters involved could that be really just 4 bytes? One UTF-8 character could be more than just one byte... \$\endgroup\$m13r– m13r2017年06月28日 10:34:59 +00:00Commented Jun 28, 2017 at 10:34
-
1\$\begingroup\$ @m13r Jelly uses its own code page where these are all single byte characters \$\endgroup\$FlipTack– FlipTack2017年12月05日 23:09:02 +00:00Commented Dec 5, 2017 at 23:09
Shell + pwgen, 13 bytes
pwgen -s 1ドル 1
-s, --secure
Generate completely random, hard-to-memorize passwords.
Sample output
%pwgen -s 10 1
2cyhLovbfT
C, 60 bytes
r;f(n){for(;n--;)r=rand()%62,putchar(r+=r>9?r>35?61:55:48);}
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.
Snowman, 58 bytes
((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR))
This is a subroutine that takes an integer as input and returns the random string.
(( subroutine
} make b, e, g active
#` e = input (from +)
""* store an empty string in +
: what follows is the block to prepend a random char to +
48vn58nR| generate range(48..58) and place in g (need b and e for next step)
65vn91nR generate range(65..91) in b
,aC| move g to e, concatenate b and e, and move the result to g
97vn123nR generate range(97..123) in b
,aC move g to e, concatenate b and e, keeping the result in b
AsH shuffle the array of candidate ASCII codes stored in b
1AaL equivalent to 0aAwR - get the first element wrapped in an array
#aC retrieve + and prepend the randomly generated character
* store back into +
;bR repeat this block e times, where e has been set to the input
)) output is given via +
-
\$\begingroup\$ It should be:
((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR))
. \$\endgroup\$2501– 25012017年05月05日 12:58:16 +00:00Commented May 5, 2017 at 12:58
PowerShell, (削除) 58 (削除ここまで) 54 Bytes
-4 thanks to Andrei Odegov - casting to a char array instead of looping to create a char array.
-join[char[]](65..90+97..122+48..57|random -C "$args")
generates a range 1..2+4..5 = 1,2,4,5
of all the acceptable charachter codes, then selects $args
number of elements randomly using random -Count
- the resulting elements (削除) are looped through are 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.
PS C:\users\sweeneyc\Desktop> .\grstr.ps1 5
oaCE5
PS C:\users\sweeneyc\Desktop> .\grstr.ps1 10
UReh6McG7D
PS C:\users\sweeneyc\Desktop> .\grstr.ps1 30
t1YrhZf5egyzqnPlWUKV3cEoIudMTs
Does not work for an input of 0 as Get-Random
only accepts numbers above 1 for the -Count
parameter.
-
\$\begingroup\$ You can cast the obtained array of bytes as a single whole to an array of chars. This'll help to save 4 bytes:
-join[char[]](65..90+97..122+48..57|random -C "$args")
\$\endgroup\$Andrei Odegov– Andrei Odegov2017年05月07日 05:52:36 +00:00Commented May 7, 2017 at 5:52
APL (Dyalog Extended), 17 bytes
Full program. Prompts for length.
(?⎕⍴62)⊇⎕A,⎕D,⌊⎕A
⎕A
uppercase Alphabet
⌊
Lowercased
⎕D,
prepended by the Digits
⎕A,
prepended by the uppercase Alphabet
(
...)⊇
select the following indices from that:
⍴62
reshape 62 to the following shape:
⎕
prompt for a number
?
random indices in in those ranges
Pip, 13 bytes
LaORCz.AZ.J,t
Explanation
a is cmdline arg; t is 10; z is lcase alphabet; AZ is ucase (implicit)
La Do the following, a times:
O Output (without newline)
RC random choice from:
z Lowercase letters
.AZ concatenated with uppercase letters
.J,t concatenated with range(10) joined into a string
05AB1E, 6 bytes
FžK.RJ
Explanation
F # input number of times do
žK # push [a-zA-Z0-9]
.R # pick one at random
J # join to string
Perl 5, 41 bytes
40 bytes of code + -p
flag.
$\.=(a..z,A..Z,0..9)[rand 62]for 1..$_}{
(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:
print+(a..z,A..Z,0..9)[rand 62]for 1..pop
R, 51 bytes
Same length as the other R answer, but a different approach.
cat(sample(c(letters,LETTERS,0:9),scan(),T),sep="")
letters
and LETTERS
both are built-in variables containing all lower and uppercase letters respectively. Adding 0:9
to that and we have the entire set of alphanumeric characters.
R, (削除) 54 (削除ここまで) (削除) 52 (削除ここまで) (削除) 51 (削除ここまで) 49 bytes
intToUtf8(sample(c(65:90,97:122,48:57),scan(),T))
Explanation:
- Read input integer n:
scan()
- Vector with ASCII values:
c(65:90,97:122,48:57)
- Sample n ASCII values with replacement:
sample(c(65:90,97:122,48:57),scan(),T)
- Transform ASCII values to a character string with
intToUtf8
-
\$\begingroup\$ I found another approach with the same length. \$\endgroup\$JAD– JAD2017年05月05日 14:09:45 +00:00Commented May 5, 2017 at 14:09
-
\$\begingroup\$ @JarkoDubbeldam Good idea, this helped me to save two bytes \$\endgroup\$Sven Hohenstein– Sven Hohenstein2017年05月05日 14:13:15 +00:00Commented May 5, 2017 at 14:13
-
\$\begingroup\$ D'oh! nice job :) \$\endgroup\$JAD– JAD2017年05月05日 14:26:44 +00:00Commented May 5, 2017 at 14:26
JavaScript (ES6), (削除) 61 (削除ここまで) (削除) 54 (削除ここまで) (削除) 39 (削除ここまで) (削除) 52 (削除ここまで) 64 bytes
This 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.
f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
- 15 bytes saved (at one stage) thanks to Arnauld's suggestion of using a recursive function.
Try it
f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
i.addEventListener("input",_=>o.innerText=f(+i.value))
<input id=i type=number><pre id=o>
-
\$\begingroup\$ I've updated it so that all 3 character groups are included, @Arnauld; I'm just trying to find an index that can contain more than 2 of them. Thanks for suggesting the recursive option. \$\endgroup\$Shaggy– Shaggy2017年05月05日 09:37:18 +00:00Commented May 5, 2017 at 9:37
-
\$\begingroup\$ I like the idea, but I think you're now generating characters in
[0-5w-z]
exclusively. \$\endgroup\$Arnauld– Arnauld2017年05月05日 09:42:23 +00:00Commented May 5, 2017 at 9:42 -
\$\begingroup\$ I'd suggest
btoa(String.fromCharCode(Math.random()*248))[0]
to cover the whole range uniformly. \$\endgroup\$Arnauld– Arnauld2017年05月05日 09:54:02 +00:00Commented May 5, 2017 at 9:54 -
\$\begingroup\$ Just noticed that myself, @Arnauld. It looks like I'm going to have to combine both methods (convert
toString
and then encode) in order to guarantee a full range of characters from all 3 groups can be returned. \$\endgroup\$Shaggy– Shaggy2017年05月05日 09:55:45 +00:00Commented May 5, 2017 at 9:55 -
\$\begingroup\$ That's better but still incomplete:
014589ABEFIJMNQRUVYZcdghklopstwx
(and not uniform). \$\endgroup\$Arnauld– Arnauld2017年05月05日 10:02:27 +00:00Commented May 5, 2017 at 10:02
Alice, 24 bytes
/w9u"Uz;r
0円.rdao"ki@/t&
This layout is already a lot better than what I originally had (32 bytes), but I'm sure it's not optimal yet...
Explanation
/ Reflect to SE. Switch to Ordinal.
The IP now bounces diagonally up and down through the code.
09 Append 0 and 9 to an (implicit) empty string to create "09".
r Range expansion, turns the string into "0123456789".
"az" Push this string.
r Range expansion, turns it into the lower-case alphabet.
i Read all input as a string.
/ Reflect to E. Switch to Cardinal.
t Implicitly convert the input string to the integer value N it
contains and decrement it.
& Run the next command N-1 times.
The IP wraps around to the first column.
\ Reflect to NE. Switch to Ordinal. (This is not a command.)
w Push the current IP address to the return address stack N-1
times. This starts a loop whose body will run N times.
. Duplicate the lower-case alphabet.
u Convert it to upper case.
d Push the concatenation of all values on the stack. This pushes
a single string with digits, lower-case and upper-case alphabet.
U Random choice. Pick a character from this string uniformly at random.
o Print it.
; Discard the upper-case alphabet, because it will be regenerated
in the next loop iteration (and if we leave it, then upper-case
letters will become more and more likely as the output grows).
k As long as there is still an address on the return address stack,
jump back to that address (i.e. to the w). Once the return address
stack has been depleted, this does nothing and the loop is exited.
@ Terminate the program.
Python + exrex, 81 bytes
import exrex,random
lambda n:random.choice(list(exrex.generate("[A-Za-z0-9]"*n)))
-
\$\begingroup\$ You can save 4 bytes using
rs -g0
instead oftr -d"\n"
\$\endgroup\$roblogic– roblogic2023年07月15日 06:21:39 +00:00Commented Jul 15, 2023 at 6:21
Python 2, (削除) 79 (削除ここまで) (削除) 83 (削除ここまで) 79 bytes
import random as r,string as s;lambda x:''.join(r.sample(s.printable[:62]*x,x))
+4 bytes (didn't account for repetition)
-4 bytes (Thanks to @Rod for the suggestion for using printable[:62]
)
-
\$\begingroup\$ You can also use
`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 bytes \$\endgroup\$Rod– Rod2017年05月05日 19:16:02 +00:00Commented May 5, 2017 at 19:16 -
\$\begingroup\$ @Rod Thanks for the suggestions. I implemented
printable
, couldn't get the[2::5]
to work (maybe I was doing it wrong?) \$\endgroup\$Wondercricket– Wondercricket2017年05月05日 19:23:44 +00:00Commented May 5, 2017 at 19:23 -
\$\begingroup\$ you need to surround the list
r.sample()
with backticks``
some info about it \$\endgroup\$Rod– Rod2017年05月05日 19:27:16 +00:00Commented May 5, 2017 at 19:27 -
\$\begingroup\$ @Rod Ah-ha, I got it figured out. But it actually adds a byte after switching to
printable
(which is py2 and py3 compatible) \$\endgroup\$Wondercricket– Wondercricket2017年05月05日 19:31:25 +00:00Commented May 5, 2017 at 19:31
Swift, (削除) 138 (削除ここまで) (削除) 127 (削除ここまで) (削除) 124 (削除ここまで) (削除) 115 (削除ここまで) 98 bytes
let s={(1...0ドル).map{_ in.init(.init([48...57,65...90,97...122].joined().shuffled()[0]))}.joined()}
Brachylog, 14 bytes
~l{Ạụ:Ạ:Ịcṛ}mc
Explanation
~l Create a list of length Input
{ }m Map on each element of that list:
Ạụ:Ạ:Ịc The string "A...Za...z0...9"
ṛ Pick a character at random
c Concatenate into a single string
MATL, 8 bytes
8Y2iT&Zr
8Y2 % Push string '012...89ABC...YZabc...yz'
i % Input N
T&Zr % Sample with replacement. Implicitly display
Batch, 175 bytes
@set s=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
@for /l %%i in (1,1,%1)do @call :c
@echo %s:~62%
:c
@set/an=%random%%%62
@call set s=%s%%%s:~%n%,1%%
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.
Pyke, 4 bytes
~JfH
~J - "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
f - cominbations(^, length=input)
H - random.choice(^)
-
\$\begingroup\$ This doesn't seem to work for any input greater than 3, and I'm not sure it can generate the same character more than once. \$\endgroup\$ATaco– ATaco2017年05月08日 07:15:14 +00:00Commented May 8, 2017 at 7:15
-
\$\begingroup\$ This does not work for inputs greater than 3. I've tried it here: pyke.catbus.co.uk \$\endgroup\$m13r– m13r2017年06月28日 10:31:45 +00:00Commented Jun 28, 2017 at 10:31
-
\$\begingroup\$ This needs about 1 GB of RAM just to create a string of 4 alphanumeric characters... Did not get it to work for an input of 10. The program crashed with a
MemoryError
\$\endgroup\$m13r– m13r2017年07月01日 15:05:07 +00:00Commented Jul 1, 2017 at 15:05
Pyth, (削除) 7 (削除ここまで) 11 bytes
O^s++rG1GUT
Explanation
O^s++rG1GUT
+rG1G Take the uppercase and lowercase alphabets.
+ UT Add it to the list [0, ..., 9].
s Concatenate to get a string.
^ Q Get all strings of length N.
O Choose one at random.
-
\$\begingroup\$ This only includes the lowercase alphabet and numbers, not the uppercase letters \$\endgroup\$Blue– Blue2017年05月06日 11:23:38 +00:00Commented May 6, 2017 at 11:23
-
\$\begingroup\$ @muddyfish Good catch. Fixed. \$\endgroup\$user48543– user485432017年05月06日 12:38:31 +00:00Commented May 6, 2017 at 12:38