এলোমেলো ইউইউডি জেনারেট করুন


15

আমার একটা ইউইউডি দরকার। আপনার কাজটি একটি উত্পন্ন করা।

ক্যানোনিকাল ইউআইউডি (ইউনিভার্সাল ইউনিক আইডেন্টিফায়ার) একটি 32 অংকের হেক্সাডেসিমাল সংখ্যা যা নির্দিষ্ট পয়েন্টগুলিতে .োকানো হয় program প্রোগ্রামটি xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx( 8-4-4-4-12অঙ্কগুলি) আকারে 32 হেক্স ডিজিট (128 বিট) আউটপুট করে , যেখানে xএকটি এলোমেলো হেক্সাডেসিমাল সংখ্যা। আপনার ভাষার PRNG নিখুঁত বলে ধরে নিলে, সমস্ত বৈধ আউটপুটগুলির উত্পন্ন হওয়ার একই সম্ভাবনা থাকতে হবে।

টি এল; ডিআর

ফর্ম 8-4-4-4-12অঙ্কগুলিতে 32 এলোমেলো হেক্সাডেসিমাল সংখ্যা তৈরি করুন । সংক্ষিপ্ততম কোড জিতেছে।

সম্পাদনা: হেক্সাডেসিমাল হতে হবে। সর্বদা দশমিক উত্পন্ন করা অবৈধ। সম্পাদনা 2: কোনও বিল্ট-ইন নেই। এগুলি জিইউডিগুলি নয়, কেবল জেনেরিক হেক্স ডিজিট।


উদাহরণ আউটপুট:

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

ইনপুট এবং স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।


এটি , তাই সংক্ষিপ্ততম কোড জিততে পারে। এছাড়াও, স্পষ্টতা জিজ্ঞাসা করতে নির্দ্বিধায়।



9
"এই উদাহরণগুলি এলোমেলো নয়। কিছু তাত্পর্য সংযুক্ত করার চেষ্টা করুন।" ওটার মানে কি?
অ্যালেক্স এ।

3
আসলে, একের জন্য হেক্সাডেসিমাল সংখ্যা প্রয়োজন হয় না, 10-বেসও এলোমেলো হতে পারে। উদাহরণস্বরূপ, 12345678-1234-1234-1234-123456789012একটি বৈধ ইউআইউডি হওয়া উচিত (বা কোনও হেক্স ডিজিট প্রয়োজনীয়?) আপনি কি এটিকে একটি ফাঁকফোকর বিবেচনা করেন?
ভিকটাস

3
শিরোনাম এবং প্রথম বাক্যটি আপনাকে পরামর্শ দেয় যে আপনি একটি ক্যানোনিকাল ইউআইডি চান এবং প্রদত্ত উদাহরণগুলি ইউআইডিদের জন্য অনুমিত অনুসরণ করে তবে আপনি আসলে অন্য কিছু চাইছেন বলে মনে হয়।
পিটার টেলর

