ধরুন আমাদের একটি স্ট্রিং আছে; প্রদত্ত ইনপুটটি একটি বৈধ IPv4 ঠিকানা বা IPv6 ঠিকানা বা কোনটিই আমাদের পরীক্ষা করতে হবে৷
IPv4 ঠিকানাগুলি ডটেড-ডেসিমেল নোটেশনে ক্যানোনিলিভাবে উপস্থাপিত হয়, যেটিতে চারটি দশমিক সংখ্যা থাকে, প্রতিটি 0 থেকে 255 পর্যন্ত থাকে, বিন্দু ("।"), উদাহরণস্বরূপ, 192.168.254.1; এছাড়াও, IPv4 ঠিকানায় অগ্রণী শূন্যগুলি অবৈধ৷ উদাহরণস্বরূপ, 192.168.254.01 ঠিকানাটি অবৈধ৷
IPv6 ঠিকানাগুলিকে চারটি হেক্সাডেসিমেল সংখ্যার আটটি গ্রুপ হিসাবে উপস্থাপন করা হয়, প্রতিটি গ্রুপ 16 বিট প্রতিনিধিত্ব করে। গোষ্ঠীগুলি কোলন (":") দ্বারা বিভক্ত। উদাহরণস্বরূপ, ধরুন ঠিকানাটি 2001:0db8:85a3:0000:0000:8a2e:0370:7334 একটি বৈধ ঠিকানা। এছাড়াও, আমরা চারটি হেক্সাডেসিমেল সংখ্যার মধ্যে কিছু অগ্রণী শূন্য এবং বড় হাতের ঠিকানায় কিছু লো-কেস অক্ষর বাদ দিতে পারি, তাই 2001:db8:85a3:0:0:8A2E:0370:7334 এই ঠিকানাটিও বৈধ
যাইহোক, আমরা সরলতা অনুসরণ করার জন্য পরপর দুটি কোলন (::) ব্যবহার করে একটি শূন্য মানের একটি ধারাবাহিক গ্রুপকে একটি খালি গ্রুপ দিয়ে প্রতিস্থাপন করি না। সুতরাং উদাহরণস্বরূপ, 2001:0db8:85a3::8A2E:0370:7334 একটি অবৈধ IPv6 ঠিকানা। এছাড়াও, IPv6-এ অতিরিক্ত অগ্রণী শূন্যগুলিও অবৈধ। ঠিকানা 02001:0db8:85a3:0000:0000:8a2e:0370:7334 অবৈধ।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি পদ্ধতি সংজ্ঞায়িত করুন checkv4(x), এটি পরীক্ষা করবে x 0 থেকে 255 রেঞ্জের মধ্যে আছে কিনা, তারপর সত্য, অন্যথায় মিথ্যা
-
একটি পদ্ধতি সংজ্ঞায়িত করুন checkv6(x), এটি নিম্নরূপ কাজ করবে -
-
যদি x> 4 এর আকার হয়, তাহলে মিথ্যা ফেরত দিন
-
যদি x>=0 এবং x[0]-এর সমতুল্য দশমিক '-' না হয়, তাহলে সত্য ফেরত দিন, অন্যথায় মিথ্যা
-
-
মূল পদ্ধতি থেকে
-
যদি ইনপুটে তিনটি বিন্দু থাকে এবং প্রতিটি অংশের জন্য I checkv4(i) সত্য হয়, তাহলে “IPv4”
-
যদি ইনপুটটিতে সাতটি কোলন থাকে এবং প্রতিটি অংশের জন্য I checkv6(i) সত্য হয়, তাহলে “IPv6”
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
class Solution(object): def validIPAddress(self, IP): """ :type IP: str :rtype: str """ def isIPv4(s): try: return str(int(s)) == s and 0 <= int(s) <= 255 except: return False def isIPv6(s): if len(s) > 4: return False try : return int(s, 16) >= 0 and s[0] != '-' except: return False if IP.count(".") == 3 and all(isIPv4(i) for i in IP.split(".")): return "IPv4" if IP.count(":") == 7 and all(isIPv6(i) for i in IP.split(":")): return "IPv6" return "Neither" ob = Solution() print(ob.validIPAddress("172.16.254.1"))
ইনপুট
"172.16.254.1"
আউটপুট
"IPv4"