পার্ল: 8 বা 10 স্বতন্ত্র অক্ষর
s///
সমাধান: 10 স্বতন্ত্র, মোট 13
(উদ্দেশ্যযুক্ত; নীচে দেখুন) সেড কৌশলটি সর্বদা পার্লটিতেও কাজ করে এবং স্বতন্ত্র অক্ষরের নাম সংখ্যা দেয় (10):
s/[aeiou]//gi
উদাহরণ স্বরূপ:
$ echo 'This program will remove VOWELS. So we can speak without them.' |
perl -ple 's/[aeiou]//gi'
Ths prgrm wll rmv VWLS. S w cn spk wtht thm.
এটি 10 স্বতন্ত্র অক্ষর, যেমন এটি প্রমাণ করে:
$ echo 's/[aeiou]//gi' | perl -nle '@s{split//}=(); print scalar keys %s'
10
Sed সমাধান সঙ্গে সমস্যা হল তার হয় /i
হয় না POSIX অংশ sed, এবং এইভাবে পোর্টেবল নয়:
$ echo 'This program will remove VOWELS. So we can speak without them.' |
sed -e 's/[aeiou]//gi'
sed: 1: "s/[aeiou]//gi": bad flag in substitute command: 'i'
এটি একটি ওপেনবিএসডি সিস্টেমে চলছে। বিপরীতে, যেহেতু /i
সত্যই সর্বদা স্ট্যান্ডার্ড পার্লের অংশ, তাই আপনি সর্বদা এটির উপর নির্ভর করতে পারেন । সিডের মতো নয়।
আপনি যদি স্বর তালিকায় "y" অন্তর্ভুক্ত করতে চান তবে আপনি যদি একই কৌশলটি ব্যবহার করেন তবে অবশ্যই এটি আরও বড়:
$ echo 'This nifty program remove any VOWELS. So we easily can speak without them.' |
perl -ple 's/[aeiouy]//gi'
Ths nft prgrm rmv n VWLS. S w sl cn spk wtht thm.
$ echo 's/[aeiouy]//gi' | perl -nle '@s{split//}=(); print scalar keys %s'
11
এবং এটি এখন মোট 14 টি অক্ষর।
tr[][]
সমাধান: 8 স্বতন্ত্র 10 মোট
এর সাথে tr///
মেলে এমন যে কোনও কিছু মুছে ফেলতেও আপনি ব্যবহার করতে পারেন। পার্ল এমনকি এর জন্য সেডের y///
নাম ব্যবহার করতে পারে tr
:
y/aeiou//d
যা এখন 8 টি স্বতন্ত্র অক্ষর, তবে বড় হাতের কাজ করে না। কেসম্যাপগুলি সামলাতে আপনাকে আরও 5 টি অক্ষর যুক্ত করতে হবে:
$ echo 'y/aeiouAEIOU//d' | perl -nle '@s{split//}=(); print scalar keys %s'
13
এবং অবশ্যই এখন 15 মোট।
যাইহোক, স্বর হিসাবে মিশ্রণে "y" যুক্ত করা s///
সংস্করণটির মতো স্বতন্ত্র অক্ষরের সংখ্যা বাড়ায় না :
$ echo 'This nifty program remove any VOWELS. So we easily can speak without them.' |
perl -ple 'y/aeiouy//d'
Ths nft prgrm rmv n VOWELS. S w sl cn spk wtht thm.
11 টির মধ্যে এখনও এটি 8 টির মধ্যে মূল 8 টি:
$ echo 'y/aeiouy//d' | perl -nle '@s{split//}=(); print scalar keys %s'
8
সম্পাদনা : ডায়াক্রিটিক্সের জন্য অ্যাকাউন্টিং
এবং ইনপুট মত কি Renée’s naïveté
? সঠিক আউটপুট অবশ্যই হওয়া উচিত Rn’s nvt
। এটি করার জন্য এখানে v5.14 এর /r
পতাকা ব্যবহার করে কীভাবে তা এখানে দেওয়া হল s///
:
$ echo 'Renée’s naïveté' |
perl5.14.0 -CS -MUnicode::Normalize -nle 'print NFD($_)=~s/[aeiou]\pM*//rgi'
Rn’s nvt
এটি 27 স্বতন্ত্র অক্ষর:
$ echo 'print NFD($_) =~ s/[aeiou]\pM*//rgi' |
perl -nle '@s{split//}=(); print scalar keys %s'
27
আপনি এটি 26 কে ছাঁটাই করতে পারেন যদি আপনি গ্যারান্টি দিতে পারেন যে আপনি কমপক্ষে v5.10 চালাচ্ছেন তবে এর print
জন্য অদলবদল করে say
:
$ echo 'Renée’s naïveté' |
perl -Mv5.14 -CS -MUnicode::Normalize -nlE 'say NFD($_) =~ s/[aeiou]\pM*//rgi'
Rn’s nvt
$ echo 'say NFD($_) =~ s/[aeiou]\pM*//rgi' |
perl -nle '@s{split//}=(); print scalar keys %s'
26
এবং ডায়ায়্রিটিক্সগুলি মুছে ফেলার পরিবর্তে আপনি যদি তা সরানোর বিষয়ে আপত্তি না করেন তবে আপনি এটি 22 এ নামতে পারেন:
$ echo 'Renée’s naïveté' |
perl -Mv5.14 -CS -MUnicode::Normalize -nlE 'say NFD($_) =~ s/[aeiou]//rgi'
Rń’s n̈vt́
যা ... দেখার জন্য আকর্ষণীয় , কমপক্ষে বলতে। :) এখানে এর স্বতন্ত্র গণনা:
$ echo 'say NFD($_) =~ s/[aeiou]//rgi' |
perl -nle '@s{split//}=(); print scalar keys %s'
22
এর চেয়ে কম অক্ষর ব্যবহার করে ডায়াক্রিটিক্সের সাথে সঠিকভাবে ডিল করার জন্য অন্য কোনও ভাষা পাওয়ার সৌভাগ্য!