3
আমি এটি উল্লেখ করতে বাধ্য হচ্ছি যে সংস্করণ 4 (এলোমেলো) ইউইউডি-র একটি xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx যেখানে রয়েছে yতার প্রয়োজনীয় ফর্ম্যাট রয়েছে [89AB]। এই মন্তব্যের সময়, উত্তরগুলির কোনওটিই (লাইব্রেরিতে বিল্ট ব্যবহার করে সি # ব্যতীত) কোনও বৈধ র্যান্ডম ইউআইডি (এবং প্রকৃতপক্ষে, একটি উত্পন্ন না হওয়ার সম্ভাবনা রয়েছে) উত্পাদন করার গ্যারান্টিযুক্ত।

উত্তর:


11

পাইথ, 20 বাইট

j\-msm.HO16*4hdj83 3

প্রদর্শন.

[1, 0, 0, 0, 2]বেস 3 তে 83 হিসাবে এনকোড করুন , তারপরে একটি যুক্ত করুন এবং প্রতিটি বিভাগের দৈর্ঘ্য পেতে চারটি দ্বারা গুন করুন। তারপরে হেক্স ডিজিট তৈরি করে হাইফেনগুলিতে যোগ দেয়।


8

জুলিয়া, 80 বাইট

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

একটি এলোমেলো 128-বিট পূর্ণসংখ্যার উত্পাদন করুন, 32 টি সংখ্যায় প্যাডযুক্ত স্ট্রিং হিসাবে এর হেক্সিডেসিমাল উপস্থাপনা পান এবং ড্যাশের সাথে যোগ হওয়া বিভাগগুলিতে ভাগ করুন।

তাদের সহায়তার জন্য কনফিউজড এমআর_সি এবং কেভিলকে ধন্যবাদ!


8

সিজেম, 26 25 বাইট

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

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

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

পাওয়ারশেল, 77 69 67 বাইট

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

সম্পাদনা: বহিরাগত পেরেনস:

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

সম্পাদনা: পিছনটিকে সরাতে সক্ষম হয়েছিল। মূল থেকে ট্রিম ("-"):

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

পতাকাগুলির প্রকৃতি (-ফ এবং -জাইন) প্রদত্ত কিছু সাদা জায়গা দিয়ে এটি পরিষ্কার হতে পারে। আমি এখনও চূড়ান্ত ছাঁটাই ("-") হারাতে চাই:

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

বা, অন্তর্নির্মিত কার্যকারিতা (উপরে সি # উত্তর উত্তর) ব্যবহার করে

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

তবে এটি 31 বাইটে আসে এমনকি এটি একটি সামান্য বিট শর্টকাট-y বলে মনে হয়।


61 বাইট:(8,4,4,4,12|%{-join(1..$_|%{'{0:X}'-f(random(16))})})-join'-'
অলস

5

পাইথন 2, 86 84 বাইট

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

পাইথন ফর্ম্যাটটিকে প্রতিটি বিভাগের জন্য স্বতন্ত্রভাবে হেক্স সংখ্যাগুলি তৈরি করতে এই চেইনগুলি স্ট্রিং ফর্ম্যাটরগুলি দেয়।

Ungolfed:

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

এটি কিছুটা উন্নতি করতে পারে তবে আমি গর্বিত।


5

পার্ল 5 , 43 বাইট

2 বাইট সংরক্ষণ করার জন্য ধন্যবাদ @ এক্সকালি !

printf"%04x"."-"x/[2-5]/,rand 2**16for 1..8

এটি অনলাইন চেষ্টা করুন!


1
এখনও আপনার বেসিক পদ্ধতিটি ব্যবহার করে দুটি বাইট শেভ করেছেন: এটি অনলাইনে চেষ্টা করুন!
এক্সকালি

ধন্যবাদ @ এক্সালি!
ডম হেস্টিংস

4

পিএইচপি, 69 72 75 বাইট

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

এটি হেক্স ডিজিটগুলি আউটপুট দেয় না (a , ... f) । এগুলি অনুমোদিত, তবে প্রশ্ন সংস্থার দ্বারা প্রয়োজনীয় নয়।

কোনও অঙ্কের গোষ্ঠী শুরু হয় 0না (এছাড়াও প্রয়োজন হয় না)।

সম্পাদনা: @ ইসমাইলমিগুয়েলকে 3 বাইট সংরক্ষণ করা হয়েছে


এটি 32 বাইটের চেয়ে দ্বিগুণ বেশি লাগে।
isaacg

@ আইস্যাএসিএজি হ্যাঁ, দুঃখিত - আমার ভুল
ভোকটস

join()পরিবর্তে আপনার ব্যবহার করা উচিত ।
ইসমাইল মিগুয়েল

3

সি #, 65 বাইট

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

সম্পাদনা: হ্যাঁ! সি # অন্য ভাষার চেয়ে জাভা (জাভা ছাড়াও) কম :)


1
আমি এই একটি প্রমিত ঘুলঘুলি বিবেচনা করা হয় মনে করি ... :( meta.codegolf.stackexchange.com/questions/1061/...
ডোম হেস্টিংস

1
আমি মনে করি এটি একটি স্ট্যান্ডার্ড লুফোল হিসাবে বিবেচনা করা হয় না: আপনি দেখতে পাচ্ছেন যে এই জিনিসটি পরিত্যাগ করার অনুরোধটি 1 বছরেরও বেশি সময় ধরে 2 টি আপভোট পেয়েছে। বিপরীতে মন্তব্যটি বলে যে আপনাকে বিল্ট-ইন-ফাংশনগুলি ব্যবহার করা উচিত 58 টি আপভোট পেয়েছে। বা একজন মন্তব্যকারী যেমন বলেছিলেন -> আমরা যদি সবাই একই অন্তর্নির্মিত ফাংশনগুলির মধ্যে সীমাবদ্ধ থাকতাম তবে প্রতিটি প্রতিযোগিতা এপিএল বা গল্ফস্ক্রিপ্ট দ্বারা জয়ী হত কারণ তাদের কমান্ডের নাম সবচেয়ে সংক্ষিপ্ততম। (মাইকেল স্টারন)
স্টিফান শিনকেল

1
বা কেবল এটিকে অন্য উপায়ে বলার জন্য: আমরা কি প্রিন্টফ ব্যবহার করতে পারি? বা ইন্টারপট 21 টি ট্রিগার করতে আমাদের ইনলাইন asm ব্যবহার করা উচিত?
স্টিফান শিনকেল

একটি ভাল পয়েন্ট! আমার মন খারাপ করার ইচ্ছা ছিল না, আমি কেবল সাহায্যকারী হতে চাইছি! আমার তখন অনুমান, ম্যাথামেটিকাকে দিয়ে জিততে পারত CreateUUID[]!
ডম হেস্টিংস

1
পছন্দ করেছেন এখনই এটির 47 টি upvotes এবং 45 ডাউনভোট রয়েছে, সুতরাং নেট +2। বলা হচ্ছে, সাধারণত গৃহীত প্রান্তিকতা এর চেয়েও বেশি হয়, সুতরাং আপনি ঠিক বলেছেন যে এটি এখনই একটি "মান" সত্যিকারের ফাঁক হিসাবে গণনা করে না।
Geobits

3

gawk, 86

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

আপনি অনন্য এলোমেলো "ইউইউডি" তৈরি করতে প্রতি সেকেন্ডে একবার এটি ব্যবহার করতে পারেন। এটি srand()যুক্তি হিসাবে যদি কোনও আর্গুমেন্ট না দেওয়া হয় e

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

আমি মনে করি অজানা অংশটি বরং মার্জিত।

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

আপনি যদি প্রতি সেকেন্ডে একবারের বেশি বার এটি ব্যবহার করতে চান তবে আপনি এটিতে এটিকে ডাকতে পারেন। মনে রাখবেন যে জোরদার অংশটিও পরিবর্তিত হয়েছে।

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

echoসেখানে যোগ করা হয় নতুন লাইন প্রত্যেক সময় প্রিন্ট করতে।


3

কে 5, 35 বাইট

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

একটি হেক্স্স বর্ণমালা তৈরি করতে আমি `c$অঙ্কের তালিকা ( 48+!10) এবং প্রথম 6 টি বড় অক্ষর ( 65+!6) থেকে একটি অক্ষর স্ট্রিং ( ) তৈরি করি । একই দৈর্ঘ্য হ'ল অঙ্কগুলি উত্পন্ন করার একটি বিকল্প উপায়,/$!10

"0123456789ABCDEF" স্ট্রিংটি উত্পন্ন করার সাথে, বাকীটি সহজ। এই সেট ( 32?) থেকে 32 টি এলোমেলো মান নির্বাচন করুন ( ), এর মাধ্যমে সংখ্যায় ফলাফলযুক্ত _স্ট্রিংটি 0 8 12 16 20কাটুন (0,8+4*!4)এবং তারপরে ড্যাশ ( "-"/) দিয়ে ফলাফলের স্ট্রিং টুকরোতে যোগদান করুন ।

কর্মে:

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

3

আর , 63 বাইট

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

এটি অনলাইন চেষ্টা করুন!

কোডটি প্রথমে 36 টি অক্ষরের এলোমেলো স্ট্রিং তৈরি করে এবং তারপরে চারটি হাইফেন রাখে। এটি স্ট্রাউট করার জন্য একটি ইউইউডি আউটপুট করে।


-১ এর জন্য cকলটি প্রতিস্থাপন করুন sprintf("%x",0:15)
জে.ডো

3

জাভাস্ক্রিপ্ট, ES6, 106 বাইট

"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})

Regex প্রতিস্থাপন ব্যবহার করে। হেক্স চর তৈরির জন্য একটি গণনা হিসাবে ফর্ম্যাট স্ট্রিংকে বিবেচনা করে। আমি যেখানেই পারি সেখানে উত্তোলন; যেখানে সম্ভব সেমিকোলন বাদ দেওয়া।


89 বাইট,'8-4-4-4-12'.replace(/\d+/g,n=>Math.floor(16**n*Math.random()).toString(16).padStart(n,0))
কামোরোসো94

2

পার্ল 6 , 53 বাইট

সুস্পষ্ট এক:

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

পার্ল 5 উদাহরণ ব্যবহার করে অনুবাদ করা, কোডটির printfফলাফল যা কিছুটা খাটো।

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

(0..16⁴)! আপনি পার্ল এ কি করতে পারেন?
তালি

1
@ ভোটটসস্প্যাম আপনি 9 দিন আগে হিসাবে করতে পারেন । (পার্ল 6 এই মাসের
শেষের দিকে

Cooooool। সম্ভবত আমার এটি শিখানো উচিত
তালি

@ ভোটটসস্প্যাম এটার তুলনায় এটি কিছুই নয় 1,2,4,8,16 ... *যা ২ এর শক্তির অলস তালিকা তৈরি করে ( {2**$++} ... *এটিও কাজ করে)
ব্র্যাড গিলবার্ট


2

এপিএল (ডায়ালগ ইউনিকোড) , 115 78 বাইট

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

এটি অনলাইন চেষ্টা করুন!

এটি আমার প্রথম এপিএল জমা। পিপিসিজির এপিএল চ্যাটে আমার সাথে কথা বলার জন্য এবং হেক্সাডেসিমাল রূপান্তর ফাংশনের জন্য @ অ্যাডামকে প্রচুর ধন্যবাদ।

1 জ্যাকেটের জন্য জ্যাচারকে ধন্যবাদ

বাইট গণনা ঠিক করতে সম্পাদিত।


আপনি ⎕IO←0কোনও বাইট ব্যয়ে ধরে নিতে পারবেন না, অ্যাডাম সেই পরিমাণটি করে। এছাড়াও, বেশিরভাগ বাইটস (আইআইআরসি, আপনার এখানে থাকা সমস্তগুলি) এপিএলে একটি হিসাবে গণনা করা যেতে পারে।
জাকারি

@ জ্যাচারý আমি আমার জমা দেওয়ার বাইটগুলি গণনা করার জন্য টিআইও ব্যবহার করেছি, তার পরিবর্তে আমার কি অক্ষরের সংখ্যাটি ব্যবহার করা উচিত ছিল? আমি এখনও পিপিসিজিতে নতুন এবং এপিএল ব্যবহার করছি, সুতরাং এটির জন্য বাইট গণনা কীভাবে করা যায় সে সম্পর্কে আমার কাছে খুব বেশি সত্যিকারের জ্ঞান নেই।
জে.সাল্লি

এছাড়াও, আপনি পরিবর্তন করতে পারেন a(H 12?16)থেকে a H 12?16এক বাইট সংরক্ষণ করুন।
জাকারি


2

জাপট , 32 বাইট

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

এটি অনলাইন চেষ্টা করুন!


পিপিসিজিতে আপনাকে স্বাগতম এবং জাপটে স্বাগতম: :) ​​আমি আপনার সমাধানগুলি এতদূর ধরে নিয়ে যেতে পারি যখন আমি কিছুটা সময় নিতে পারি (কেবল ছুটির দিন থেকে ফিরে আসার জন্য এত কিছু) তবে আমি যে প্রথম টিপটি উপস্থাপন করব তা হল পরিচিত হওয়া নিজেকে ইউনিকোড শর্টকাটগুলি দিয়ে ( m@- £উদাহরণস্বরূপ) এবং, আপনাকে এখানে সমাধানের জন্য তাড়াহুড়োভাবে গল্ফযুক্ত 24 বাইট সংস্করণ দেওয়া হয়েছে: এথপ্রডুকশনস . github.io/japt/… আপনার যদি কোনও প্রশ্ন থাকে তবে জাপ্ট চ্যাটরুমে ফেলে দিন।
শেগি

1

ম্যাটল্যাব / অষ্টাভে, 95 বাইট

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

পার্ল , 51 বাইট

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

Perl5> = 5.10 প্রয়োজন মনে করি। / R সংশোধক এবং বলার জন্য ()।


1
Nice! That's much better than mine! Having looked at your solution, you might even be able to save more based on this meta post with s//xx-x-x-x-xxx/;s/x/sprintf"%04x",rand 65536/eg using -p flag, would also mean it works on older versions without -E.
Dom Hastings

Thanks. Your suggestion is: echo|perl -pe's//xx-x-x-x-xxx/;s/x/sprintf"%04x",rand 65536/eg' And thats just 48 chars between ' '. (Is this kind of cheating? Maybe not)
Kjetil S.

According to this meta post it's acceptable, I haven't had an opportunity to utilise that mechanism myself yet, but hopefully I will soon enough! Would be 49 bytes (+ -p) but still pretty good and I wouldn't have considered that approach without seeing your answer!
Dom Hastings


1

C++, 194 193 221 210 201 bytes

+7 bytes thanks to Zacharý ( detected a - that should not be at the end )

#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)}

If someone has a way to get a different value every execution without changing srand and without including <ctime>, that would be great


Can't #define L(a) for ... be #define L(a)for...? (Might have already asked that)
Zacharý

This is invalid, there's a "-" at the end (which there shouldn't be)
Zacharý

@Zacharý Correction applied now
HatsuPointerKun


1
Could you do something like "0123456789abcdef"[rand()%16], and then remove f?
Zacharý



1

JavaScript REPL, 79 bytes

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

Try it online!

Math.random may return 0. Adding 5 zeros make the slicing get 4 0s


1

Forth (gforth), 91 89 bytes

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

Try it online!

Explanation

Changes the base to hexadecimal, then outputs numbers/segments of the appropriate length with dashes at specified intervals

Code Explanation

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 bytes

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

Try it online!

I would have liked to suggest this version in a comment to Max Yekhlakov (his answer), but unfortunately I do not have the 50 needed reputation points yet, so here is my answer.

803912 is C4448 in hexadecimal, it describes how the output should be formatted (12-4-4-4-8), it is reversed because least significant digits will be read first.
 

Edits:

  • saved 3 bytes thanks to Jonathan Frech
  • saved 5 more bytes by replacing srand(time(0)) with srand(&i)

1
main(){...;int i= can be main(i){...;i=.
Jonathan Frech

I've been thinking something, apparently srand() accept an unsigned int as its seed parameter. On tio.run, an unsigned int is 4 bytes long but the UUID is 16 bytes long. This means only a tiny fraction of the valid outputs (1/2^12) will be generated, thus my solution (as well as the previous one with time(0)) is not valid. What do you think ?
Annyo

The OP states Assuming that your language's PRNG is perfect, all valid outputs must have the same probability of being generated.. The seed entropy does not necessarily determine the RNG entropy, though it likely does (did not check the srand() implementation). However, srand() is to my knowledge reasonably uniform, so if the RNG was perfect, it would still be uniform. I therefore think your answer is valid.
Jonathan Frech

Ok, I understand. I could also submit my answer as a function, assuming srand() has already been done, and in this case there will be no doubt. But I'm not sure if this is allowed, other C/C++ submissions all seem to include srand() int the answer (unless it does not use rand())
Annyo


1

C (gcc), 143 110 103 96 94 bytes

Golfed down to 94 bytes thanks to ceilingcat and 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));}

Try it online!

Explanation:

/*
  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
Hello and welcome to PPCG! 110 bytes.
Jonathan Frech

@JonathanFrech Thank you! Your version is very impressive!
Max Yekhlakov

Suggest *z=L"\27\23\17\vz" instead of *z=L"\10\4\4\4\14" and for(n=32;n--;z+=printf("-%x"+(n!=*z),P()&15)-1) instead of for(;*z;*++z&&putchar(45))for(n=*z;n--;printf("%x",P()&15))
ceilingcat

1

Java with Ten Foot Laser Pole v. 1.06, 126 bytes

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

Tested with version 1.06 of the library, but this should work with any version 1.04 or newer.



0

SmileBASIC, 65 62 bytes

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

I created a function to print 4 random hex digits: DEF H?HEX$(RND(65536),4);:END as well as 4 digits with a - after them: DEF G:H?"-";:END. Then it just has to call these functions a bunch of times.


0

Chip, 109 + 6 = 115 bytes

Requires flags -wc36, causing +6 bytes

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

Try it online!

Generates 4 random bits (the four ?'s) and converts to hex digits:

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

...a bit unconventional, but it saved me some bytes at no expense to the distribution of outcomes.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.