* নিক্সে বাশ করুন (109)
while ! grep -Pq [A-Z].*[a-z].*[0-9].*[\\W_]<<<$a$a$a$a
do a=`tr -dc !-~</dev/urandom|head -c15`
done
echo $a
সঠিকভাবে কাজ করতে, $aঅবশ্যই একটি বৈধ তবে অ-র্যান্ডম পাসওয়ার্ডের সামনে সেট করা উচিত নয়। আপনি যদি অন্তর্ভুক্ত করতে চান a=এবং একটি লাইন সামনে ব্রেক আপ করতে চান তবে এটি আরও তিনটি অক্ষর তবে এটি আপনাকে বারবার জিনিস চালাতে দেয়। আপনি স্পষ্টতই সমস্ত নিউলাইনগুলি প্রতিস্থাপন ;করতে পারেন যাতে আপনার কাছে একটি ওয়ান-লাইনার থাকে যা আপনি যতক্ষণ ইচ্ছা শুদ্ধ করতে পারেন।
তদ্ব্যতীত, আপনার LC_ALL=Cকোনও স্থানীয়-নির্দিষ্ট পরিবেশের ভেরিয়েবল ( LANGএবং LC_CTYPEবিশেষত) সেট করা বা না করা উচিত ছিল , যেহেতু অক্ষরের পরিসরটি কোলেশন অর্ডারের উপর নির্ভর করে ascii অর্ডারের সমান।
/dev/urandomএলোমেলো বাইটের উত্স। !-~প্রশ্নের মধ্যে বর্ণিত সমস্ত অনুমতিযোগ্য অক্ষরের ব্যাপ্তি। tr -dcসমস্ত অক্ষর সরিয়ে ফেলা হবে না তার পরবর্তী যুক্তি তালিকাভুক্ত। headবাকী 15 টি অক্ষর লাগে। grepপ্রয়োজনীয় প্রতিটি প্রকারের কমপক্ষে একবার ঘটে কিনা তা পরীক্ষা করে। এর ইনপুটটিতে প্রার্থীর চারটি অনুলিপি থাকে, সুতরাং প্রতীকগুলির ক্রমের বিষয়টি বিবেচনা করে না, সুতরাং সমস্ত সম্ভাব্য পাসওয়ার্ড বাছাইয়ের সুযোগ রয়েছে। -qশুষে আউটপুট grep করতে।
অজানা কারণে, /dev/randomপরিবর্তে /dev/urandomযুগে যুগে লাগে। দেখে মনে হচ্ছে এনট্রপি খুব দ্রুত ক্লান্ত হয়ে পড়েছে। আপনি যদি cdপ্রবেশ করেন তবে আপনি /devআরও কিছু বাইট এড়াতে পারবেন তবে এটি কিছুটা প্রতারণার মতো অনুভব করে।
পাইথন 2 (138)
import re,random
a=''
while not re.search('[A-Z].*[a-z].*[0-9].*[\W_]',a*4):
a=''.join(random.sample(map(chr,range(33,127))*15,15))
print a
কোডটি পঠনযোগ্য করার জন্য আমি লুপের পরে একটি নতুন লাইন এবং ইন্ডেন্টেশন যুক্ত করেছি যা প্রয়োজনীয় নয় এবং যা আমি গণনা করি নি।
এটি মূলত ব্যাশ সংস্করণ হিসাবে একই ধারণা। এখানে এলোমেলো উত্স random.sample, যা উপাদানগুলির পুনরাবৃত্তি করবে না। এই বাস্তবতার মোকাবিলা করার জন্য, আমরা অনুমতিযোগ্য অক্ষরের তালিকার 15 টি অনুলিপি ব্যবহার করি। এইভাবে, প্রতিটি সংমিশ্রণটি এখনও ঘটতে পারে, যদিও পুনরাবৃত্ত অক্ষরগুলির সাথে এটি প্রায়শই ঘটে। তবে আমি এটিকে একটি বৈশিষ্ট্য হিসাবে বিবেচনা করার সিদ্ধান্ত নিয়েছি, কোনও বাগ নয়, যেহেতু প্রশ্নটির জন্য সমস্ত ক্রমুষ্ঠানের সমান সম্ভাবনার প্রয়োজন নেই, কেবল সম্ভাবনা।
পাইথন 3 (145)
import re,random
a=''
while not re.search('[A-Z].*[a-z].*[0-9].*[\W_]',a*4):
a=''.join(random.sample(list(map(chr,range(33,127)))*15,15))
print(a)
একটি নতুন লাইন এবং একটি ইনডেন্ট আবার গণনা করা হয় না। পাইথন -3-নির্দিষ্ট সিনট্যাক্সের ওভারহেড ছাড়াও পাইথন 2 এর মতো একই সমাধান solution
জাভাস্ক্রিপ্ট (161)
a=[];for(i=33;i<127;)a.push(s=String.fromCharCode(i++));
while(!/[A-Z].*[a-z].*[0-9].*[\W_]/.test(s+s+s+s))
for(i=0,s="";i<15;++i)s+=a[Math.random()*94|0];alert(s)
আমি পঠনযোগ্যতার জন্য নতুন লাইনগুলি যুক্ত করেছি, তবে সেগুলি গণনা করি নি।
আর (114)
s<-""
while(!grepl("[A-Z].*[a-z].*[0-9].*(\\W|_)",paste(rep(s,4),collapse="")))
s<-intToUtf8(sample(33:126,15,T))
s
লুপের অভ্যন্তরে লাইন ব্রেক এবং ইনডেন্টেশন যুক্ত হয়েছে তবে গণনা করা হয়নি। যদি আপনি এটির মতো অনুভব করেন তবে আপনি এটি আবার একটি একক- ;বিভক্ত লাইনে স্থানান্তর করতে পারেন ।