Tạo UUID ngẫu nhiên


15

Tôi cần một UUID. Công việc của bạn là tạo ra một.

UUID chính tắc (IDentifier duy nhất toàn cầu) là một số thập lục phân 32 chữ số với các dấu gạch nối được chèn vào một số điểm nhất định. Chương trình sẽ xuất ra 32 chữ số hex (128 bit), dưới dạng xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx( 8-4-4-4-12chữ số), trong đó xlà một số thập lục phân ngẫu nhiên. Giả sử rằng PRNG ngôn ngữ của bạn là hoàn hảo, tất cả các kết quả đầu ra hợp lệ phải có cùng xác suất được tạo.

TL; DR

Tạo 32 chữ số thập lục phân ngẫu nhiên trong các 8-4-4-4-12chữ số mẫu . Mã ngắn nhất sẽ thắng.

EDIT: Phải là thập lục phân. Luôn luôn chỉ tạo số thập phân là không hợp lệ. EDIT 2: Không tích hợp. Đây không phải là GUID, chỉ là các chữ số hex chung.


Ví dụ đầu ra:

ab13901d-5e93-1c7d-49c7-f1d67ef09198
7f7314ca-3504-3860-236b-cface7891277
dbf88932-70c7-9ae7-b9a4-f3df1740fc9c
c3f5e449-6d8c-afe3-acc9-47ef50e7e7ae
e9a77b51-6e20-79bd-3ee9-1566a95d9ef7
7b10e43c-3c57-48ed-a72a-f2b838d8374b

Đầu vào, và sơ hở tiêu chuẩn không được phép.


Đây là , vì vậy mã ngắn nhất sẽ thắng. Ngoài ra, hãy thoải mái yêu cầu làm rõ.


5
Có vẻ như là một phiên bản ít nghiêm ngặt hơn của codegolf.stackexchange.com/q/32309/14215
Geobits

9
"Những ví dụ này không phải là ngẫu nhiên. Hãy cố gắng gắn một số ý nghĩa." Điều đó nghĩa là gì?
Alex A.

3
Trên thực tế, một người không cần số thập lục phân, 10 cơ sở cũng có thể là ngẫu nhiên. Ví dụ: 12345678-1234-1234-1234-123456789012phải là một UUID hợp lệ (hoặc có bất kỳ chữ số hex nào cần thiết không?). Bạn có coi đây là một lỗ hổng?
Voitcus

3
Tiêu đề và câu đầu tiên gợi ý rằng bạn muốn có một UUID chuẩn, và các ví dụ được đưa ra dường như tuân theo thông số kỹ thuật cho UUID, nhưng bạn thực sự dường như đang yêu cầu một thứ khác.
Peter Taylor

3
Tôi cảm thấy buộc phải chỉ ra rằng phiên bản 4 (ngẫu nhiên) UUID có một định dạng yêu cầu của xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx nơi ylà một trong những [89AB]. Tại thời điểm nhận xét này, không có câu trả lời nào (ngoại trừ C # sử dụng thư viện tích hợp) được đảm bảo để tạo ra một UUID ngẫu nhiên hợp lệ (và thực tế, hoàn toàn không có khả năng không tạo ra một).

Câu trả lời:


11

Bình thường, 20 byte

j\-msm.HO16*4hdj83 3

Trình diễn.

Mã hóa [1, 0, 0, 0, 2]là 83 trong cơ sở 3, sau đó thêm một và nhân bốn để có được độ dài của mỗi phân đoạn. Sau đó tạo các chữ số hex và tham gia vào dấu gạch nối.


8

Julia, 80 byte

h=hex(rand(Uint128),32)
print(h[1:8]"-"h[9:12]"-"h[13:16]"-"h[17:20]"-"h[21:32])

Tạo một số nguyên 128 bit ngẫu nhiên, lấy biểu diễn thập lục phân của nó dưới dạng một chuỗi được đệm thành 32 chữ số và chia nó thành các phân đoạn được nối với dấu gạch ngang.

Cảm ơn ConfuseMr_C và kvill vì sự giúp đỡ của họ!


8

CJam, 26 25 byte

8 4__C]{{Gmr"%x"e%}*'-}/;

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

8 4__C]{              }/   For each I in [8 4 4 4 12]:
        {         }*         Do I times:
         Gmr                   Pseudo-randomly select an integer between 0 and 15.
            "%x"e%             Apply hexadecimal string formatting.
                    '-       Push a hyphen-minus.
                        ;  Discard the last hyphen-minus.

