Verbose IP रेंज जेनरेटर


11

यह कार्य सरल है, दो आईपी एड्रेसेस दिए गए हैं, aऔर bउस सीमा के भीतर सभी पतों को आउटपुट करते हैं।


उदाहरण

उदाहरण 1:

f(a = 192.168.0.1, b = 192.168.0.4) 
    192.168.0.1
    192.168.0.2
    192.168.0.3
    192.168.0.4

उदाहरण # 2 (TIO इसे छोटा करेगा, परीक्षण करते समय एक छोटी श्रेणी का उपयोग करें):

f (a = 123.0.200.0, b = 124.0.0.0)
    123.0.200.0
    123.0.200.1
    ...            # Omitted pattern 
    123.0.200.255
    123.0.201.0
    ...            # Omitted pattern
    123.0.201.255
    ...            # Omitted pattern
    123.0.255.255
    123.1.0.0
    ...            # Omitted pattern
    123.255.255.255
    124.0.0.0

इनपुट और आउटपुट

  • a < b दूसरे शब्दों में:
    • परिभाषित कार्यक्रम :a[0] < b[0] || (a[0] == b[0] && a[1] < b[1]) || (a[0:1] == b[0:1] && a[2] < b[2]) || (a[0:2] == b[0:2] && a[3] < b[3])
    • शब्दों में परिभाषित: a हमेशा की तुलना में कम होगा b(ताकि आप तक पहुँचने के लिए सबनेट को बढ़ाना होगा b)।
    • नहीं, आपको संभालना नहीं है a == b(यदि आप करते हैं, तो यश)।
  • आउटपुट "निम्नतम" से "उच्चतम" (उदाहरण देखें) के क्रम में होना चाहिए।
  • इस चुनौती के लिए, एक आईपी के लिए मान्य वाक्य रचना है: \d{1-3}\.\d{1-3}\.\d{1-3}\.\d{1-3}
  • आपको गैर-आईपी पते इनपुट को संभालने की आवश्यकता नहीं है, यदि यह अप्रत्याशित इनपुट है तो आप त्रुटि कर सकते हैं।
  • आउटपुट एक सरणी के रूप में या एक सीमांकित स्ट्रिंग (किसी भी व्हाट्सएप चरित्र का उपयोग करके) के रूप में हो सकता है।

जीतना


1
आप जैसे के बीच "लोप पैटर्न" है 123.0.200.255और 123.0.201.0, पर वे अनुक्रमिक नहीं हैं?
nmjcman101

@ nmjcman101 ने दो बार किया, तय किया।
मैजिक ऑक्टोपस Urn

जवाबों:


3

अजगर, २२

mj\.jd256}FmivMcd\.256

इसे ऑनलाइन आज़माएं

               cd\.       # split string by "."
             vM           # eval list (convert strings to integers)
            i      256    # convert list of base256 digits to integer
           m          Q   # map the above over implicit input list
         }F               # inclusive range
    jd256                 # convert to list of base256 digits
 j\.                      # join by "." 
m                         # map over inclusive range 

1
इसने पाइथ में बदलाव के लिए प्रेरित किया जो भविष्य में ऐसे कोड को कम करना चाहिए। किसी सूची में लागू vMहोने पर डिफ़ॉल्ट होगा v
ईसैक

@isaacg शांत - धन्यवाद, मैं अगली बार के लिए याद करने की कोशिश करूंगा।
डिजिटल ट्रॉमा

3

बैच, 623 बाइट्स

@echo off
set s=%1.%2
call:c %s:.= %
exit/b
:c
if %1==%5 goto d
call:d %1 %2 %3 %4 %1 255 255 255
set/al=%1+1,u=%5-1
for /l %%i in (%l%,1,%u%)do call:d %%i 0 0 0 %%i 255 255 255
call:d %5 0 0 0 %5 %6 %7 %8
exit/b
:d
if %2==%6 goto e
call:e %1 %2 %3 %4 %1 %2 255 255
set/al=%2+1,u=%6-1
for /l %%j in (%l%,1,%u%)do call:e %1 %%j 0 0 %5 %%j 255 255
call:e %5 %6 0 0 %5 %6 %7 %8
exit/b
:e
if %3==%7 goto f
call:f %1 %2 %3 %4 %1 %2 %3 255
set/al=%3+1,u=%7-1
for /l %%k in (%l%,1,%u%)do call:e %1 %2 %%k 0 %5 %6 %%k 255
call:e %5 %6 %7 0 %5 %6 %7 %8
exit/b
:f
for /l %%l in (%4,1,%8)do echo %1.%2.%3.%%l

