Tạo một chuỗi ký tự chữ và số ngẫu nhiên có độ dài N


30

Cách ngắn nhất để tạo một chuỗi ngẫu nhiên với độ dài nhất định và chỉ cho phép các ký tự chữ và số là gì?

  • ví dụ về một chuỗi ngẫu nhiên: với đầu ra N = 9 sẽ là aZua7I0Lk
  • độ dài cho trước N có thể được coi là luôn lớn hơn 0
  • nếu cần, bạn có thể giả sử 256 là giá trị tối đa cho N, nhưng các giải pháp có giới hạn cao hơn cho N và vẫn có thời gian tính toán nhanh được ưu tiên
  • ký tự được phép: 0-9, az và AZ
  • một ký tự có thể xuất hiện nhiều lần trong chuỗi đầu ra
  • mỗi chuỗi có thể có khả năng như nhau (tính chính xác của trình tạo số ngẫu nhiên trong ngôn ngữ của bạn)

1
Chúng ta có thể giả sử một giá trị tối đa cho N?
JAD

Câu trả lời:


4

Thạch , 4 byte

ØBṗX

Hãy thử trực tuyến!

Giải trình

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

Sức mạnh của Cartesian về cơ bản tạo ra tất cả các danh sách có độ dài nhất định có thể được hình thành từ một tập hợp các phần tử nhất định; đó chính xác là những gì chúng ta cần ở đây.


Nếu có các ký tự UTF-8 có thể thực sự chỉ là 4 byte? Một ký tự UTF-8 có thể nhiều hơn một byte ...
m13r

@ m13r Jelly sử dụng trang mã riêng của mình trong đó tất cả đều là các ký tự byte đơn
FlipTack

13

Taxi , 2577 byte

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]

Hãy thử trực tuyến!

Taxi là siêu không được làm cho điều này nhưng bạn có thể làm điều đó! Tôi sẽ cố gắng giải thích những gì xảy ra bên dưới phiên bản không chơi gôn.

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]

Bắt đầu: Nhận stdin
Nhặt giá trị stdin dưới dạng văn bản, chuyển đổi nó thành một số và đi đến một nơi nào đó để chờ đợi.

Kế hoạch A Phần 1: Lấy số nguyên ngẫu nhiên 1-62
Lấy số nguyên ngẫu nhiên và sau đó lấy 62số. Sao y cả số nguyên ngẫu nhiên và 62vì chúng ta sẽ cần chúng sau này. Bạn chỉ có thể thực hiện 3 hành khách cùng một lúc vì vậy chúng tôi kết thúc với rand, rand, và 62. (The khác 62sẽ chờ đợi xung quanh cho đến khi chúng tôi nhận lại.) Go chia randbằng 62và cắt ngắn kết quả để có được một số nguyên. Quay trở lại để lấy bản sao khác 62và nhân nó với số nguyên bị cắt từ bộ phận. Cuối cùng, trừ sản phẩm từ bản sao đầu tiên của rand. Điều này cho chúng ta một số 0-61. Bây giờ chúng ta phải quay lại lấy a 1và thêm nó vào kết quả để lấy số 1-62. Vâng, tất cả những dòng văn bản đó chỉ là mod(rand(),62)+1.

Kế hoạch A Phần 2: Tạo một mảng các ký tự để chọn
Pickup một chuỗi có tất cả các ký tự hợp lệ và cũng là một ký tự ở cuối mà chúng ta không muốn (nhiều hơn về sau). Các 63chúng tôi nhặt trận đấu sớm chiều dài chuỗi này. Mang nó đến Chop Suey để chia nó thành từng hành khách.

Kế hoạch B: Di chuyển mảng để chúng ta có thể chọn từng nhân vật
một, di chuyển mọi nhân vật đến Công viên đường dẫn hẹp. Đó là ngăn xếp duy nhất có sẵn và cách duy nhất để không có hành khách còn sót lại cản đường. Mọi thứ khác ở Townsburg là FIFO vì vậy tôi sẽ phải quay lại và dọn sạch tất cả các hành khách mỗi lần lặp lại của vòng lặp tổng thể. Bằng cách này, tôi có thể để chúng ở công viên và chúng sẽ bị đẩy ra khỏi đường bởi 63 nhân vật mới mỗi lần. Đầu tiên Acó khả năng không bao giờ thoát .

