উত্তর:
এর জন্য কোনও অন্তর্নির্মিত সুবিধা নেই, সুতরাং আপনাকে বাহ্যিক কিছু ব্যবহার করতে হবে।
/bin/sh
)কল করা হচ্ছে:
strings -n 1 < /dev/urandom | tr -d '[:space:]' | head -c15
সঙ্গে system()
একটি ভাল উপায়। আপনি প্রতিস্থাপন শুধুমাত্র সংখ্যা পেতে পারেন tr
সঙ্গে grep
:
strings -n 1 < /dev/urandom | grep -o '[[:digit:]]' | head -c15
আপনি এটি ভিমে তেমন ব্যবহার করতে পারেন:
:echo system("strings -n 1 < /dev/urandom | grep -o '[[:digit:]]' | head -c15")
15 নম্বরটি হ'ল সংখ্যার পরিমাণ যা আপনি চান (সেই অনুযায়ী সামঞ্জস্য করুন)। এটি লিনাক্স, বিএসডি, ওএসএক্স এবং অন্যান্য ইউএনআইএক্স সিস্টেমে কাজ করা উচিত। এটি এমএস উইন্ডোজে কাজ করবে না।
এছাড়াও আমার ওয়েবলগ পোস্টটি " কমান্ডলাইন থেকে পাসওয়ার্ড তৈরি করুন " দেখুন ( এটির জন্য এখানে অনেকগুলি খারাপ সমাধান রয়েছে)।
রুবি সম্ভবত পরবর্তী সেরা পছন্দ, যেহেতু রুবি স্ক্রিপ্টিং পাইথন স্ক্রিপ্টিংয়ের চেয়ে কিছুটা বেশি সাধারণ বলে মনে হচ্ছে। এলোমেলো নম্বর পাওয়া সহজ:
:ruby puts Random.rand(10)
অথবা 15 নম্বর পেতে:
:ruby 15.times { puts Random.rand(10) }
আপনি এলোমেলো মডিউল ব্যবহার করতে পারেন ; একটি একক পেতে:
:py import random; print(random.randint(0, 9))
অথবা একটি 15 সংখ্যা:
:py import random
:py for i in range(0, 15): print(random.randint(0, 9))
এটি পাইথন 2 এবং 3 উভয়ের জন্যই কাজ করা উচিত।
আপনি Get-Random
এলোমেলো নম্বর পেতে ব্যবহার করতে পারেন :
:echo system('Get-Random')
cmd.exe
উইন্ডোজ 7 এবং তারপরে পাওয়ারশেলের সাথে জাহাজ পাঠানো উচিত, তবে আপনি যদি সর্বাধিক সামঞ্জস্য চান তবে আপনি ব্যবহার করতে পারেন cmd.exe
। এটির একটি বিশেষ পরিবর্তনশীল রয়েছে %RANDOM%
:
:echo system('@echo %RANDOM%')
দ্রষ্টব্য: এটি খুব এলোমেলো নয়! , এটি সময় (!) ব্যবহার করে
নোট করুন যে রুবি বা পাইথন সমাধানগুলি ব্যবহার করার জন্য আপনাকে রুবি বা পাইথন বাইন্ডিংগুলি ব্যবহার করার দরকার নেই; আপনি একটি পৃথক স্ক্রিপ্ট তৈরি করতে এবং তাদের সাথে কল করতে পারেন
system("python -c '...'")
(এটির জন্য অবশ্যই রুবি / পাইথন ইনস্টল করা দরকার।
tr -d '[:space:]'
, সম্ভবত tr -cd '[:digit:]'
গ্রেপ ফিল্টার জন্য?
:r! hexdump -n $((3*4)) -e '"%d"' /dev/urandom
, 3 টি এলোমেলো স্বাক্ষরিত পূর্ণসংখ্যার উত্পাদন করতে পারে।
:r! hexdump -n $((3*4)) -e '"\%d\n"' /dev/urandom
এখানে একটি খাঁটি ভিমস্ক্রিপ্ট সমাধান রয়েছে। আমি এটি তৈরি করিনি, এটি চার্লস ই ক্যাম্পবেল দ্বারা বিকাশ করা হয়েছিল। আপনি তার কোড সহ গিথুব রেপোটি এখানে পেতে পারেন ।
অ্যালগরিদম Vim প্রারম্ভকালে উত্পাদিত 3 টি বীজ ব্যবহার করে এবং বীজগুলিতে প্রয়োগ করা গণনা এবং ক্রমবর্ধনের উপর ভিত্তি করে সিউডো-এলোমেলো সংখ্যা তৈরি করে:
" Randomization Variables
" with a little extra randomized start from localtime()
let g:rndm_m1 = 32007779 + (localtime()%100 - 50)
let g:rndm_m2 = 23717810 + (localtime()/86400)%100
let g:rndm_m3 = 52636370 + (localtime()/3600)%100
ভেরিয়েবলের সুযোগটি বিশ্বব্যাপী হিসাবে ঘোষণা করা হয় কারণ এগুলি জেনারেটর ফাংশন দ্বারা ব্যবহৃত হয় তবে এটি স্ক্রিপ্টের মধ্যে সীমাবদ্ধ থাকতে পারে ( s:
)
এবং এখানে জেনারেটর ফাংশন:
function! Rndm()
let m4= g:rndm_m1 + g:rndm_m2 + g:rndm_m3
if( g:rndm_m2 < 50000000 )
let m4= m4 + 1357
endif
if( m4 >= 100000000 )
let m4= m4 - 100000000
if( m4 >= 100000000 )
let m4= m4 - 100000000
endif
endif
let g:rndm_m1 = g:rndm_m2
let g:rndm_m2 = g:rndm_m3
let g:rndm_m3 = m4
return g:rndm_m3
endfun
রেপোতে নিম্নলিখিত ফাংশন অন্তর্ভুক্ত রয়েছে:
জেনারেটরটি পরীক্ষা করার জন্য আমি এখানে লিখেছিলাম একটি দ্রুত পরীক্ষা: আমি 0 এবং 9 এর মধ্যে 1000000 নম্বর উত্পন্ন করেছি এবং প্রতিটি সংখ্যার সংখ্যার সংখ্যা এখানে গণনা করেছি ফলাফল:
0 : 100409
1 : 99435
2 : 100433
3 : 99578
4 : 100484
5 : 99948
6 : 100394
7 : 99649
8 : 99803
9 : 99867
আপনি দেখতে পারেন প্রজন্মটি ভাল বিতরণ করা হয়েছে বলে মনে হচ্ছে। আমি সচেতন যে এলোমেলো জেনারেটর পরীক্ষা করার জন্য এটি যথেষ্ট পরিমাণে যথেষ্ট নয় তাই আমি যদি কিছুটা ফ্রি সময় পাই তবে আমি কিছু অতিরিক্ত বিশ্লেষণ করার চেষ্টা করব।
এটি ভিআইএম-র্যান্ডম্যাট্যাগ প্লাগিনে পাওয়া একটি পদ্ধতি যা পড়ার উপর ভিত্তি করে ... বর্তমান সময়ের মাইক্রোসেকেন্ডগুলি ব্যবহারযোগ্য, যখন আপনি কেবল কিছু নম্বর চান , আপনি এলোমেলো মানের জন্য খুব বেশি যত্ন নেন না, বা সুরক্ষা সংক্রান্ত উদ্বেগ ইত্যাদিও করেন।:
function! s:randnum(max) abort
return str2nr(matchstr(reltimestr(reltime()), '\v\.@<=\d+')[1:]) % a:max
endfunction
ভিম স্থানীয় র্যান্ডম জেনারেটর সরবরাহ করে না, তবে আপনি যদি পাইথনের সাথে ভিম সংকলন করেছেন তবে নিম্নলিখিত পদ্ধতিটি আপনার লাইনের শেষে একটি এলোমেলো অঙ্ক সংযোজন করবে:
:py import vim, random; vim.current.line += str(random.randint(0, 9))
দ্রষ্টব্য: আপনার ভিম পাইথন সমর্থন করে কিনা তা পরীক্ষা করতে, চেষ্টা করুন: :echo has('python')
( হ্যাঁর জন্য 1)।
আপনি শেলটি ব্যবহার করতে পারেন যা $RANDOM
ভেরিয়েবল প্রস্তাব করে (ব্যাশ / কেএসএইচ / জেডএসের সাথে কাজ করে) যা সিউডোরেন্ডম (0-32767) প্রদান করে, উদাহরণস্বরূপ:
:r! echo $RANDOM
বা:
:put =system('echo $RANDOM')
বা:
:r! od -An -td -N1 /dev/urandom
উইন্ডোজে আপনার সাইগউইন / এমএসওয়াইএস / এসইউএ ইনস্টল করা থাকতে হবে, বা কার্পেটস্মোকারের পরামর্শ অনুসারে%RANDOM%
ভেরিয়েবল ব্যবহার করতে হবে ।
যদি আপনার শেল এবং পাইথনে অ্যাক্সেস না থাকে, যেমন কাজের মতো, আপনি বর্তমান টাইমস্ট্যাম্প থেকে শেষ কয়েকটি অঙ্ক ব্যবহার করেন, উদাহরণস্বরূপ:
:put =reltimestr(reltime())[-2:]
দ্রষ্টব্য: আপনি যদি এটি প্রায়শই ব্যবহার করেন তবে একটি সাধারণ ফাংশন লিখুন যা হবে return reltimestr(reltime())[-4:]
।
দ্রষ্টব্য: উপরের পদ্ধতিগুলি কেবলমাত্র একটি সিউডোরানডম পূর্ণসংখ্যা দেয় যা একটি এনক্রিপশন কী তৈরি করতে ব্যবহার করা উচিত নয়।
আরও এলোমেলো সংখ্যা যুক্ত @:করতে আবার কমান্ডটি পুনরাবৃত্তি করতে টিপুন । বা সংখ্যার (যেমন 10@:) উপসর্গটি নতুন লাইনের দ্বারা পৃথক করে এলোমেলো সংখ্যার যোগ করতে।
সম্পর্কিত:
zsh
, কিন্তু না দিয়ে sh
, dash
, fish
, csh
, অথবা tcsh
... আপনি ব্যবহার করতে পারে :r! bash -c 'echo $RANDOM'
...
GetRandom()
ফাংশনটি ব্যবহার করতে চলেছে যেখানে ভাল প্রঙের জন্য কিছু যায় আসে , তাই সম্ভব হলে এটি শুরু থেকেই ঠিক করা ভাল (এবং এটি এখানে প্রায় সর্বদা সম্ভব!)
$RANDOM
গুণমানটি কী তা আমি জানি না , তবে এটি যদি দুর্বল পিআরএনজি হয় তবে এটি এমনকি দরিদ্র পিআরএনজি ব্যবহার করার কারণ নয় :-) পরিবর্তে আরও ভাল পিআরএনজিতে আপগ্রেড করুন! যতদূর আমি জানি, /dev/urandom
সমস্ত প্ল্যাটফর্মগুলিতে যেখানে bash
সাধারণত পাওয়া যায় সেগুলি উপলভ্য, তাই এটি ব্যবহার না করার কোনও কারণ আমি দেখতে পাচ্ছি না ।
$RANDOM
। দেখতে খুব সুন্দর একটি ছোট্ট সরঞ্জামের মতো মনে হয় এবং এটি "দরিদ্র লোক আরএনজি" হতে পারে (যেমন @ কার্পেটসোমকার উল্লেখ করেছেন) এটি অবশ্যই @ কেনরবকে (যিনি প্রশ্ন জিজ্ঞাসা করেছিলেন) "সহজেই স্মরণীয়" প্রয়োজনীয়তার সাথে খাপ খায়।
আপনার ভিম বাইনারিতে প্যাচ 8.1.2342 অন্তর্ভুক্ত থাকে তবে আপনি rand()
এবং srand()
ফাংশনগুলি ব্যবহার করতে পারেন ।
উদাহরণস্বরূপ, 10 টি এলোমেলো সংখ্যা তৈরি করতে নিউলাইনগুলি দ্বারা পৃথক:
let seed = srand()
echo range(10)->map({-> rand(g:seed)})->join("\n")
সমস্ত 100 কে নিকৃষ্টমানের 10 টি এলোমেলো সংখ্যা তৈরি করতে:
let seed = srand()
echo range(10)->map({-> rand(g:seed) % 100})->join("\n")
5 টি বর্ণের 10 এলোমেলো বর্ণমালা স্ট্রিং উত্পন্ন করতে:
let seed = srand()
echo range(10)
\ ->map({-> range(5)
\ ->map({-> (97+rand(g:seed) % 26)->nr2char()})->join('')})
\ ->join("\n")
10 টি এলোমেলো শব্দ উত্পন্ন করতে (অভিধান ফাইল থেকে নেওয়া /usr/share/dict/words
):
let seed = srand()
let words = readfile('/usr/share/dict/words')
let len = len(words)
echo range(10)->map({-> g:words[rand(g:seed) % g:len]})->join("\n")
5 এলোমেলো শব্দের 10 ক্রম উত্পন্ন করতে:
let seed = srand()
let words = readfile('/usr/share/dict/words')
let len = len(words)
echo range(10)
\ ->map({-> range(5)
\ ->map({-> g:words[rand(g:seed) % g:len]})->join()})
\ ->join("\n")
একটি এলোমেলো ইউইউডি সংস্করণ 4 উত্পাদন করতে:
" Based on this answer: /programming//a/38191078/9780968
let seed = srand()
let random_numbers = range(30)->map({-> rand(g:seed) % 16})
echo call('printf', ['%x%x%x%x%x%x%x%x-%x%x%x%x-4%x%x%x'] + random_numbers[:14])
\ ..call('printf', ['-X%x%x%x-%x%x%x%x%x%x%x%x%x%x%x%x'] + random_numbers[15:])
\ ->substitute('X', '89ab'[rand(seed) % 4], '')
এলোমেলো রঙের স্কিম প্রয়োগ করতে:
let seed = srand()
let colorschemes = getcompletion('', 'color')
let len = colorschemes->len()
exe 'colo '..colorschemes[rand(seed) % len]
আমি মনে করি না ভিমস্ক্রিপ্টে এলোমেলো সংখ্যার জন্য একটি স্থানীয় ফাংশন আছে।
একটি উপায় ব্যবহার করে :python
(এটি কোনও ফাংশনে ব্যবহার করুন, সম্ভবত, 10000 এবং 60 টি পরামিতি দ্বারা প্রতিস্থাপন করা হয়েছে):
:python <<EOF
import vim
import random
line = vim.current.window.cursor[0]
r = getattr(__builtins__, 'xrange', range) # To make it work for both Python 2 & 3
vim.current.buffer[line:line] = list(map(str, random.sample(r(10000), 60)))
EOF
ভিমের পাইথন স্ক্রিপ্টিংয়ের দ্রুত পরিচয়ের জন্য পাইথনের মাধ্যমে ভিমে একটি বাক্স তৈরির আমার উত্তর দেখুন to
যেহেতু vim.current.buffer
স্ট্রিংগুলির একটি তালিকা, আমরা পাইথনে যেভাবে স্ট্রিংয়ের তালিকা তৈরি করব সেভাবেই assign random.sample
পাইথনের এলোমেলো পূর্ণসংখ্যার একটি তালিকা পেতে আমি কেবল সবচেয়ে সহজ উপায়।
random.sample
কারপেটস্মোকার পাইথন 2 এ কেবলমাত্র দুটি যুক্তিই মেরামত করে, str
জিনিসগুলিকে স্ট্রিংয়ে রূপান্তর করতে অন্তর্নির্মিত কাজ। আমাকে পাই 3 সমতুল্য সন্ধান করা যাক ( str
একই রকম হবে, চেক করতে হবে xrange
এবং random.sample
)।
xrange
এবং পাইথন 3 এ নয় কারণ range
এটি সমান (পায় 2 এর মত নয়, আসলে একটি range
তালিকাও তৈরি করে না)।
map
পাই 3-এ একটি পুনরাবৃত্তিযোগ্য এবং একটি তালিকা নয়, তাই শেষ লাইনটি ব্যবহার করবেlist(map(str, random.sample(range(10000), 60)))
:python
?