5

PowerShell, 77 69 67 byte

((8,4,4,4,12)|%{((1..$_)|%{'{0:X}'-f(random(16))})-Join""})-Join"-"

chỉnh sửa: ngoại lai:

((8,4,4,4,12)|%{((1..$_)|%{('{0:X}'-f(random(16)))})-Join""})-Join"-"

chỉnh sửa: đã có thể xóa dấu vết .Trim ("-") khỏi bản gốc:

(((8,4,4,4,12)|%{((1..$_)|%{('{0:X}'-f(random(16)))})+"-"})-Join"").Trim("-")

Nó có thể rõ ràng hơn với một số khoảng trắng được cho là bản chất của các cờ (-f và -Join). Tôi vẫn muốn mất Trim cuối cùng ("-"):

(((8,4,4,4,12)|%{((1..$_)|%{('{0:X}' -f (random(16)))}) + "-"}) -Join "").Trim("-")

Hoặc, sử dụng chức năng tích hợp (ala câu trả lời C # ở trên)

'{0}'-f[System.Guid]::NewGuid()

Tuy nhiên, có vẻ như một phím tắt nhỏ-y ngay cả khi nó có ở mức 31 byte.


61 byte:(8,4,4,4,12|%{-join(1..$_|%{'{0:X}'-f(random(16))})})-join'-'
mazzy

5

Python 2, 86 84 byte

from random import*;print'-'.join('%%0%ix'%i%randint(0,16**i-1)for i in[8,4,4,4,12])

Chuỗi này định dạng chuỗi để tạo định dạng Python cho các số hex duy nhất cho mỗi phân đoạn.

Ung dung:

import random

final = []
for i in [8, 4, 4, 4, 12]:               # Iterate through every segment
    max = (16 ** i) - 1                  # This is the largest number that can be
                                         # represented in i hex digits
    number = random.randint(0, max)      # Choose our random segment
    format_string = '%0' + str(i) + 'x'  # Build a format string to pad it with zeroes
    final.append(format_string % number) # Add it to the list

print '-'.join(final)                    # Join every segment with a hyphen and print

Điều này có thể sử dụng một số cải tiến, nhưng tôi tự hào.



4

PHP, 69 72 75 byte

foreach([8,4,4,4,12]as$c)$r[]=rand(".1e$c","1e$c");echo join('-',$r);

Điều này không xuất ra các chữ số hex ( a, ... f). Họ được phép, nhưng không được yêu cầu bởi cơ quan câu hỏi.

Không có nhóm chữ số bắt đầu bằng 0(cũng không bắt buộc).

chỉnh sửa: đã lưu 3 byte nhờ @IsmaelMiguel


Trông giống như một bi hơn 32 byte.
isaacg

@isaacg vâng, xin lỗi - lỗi của tôi
Voitcus

Bạn nên sử dụng join()thay thế.
Ismael Miguel

3

C #, 65 byte

using System;class C{void Main(){Console.Write(Guid.NewGuid());}}

chỉnh sửa: Có! C # ngắn hơn Ngôn ngữ khác (ngoài Java) :)


1
Tôi nghĩ rằng đây được coi là một lỗ hổng tiêu chuẩn ... :( meta.codegolf.stackexchange.com/questions/1061/ory
Dom Hastings

1
Tôi nghĩ rằng đây không được coi là một lỗ hổng tiêu chuẩn: Như bạn có thể thấy yêu cầu từ bỏ công cụ này chỉ nhận được 2 lần nâng cấp trong hơn 1 năm. Ngược lại, bình luận nói rằng bạn nên sử dụng các hàm dựng sẵn có 58 lượt nâng cấp. Hoặc như một người bình luận đã nói -> Nếu tất cả chúng ta bị giới hạn trong cùng một bộ chức năng tích hợp, mọi cuộc thi sẽ được APL hoặc Golfscript giành chiến thắng vì tên lệnh của họ là ngắn nhất. (Michael Stern)
Stephan Schinkel

1
hoặc chỉ nói cách khác: Chúng ta có thể sử dụng printf không? hoặc chúng ta nên sử dụng asm nội tuyến để kích hoạt interupt 21?
Stephan Schinkel

Một điểm tốt! Tôi không có ý định buồn, tôi chỉ có nghĩa là hữu ích! Tôi đoán sau đó, Mathicala có thể giành chiến thắng với CreateUUID[]!
Dom Hastings

1
@StephanSchinkel "chỉ có 2 upvote trong một năm" là sai lệch. Nó có 47 upvote và 45 downvote ngay bây giờ, vì vậy một mạng +2. Điều đó đang được nói, ngưỡng được chấp nhận chung cao hơn mức đó, vì vậy bạn đúng rằng nó không "thực sự" được coi là một lỗ hổng tiêu chuẩn ngay bây giờ.
Geobits

3

chim ưng, 86

BEGIN{for(srand();j++<32;printf(j~"^9|13|17|21"?"-":E)"%c",x+(x>10?87:48))x=rand()*16}

Bạn có thể sử dụng điều này một lần mỗi giây để tạo ra một "UUID" ngẫu nhiên duy nhất. Điều này là do srand()sử dụng thời gian hệ thống tính bằng giây kể từ epoch làm đối số nếu không có đối số nào được đưa ra.

for n in `seq 100` do awk 'BEGIN{for(srand();j++<32;printf(j~"^9|13|17|21"?"-":E)"%c",x+(x>10?87:48))x=rand()*16}'; sleep 1; done

Tôi nghĩ rằng phần awk là khá thanh lịch.

BEGIN{
    srand()
    for(;j++<32;) {
        x=rand()*16
        x+=(x>10?87:48)
        printf "%c", x
        if(j~"^8|12|16|20")printf "-"
    }
}

Nếu bạn muốn sử dụng nó thường xuyên hơn một lần mỗi giây, bạn có thể gọi nó trong bash như thế này. Lưu ý rằng phần awk cũng được thay đổi.

echo `awk 'BEGIN{for(srand('$RANDOM');j++<32;printf(j~"^9|13|17|21"?"-":E)"%c",x+(x>10?87:48))x=rand()*16}'`

Các echođược thêm vào đó để in một dòng mới mỗi lần.


3

K5, 35 byte

"-"/(0,8+4*!4)_32?`c$(48+!10),65+!6

Để tạo một bảng chữ cái hex tôi tạo một chuỗi ký tự ( `c$) từ danh sách các chữ số ( 48+!10) và 6 chữ cái đầu tiên ( 65+!6). Một cách khác để tạo ra các chữ số có cùng độ dài là,/$!10 .

Với chuỗi "0123456789ABCDEF" được tạo, phần còn lại rất đơn giản. Chọn 32 giá trị ngẫu nhiên từ tập hợp này ( 32?), lát ( _) chuỗi kết quả được 0 8 12 16 20tính toán thông qua (0,8+4*!4), sau đó nối các đoạn chuỗi kết quả với dấu gạch ngang ( "-"/).

Trong hành động:

  "-"/(0,8+4*!4)_32?`c$(48+!10),65+!6
"9550E114-A8DA-9533-1B67-5E1857F355E1"

3

R , 63 byte

x=sample(c(0:9,letters[1:6]),36,1);x[0:3*5+9]='-';cat(x,sep='')

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

Mã đầu tiên xây dựng một chuỗi ngẫu nhiên 36 ký tự, sau đó đặt bốn dấu gạch nối. Nó xuất ra một UUID thành thiết bị xuất chuẩn.


Thay thế ccuộc gọi bằng sprintf("%x",0:15)-1.
J.Doe

3

JavaScript, ES6, 106 byte

"8-4-4-4-12".replace(/\d+/g, m => {t=0;for(i=0; i<m; i++) {t+=(Math.random()*16|0).toString(16)}return t})

Sử dụng Regex thay thế. Xử lý chuỗi định dạng dưới dạng đếm để tạo một char hex. Nâng hàng bất cứ nơi nào tôi có thể; bỏ dấu chấm phẩy nếu có thể.


89 byte,'8-4-4-4-12'.replace(/\d+/g,n=>Math.floor(16**n*Math.random()).toString(16).padStart(n,0))
kamoroso94

2

Perl 6 , 53 byte

Một điều hiển nhiên:

say join '-',(0..9,'a'..'f').flat.roll(32).rotor(8,4,4,4,12)».join # 67

Dịch ví dụ Perl 5 bằng cách sử dụng printf, kết quả là mã ngắn hơn một chút.

printf ($_='%04x')~"$_-"x 4~$_ x 3,(0..^4⁸).roll(8) # 53

(0..16⁴)?! Bạn có thể làm điều đó trong Perl?
vỗ tay

1
@VoteToSpam Bạn có thể tính đến 9 ngày trước . (Perl 6 sẽ được phát hành vào cuối tháng này)
Brad Gilbert b2gills 04/12/2015

Cooooool. Có lẽ tôi nên học nó
vỗ tay

@VoteToSpam Điều đó không là gì so với việc 1,2,4,8,16 ... *tạo ra một danh sách vô hạn lười biếng về sức mạnh của 2. ( {2**$++} ... *cũng hoạt động)
Brad Gilbert b2gills


2

APL (Dyalog Unicode) , 115 78 byte

a←⊣,'-',⊢
H←⊃∘(⎕D,819⌶⎕A16∘⊥⍣¯1
(H 8?16)a(H 4?16)a(H 4?16)a(H 4?16)a H 12?16

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

Đây là lần nộp APL đầu tiên của tôi. Rất cảm ơn @ Adám đã đồng hành cùng tôi trong cuộc trò chuyện APL của PPCG và về chức năng chuyển đổi thập lục phân.

Cảm ơn @ Zacharý cho 1 byte

Đã chỉnh sửa để sửa số byte.


Bạn có thể giả sử ⎕IO←0không có chi phí byte, Adám làm điều đó rất nhiều. Ngoài ra, hầu hết các byte (IIRC, tất cả các byte bạn có ở đây) có thể được tính là một trong APL.
Zacharý

@ Zacharý Tôi đã sử dụng TIO để đếm số byte cho bài nộp của mình, tôi có nên sử dụng số lượng ký tự thay thế không? Tôi vẫn chưa quen với PPCG và sử dụng APL, vì vậy tôi không có nhiều kiến ​​thức thực tế về cách thực hiện đếm byte cho nó.
J. Sallé

Also, you can change a(H 12?16) to a H 12?16 to save one byte.
Zacharý


2

Japt, 32 bytes

[8,4,4,4,12]m@MqG**X sG ù0X} q"-

Try it online!


Welcome to PPCG and welcome to Japt :) I'll take a run through your solutions so far when I can make some time (just back from holidays, so much to catch up on) but the first tip I'll offer is to familiarise yourself with the Unicode shortcuts (m@ - £, for example) and, to help get you started here's a hastily golfed 24 byte version of your solution: ethproductions.github.io/japt/… Drop into the Japt chatroom if you've any questions.
Shaggy

1

MATLAB/Octave , 95 bytes

a='-';b=strcat(dec2hex(randi(16,32,1)-1)');[b(1:8) a b(9:12) a b(13:16) a b(17:20) a b(21:32)]

1

Perl , 51 byte

say"xx-x-x-x-xxx"=~s/x/sprintf"%04x",rand 65536/reg

Yêu cầu perl5> = 5.10 tôi nghĩ. Đối với công cụ sửa đổi / r và cho biết ().


1
Đẹp! Điều đó tốt hơn tôi nhiều! Đã xem xét giải pháp của bạn, bạn thậm chí có thể tiết kiệm nhiều hơn dựa trên bài đăng meta này bằng s//xx-x-x-x-xxx/;s/x/sprintf"%04x",rand 65536/egcách sử dụng -pcờ, cũng có nghĩa là nó hoạt động trên các phiên bản cũ hơn mà không cần -E.
Dom Hastings

Cảm ơn. Đề xuất của bạn là: echo | perl -pe's // xx-xxx-xxx /; s / x / sprintf "% 04x", rand 65536 / vd 'Và đó chỉ là 48 ký tự giữa' '. (Đây có phải là loại gian lận không? Có lẽ không)
Kjetil S.

Theo bài đăng meta này, có thể chấp nhận được, tôi chưa có cơ hội sử dụng cơ chế đó, nhưng hy vọng tôi sẽ sớm thôi! Sẽ là 49 byte (+ -p) nhưng vẫn khá tốt và tôi sẽ không xem xét phương pháp đó mà không thấy câu trả lời của bạn!
Dom Hastings


1

C ++, 194 193 221 210 201 byte

+7 byte nhờ Zacharý (đã phát hiện ra một -thứ không nên ở cuối)

#include<iostream>
#include<random>
#include<ctime>
#define L(a)for(int i=0;i<a;++i)std::cout<<"0123456789abcdef"[rand()%16];
#define P(a)printf("-");L(a)
void t(){srand(time(0));L(8)P(4)P(4)P(4)P(12)}

Nếu ai đó có một cách để có được một giá trị khác nhau mỗi lần thực hiện mà không thay đổi srandvà không bao gồm <ctime>, điều đó sẽ rất tuyệt


Không thể #define L(a) for... được #define L(a)for...? (Có thể đã hỏi điều đó)
Zacharý

Điều này không hợp lệ, có dấu "-" ở cuối (không nên có)
Zacharý

@ Zacharý Sửa chữa được áp dụng ngay bây giờ
HatsuPulumKun


1
Bạn có thể làm một cái gì đó như "0123456789abcdef"[rand()%16], và sau đó loại bỏ f?
Zacharý

1

Befunge-93 , 97 byte

v>4448v,+<    <
0*    :  >59*0^
62v0-1_$:|>*6+^
>^>41v < @^99<
v<*2\_$:54+` |
?0>+\1-^ v*68<>
>1^

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

Tôi chắc chắn điều này có thể được thu nhỏ, nhưng đây là lần thử đầu tiên của tôi :)


