Генерация случайной буквенно-цифровой строки длиной N

30

Какой самый короткий способ генерирования случайной строки заданной длины и с разрешенными только буквенно-цифровыми символами?

  • пример случайной строки: при N = 9 вывод будет aZua7I0Lk
  • можно считать, что заданная длина N всегда больше 0
  • при необходимости вы можете принять 256 как максимальное значение для N, но предпочтительны решения с более высокими пределами для N и все еще с быстрым временем вычисления
  • разрешенные символы: 0-9, az и AZ
  • символ может встречаться в выходной строке более одного раза
  • каждая возможная строка должна быть одинаково вероятной (с точностью до генератора случайных чисел на вашем языке)
m13r
источник
1
Можем ли мы принять максимальное значение для N?
JAD

Ответы:

4

Желе , 4 байта

ØBṗX

Попробуйте онлайн!

объяснение

ØBṗX
ØB     All letters (uppercase and lowercase) and digits
  ṗ    Cartesian power with {the input}
   X   Select a random possibility

Декартовая сила в основном генерирует весь список заданной длины, который может быть сформирован из заданного набора элементов; это именно то, что нам нужно здесь.


источник
Если задействованы символы UTF-8, может ли это быть всего 4 байта? Один символ UTF-8 может быть больше чем один байт ...
m13r
@ m13r Jelly использует собственную кодовую страницу, где все это однобайтовые символы
FlipTack
13

Такси , 2577 байт

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]

Попробуйте онлайн!

Такси супер не для этого, но вы можете сделать это! Я постараюсь объяснить, что происходит ниже версии без игры в гольф.

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]

Начало: Получить стандартный ввод
Выберите значение стандартного ввода в виде текста, преобразуйте его в число и вставьте его где-нибудь, чтобы дождаться.

План A Часть 1: Получить случайное целое число 1-62
Получить случайное целое число, а затем получить 62в виде числа. Дублируйте и случайное целое число, и 62потому, что они понадобятся нам позже. Вы можете нести только 3 пассажиров сразу , чтобы мы в конечном итоге rand, randи 62. (Другой 62будет ждать до тех пор, пока мы не вернемся.) Идите делить randна 62и усечь результат, чтобы получить целое число. Вернитесь, чтобы получить другую копию 62и умножьте ее на усеченное целое число из деления. Наконец, вычтите продукт из первого экземпляра rand. Это дает нам номер 0-61. Теперь нам нужно вернуться к пикапу 1и добавить его к результату, чтобы получить число 1-62. Да, все эти много строк текста просто mod(rand(),62)+1.

Запланируйте Часть 2: Создайте массив символов, из которого можно выбрать
Pickup - строка со всеми действительными символами, а также один конец, который нам не нужен (подробнее об этом позже). 63Мы собрали более ранние матчи этой строки длиной. Отнесите его Чопу Сьюи, чтобы разбить его на отдельных пассажиров.

План Б: Переместите массив, чтобы мы могли выбрать персонажа
Один за другим, переместите каждого персонажа в Парк Узких Путь. Это единственный доступный стек и единственный способ не мешать оставшимся пассажирам мешать. Все остальное в Таунсбурге - это FIFO, поэтому мне придется возвращаться и очищать всех пассажиров на каждой итерации всей петли. Таким образом, я могу просто оставить их в парке, и каждый раз 63 новых персонажа будут отталкивать их с дороги. Самый первый A, вероятно, никогда не сбежит .

План C: Подготовьтесь к выбору персонажа.
Это всего лишь несколько остановок, которые не должны были присутствовать в Плане D. Переместите такси при подготовке.

План D: Получить все символы, которые нам не нужны.
Начиная с первого символа в перевернутом «массиве» (это 63-й символ, который нам не нужен), продолжайте подбирать и объединять символы, пока мы выполняем обратный отсчет от результата modфункции. в плане А. Как только вы нажмете ноль, следующий персонаж будет тот, который вы хотите.

План E: Утопить тех, кого вы не хотите, и вернуть выбранный.
«[P] сборщики, сброшенные с моста через реку, кажется, всегда падают за борт и впадают в реку ...» Ну, это избавляет от этой объединенной цепочки неудачников. Иди, возьми следующий персонаж и отправь его на стандартный вывод. Наконец, давайте проверим, сколько символов мы уже напечатали. Вернемся к Sunny Skies, чтобы получить значение stdin, которое мы оставили так давно. Вычтите одно и, если результат больше нуля, отправьте его обратно в ожидание и начните все сначала с плана А.