Kế hoạch C: Chuẩn bị chọn một nhân vật
Đây thực sự chỉ là một vài điểm dừng không cần có trong Kế hoạch D. Định vị lại taxi trong quá trình chuẩn bị.

Kế hoạch D: Nhận tất cả các ký tự mà chúng ta không muốn
Bắt đầu với ký tự đầu tiên trong "mảng" đảo ngược (đây là ký tự thứ 63 chúng ta không muốn), tiếp tục chọn và ghép các ký tự khi chúng ta đếm ngược từ kết quả của modhàm trong Kế hoạch A. Một khi bạn đạt 0, nhân vật tiếp theo là nhân vật bạn muốn.

Kế hoạch E: Đắm chìm những người bạn không muốn và trả lại cái đã chọn.
"[P] khi những người đưa tin xuống cầu Riverview dường như luôn rơi qua một bên và xuống sông ..." Chà, điều đó đã thoát khỏi chuỗi những kẻ thua cuộc nối liền đó. Đi nhặt nhân vật tiếp theo và gửi nó đến thiết bị xuất chuẩn. Cuối cùng, hãy kiểm tra xem chúng tôi đã in bao nhiêu ký tự. Quay lại với Sunny Skies để chọn giá trị stdin mà chúng ta đã để lại từ lâu. Trừ đi một và, nếu kết quả lớn hơn 0, hãy gửi lại để chờ và bắt đầu lại ở Kế hoạch A.


Đây có phải là một ngôn ngữ hoàn chỉnh Turing? Tôi chưa bao giờ nghe nói về nó? Nếu vậy, thì điều này có thể đủ điều kiện là câu trả lời golf mã dài nhất trong lịch sử!
maple_shaft

4
@maple_shaft Taxi là một loại thú vị nhưng tôi có thể đảm bảo đây không phải là câu trả lời golf dài nhất. Có một số câu trả lời Unary nghiêm túc thổi phồng nó.
Kỹ sư Toast

1
@maple_shaft Tôi đã làm một số đào. Câu trả lời lớn nhất tôi có thể tìm thấy trên PPCG là phiên bản gốc của câu trả lời này từ @ Dennis ♦ (tất nhiên đó là Dennis ♦) nhưng đó là từ code-bowlingvà đã được sửa đổi. code-golfCâu trả lời dài nhất tôi có thể tìm thấy là bài nộp Brain-Flak ban đầu về thử thách cơ bản. Nó xuất hiện ở mức 9,5 * 10 ^ 580 byte. Câu trả lời dài nhất hiện tại tôi tìm thấy là một trình kiểm tra chính trong Unary : 1,65 * 10 ^ 56 byte.
Kỹ sư Toast


6

Thạch , 5 byte

Bỏ lỡ một mẹo - xem 4 byter của ais523

ØBX$€

Hãy thử trực tuyến!

Làm sao?

Ø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

Tôi sẽ không coi ký tự UTF-8 là có độ dài một byte oO?
m13r

@ m13r Jelly có trang mã riêng - nhấp vào byte trong tiêu đề câu trả lời của tôi để xem.
Jonathan Allan

5

Shell + pwgen , 13 byte

pwgen -s $1 1

-s, - bảo mật

Tạo mật khẩu hoàn toàn ngẫu nhiên, khó nhớ.

Sản lượng mẫu

%pwgen -s 10 1
2cyhLovbfT

5

Java 8, 183 149 97 88 byte

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

Hãy thử trực tuyến.

-9 byte bằng cách chuyển câu trả lời C của @ 2501 , vì vậy hãy đảm bảo nâng cấp anh ấy!

Câu trả lời cũ, 97 byte

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;}

Hãy thử trực tuyến.

Giải trình:

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 byte

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

Xem nó hoạt động ở đây .

Xem phân phối tại đây .

Nó được phân phối đồng đều, giả sử rand() % 62tạo ra một phân phối đồng đều. Vì 62 thường không chia đều RAND_MAX, nên có độ lệch rất nhỏ.


4

Người tuyết , 58 byte

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

Hãy thử trực tuyến!

Đây là một chương trình con lấy một số nguyên làm đầu vào và trả về chuỗi ngẫu nhiên.