1

Bash, 67 byte

for l in 4 2 2 2 6;{ o+=`xxd -p -l$l</dev/random`-;}
echo ${o::-1}

Chào mừng đến với PPCG!
Dennis

1

JavaScript REPL, 79 byte

'66-6-6-6-666'.replace(/6/g,_=>(Math.random().toString(16)+'00000').slice(2,6))

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

Math.randomcó thể trở lại 0. Thêm 5 số không làm cho lát cắt có được 4 0giây


1

Forth (gforth) , 91 89 byte

include random.fs
hex
: f 0 4 4 4 8 20 0 do dup i = if + ." -" then 10 random 1 .r loop ;

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

Giải trình

Thay đổi cơ sở thành thập lục phân, sau đó xuất số / phân đoạn có độ dài phù hợp với dấu gạch ngang theo các khoảng thời gian được chỉ định

Giải thích mã

include random.fs          \ include the random module
hex                        \ set the base to hexadecimal
: f                        \ start a new word definition
  0 4 4 4 8                \ enter the intervals to place dashes
  20 0 do                  \ start a counted loop from 0 to 0x20 (32 in decimal)
    dup i =                \ check if we are on a character that needs a dash
    if                     \ if we are
      +                    \ calculate the next character that gets a dash
      ." -"                \ output a dash
    then                   \ end the if block
    f random               \ get a random number between 0x0 and 0xf
    1 .r                   \ output it right-aligned in 1-character space
  loop                     \ end the loop