Инженер Тост
источник
Это полный язык Тьюринга? Я никогда не слышал об этом? Если это так, то это может считаться самым длинным кодом в истории!
maple_shaft
4
@maple_shaft Такси довольно забавно, но я могу гарантировать, что это не самый длинный кодовый ответ. Есть несколько унарных ответов, которые серьезно его превосходят.
Инженер Тост
1
@maple_shaft Я немного покопался. Самый большой ответ, который я могу найти на PPCG, - это оригинальная версия этого ответа от @ Dennis ♦ (конечно, это Dennis ♦), но это было code-bowlingи было пересмотрено. Самый длинный code-golfответ, который я смог найти, - это оригинальное представление Brain-Flak о базовом вызове Куайна. Это прибывает в 9.5 * 10 ^ 580 байтов. Самый длинный текущий ответ, который я нашел, был главным тестером в Unary : 1.65 * 10 ^ 56 байт.
Инженер Тост
7

C (gcc) , 57 55 52 байта

Спасибо 2501 за указатели ...

i;f(n){for(;n-=isalnum(i=rand()%150)&&putchar(i););}

Попробуйте онлайн!

cleblanc
источник
rand()%74должно бытьrand()%75
2501
@ 2501 хороший звонок.
cleblanc
1
Вы можете дополнительно уменьшить размер, используя &&putchar(i)вместо троичного оператора.
2501
Ницца! это здорово, спасибо.
cleblanc
6

Желе , 5 байт

Пропустил трюк - см . 4 байта ais523

ØBX$€

Попробуйте онлайн!

Как?

Ø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
Джонатан Аллан
источник
Я бы не рассматривал символ UTF-8 как имеющий длину в один байт oO?
13
@ m13r У Jelly есть своя собственная кодовая страница - нажмите на байты в заголовке моего ответа, чтобы увидеть его.
Джонатан Аллан
5

Shell + pwgen , 13 байт

pwgen -s $1 1

-s, --secure

Генерация совершенно случайных, трудно запоминающихся паролей.

Образец вывода

%pwgen -s 10 1
2cyhLovbfT
дирижабль
источник
5

Java 8 183 149 97 88 байт

n->{for(int t;n-->0;t*=Math.random(),System.out.printf("%c",t+=t>9?t>35?61:55:48))t=62;}

Попробуйте онлайн.

-9 байт при переносе ответа C @ 2501 , так что не забудьте также его оповестить!

Старый ответ, 97 байт

n->{for(int t;n-->0;t*=Math.random(),System.out.printf("%c",t>9?(t<36?65:97)+t%26:48+t%10))t=62;}

Попробуйте онлайн.

Объяснение:

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:
             t>35?             //        If the random integer is larger than 35:
              61               //         Add 61
             :                 //        Else:
              55               //         Add 55
            :                  //       Else:
             48))              //        Add 48
    t=62;}                     //   (Re)set `t` to 62 for the random

n->{for(int t;n-->0;t*=Math.random(),System.out.printf("%c",...))t=62;}
                               // Similar as above
         t>9?                  //      If the random integer is larger than 9:
          (t<36?               //       If the random integer is smaller than 36:
            65                 //        Start with 65 ('A')
           :                   //       Else:
            97)                //        Start with 97 ('a')
               +t%26           //       And add the random integer modulo-26
         :                     //      Else:
          48                   //       Start with 48 ('0')
            +t%10)             //       And add the random integer modulo-10
Кевин Круйссен
источник
4

C, 60 байтов

r;f(n){for(;n--;)r=rand()%62,putchar(r+=r>9?r>35?61:55:48);}

Посмотрите, как это работает здесь .

Смотрите распределение здесь .

Он равномерно распределен, предполагая, что rand() % 62производит равномерное распределение. Поскольку 62 обычно не делит RAND_MAX равномерно, существует очень небольшое смещение.

2501
источник
4

Снеговик , 58 байт

((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR))

Попробуйте онлайн!