((             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 +

Nó nên là : ((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR)).
2501

@ 2501 À, bạn nói đúng. Đã sửa, cảm ơn.
Doorknob

4

PowerShell, 58 54 byte

-4 cảm ơn Andrei Odegov - truyền tới một mảng char thay vì lặp để tạo một mảng char.

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

tạo ra một phạm vi 1..2+4..5 = 1,2,4,5của tất cả các mã charachter có thể chấp nhận, sau đó chọn $argssố lượng phần tử ngẫu nhiên bằng cách sử dụng random -Count- các phần tử kết quả được lặp qua |%{}và biến thành [char]s, được chuyển thành một mảng các ký tự bằng cách sử dụng [char[]]- sau đó toàn bộ được đóng gói trong ngoặc và -joined cùng nhau.

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

Không hoạt động với đầu vào bằng 0 vì Get-Randomchỉ chấp nhận các số trên 1 cho -Counttham số.


Bạn có thể truyền mảng byte thu được dưới dạng một tổng thể thành một mảng ký tự. Điều này sẽ giúp tiết kiệm 4 byte:-join[char[]](65..90+97..122+48..57|random -C "$args")
Andrei Odegov



2

Perl 5 , 41 byte

40 byte mã + -pcờ.

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

Hãy thử trực tuyến!

(a..z,A..Z,0..9)tạo một mảng chứa tất cả các chữ cái và số, [rand 62]trả về một phần tử ngẫu nhiên của mảng này, đó là append ( .=) $\, được in ngầm ở cuối nhờ -pcờ với }{.


Hoặc, cho cùng một byte, nhưng sử dụng các tham số thay vì đầu vào standart:

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

Hãy thử trực tuyến!


2

R, 51 byte

Cùng độ dài với câu trả lời R khác, nhưng một cách tiếp cận khác.

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

lettersLETTERScả hai đều là các biến tích hợp có chứa tất cả các chữ cái viết thường và in hoa tương ứng. Thêm 0:9vào đó và chúng ta có toàn bộ các ký tự chữ và số.


2

R, 54 52 51 49 byte

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

Giải trình:

  1. Đọc số nguyên đầu vào n :scan()
  2. Vectơ với các giá trị ASCII: c(65:90,97:122,48:57)
  3. Mẫu n giá trị ASCII có thay thế:sample(c(65:90,97:122,48:57),scan(),T)
  4. Chuyển đổi giá trị ASCII thành chuỗi ký tự với intToUtf8

Tôi tìm thấy một cách tiếp cận khác với cùng chiều dài.
JAD

@JarkoDubbeldam Ý tưởng hay, điều này đã giúp tôi tiết kiệm hai byte
Sven Hohenstein

Ôi! làm tốt lắm :)
JAD

2

JavaScript (ES6), 61 54 39 52 64 byte

Điều này gần giống như chơi gôn ngược! Đã tạo ra một cú hích lớn về số lượng byte đảm bảo rằng toàn bộ các ký tự từ cả ba nhóm sẽ được sử dụng.

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
  • 15 byte được lưu (ở một giai đoạn) nhờ đề xuất của Arnauld về việc sử dụng hàm đệ quy.

Thử nó

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>


Tôi đã cập nhật nó để bao gồm cả 3 nhóm nhân vật, @Arnauld; Tôi chỉ đang cố gắng tìm một chỉ mục có thể chứa hơn 2 trong số đó. Cảm ơn đã đề xuất tùy chọn đệ quy.
Xù xì

Tôi thích ý tưởng này, nhưng tôi nghĩ giờ đây bạn chỉ tạo ra các nhân vật [0-5w-z].
Arnauld

Tôi đề nghị btoa(String.fromCharCode(Math.random()*248))[0]bao gồm toàn bộ phạm vi thống nhất.
Arnauld

Chỉ cần nhận thấy rằng bản thân mình, @Arnauld. Có vẻ như tôi sẽ phải kết hợp cả hai phương thức (chuyển đổi toStringvà sau đó mã hóa) để đảm bảo có thể trả lại đầy đủ các ký tự từ cả 3 nhóm.
Xù xì

Điều đó tốt hơn nhưng vẫn chưa hoàn thiện: 014589ABEFIJMNQRUVYZcdghklopstwx(và không thống nhất).
Arnauld

2

Alice , 24 byte

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

Hãy thử trực tuyến!

Bố cục này đã tốt hơn rất nhiều so với những gì tôi có ban đầu (32 byte), nhưng tôi chắc chắn rằng nó chưa tối ưu ...

Giải trình

/      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 2, 79 83 79 byte

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

+4 byte (không tính đến sự lặp lại)

-4 byte (Cảm ơn @Rod đã gợi ý sử dụng printable[:62])


1
Không hoạt động, nó phải chứa sự lặp lại. Nó có thể được sửa chữa bằng cách sử dụng (s.letters+s.digits)*xthay thếs.letters+s.digits
Rod

@Rod Đã sửa, cảm ơn!
Wonderercricket

`r.sample(...)`[2::5]Thay vào đó, bạn cũng có thể sử dụng ''.join(r.sample(...))để lưu một byte (chỉ python 2) và (s.letters+s.digits)*xcó thể được chuyển sang s.printable[:62]*xlưu 4 byte
Rod

@Rod Cảm ơn những lời đề nghị. Tôi đã thực hiện printable, không thể [2::5]làm việc được (có lẽ tôi đã làm sai?)
Wondercricket

bạn cần bao quanh danh sách r.sample()với backticks `` một số thông tin về nó
Rod

1

Brachylog , 14 byte

~l{Ạụ:Ạ:Ịcṛ}ᵐc

Hãy thử trực tuyến!

Giải trình

~l                 Create a list of length Input
  {        }ᵐ      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


1

Mẻ, 175 byte

@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%%

sthực hiện nhiệm vụ kép ở đây vì nó chứa cả danh sách chữ và số và các ký tự được chọn ngẫu nhiên. Sau khi in kết quả, mã rơi vào chương trình con có kết quả bị bỏ qua.


1

Pyke , 4 byte

~JfH

Hãy thử trực tuyến!

~J   -   "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  f  -  cominbations(^, length=input)
   H - random.choice(^)

Điều này dường như không hoạt động đối với bất kỳ đầu vào nào lớn hơn 3 và tôi không chắc nó có thể tạo cùng một ký tự nhiều lần.
ATaco

Điều này không hoạt động đối với các đầu vào lớn hơn 3. Tôi đã thử ở đây: pyke.catbus.co.uk
m13r

Điều này cần khoảng 1 GB RAM chỉ để tạo một chuỗi gồm 4 ký tự chữ và số ... Không làm cho nó hoạt động với đầu vào 10. Chương trình bị lỗi vớiMemoryError
m13r

1

Pyth, 7 11 byte

O^s++rG1GUT

Dùng thử trực tuyến

Giải trình

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.

Điều này chỉ bao gồm bảng chữ cái chữ thường và số, không bao gồm chữ cái viết hoa
Blue

@muddyfish Bắt tốt. Đã sửa.

1

C # - 121 byte

void g(int n){Console.Write(Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(new Random().Next().ToString())).Substring(0,n));}

1

APL (Dyalog) với AGL , 17 byte

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

Hãy thử trực tuyến!

(... )[... ] chỉ số thành

⎕A,∆a,⎕D bảng chữ cái chữ hoa theo sau là bảng chữ cái chữ thường theo sau là chữ số

sử dụng

62 (số lượng các ký hiệu có thể

được định hình lại bởi

 đánh giá đầu vào ( n )

? thay đổi mỗi 62 thành một số ngẫu nhiên trong phạm vi 1 Lọ 62

APL (APLX) , 17 byte

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


1

Pip , 13 byte

LaORCz.AZ.J,t

Hãy thử trực tuyến!

Giải trình

               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 byte BASIC được mã hóa

 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

Không có ký tự chữ thường trong ZX81 mà không sử dụng lắp ráp hoặc có một số loại UDG ROM hoặc một cái gì đó, và hiện tại, nó chỉ xuất ra A-Z. Nếu số 0 được nhập thì chương trình tạm dừng và trở về chế độ trực tiếp.



0

Xếp chồng lên nhau , 33 byte

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

Hãy thử trực tuyến! Lấy đầu vào từ đỉnh của ngăn xếp và để lại đầu ra trên đỉnh của ngăn xếp.

:>[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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.