दुर्भाग्य से बैच के 32-बिट अंकगणित सभी आईपी पते को प्रिंट नहीं कर सकते हैं, इसलिए मुझे इसे ओकटेट्स में विभाजित करना होगा।


क्या @echo offकोई विकल्प निकाल रहा है ? ऐसा नहीं है कि इससे बहुत फर्क पड़ता है।
डिजिटल ट्रामा

@DigitalTrauma मुझे लगता है कि यह कड़ाई से आवश्यक नहीं है क्योंकि प्रतिध्वनि हमेशा कंसोल में जाती है और इसलिए यह STDOUT का हिस्सा नहीं है, लेकिन यह विशेष रूप से इस तरह की लंबी स्क्रिप्ट पर बहुत कष्टप्रद है।
नील



2

जेली , 18 बाइट्स

ṣ”.V€ḅ⁹µ€r/b⁹j”.$€

इसे ऑनलाइन आज़माएं!

आउटपुट अंकों और दशमलव के एक समूह से प्रकट होता है, लेकिन इसे स्ट्रिंग की सूची के रूप में आंतरिक रूप से संग्रहीत किया जाता है। नए Yसिरे से तार में शामिल होने के लिए अंत (+1 बाइट) के लिए आवेदन करें।

यह काम किस प्रकार करता है

ṣ”.V€ḅ⁹µ€r/b⁹j”.$€ - main link, input is a list of addresses which are strings
       µ€          - for each address string,
ṣ”.                  - split on periods
   V€                - eval each element in the list (convert strings to numbers)
     ḅ⁹              - transform from base 256 to integer (⁹ is 256)
         r/        - take the inclusive range
           b⁹      - convert each element in the range from integer to base 256
             j”.$€ - join each address with periods.

2

जावास्क्रिप्ट (ईएस 6), 104 बाइट्स

g=s=>s.replace(/(\d+)\.256/,(_,n)=>++n+'.0')
f=(a,b)=>a==b?a:a+`
`+f(g(g(g(g(a+'.256').slice(0,-2)))),b)

यह समाधान n + 1 .0 के साथ पैटर्न n .256 को प्रतिस्थापित करता है , और यह दो मापदंडों के बराबर होने तक खुद को पुनरावर्ती कहता है।

यह गेंद को घुमाने के लिए प्रारंभिक इनपुट के लिए '.256' को जोड़ता है। slice(0,-2)इसके बाद ट्रेलिंग '.0' को हटाने के लिए उपयोग किया जाता है।

उदाहरण:

g=s=>s.replace(/(\d+)\.256/,(_,n)=>++n+'.0')
f=(a,b)=>a==b?a:a+`
`+f(g(g(g(g(a+'.256').slice(0,-2)))),b)

console.log('192.168.0.1 ... 192.168.0.4');
console.log(f('192.168.0.1', '192.168.0.4'));

console.log('123.255.255.0 ... 124.0.3.0');
console.log(f('123.255.255.0', '124.0.3.0'));

console.log('192.1.1.1 ... 192.1.1.1 ... kudos');
console.log(f('192.1.1.1', '192.1.1.1'));


1

जावा (ओपनजेडके 8) ,339 314 282 बाइट्स

golfed:

long f(String i)throws Exception{return java.nio.ByteBuffer.wrap(java.net.InetAddress.getByName(i).getAddress()).getInt()&(1L<<32)-1;}void g(String[] a)throws Exception{for(long l=f(a[0]),m=255;l<=f(a[1]);)System.out.println(((l>>24)&m)+"."+((l>>16)&m)+"."+((l>>8)&m)+"."+(l++&m));}

Ungolfed:

long ipToLong(String ip) throws Exception {
    return java.nio.ByteBuffer.wrap(java.net.InetAddress.getByName(ip).getAddress()).getInt() & (1L << 32) - 1;
}

void printRange(String[] ips) throws Exception {
    for (long ip = ipToLong(ips[0]), m = 255; ip <= ipToLong(ips[1]);)
        System.out.println(((ip >> 24) & m) + "." + ((ip >> 16) & m) + "." + ((ip >> 8) & m) + "." + (ip++ & m));
}

इसे ऑनलाइन आज़माएं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.