Это подпрограмма, которая принимает целое число в качестве входных данных и возвращает случайную строку.

((             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 +
Дверная ручка
источник
Оно должно быть: ((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR)).
2501
@ 2501 Ах, ты прав. Исправлено, спасибо.
Дверная ручка
4

PowerShell, 58 54 байта

-4 спасибо Андрею Одегову - приведение к массиву символов вместо циклического создания массива символов.

-join[char[]](65..90+97..122+48..57|random -C "$args")

генерирует диапазон 1..2+4..5 = 1,2,4,5всех приемлемых кодов символов, затем $argsслучайным образом выбирает количество элементов random -Count- результирующие элементы циклически |%{}переворачиваются и превращаются в [char]s, преобразуются в массив символов с использованием [char[]]- затем все это заключается в скобки и -joinредактируется вместе.

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

Не работает для входа 0, так как Get-Randomпринимает только цифры выше 1 для -Countпараметра.

colsw
источник
Вы можете привести полученный массив байтов как единое целое к массиву символов. Это поможет сэкономить 4 байта:-join[char[]](65..90+97..122+48..57|random -C "$args")
Андрей Одегов
2

Perl 5 , 41 байт

40 байтов кода + -pфлаг.

$\.=(a..z,A..Z,0..9)[rand 62]for 1..$_}{

Попробуйте онлайн!

(a..z,A..Z,0..9)создает массив, содержащий все буквы и цифры, [rand 62]возвращает случайный элемент этого массива, к которому относится append ( .=) $\, который неявно печатается в конце благодаря -pфлагу с }{.


Или для того же bytecount, но с использованием параметров, а не стандартного ввода:

print+(a..z,A..Z,0..9)[rand 62]for 1..pop

Попробуйте онлайн!

папа
источник
2

R, 51 байт

Та же длина, что и у другого ответа R, но другой подход.

cat(sample(c(letters,LETTERS,0:9),scan(),T),sep="")

lettersи LETTERSобе являются встроенными переменными, содержащими все строчные и прописные буквы соответственно. Помимо 0:9этого и у нас есть весь набор буквенно-цифровых символов.

JAD
источник
2

R 54 52 51 49 байт

intToUtf8(sample(c(65:90,97:122,48:57),scan(),T))

Объяснение:

  1. Считать входное целое число n :scan()
  2. Вектор со значениями ASCII: c(65:90,97:122,48:57)
  3. Примеры п значения ASCII с заменой:sample(c(65:90,97:122,48:57),scan(),T)
  4. Преобразуйте значения ASCII в символьную строку с помощью intToUtf8
Свен Хоэнштейн
источник
Я нашел другой подход с такой же длиной.
JAD
@JarkoDubbeldam Хорошая идея, это помогло мне сэкономить два байта
Свен
D'о!
JAD
2

JavaScript (ES6), 61 54 39 52 64 байта

Это почти как реверс-гольф! Сильно ударил по количеству байтов, гарантируя, что будет использован весь диапазон символов из всех трех групп.

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
  • 15 байтов сохранено (на одном этапе) благодаря предложению Арно, использовать рекурсивную функцию.

Попытайся

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>

мохнатый
источник
Я обновил его, чтобы включить все 3 группы символов, @Arnauld; Я просто пытаюсь найти индекс, который может содержать более 2 из них. Спасибо за предложение рекурсивного варианта.
Лохматый
Мне нравится идея, но я думаю, что вы теперь генерируете персонажей [0-5w-z]исключительно.
Арно
Я бы предложил btoa(String.fromCharCode(Math.random()*248))[0]равномерно покрыть весь диапазон.
Арно
Просто заметил это, @Arnauld. Похоже, мне придется объединить оба метода (преобразовать toStringи затем кодировать), чтобы гарантировать возвращение полного диапазона символов из всех трех групп.
Лохматый
Это лучше, но все еще не полностью: 014589ABEFIJMNQRUVYZcdghklopstwx(и не единообразно).
Арно
2

Алиса , 24 байта

/w9u"Uz;r
\0.rdao"ki@/t&

Попробуйте онлайн!

Этот макет уже намного лучше, чем у меня изначально (32 байта), но я уверен, что он еще не оптимален ...

объяснение

/      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.
Мартин Эндер
источник
2

Python + exrex , 81 байт

import exrex,random
lambda n:random.choice(list(exrex.generate("[A-Za-z0-9]"*n)))
спагетто
источник
2

Python 2, 79 83 79 байтов

import random as r,string as s;lambda x:''.join(r.sample(s.printable[:62]*x,x))

+4 байта (повторение не учитывалось)

-4 байта (спасибо @Rod за предложение по использованию printable[:62])

Wondercricket
источник
1
Не работает, он должен содержать повторы. Это можно исправить, используя (s.letters+s.digits)*xвместо этогоs.letters+s.digits
Rod
@Rod Исправлено, спасибо!
Wondercricket
Вы также можете использовать `r.sample(...)`[2::5]вместо этого, ''.join(r.sample(...))чтобы сохранить байт (только для Python 2), и (s.letters+s.digits)*xможете переключиться s.printable[:62]*xна сохранение 4 байта
Род
@Rod Спасибо за предложения. Я реализовал printable, не мог заставить [2::5]работать (возможно, я делал это неправильно?)
Wondercricket
вам нужно окружить список r.sample()с помощью галочек `` немного информации о нем
Род
1

Пакет, 175 байтов

@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выполняет двойную обязанность здесь, поскольку он содержит буквенно-цифровой список и случайно выбранные символы. После вывода результата код переходит к подпрограмме, результат которой игнорируется.

Нил
источник
1

Пайк , 4 байта

~JfH

Попробуйте онлайн!

~J   -   "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  f  -  cominbations(^, length=input)
   H - random.choice(^)
синий
источник
Кажется, это не работает для любого ввода больше 3, и я не уверен, что он может генерировать один и тот же символ более одного раза.
ATaco
Это не работает для входов больше 3. Я пробовал это здесь: pyke.catbus.co.uk
m13r
Это требует около 1 ГБ ОЗУ только для того, чтобы создать строку из 4 буквенно-цифровых символов ... Не удалось заставить его работать при вводе 10. Программа аварийно MemoryError
завершила работу
1

Pyth, 7 11 байтов

O^s++rG1GUT

Попробуйте онлайн

объяснение

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.

источник
Это включает только строчные буквы и цифры, а не заглавные буквы
Blue
@muddyfish Хороший улов. Исправлена.
1

C # - 121 байт

void g(int n){Console.Write(Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(new Random().Next().ToString())).Substring(0,n));}
Джон Хэтвуд
источник
1

APL (Dyalog) с AGL , 17 байтов

(⎕A,∆a,⎕D)[?⎕⍴62]

Попробуйте онлайн!

(... )[... ] индекс в

⎕A,∆a,⎕D прописные буквы алфавита, за которыми следуют строчные буквы и цифры

с помощью

62 (количество возможных символов

изменен

 оцененный вклад ( n )

? замените каждое 62 на случайное число в диапазоне 1… 62

APL (APLX) , 17 байтов

(⎕A,⎕a,⎕D)[?⎕⍴62]
Адам
источник
1

Пип , 13 байт

LaORCz.AZ.J,t

Попробуйте онлайн!

объяснение

               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
DLosc
источник
1

Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 63 байтованных BASIC байта

 1 INPUT N
 2 IF NOT N THEN STOP
 3 FOR N=SGN PI TO N
 4 PRINT CHR$ (CODE "A"+RND*26);
 5 NEXT N

В ZX81 нет строчных символов без использования ассемблера или какого-либо UDG-ROM или чего-то еще, и на данный момент он только выводит A-Z. Если введен ноль, то программа останавливается и возвращается в прямой режим.

Шон Бебберс
источник
0

С накоплением , 33 байта

:>[alpha 10:>ALPHA,,''#`randin]"!

Попробуйте онлайн! Принимает ввод с вершины стека и оставляет вывод на вершине стека.

:>[alpha 10:>ALPHA,,''#`randin]"!
:>                                  range from 0 to n-1
  [                           ]"!   on each, do:
   alpha                            push "abc...xyz"
         10:>                       push (0 1 2 ... 8 9)
             ALPHA                  push "ABC...XYZ"
                  ,,                concat twice
                    ''#`            join by nothing
                        randin      select random member in it
Конор О'Брайен
источник