মনে করুন একটি ক্রেডিট কার্ড নম্বর আছে। এটিকে বৈধ কিনা তা যাচাই করতে হবে। কার্ড নম্বরের কিছু বৈশিষ্ট্য:
- এটি ৪, ৫ বা ৬ দিয়ে শুরু হবে
- এটি ১৬ অঙ্কের দীর্ঘ হবে
- শুধু ডিজিট থাকবে
- এতে ৪ গ্রুপে ডিজিট থাকতে পারে '-' দিয়ে আলাদা করা
- অন্য কোনো সেপারেটর (স্পেস, আন্ডারস্কোর) ব্যবহার করা যাবে না
- ৪ বা অধিক কনsekutিভ একই ডিজিট থাকতে পারবে না
ইনপুট s = "5423-2578-8632-6589" হলে আউটপুট হবে True।
সমাধানের ধাপসমূহ:
- যদি s-এ '-' এর সংখ্যা > 0:
- a := '-' দিয়ে ভাগ করা পার্টসের লিস্ট
- p := 1
- যদি len(a) != 4: p := None, a := খালি লিস্ট
- a-এ প্রতিটি b-এর জন্য: যদি len(b) != 4: p := None, ব্রেক
- অন্যথায়:
- p := ৪ বা ৫ বা ৬ দিয়ে শুরু হওয়া এবং বাকি ১৫ ডিজিট এমন সাবস্ট্রিং সার্চ করুন
- s := s থেকে '-' সরিয়ে দিন
- q := ৪ বা অধিক কনsekutিভ একই ক্যারেক্টার এমন সাবস্ট্রিং সার্চ করুন
- যদি p != None এবং q == None: True ফেরত দিন
- অন্যথায়: False ফেরত দিন
উদাহরণ
বাস্তবায়ন:
import re
def solve(s):
if s.count("-") > 0:
a = s.split("-")
p = 1
if len(a) != 4:
p = None
a = []
for b in a:
if len(b) != 4:
p = None
break
else:
p = re.search("[456][0-9]{15}", s)
s = s.replace("-", "")
q = re.search(".*([0-9])\\1{3}.*", s)
if p is not None and q is None:
return True
else:
return False
s = "5423-2578-8632-6589"
print(solve(s))
ইনপুট
"5423-2578-8632-6589"
আউটপুট
False