;                          \ end the word definition

1

C (gcc) ,  94   91  86 byte

main(i){srand(&i);i=803912;for(;i--%16||(i/=16)&&printf("-");printf("%x",rand()%16));}

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

Tôi muốn đề xuất phiên bản này trong một bình luận cho Max Yekhlakov ( câu trả lời của anh ấy ), nhưng tiếc là tôi chưa có 50 điểm danh tiếng cần thiết, vì vậy đây là câu trả lời của tôi.

803912C4448ở hệ thập lục phân, nó mô tả cách đầu ra phải được định dạng ( 12-4-4-4-8), nó được đảo ngược vì các chữ số có nghĩa ít nhất sẽ được đọc trước.
 

Chỉnh sửa:

  • đã lưu 3 byte nhờ Jonathan Frech
  • đã lưu thêm 5 byte bằng cách thay thế srand(time(0))bằngsrand(&i)

1
main(){...;int i=có thể main(i){...;i=.
Jonathan Frech

Tôi đã suy nghĩ điều gì đó, dường như srand()chấp nhận một unsigned inttham số hạt giống của nó. Trên tio.run, an unsigned intdài 4 byte nhưng UUID dài 16 byte. Điều này có nghĩa là chỉ một phần rất nhỏ của đầu ra hợp lệ (1/2 ^ 12) sẽ được tạo, do đó giải pháp của tôi (cũng như giải pháp trước đó time(0)) không hợp lệ. Bạn nghĩ sao ?
Annyo

Các tiểu bang OP Assuming that your language's PRNG is perfect, all valid outputs must have the same probability of being generated.. Entropy hạt giống không nhất thiết xác định entropy RNG, mặc dù nó có khả năng (không kiểm tra việc srand()thực hiện). Tuy nhiên, srand()theo hiểu biết của tôi là đồng phục hợp lý, vì vậy nếu RNG hoàn hảo, nó vẫn sẽ đồng nhất. Do đó tôi nghĩ rằng câu trả lời của bạn là hợp lệ.
Jonathan Frech

Vâng tôi hiểu. Tôi cũng có thể gửi câu trả lời của mình dưới dạng hàm, giả sử srand()đã được thực hiện và trong trường hợp này sẽ không còn nghi ngờ gì nữa. Nhưng tôi không chắc liệu điều này có được phép hay không, tất cả các bài nộp C / C ++ khác dường như bao gồm srand()cả câu trả lời (trừ khi nó không được sử dụng rand())
Annyo


1

C (gcc), 143 110 103 96 94 byte

Chơi gôn xuống 94 byte nhờ trần nhà và Jonathan Frech.

(*P)()="\xf\x31À";*z=L"\10\4\4\4\14";main(n){for(;*z;*++z&amp;&amp;putchar(45))for(n=*z;n--;printf("%x",P()&amp;15));}

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

Giải trình:

/*
  P is a pointer to a function.
  The string literal contains actual machine code of the function:

  0F 31     rdtsc
  C3        ret

  0xc3 is the first byte of the UTF-8 representation of the character À
*/
(*P)() = "\xf\61À";

// encode uuid chunk lengths as literal characters
// we use wide characters with 'L' prefix because
// sizeof(wchar_t)==sizeof(int) for 64-bit gcc C on TIO
// so z is actually a zero-terminated string of ints
*z = L"\8\4\4\4\14"

main (n)
{
    for (
        ; 

        // loop until we reach the trailing zero
        *z;

        // increase the pointer and dereference it
        *++z 
             // and output a hyphen, if the pointer does not point at zero
             && putchar(45) 
    )
        // output a random hex string with length pointed at by z
        for (n = *z; n--; printf ("%x", P()&15));
}

1
Xin chào và chào mừng đến với PPCG! 110 byte .
Jonathan Frech

@JonathanFrech Cảm ơn bạn! Phiên bản của bạn rất ấn tượng!
Max Yekhlakov

Đề xuất *z=L"\27\23\17\vz"thay vì *z=L"\10\4\4\4\14"for(n=32;n--;z+=printf("-%x"+(n!=*z),P()&15)-1)thay vìfor(;*z;*++z&&putchar(45))for(n=*z;n--;printf("%x",P()&15))
trần mèo

1

Java với Ten Foot Laser Cực v. 1.06, 126 byte

String u(){return sj224.tflp.util.StringUtil.replace("aa-a-a-a-aaa","a",s->String.format("%04x",(int)(Math.random()*65536)));}

Đã thử nghiệm với phiên bản 1.06 của thư viện, nhưng phiên bản này sẽ hoạt động với mọi phiên bản 1.04 trở lên.



0

SmileBASIC, 65 62 byte

DEF G H?"-";:END
DEF H?HEX$(RND(65536),4);
END H G G G G H H H

Tôi đã tạo một hàm để in 4 chữ số hex ngẫu nhiên: DEF H?HEX$(RND(65536),4);:ENDcũng như 4 chữ số -sau a : DEF G:H?"-";:END. Sau đó, nó chỉ phải gọi các chức năng này một loạt các lần.


0

Chip , 109 + 6 = 115 byte

Yêu cầu cờ -wc36, gây ra +6 byte

!ZZZZZZZZZZZZZZZZZZZZZZ
,-----.,+vv--^----^---z
?]]]--R\acd
?xx+-)\\b
?x+x-)\\c
?^xx\--\d
`-xx]v~\e
f*`)'`-\g

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

Tạo 4 bit ngẫu nhiên (bốn ?'s) và chuyển đổi thành các chữ số hex:

  • 0x0- 0x9=> 0-9
  • 0xa- 0xe=> b-f
  • 0xf => a

... Một chút khác thường, nhưng nó đã tiết kiệm cho tôi một số byte mà không phải trả chi phí cho việc phân phối kết quả.

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.