मान लीजिए हमारे पास एक स्ट्रिंग है; हमें जांचना होगा कि दिया गया इनपुट वैध 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 की रेंज में है, तो true, अन्यथा false
checkv6(x) नामक एक मेथड परिभाषित करें, यह निम्नानुसार काम करेगा -
यदि x का आकार > 4 है, तो false लौटाएं
यदि x का दशमलव समकक्ष >= 0 और x[0] '-' नहीं है, तो true लौटाएं, अन्यथा false
मुख्य मेथड से
यदि इनपुट में तीन डॉट्स हैं, और प्रत्येक भाग के लिए checkv4(i) true है, तो \"IPv4\" लौटाएं
यदि इनपुट में सात कॉलन हैं, और प्रत्येक भाग के लिए checkv6(i) true है, तो \"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\"