মনে করুন আমাদের একটি স্ট্রিং আছে; আমাদের চেক করতে হবে দেওয়া ইনপুটটি বৈধ IPv4 ঠিকানা, IPv6 ঠিকানা, বা সেগুলোর কোনোটিই নয়।
IPv4 ঠিকানা ক্যাননিক্যালি ডটেড-ডেসিম্যাল নোটেশনে রিপ্রেজেন্ট করা হয়, যেটি চারটি দশমিক সংখ্যা দিয়ে গঠিত, প্রতিটি ০ থেকে ২৫৫ পর্যন্ত, এবং ডট (.) দিয়ে পৃথক। উদাহরণ: 192.168.254.1। 덧붙여, IPv4 ঠিকানাতে লিডিং জিরো অবৈধ। উদাহরণ: 192.168.254.01 অবৈধ।
IPv6 ঠিকানা আট গ্রুপে চার হেক্সাডেসিম্যাল ডিজিট দিয়ে রিপ্রেজেন্ট করা হয়, প্রতিটি গ্রুপ ১৬ বিট রিপ্রেজেন্ট করে। গ্রুপগুলো কলন (:) দিয়ে পৃথক। উদাহরণ: 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 ০ থেকে ২৫৫ রেঞ্জে আছে কিনা, হলে true, নাহলে false।checkv6(x)মেথড ডিফাইন করুন, এটি নিচের মতো কাজ করবে:যদি x-এর সাইজ ৪ এর বেশি হয়, তবে false রিটার্ন করুন।
যদি x-এর ডেসিম্যাল সমতুল্য >= ০ হয় এবং x[0] '-' নয়, তবে true, অন্যথায় false।
মেইন মেথড থেকে:
যদি ইনপুটে তিনটি ডট থাকে, এবং প্রতিটি অংশের জন্য
checkv4(i)true হয়, তবে "IPv4" রিটার্ন করুন।যদি ইনপুটে সাতটি কলন থাকে, এবং প্রতিটি অংশের জন্য
checkv6(i)true হয়, তবে "IPv6" রিটার্ন করুন।
উদাহরণ (Python)
নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে।
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"