मान लीजिए कि हमारे पास एक स्ट्रिंग है; हमें यह जांचना होगा कि दिया गया इनपुट एक मान्य 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] का दशमलव तुल्यांक '-' नहीं है, तो सही लौटें, अन्यथा असत्य
-
-
मुख्य विधि से
-
यदि इनपुट में तीन बिंदु हैं, और प्रत्येक भाग के लिए मैं checkv4(i) सत्य है, तो "IPv4" लौटाएं
-
यदि इनपुट में सात कोलन हैं, और प्रत्येक भाग के लिए मैं 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"