Генерація випадкової буквено-цифрової струни довжиною N


30

Який найкоротший спосіб генерування випадкових рядків із заданою довжиною та з дозволеними лише буквено-цифровими символами?

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

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]

Початок: Отримати stdin
Підберіть значення stdin у вигляді тексту, перетворіть його на число та перейдіть його кудись, щоб зачекати.

План 1 частини: Отримайте випадкове ціле число 1-62
Отримайте випадкове ціле число, а потім отримайте 62як число. Дублювати як випадкові цілі числа, так і ті, 62тому що вони нам знадобляться згодом. Ви можете нести тільки 3 пасажирів відразу , щоб ми в кінцевому підсумку rand, randі 62. (Інший 62буде чекати, поки ми не повернемося.) Перейдіть поділити randна 62і обріжте результат, щоб отримати ціле число. Поверніться, щоб отримати іншу копію 62та помножити її на усічене ціле число з поділу. Нарешті, віднімаємо твір від першої копії rand. Це дає нам число 0-61. Тепер нам слід повернутися до пікапа a 1і додати його до результату, щоб отримати число 1-62. Так, усі ці багато рядків тексту просто mod(rand(),62)+1.

Планування Частина 2: Створіть масив символів, з якого слід вибрати
рядок з усіма допустимими символами, а також один у кінці, який ми не хочемо (докладніше про це пізніше). 63Ми зібрали більш ранні матчі цього рядка довжиною. Візьміть його до Chop Suey, щоб він розбився на окремих пасажирів.

План В: Перемістіть масив, щоб ми могли вибрати персонажа
один за одним, перенести кожного персонажа до Вузького парку шляху. Це єдиний доступний стек і єдиний спосіб не перешкоджати залишившись пасажирам. Все інше в Таунсбурзі - FIFO, тому мені доведеться повертатися назад та очищати всіх пасажирів від кожної ітерації загального циклу. Таким чином, я можу просто залишити їх у парку, і вони щоразу відштовхуватимуться від 63 нових персонажів. Найперший A, ймовірно, ніколи не втече .

План C: Підготуйтеся до вибору персонажа
Це дійсно лише кілька зупинок, які не потребували плану D. Перестановка таксі під час підготовки.

План D: Отримати всіх символів, яких ми не хочемо
Починаючи з першого символу у зворотному масиві (це 63-й символ, який ми не хочемо), продовжуйте підбирати та об'єднувати символи, коли ми відраховуємо результат від modфункції у Плані А. Після того, як ви натиснете нуль, наступним символом буде той, який ви хочете.

План Е: Потопіть тих, кого не хочете, і поверніть обраного.
"[P] з'їзди, що випали на мосту Riverview, здається, завжди падають через бік і в річку ..." Ну, це позбавляється від цієї згуртованої струни невдахи. Ідіть, підберіть наступного символу і відправте його в stdout. Нарешті, давайте перевіримо, скільки символів ми надрукували до цього часу. Назад до Сонячного Неба, щоб зібрати значення stdin, яке ми залишили так давно. Відніміть один і, якщо результат більше нуля, відправте його назад, щоб зачекати, і почніть заново на Плані А.


Це цільна мова Тюрінга? Я ніколи про це не чув? Якщо так, то це може бути кваліфіковано як найдовший відповідь на гольф коду в історії!
maple_shaft

4
@maple_shaft Таксі - це задоволення, але я можу гарантувати, що це не найдовший відповідь на гольф коду. Є кілька відповідей, які серйозно козирують.
Інженер Тост

1
@maple_shaft Я кілька копав. Найбільша відповідь, яку я можу знайти на PPCG, - це оригінальна версія цієї відповіді від @ Dennis ♦ (звичайно, це Dennis ♦), але це було code-bowlingі було переглянуто внизу. Найдовша code-golfвідповідь, яку я міг знайти, - це оригінальне подання Брейн-Флака про основний виклик quine. Він поставляється в 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););}

Спробуйте в Інтернеті!


rand()%74має бутиrand()%75
2501

@ 2501 хороший дзвінок.
Клеблан

1
Ви можете додатково зменшити розмір, використовуючи &&putchar(i)замість потрійного оператора.
2501 р

Приємно! це чудово, спасибі
Клеблан

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?
m13r

@ m13r Jelly має свою кодову сторінку - клацніть байти у заголовку моєї відповіді, щоб побачити її.
Джонатан Аллан

5

Shell + pwgen , 13 байт

pwgen -s $1 1

-s, --безпечний

Створюйте абсолютно випадкові паролі, які важко запам'ятовуються.

Вибірка зразка

%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, існує дуже невеликий ухил.


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 завдяки Андрею Одегову - передача в масив char замість циклу, щоб створити масив char.

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

генерує діапазон 1..2+4..5 = 1,2,4,5усіх прийнятних кодів charachter, потім вибирає $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для -Countпараметра приймаються лише числа вище 1 .


Отримати масив байтів можна як єдине ціле до масиву символів. Це допоможе зберегти 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]повертає випадковий елемент цього масиву, який додається ( .=) до $\, який неявно друкується в кінці завдяки -pпрапору з }{.


Або для того ж рахунку, але використовуючи параметри, а не стандартний вхід:

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і у нас весь набір буквено-цифрових символів.


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. Зразок n значень ASCII із заміною:sample(c(65:90,97:122,48:57),scan(),T)
  4. Перетворіть значення ASCII в символьний рядок за допомогою intToUtf8

Я знайшов інший підхід з однаковою довжиною.
JAD

@JarkoDubbeldam Гарна ідея, це допомогло мені зберегти два байти
Sven Hohenstein

D'oh! приємна робота :)
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та потім кодувати), щоб гарантувати повернення повного набору символів з усіх 3 груп.
Кудлатий

Це краще, але все ж неповно: 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

Пітон 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])


1
Не працює, він повинен містити повтори. Це можна виправити, скориставшись (s.letters+s.digits)*xзамість цьогоs.letters+s.digits
Род

@Rod Виправлено, дякую!
Чудотворний крикет

Ви також можете використовувати `r.sample(...)`[2::5]натомість, ''.join(r.sample(...))щоб зберегти байт (лише python 2), і ви (s.letters+s.digits)*xможете переключитися s.printable[:62]*xна збереження 4 байт
Rod

@Rod Дякую за пропозиції. Я реалізував printable, не зміг домогтися [2::5]роботи (можливо, я робив це неправильно?)
Wondercricket

вам потрібно оточити список за r.sample()допомогою зворотних посилань з `` деякою інформацією про нього
Rod



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, і я не впевнений, що він може генерувати один і той же символ більше ніж один раз.
Атако

Це не працює для входів більше 3. Я спробував це тут: pyke.catbus.co.uk
m13r

Для цього потрібно близько 1 ГБ оперативної пам’яті, просто щоб створити рядок з 4 буквено-цифрових символів ... Не 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.

Сюди входять лише маленькі алфавіти та цифри, а не великі літери
Синій

@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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.