আইপি ঠিকানা নাকি?


25

আপনার নেটওয়ার্ক স্ক্যানিং সরঞ্জামটি ইনপুট সম্পর্কে বিরক্তিকরভাবে পিক, এবং আপনি যদি এমন কোনও আইপিভি 4 ঠিকানা খাওয়ান যা অবৈধ অক্ষরযুক্ত থাকে বা সঠিকভাবে ফর্ম্যাটেড না থাকে তবে অবিলম্বে ক্র্যাশ হয়ে যায়।

একটি আইপিভি 4 ঠিকানা হল একটি 32-বিট সংখ্যাসূচক ঠিকানা যা পিরিয়ড দ্বারা পৃথক চারটি সংখ্যা হিসাবে লেখা। প্রতিটি সংখ্যা শূন্য থেকে 255 হতে পারে ।

এই ক্র্যাশগুলি এড়ানোর জন্য আমাদের ইনপুটটিকে প্রি-বৈধকরণের জন্য একটি সরঞ্জাম লিখতে হবে এবং আমাদের নির্দিষ্ট সরঞ্জামটি পিক: একটি বৈধ ফর্ম্যাট দেখতে a.b.c.dযেখানে ক, বি, সি এবং ডি হবে:

  • কোনও নেতৃস্থানীয় শূন্য নেই এমন একটি 0বা একটি প্রাকৃতিক সংখ্যা হতে পারে ।
  • 0 - 255 (সমেত) এর মধ্যে হওয়া উচিত।
  • করা উচিত না মত বিশেষ চিহ্ন থাকা +, -, ,, এবং অন্যদের।
  • দশমিক (বেস 10) হওয়া উচিত

ইনপুট : একটি স্ট্রিং

আউটপুট : সত্যবাদী বা ফলসী মান (স্বেচ্ছাসেবী মানগুলিও গৃহীত হয়)

পরীক্ষার কেস :

Input            |  Output  |  Reason
                 |          |
- 1.160.10.240   |  true    |
- 192.001.32.47  |  false   |  (leading zeros present)
- 1.2.3.         |  false   |  (only three digits)
- 1.2.3          |  false   |  (only three digits)
- 0.00.10.255    |  false   |  (leading zeros present)
- 1.2.$.4        |  false   |  (only three digits and a special symbol present)
- 255.160.0.34   |  true    |
- .1.1.1         |  false   |  (only three digits)
- 1..1.1.1       |  false   |  (more than three periods)
- 1.1.1.-0       |  false   |  (special symbol present)
- .1.1.+1        |  false   |  (special symbol present)
- 1 1 1 1        |  false   |  (no periods)
- 1              |  false   |  (only one digit)
- 10.300.4.0     |  false   |  (value over 255)
- 10.4F.10.99    |  false   |  (invalid characters)
- fruit loops    |  false   |  (umm...)
- 1.2.3.4.5      |  false   |  (too many periods/numbers)
- 0.0.0.0        |  true    |
- 0.0 0.0.       |  false   |  (periods misplaced)
- 1.23..4        |  false   |  (a typo of 1.2.3.4)
- 1:1:1:1:1:1:1:1|  false   |  (an IPv6 address, not IPv4)

এটি , তাই খুব কম বাইট জিতবে!

ব্যবহারকারীদের জন্য নোট - আপনি যদি আরও কিছু পরীক্ষার ক্ষেত্রে যুক্ত করতে চান তবে আপনাকে স্বাগত জানানো হবে (একটি সম্পাদনার পরামর্শ দিয়ে)। তবে, দয়া করে পরীক্ষা-কেসগুলি তাদের পুনরাবৃত্তি না করে তা নিশ্চিত করুন! ধন্যবাদ


10
Testcases দিন: 1.1.1.1.1, 1.1.1.1., .1.1.1, 1..1.1, 1..1.1.1, 1.1.1.0, 1.1.1.-0, 1.1.1.+1, 1.1.1.1E1, 1.1.1.256, 1.1.1.0x1, 255.255.255.255, 0.0.0.0, 'or 1=1--, <empty string>, 1 1 1 1, 1,1,1,1
tsh

5
"1.2.3.4.5" পরীক্ষার কেসগুলি যুক্ত করার পরামর্শ দিন (খুব দীর্ঘ আইপি বাতিল করার জন্য) এবং "999.0.0.0" (খুব বেশি বড় আইপিগুলিকে রায় দেওয়ার জন্য)।
ট্রিগারনমেট্রি

5
সম্ভবত সামান্য পিক, তবে আপনার সম্ভবত "আইপি অ্যাড্রেস" এর পরিবর্তে "আইপিভি 4 অ্যাড্রেস" উল্লেখ করা উচিত - বা কমপক্ষে, কোথাও উল্লেখ করুন যে আপনি কেবল আইপিভি 4 অ্যাড্রেস বোঝাচ্ছেন - অন্যথায় 1234: 5678 :: 1 অবশ্যই একটি বৈধ আইপি ঠিকানা হওয়া উচিত (অন্যদিকে বিবরণ থেকে এটি পরিষ্কার যে এটি উদ্দেশ্য নয় :)
psmears

3
@ ক্রিগগিরির ভিত্তিটি আসলে সমস্ত আসল আইপি 4 নিয়মগুলি পরীক্ষা করার নয় (যেমনটি আপনি উল্লেখ করেছেন) এটি নিশ্চিত করার জন্য যে ইনপুট স্ট্রিংটি অন্য কোনও (সম্ভবত খারাপভাবে লিখিত) অ্যাপটি ক্র্যাশ না করে যা কেবলমাত্র একটি নির্দিষ্ট আকারে ইনপুটটিকে মঞ্জুরি দেয় । এছাড়াও, আমরা একটি চ্যালেঞ্জের নিয়মগুলি পরিবর্তন করব না যার ইতিমধ্যে 30+ উত্তর রয়েছে।
ব্র্যাডিসি

2
@ ক্রিগি ওয়ার্থ লক্ষ করে যে আরএফসি ঘোষণা করে যে "ঠিকানাগুলি চারটি অক্টেটের নির্দিষ্ট দৈর্ঘ্য"। আমি মনে করি আপনি যে ফ্রিজ মামলাগুলি উল্লেখ করছেন তা এই চ্যালেঞ্জের চেয়ে বেশি বিশেষায়িত।
পোকে

উত্তর:


26

X86_64 মেশিন কোড: 18 16 বাইট

সম্পাদনা করুন: এই উত্তরটি তেমন কার্যকর হয় না

  1. আমি inet_ptonস্ট্যান্ডার্ড সি লাইব্রেরি থেকে ব্যবহার করছি , যার অর্থ আমার বাহ্যিক প্রয়োজন। যদিও আমি আমার বাইট গণনাতে বাহ্যিকটি অন্তর্ভুক্ত করি নি।
  2. আমি প্রকৃত ঠিকানার ফলস্বরূপ রেড জোন ব্যবহার করেছি, তবে এমন একটি ফাংশন বলেছিলাম যা রেড জোন ব্যবহার করতে পারে। এটি ভাগ্যক্রমে আমার মেশিনে নেই, তবে কিছু বিজোড় স্ট্যান্ডার্ড লাইব্রেরি বিল্ড এটি ব্যবহার করতে পারে যা অপরিজ্ঞাত আচরণের কারণ হতে পারে।

এবং হ্যাঁ, পুরো জিনিসটি বেশ ইতিমধ্যে একটি লিখিত ফাংশন দ্বারা সম্পন্ন হচ্ছে

যাইহোক, এই আমি পেয়েছিলাম: 48 89 fe 6a 02 5f 48 8d 54 24 80 e9 00 00 00 00

এসেম্বলি:

section .text
    extern inet_pton
    global ipIsValid

ipIsValid:
    mov rsi, rdi
    ;mov rdi, 2 ; change to 10 for ipv6
    push 2
    pop rdi ; thank you peter
    lea rdx, [rsp - 128]
    jmp inet_pton

ব্যাখ্যা:

একবার দেখুন inet_pton(3)। এটি একটি স্ট্রিং আইপি ঠিকানা নেয় এবং এটি আপনি ব্যবহার করতে পারেন এমন একটি বাফারে রাখে struct sockaddr। এটি 3 টি আর্গুমেন্ট গ্রহণ করে: ঠিকানা পরিবার ( AF_INET(আইপিভি 4), 2, বা AF_INET6(আইপিভি 6), 10), আইপি ঠিকানার স্ট্রিং এবং আউটপুটটিতে একটি পয়েন্টার। এটি সাফল্যে 1, একটি অবৈধ ঠিকানার জন্য 0 বা ঠিকানা পরিবার হয় না AF_INETবা AF_INET6(যা কখনই ঘটবে না কারণ আমি এর সাথে ধ্রুবক পার করছি)।

সুতরাং আমি কেবল দ্বিতীয় আর্গুমেন্টের জন্য স্ট্রিংটিকে রেজিস্টারে সরিয়ে নিয়েছি, প্রথম নিবন্ধককে 2 তে সেট করে রেখেছি এবং তৃতীয় নিবন্ধটিকে রেড জোনে (স্ট্যাক পয়েন্টারের নীচে 128 বাইট) সেট করেছি যেহেতু আমি ফলাফলটির বিষয়ে চিন্তা করি না। তারপর আমি কেবল যা করতে পারেন jmpকরতে inet_ptonএবং সোজা কলারের কাছে যে ফিরতি যাক!

আমি আপনার কেসগুলি পরীক্ষা করতে এই দ্রুত পরীক্ষা প্রোগ্রামটি সজ্জিত করেছি:

#include <stdio.h>
#include <arpa/inet.h>
#include <netinet/ip.h>

extern int ipIsValid(char *);

int main(){
    char *addresses[] = {
        "1.160.10.240",
        "192.001.32.47",
        "1.2.3.",
        "1.2.3",
        "0.00.10.255",
        "1.2.$.4",
        "255.160.0.34",
        ".1.1.1",
        "1..1.1.1",
        "1.1.1.-0",
        ".1.1.+1",
        "1 1 1 1",
        "1",
        "10.300.4.0",
        "10.4F.10.99",
        "fruit loops",
        "1.2.3.4.5",
        NULL
    };

    for(size_t i = 0; addresses[i] != NULL; ++i){
        printf("Address %s:\t%s\n", addresses[i],
            ipIsValid(addresses[i]) ? "true" : "false");
    }
    return 0;
}

এর সাথে একত্রিত nasm -felf64 assembly.asm, সংকলন gcc -no-pie test.c assembly.oএবং আপনি পাবেন:

Address 1.160.10.240:   true
Address 192.001.32.47:  false
Address 1.2.3.: false
Address 1.2.3:  false
Address 0.00.10.255:    false
Address 1.2.$.4:    false
Address 255.160.0.34:   true
Address .1.1.1: false
Address 1..1.1.1:   false
Address 1.1.1.-0:   false
Address .1.1.+1:    false
Address 1 1 1 1:    false
Address 1:  false
Address 10.300.4.0: false
Address 10.4F.10.99:    false
Address fruit loops:    false
Address 1.2.3.4.5:  false

কলারকে পাস করার AF_INETবা AF_INET6ফাংশনে যাওয়ার কথা থাকলে আমি এটিকে আরও ছোট করে তুলতে পারি


4
আমি ভালবাসি যে আপনি asm এ এটি করেছেন। এবং আপনি যা তাদের কাছে এটি ব্যাখ্যা করেছিলেন তা সম্ভবত এটি বুঝতে পারে না (পাশাপাশি টেস্ট কোড) আরও ভাল। যা আমি এএসমে এটি করতে পারতাম তা বলার অপেক্ষা রাখে না; অনেক অনেক বছর কেটে গেছে তবে আপনার ব্যাখ্যা (এবং সেইজন্য প্রক্রিয়া) ঠিক কী বলছে (করছে) তা দেখার জন্য আমার যথেষ্ট মনে আছে। ভাল কাজ.
প্রাইফটান

4
e9 00 00 00 00একটি jmp near $+5, না একটি jmp inet_pton। যদি আপনি ওপকোড সরবরাহ করেন তবে আপনার অন্তর্ভুক্ত inet_ptonঅংশটি অন্তর্ভুক্ত করা উচিত , কোনও ফাঁকা ছাড়বেন না
l4m2


3
আপনার উত্তর শিরোনামে বাহ্যটি অন্তর্ভুক্ত করা উচিত, যেহেতু প্রোগ্রামটির এটি প্রয়োজন এবং এটি সমস্ত প্ল্যাটফর্মে উপলব্ধ নয়।
qwr

1
"মুভ আরডিআই, 2" -2 বাইটের জন্য "পুশ 2 ​​/ পপ আরডিআই" হতে পারে। এও নোট করুন যে বিচ্ছিন্নতা ভুল বা কোডটি ভুল। এটি হয় "মুভি এডি" (আরডিআই নয়) বা একটি উপসর্গ অনুপস্থিত।
পিটার ফেরি

13

জাভা (জেডিকে) , 63 বাইট

s->("."+s).matches("(\\.(25[0-5]|(2[0-4]|1\\d|[1-9])?\\d)){4}")

এটি অনলাইন চেষ্টা করুন!

ক্রেডিট


আপনি পেছনের আধা-কোলন অপসারণ করতে ভুলে গেছেন। ;) এবং আমি যাচাই করতে পারি যা মন্তব্যগুলির মধ্যে রয়েছে সেগুলি সহ এটি সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে। আমি গল্ফ কিছু জিনিস দেখতে পাবেন কিনা।
কেভিন ক্রুইজসেন

3
ব্যর্থ হয়েছে.1.2.3.4
l4m2

যখন পরিষ্কারভাবে 0/1 প্রয়োজন হয় তখন কি এটি বুলিয়ান ব্যবহারের অনুমতি রয়েছে?
l4m2

1
@ l4m2 মূল প্রশ্নের বৈধ / অবৈধ ছিল। সুতরাং আমি মনে করি যে এখানে সত্যবাদী / মিথ্যা মান গ্রহণযোগ্য is
কেভিন ক্রুইজসেন

Output: 0 or 1এবং জাভাতে কোনও অটো বুল নেই-> int
l4m2

12

জাভাস্ক্রিপ্ট (নোড.জেএস) , 43 বাইট

x=>x.split`.`.map(t=>[t&255]==t&&[])==`,,,`

এটি অনলাইন চেষ্টা করুন!

জাভাস্ক্রিপ্ট (নোড.জেএস) , 46 বাইট

x=>x.split`.`.every(t=>k--&&[t&255]==t,k=4)*!k

এটি অনলাইন চেষ্টা করুন!

Arnauld এর অংশ ব্যবহার

জাভাস্ক্রিপ্ট (নোড.জেএস) , 54 53 51 বাইট

x=>x.split`.`.every(t=>k--*0+t<256&[~~t]==t,k=4)*!k

এটি অনলাইন চেষ্টা করুন!

-2 বি এর জন্য 0+t<256, প্যাট্রিক স্টিফেনসেনের কাছ থেকে -1 বি, ইনপুট এড়ানোর জন্য +1 বি1.1.1.1e-80

RegExp সমাধান 58 54 বাইট

s=>/^((2(?!5?[6-9])|1|(?!0\d))\d\d?\.?\b){4}$/.test(s)

3 বাইটের জন্য ডেডকোডকে ধন্যবাদ


আমি কিছু পরীক্ষার মামলা যুক্ত করেছি!
rv7


1
@ কেভিন ক্রুজসেন 0.0.0.0এখানে সত্য। এসকিউএল ইঞ্জেকশন কেন এখানে?
l4m2

আহ অপেক্ষা করুন, আমি চ্যালেঞ্জের বর্ণনায় বাক্যটির ভুল ব্যাখ্যা করি। 0.0.0.0সত্যই সত্য। এটি আমার উত্তরটিও গল্ফ করবে .. (এবং এসকিউএল ইঞ্জেকশন বলতে কী বোঝাতে চেয়েছেন
?:

1
@ l4m2 আমি এটি যুক্ত করেছি যেহেতু আমাদের এমন কিছু টেস্টকেস দরকার যা এমনকি কোনও আইপি ঠিকানার মতো দেখায় না।
tsh

11

পিএইচপি , 39 বাইট

<?=+!!filter_var($argv[1],275,5**9);

এটি অনলাইন চেষ্টা করুন!

275 ধ্রুবকের অনুরূপ FILTER_VALIDATE_IP

ধ্রুবকের পরিবর্তে 5 ** 9 ব্যবহৃত হচ্ছে FILTER_FLAG_IPV4। এটি যথেষ্ট, কারণ 5**9 & FILTER_FLAG_IPV4সত্যবাদী, যা পিএনএফপি ঠিক পটভূমিতে কাজ করে, যেমন বোনয়েট এসনার্ড নির্দেশ করেছেন।

এখানে, filter_varপ্রথম যুক্তিটি ফেরত দেয়, যদি এটি একটি বৈধ IPv4 ঠিকানা, বা মিথ্যা না থাকে। সহ +!!, আমরা চ্যালেঞ্জ দ্বারা প্রয়োজনীয় আউটপুট উত্পাদন।


3
এখানে 3 বাইট সংরক্ষণের 5**9পরিবর্তে ব্যবহার 1048576করুন: পিএইচপি &আইপিভি 4 / আইপিভি 6 পতাকা পরীক্ষা করতে ব্যবহার করে , সুতরাং 1048576 এবং 2097151 এর মধ্যে যে কোনও সংখ্যা বৈধ।
বেনোইট এসনার্ড

আমার উত্তরটি (মূলত) হওয়ার জন্য আমি এইভাবে আপনার উত্তরটি নিম্নোক্ত করেছি: কোডগল্ফ.স্ট্যাকেক্সেঞ্জারওয়ে / a / 174470 / 14732 যা 2018-10-22 09: 17: 34UTC এ লেখা হয়েছিল যখন আপনার লিখিত ছিল 2018-10-22 09: 21: 55UTC। এমনকি যদি আমি @ বেনোইটসনার্ড দ্বারা প্রদত্ত 1-বাইট অপ্টিমাইজেশনটিকে ফিরিয়ে আনি, তবে আমার উত্তর কার্যকারিতা অনুসারে ঠিক আপনার মত same
ইসমাইল মিগুয়েল

2
আমাকে ক্ষমা চাইতে হবে, আমি আপনার উত্তরটি দেখতে পেলাম না, যদিও আমি এটি রচনা করার সময় এই প্রশ্নটির জন্য পিএইচপি তে কোনও জমা দেওয়া হয়নি (যেমন আপনি বলেছিলেন, সময়ের পার্থক্য পাঁচ মিনিটেরও কম)।
oktupol

আমি জানি, এবং আমি এটি বুঝতে পারি। আমি কেবল আপনার এখনই লক্ষ্য করেছি। আমি আমার পিছনে রোল করতে পারেন, এবং আপনি অপ্টিমাইজেশন রাখা। তবে আমি জানি না যে এটি উত্তরটি অন্যের থেকে যথেষ্ট আলাদা কিনা if
ইসমাইল মিগুয়েল

17
@ ইসমাইল মিগুয়েল আমি এর জন্য কাউকে কমে যাব না যদি এটি প্রশংসনীয় যে তারা যখন শুরু হয়েছিল তখন সেখানে না ছিল। 5 মিনিটের ব্যবধানের সাথে, এটি কেবল প্রশংসনীয় নয়, এটি প্রায় অবশ্যই ঘটনাটি, যা লেখক নিজেই এ কথা না বলেও বহিঃপ্রকাশ।
ডানকান এক্স সিম্পসন

11

পিএইচপি, 36 বাইট

echo(ip2long($argv[1])===false?0:1);

ip2longএকটি সুপরিচিত অন্তর্নির্মিত ফাংশন



এটি নতুন সংস্করণগুলিতে উপস্থিত অসম্পূর্ণ বৈশিষ্ট্যগুলি ব্যবহার করে বলে মনে হচ্ছে (আমার ধারণা এটি পিএইচপি 7 + এর)। মনে রাখবেন যে, পিএইচপি 4 এবং 5 এর জন্য এটি অসম্পূর্ণ আইপি গ্রহণ করে।
ইসমাইল মিগুয়েল



1
আপনি যদি কোনও পূর্ণসংখ্যা যেমন 1, 2 ইত্যাদি খাওয়ান তবে এটি সাফল্য অর্জন করবে এটি মনে করা উচিত না। এবং যদি আপনি এটিকে 100.100.100 হিসাবে কিছু খাওয়ান
এনএল-এক্স

10

পার্ল 6 , 22 21 20 বাইট

-1 বাইট ধন্যবাদ ফিল এইচ।

{?/^@(^256)**4%\.$/}

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

{                  }  # Anonymous Block
  /               /   # Regex match
   ^             $    # Anchor to start/end
    @(    )           # Interpolate
      ^256            #   range 0..255,
                      #   effectively like (0|1|2|...|255)
           **4        # Repeated four times
              %\.     # Separated by dot
 ?                    # Convert match result to Bool

3
ম্যান, পার্ল 6 এর রেজিক্সগুলি বের করতে আমার আরও বেশি সময় ব্যয় করতে হবে। আমার কোনটি %সংশোধকটির অস্তিত্ব ছিল না। আমি ভাবছি যদি এটি সমস্ত 256**4সম্ভাবনা পরীক্ষা করার চেষ্টা করে ?
জো কিং

1
পরিবর্তে <{^256}>আপনি কেবল @(^256)-1 চর টিআইও-র জন্য ব্যাপ্তিটিকে একটি অ্যারে রূপান্তর করতে পারেন । কোড ব্লকটিকে একটি অ্যারেতে পরিবর্তন করে এটি প্রচুর গতিতেও বাড়ায় (> 30 এর পরিবর্তে 0.4 সে)।
ফিল এইচ

ফিলফ কুল, ধন্যবাদ আমি চেষ্টা করেছি $(^256)কিন্তু এখন বুঝতে পারছি কেন এটি কাজ করে না।
nwellnhof

9

05 এ বি 1 ই , 26 24 23 22 23 বাইট

'.¡©g4Q₅Ý®å`®1šDïþJsJQP

-1 বাইট @ এমিগানাকে ধন্যবাদ ।
বগফিক্সিং পরীক্ষার ক্ষেত্রে +1 বাইট 1.1.1.1E1ভুলভাবে সত্যবাদী ফলাফল ফিরিয়ে দেওয়া।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

'.¡              '# Split the (implicit) input by "."
   ©              # Save it in the register (without popping)
    g4Q           # Check that there are exactly 4 numbers
    ₅Ý®å          # Check for each of the numbers that they are in the range [0,255],
        `         # and push the result for each number separated onto the stack
    ®1šDïþJsJQ    # Check that each number does NOT start with a "0" (excluding 0s itself),
                  # and that they consist of digits only
              P   # Check if all values on the stack are truthy (and output implicitly)

1
আপনি Āপরিবর্তে ব্যবহার করতে সক্ষম হবেন<d
Emigna

@MagicOctopusUrn আমি ভীত তা করতে ব্যর্থ হলে এর জন্য 1.1.1.1E1, 1..1.1.1, 1.1.1.1., 192.00.0.255, এবং 0.00.10.255। (পিএস: আমি 1.1.1.1E1যোগ þ-সম-
সমীক্ষায়

যথেষ্ট ভাল, মূর্তি আমি কিছু মিস করেছি।
ম্যাজিক অক্টোপাস উরন

@ ম্যাজিক অ্যাক্টপাস ইউরন মূল বিষয়টি 05AB1E সংখ্যাটি দেখছে যার সাথে 0 টি সমান স্ট্রিং হিসাবেও নেই leading কেন আমি ব্যবহার কোনটি DïþJsJQচেক যেখানে ïএটা নেতৃস্থানীয় 0 সেঃ মুছে ফেলার জন্য int- এ নিক্ষেপ এবং þশুধুমাত্র পাতার সংখ্যা ভালো জিনিস সরানোর E, -ইত্যাদি :) পরীক্ষা ক্ষেত্রে জন্য 0.00.10.255, যেহেতু 00010255এবং 0010255সমান হতে হবে।
কেভিন ক্রুইজসেন

হ্যাঁ আমি একই অর্থহীনতার মধ্য দিয়ে গেলাম, সমস্ত সংখ্যার বিপরীতমুখী ঘটনাগুলি ব্যতীত বেশ ভালভাবে কাজ করেছে। আকর্ষণীয় কিছু সমস্যাগুলির জন্য উপকারী বৈশিষ্ট্যগুলি যখন অন্যদের জন্য প্রায় বাগ-মত হয়ে যায়।
ম্যাজিক অক্টোপাস উরন

6

পাওয়ারশেল, 59 51 49 বাইট

-8 বাইটস, ধন্যবাদ @ অ্যাডমবর্কবার্ক

-2 বাইট trueবা falseলেখক দ্বারা অনুমোদিত

try{"$args"-eq[IPAddress]::Parse($args)}catch{!1}

পরীক্ষার স্ক্রিপ্ট:

$f = {

try{"$args"-eq[IPAddress]::Parse($args)}catch{!1}

}

@(
    ,("1.160.10.240" , $true)
    ,("192.001.32.47" , $false)
    ,("1.2.3." , $false)
    ,("1.2.3" , $false)
    ,("0.00.10.255" , $false)
    ,("192.168.1.1" , $true)
    ,("1.2.$.4" , $false)
    ,("255.160.0.34" , $true)
    ,(".1.1.1" , $false)
    ,("1..1.1.1" , $false)
    ,("1.1.1.-0" , $false)
    ,("1.1.1.+1" , $false)
    ,("1 1 1 1" , $false)
    ,("1"            ,$false)
    ,("10.300.4.0"   ,$false)
    ,("10.4F.10.99"  ,$false)
    ,("fruit loops"  ,$false)
    ,("1.2.3.4.5"    ,$false)

) | % {
    $s,$expected = $_
    $result = &$f $s
    "$($result-eq$expected): $result : $s"
}

আউটপুট:

True: True : 1.160.10.240
True: False : 192.001.32.47
True: False : 1.2.3.
True: False : 1.2.3
True: False : 0.00.10.255
True: True : 192.168.1.1
True: False : 1.2.$.4
True: True : 255.160.0.34
True: False : .1.1.1
True: False : 1..1.1.1
True: False : 1.1.1.-0
True: False : 1.1.1.+1
True: False : 1 1 1 1
True: False : 1
True: False : 10.300.4.0
True: False : 10.4F.10.99
True: False : fruit loops
True: False : 1.2.3.4.5

ব্যাখ্যা:

.NET অবজেক্ট, আইপিএড্রেস তৈরি করতে স্ক্রিপ্টটি একটি আর্গুমেন্ট স্ট্রিংকে পার্স করার চেষ্টা করে ।

  • তৈরি করা $trueহলে ফিরে objectআসুন এবং আর্গুমেন্ট স্ট্রিং object(এর মাধ্যমে সাধারণ ঠিকানা object.toString()) এর স্ট্রিং প্রতিনিধির সমান হয়
  • আসতে $falseঅন্যথায়

পাওয়ারশেল, 59 56 54 বাইট, '.NET lib' বিকল্প ব্যবহার করবেন না

-3 বাইট, trueবা falseলেখক দ্বারা অনুমোদিত

-২ বাইটস, দুর্দান্ত রিজেক্সএক্সের জন্য @ ডেডকোডকে ধন্যবাদ

".$args"-match'^(\.(2(?!5?[6-9])|1|(?!0\B))\d\d?){4}$'

এটি অনলাইন চেষ্টা করুন!

আসল নিয়মিত প্রকাশের জন্য @ অলিভিয়ার গ্রাগোয়ারকে ধন্যবাদ Thanks


1
আপনার কল করার দরকার নেই |% t*gযেহেতু পাওয়ারশেল স্বয়ংক্রিয়ভাবে ডান হাতের -eqস্ট্রিং হিসাবে কাস্ট করবে , কারণ বাম-হাতের একটি স্ট্রিং। -try{+("$args"-eq[IPAddress]::Parse($args))}catch{0}
অ্যাডমবার্কবার্ক

আপনি আমার রেইজেক্স ব্যবহার করে ".NET lib" সংস্করণ থেকে 2 বাইট খোদাই করতে পারেন (সন্নিবেশ-এ-পিরিয়ড ট্রিকের সাথে অভিযোজিত, যা অবশ্যই আমার সংস্করণে থাকতে পারে না কারণ এটি খাঁটি রেজেক্স): tio.run/…
ডেডকোড

5

সি (জিসিসি) / পসিক্স, 26 বাইট

f(s){s=inet_pton(2,s,&s);}

এটি অনলাইন চেষ্টা করুন!

টিআইও-তে 64-বিট কোড হিসাবে কাজ করে তবে sizeof(int) == sizeof(char*)অন্য প্ল্যাটফর্মগুলিতে সম্ভবত এটির প্রয়োজন ।


@ টবিস্পাইট হ্যাঁ, আপনি x86 এ থাকলে আপনার সম্ভবত 32-বিট মোডে চেষ্টা করা উচিত ( -m32)।
nwellnhof

আমি এটি (এখানে আইএলপি 32 সিস্টেমের অ্যাক্সেস নেই) sহিসাবে পাস করে এটি কাজ করতে পেরেছি char*, এবং হ্যাঁ, আমি মিশ্রিত হয়েছি inet_aton()
টবি স্পিড

5

পিএইচপি 7+, 37 35 32 বাইট

এটি অন্তর্নির্মিত ফাংশনটি ব্যবহার করে এটি বৈধfilter_var করার জন্য এটি একটি আইপিভি 4 ঠিকানা

এটি কাজ করার জন্য আপনাকে iজিইটি অনুরোধের মাধ্যমে কীটি পাস করতে হবে ।

<?=filter_var($_GET[i],275,5**9);

ফলাফলের উপর নির্ভর করে কিছুই (কোনও falsyফলাফলের জন্য) বা আইপি (ফলাফলের জন্য) আউটপুট দেয় না truthy

আপনি এটি চেষ্টা করতে পারেন: http://sandbox.onlinephpfunctions.com/code/639c22281ea3ba753cf7431281486d8e6e66f68e http://sandbox.onlinephpfunctions.com/code/ff6aaeb2b2d0e0ac43f48125de0549320bc071b4


এটি সরাসরি নিম্নলিখিত মানগুলি ব্যবহার করে:

  • 275 = FILTER_VALIDATE_IP
  • 1 << 20 = 1048576 = FILTER_FLAG_IPV4
  • 5 ** 9 = 1953125 (যা "1" হিসাবে প্রয়োজনীয় বিট রয়েছে, 1048576 এর জন্য)

বেনোইট এসনার্ডকে এই টিপটির জন্য ধন্যবাদ যা আমাকে 1 বাইট বাঁচিয়েছে!

আপনাকে ধন্যবাদ তিতাস আমাকে চ্যালেঞ্জ পরিবর্তন স্মরণ জন্য।


আমি ফাংশনটি ব্যবহার করে দেখেছি ip2long, তবে এটি সম্পূর্ণ-সম্পূর্ণ আইপি ঠিকানাগুলির সাথে কাজ করে।

এই চ্যালেঞ্জে সম্পূর্ণ না হওয়া আইপিভি 4 ঠিকানাগুলি অবৈধ বলে বিবেচিত হয়।

যদি তাদের অনুমতি দেওয়া হয় তবে এটি চূড়ান্ত কোড হবে (কেবলমাত্র পিএইচপি 5.2.10 এর জন্য):

<?=ip2long($_GET[i]);

বর্তমানে, ডকুমেন্টেশনে এটি স্পষ্ট নয় যে এটি নতুন পিএইচপি সংস্করণ সহ কাজ করা (একটি অসম্পূর্ণ আইপি পাস করার পরে) বন্ধ করবে।

পরীক্ষার পরে, নিশ্চিত যে বিষয়টি ছিল।

টিপস জন্য nwellnhof ধন্যবাদ !


এখানে একটি বাইট সংরক্ষণ করার 5**9পরিবর্তে ব্যবহার 1<<20করুন: পিএইচপি &আইপিভি 4 / আইপিভি 6 পতাকা পরীক্ষা করতে ব্যবহার করে , সুতরাং 1048576 এবং 2097151 এর মধ্যে যে কোনও সংখ্যা বৈধ।
বেনোইট এস্নার্ড

নতুন পিএইচপি সংস্করণগুলিতে, ip2longঅসম্পূর্ণ ঠিকানাগুলিকে অনুমতি দেয় না।
nwellnhof

@ বেনোইটসনার্ড ধন্যবাদ! আমি এটি উত্তরে যুক্ত করেছি
ইসমাইল মিগুয়েল

@ ননহ্নহফ পরীক্ষার পরে, আমি নিশ্চিত হয়েছি যে এটিই কেস। তবে, আমি এটি ব্যবহার করা ভাল ধারণা বলে মনে করি না, কারণ এটি স্পষ্টভাবে নথিভুক্ত করা হয়নি।
ইসমাইল মিগুয়েল

+!!এটা দরকারি না; ওপি এখন নির্বিচারে সত্যবাদী মান গ্রহণ করে।
তিতাস

5

পাইথন 3: 81 78 70 69 66 বাইট

['%d.%d.%d.%d'%(*x.to_bytes(4,'big'),)for x in range(16**8)].count

সমস্ত সম্ভাব্য IPv4 ঠিকানার উপরে লুপ করুন, স্ট্রিংয়ের উপস্থাপনা পান এবং এটি ইনপুটটির সাথে তুলনা করুন। এটা ... চালাতে কিছুটা সময় নেয়।

সম্পাদনা: বেনাম ফাংশনে পুরো প্রোগ্রাম থেকে স্যুইচ করে 3 বাইট সরানো হয়েছে।

সম্পাদনা 2: এক্সনোরের সাহায্যে 8 বাইট সরানো হয়েছে

সম্পাদনা 3: তালিকা বোধের পরিবর্তে একটি প্যাকযুক্ত মানচিত্র ব্যবহার করে 1 বাইট সরানো হয়েছে

EDIT4: ipaddressমডিউলটির পরিবর্তে তালিকা বোধগম্যতা ব্যবহার করে 3 বাইট সরানো হয়েছে


2
আমি মনে করি আপনার বেনামী ফাংশন শুধু হতে পারে [str(ip_address(x))for x in range(256**4)].count। এছাড়াও, 256**4হতে পারে 16**8
xnor

5

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 84 79 65 বাইট

s=>s.Split('.').Sum(t=>byte.TryParse(t,out var b)&t==b+""?1:5)==4

এটি অনলাইন চেষ্টা করুন!

-5 এবং -14 বাইট সংরক্ষিত @ ডানাকে ধন্যবাদ!

# সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 61 বাইট

s=>s.Count(c=>c==46)==3&IPAddress.TryParse(s,out IPAddress i)

এটি অনলাইন চেষ্টা করুন!

এই অগ্রগতি একটি কাজ। কোড ব্যবহার System.Net(আপনি যদি এটি গণনা করেন তবে +17 বাইট)। যদি আপনি আশ্চর্য হন যে কেন আমি গণনা করছি এবং পার্স করছি:

আইপিএড্রেস.ট্রি পার্স পদ্ধতির সীমাবদ্ধতা হ'ল এটি যদি নিশ্চিত হয় যে স্ট্রিংকে আইপি ঠিকানায় রূপান্তর করা যায়, সুতরাং যদি এটি "5" এর মতো স্ট্রিংয়ের সাথে সরবরাহ করা হয় তবে এটি "0.0.0.5" হিসাবে বিবেচনা করে।

সূত্র

@ মিল্ক মন্তব্যটিতে যেমন বলেছে, এটি প্রকৃতপক্ষে শূন্যপদে ব্যর্থ হবে। সুতরাং, 61 বাইট এক কাজ করছে না।


1
@ দানা দুর্দান্ত সুন্দরভাবে সম্পন্ন! আরও চারটি এবং এটি 61 বাইট সমাধানগুলিকে পরাজিত করবে!
অ্যালিসডজি বলছেন মিনিকা পুনরায় ইনস্টল করুন

4

পাইথন 2 , 85 82 81 বাইট

-1 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ

from ipaddress import*
I=input()
try:r=I==str(IPv4Address(I))
except:r=0
print~~r

এটি অনলাইন চেষ্টা করুন!

113 বাইট উত্তরটি ব্যর্থ হওয়ায় এটি মোছা হয়েছে1.1.1.1e-80


1
আপনি গল্ফ print 1*rকরতে পারেন print~~r। +1 টি যদিও, যেহেতু এটি জন্য কাজ বলে মনে হচ্ছে সব সম্ভব পরীক্ষার বিষয় দূর পর্যন্ত প্রস্তাবিত । PS: আপনার 113 বাইট উত্তরটি ব্যর্থ 1.1.1.1e-80
কেভিন ক্রুইজসেন

ধন্যবাদ কেভিন ক্রুজসেন! এই জাতীয় সংখ্যার স্বরলিপি সম্পর্কে
ভাবেননি

ipaddressপাইথন 3 মডিউলটি কি নয় ?
ফারহান.কে

@ ফারহান.কে ডুন্নো, তবে এটি টিআইওতে কাজ করে
মৃত

4

জাপট, 17 15 বাইট

q.
ʶ4«Uk#ÿòs)Ê

এটি ব্যবহার করে দেখুন বা সমস্ত পরীক্ষার কেস চালান বা চ্যালেঞ্জ মন্তব্য থেকে অতিরিক্ত পরীক্ষার কেস যাচাই করুন


ব্যাখ্যা

আমরা একটি অ্যারেতে বিভক্ত হয়েছি ., সেই অ্যারের দৈর্ঘ্য সমান 4এবং ["0","255"]এটির দৈর্ঘ্যের সমস্ত উপাদান যখন এখান থেকে সরানো হয় তখন এটি মিথ্যা ( 0))

                 :Implicit input of string U
q.               :Split on "."
\n               :Reassign resulting array to U
Ê                :Length of U
 ¶4              :Equals 4?
   «             :&&!
    Uk           :Remove from U
      #ÿ         :  255
        ò        :  Range [0,255]
         s       :  Convert each to a string
          )      :End removal
           Ê     :Length of resulting array


2
@ কেভিন ক্রুজসেন, ব্যাখ্যা যুক্ত হয়েছে। এই অতিরিক্ত পরীক্ষার কেসগুলির জন্য ধন্যবাদ।
শেগি

3

গণিত, 39 31 বাইট

মূল সংস্করণ:

¬FailureQ[Interpreter["IPAddress"][#]]&

পরিবর্তিত সংস্করণ (মিশা লাভরভকে ধন্যবাদ)

 AtomQ@*Interpreter["IPAddress"]

যা Trueইনপুটটি বৈধ আইপি ঠিকানা হলে তা ফিরে আসে ( এটি চেষ্টা করুন )।

যদি আপনি পেতে 1এবং 0পরিবর্তে জেদ করেন তবে অতিরিক্ত 7 বাইট প্রয়োজন হবে:

Boole/@AtomQ@*Interpreter["IPAddress"]

Interpreter["IPAddress"]বৈধ ইনপুট জন্য একটি স্ট্রিং, এবং অবৈধ ইনপুট জন্য কিছু জটিল ব্যর্থতা বস্তু যেহেতু ফেরত দেয় তাই আমরা বৈধ ইনপুটগুলির সাথে পরীক্ষা করতে পারি AtomQ[Interpreter["IPAddress"][#]]&, যা ফাংশন রচনাতে আরও সংক্ষিপ্ত করা যায় AtomQ@*Interpreter["IPAddress"]এটি অনলাইন চেষ্টা করুন!
মিশা লাভরভ

আইপিভি 6 ঠিকানার মতো ব্যর্থ হয় 2001:0db8:85a3:0000:0000:8a2e:0370:7334
লাইটোসিয়াসট


3

পাইথন 2, 93 89 67 53 বাইট

[i==`int(i)&255`for i in input().split('.')]!=[1]*4>_

এটি অনলাইন চেষ্টা করুন!

অভ্যন্তরীণ তুলনা এবং প্রস্থান কোডে আরও 14 বাইট শেভ করার জন্য ডেনিসকে ধন্যবাদ ।

জোনাথন অ্যালানকে 22 বাইট এবং একটি লজিক ফিক্স শেভ করার জন্য বিশেষ ধন্যবাদ! পেস্কি চেষ্টা / বেগুন বাদে!

কাঁচা বাইটের পরিবর্তে সঠিকভাবে ফর্ম্যাট করা স্ট্রিংগুলি 4 বাইট মুভ করে দেয়, ধন্যবাদ জো কিং thanks


আপনার চেক এ গল্ফ করা যেতে পারে i==`int(i)&255` । এছাড়াও, আপনি কোনও ত্রুটি জোর করতে পারেন [...]!=[1]*4>_, যেহেতু আপনি যেভাবেই প্রস্থান কোড ব্যবহার করছেন। এটি অনলাইন চেষ্টা করুন!
ডেনিস

@ ডেনিস আমি বুঝতে পারি না কি >_করে। বিটওয়াইজ এবং যদিও বেশ বুদ্ধিমান ... যদিও আমি নিজের সাথে এটি একত্রিত করতে ব্যর্থ হয়েছিলাম।
টেম্পোরাল ওল্ফ

2
যদি !=মিথ্যা, পাইথন শর্ট সার্কিটগুলি দেয় এবং কিছুই ঘটে না; দোভাষা সাধারণত উপস্থিত হয়। যদি এটি সত্য হয়, >_একটি নেমরর উত্থাপন করে, কারণ ভেরিয়েবল অপরিজ্ঞাত _
ডেনিস

চিত্রগুলি আমি আমার উত্তরের সাথে তুলনা করি এবং তারপরে আপনার মন্তব্যে সুস্পষ্ট ফলাফলটি মিস করব। ব্যাখ্যা করার জন্য ধন্যবাদ.
টেম্পোরাল ওল্ফ

3

sfk , 176 বাইট

* মূলত বাশ + এসএফকে ছিল তবে টিআইও তখন থেকে উপযুক্ত এসএফকে মোড়কে যুক্ত করেছে

xex -i "_[lstart][1.3 digits].[1.3 digits].[1.3 digits].[1.3 digits][lend]_[part2]\n[part4]\n[part6]\n[part8]_" +xed _[lstart]0[digit]_999_ +hex +linelen +filt -+1 -+2 +linelen

এটি অনলাইন চেষ্টা করুন!


প্রথমে nc [addr] 1 -w1এটিকে ছোট করে ত্রুটি প্রিন্টআউট চেক করা হবে ?

@ রোজেম ncনেতৃস্থানীয় জিরো পাশাপাশি আইপিভি addresses ঠিকানা গ্রহণ করে, সুতরাং আমি এখনও সেগুলি পরিচালনা করতে পারি - এবং sfkযাইহোক এটি শেল উত্তরের চেয়ে উত্তর হিসাবে আরও লক্ষ্যযুক্ত ।
ousurous

3

পাইথন 3 বাশ * 60

* এছাড়াও অন্যান্য শাঁস। সত্য বা মিথ্যা পরীক্ষা যে কোনও একটি প্রোগ্রামের প্রস্থান কোডে পাস করে

read I
python3 -c "from ipaddress import*;IPv4Address('$I')"

ব্যাখ্যা

খাঁটি পাইথন সমাধানগুলির সমস্যাটি হ'ল কোনও প্রোগ্রাম ক্র্যাশ হওয়ার বিষয়টি অনির্দিষ্ট বলে বিবেচিত হয়। ব্যতিক্রমকে যথাযথ সত্য / দ্রুত মান হিসাবে রূপান্তর করতে আমরা একটি "প্রচুর কোড" ব্যবহার করতে পারি। যাইহোক, এক পর্যায়ে পাইথন ইন্টারপ্রেটার এই অনাবৃত ব্যতিক্রমটি পরিচালনা করে এবং একটি শূন্য-বহির্গমন কোডটি দেয়। আপনার পছন্দসই ইউনিক্স শেলটিতে ভাষা পরিবর্তন করার জন্য স্বল্প-স্বল্প ব্যয়ের জন্য আমরা বেশ কিছুটা কোড সংরক্ষণ করতে পারি!

অবশ্যই, এটি ইনজেকশন আক্রমণে ঝুঁকিপূর্ণ ... ইনপুটগুলি যেমন 1.1.1.1'); print('Doing Something Evilঅনিরাপদ হুমকি!



@ পিটারমোরটেনসেন ইয়েকস এটি এমনকি লাল রঙে আন্ডারলাইন করা হয়েছিল। আমার ব্রাউজারটি আমাকে বাঁচানোর চেষ্টা করেছিল, কিন্তু আমি শুনব না। এটি ধরার জন্য ধন্যবাদ!
সোমবার

সম্পূর্ণ প্রোগ্রামগুলিকে প্রস্থান কোডের মাধ্যমে আউটপুট দেওয়ার অনুমতি দেওয়া হয়, সুতরাং এটি 43 বাইট হতে পারে ।
ბიმო

@ বিএমও আকর্ষণীয়। যে ইশারা জন্য ধন্যবাদ! আমি মনে করি যে সমস্যাটি নির্ধারণকারী "ট্রুয়ালি / ফালসি" থেকে পরিবর্তিত হয়ে নির্বিচারে আউটপুটকে মঞ্জুরি দিয়েছিল তবে আমি
এটির

3

ইসমাস্ক্রিপ্ট খাঁটি রেজেক্স, 41 বাইট

^((2(?!5?[6-9])|1|(?!0\B))\d\d?\.?\b){4}$

এটি অনলাইন চেষ্টা করুন!
এটি regex101 এ চেষ্টা করুন

আমি মনে করি এই রেজেক্সের যুক্তিটি নিজের পক্ষে কথা বলে, তাই আমি কেবল সুন্দর-মুদ্রণ করব তবে এটিকে মন্তব্য করব না:

^
(
    (
        2(?!5?[6-9])
    |
        1
    |
        (?!0\B)
    )
    \d\d?
    \.?\b
){4}
$

এটি নিম্নলিখিত অন্যান্য উত্তর থেকে 2 বাইট শেভ করতে ব্যবহার করা যেতে পারে:

এখানে একটি বিকল্প সংস্করণ যা নেতৃস্থানীয় শূন্যগুলিকে অনুমতি দেয়, তবে এটি ধারাবাহিকভাবে করে (অষ্টকে সর্বোচ্চ 3 দশমিক সংখ্যা দ্বারা উপস্থাপন করা যেতে পারে):

^((2(?!5?[6-9])|1|0?)\d\d?\.?\b){4}$

অথবা যে কোনও সংখ্যক নেতৃস্থানীয় শূন্যকে অনুমতি দিন:

^(0*(2(?!5?[6-9])|1?)\d\d?\.?\b){4}$


1
\bএবং \B... এটি স্মার্ট!
mazzy

1
@ মমজি হ্যাঁ, এই দুটি সত্যিই কাজে আসে! আমি (?!0\d)পরিবর্তে ব্যবহার করতে পারে , কিন্তু আমি \Bভাল চাই !
ডেডকোড

পাওয়ারশেল উত্তরটি আপনার রেজিপেক্সের সাথে সংক্ষিপ্ত হবে না। আমি দুঃখিত. একটি অ্যারেটিকে স্ট্রিংয়ে রূপান্তর করতে উদ্ধৃতি প্রয়োজন। এটি অনলাইন চেষ্টা করুন!
mazzy

1
\.?\bআমিও আমার উত্তর একটি বাইট সংরক্ষিত, ধন্যবাদ!
নীল

1
3 বাইট thx সংরক্ষণ করা হয়েছে
l4m2

2

লাল , 106 বাইট

func[s][if error? try[t: load s][return off]if 4 <> length? t[return off]s =
form as-ipv4 t/1 t/2 t/3 t/4]

এটি অনলাইন চেষ্টা করুন!

ফিরে আসা trueবাfalse

ব্যাখ্যা:

f: func [ s ] [
    if error? try [                  ; checks if the execution of the next block result in an error
        t: load s                    ; loading a string separated by '.' gives a tuple   
    ] [                              ; each part of which must be in the range 0..255
        return off                   ; if there's an error, return 'false' 
    ]
    if 4 <> length? t [              ; if the tuple doesn't have exactly 4 parts
        return off                   ; return 'false'  
    ]
    s = form as-ipv4 t/1 t/2 t/3 t/4 ; is the input equal to its parts converted to an IP adress
]

2

স্ট্যাক্স , 14 বাইট

∞n·Θ3ª&JH‼∙*~Γ

এটি চালান এবং এটি ডিবাগ করুন

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এমন দেখাচ্ছে।

VB      constant 256
r       [0 .. 255]
'|*     coerce and string-join with "|"; i.e. "0|1|2|3 ... 254|255"
:{      parenthesize to "(0|1|2|3 ... 254|255)"
]4*     make 4-length array of number pattern
.\.*    string join with "\\."; this forms the complete regex
|Q      is the input a complete match for the regex?

এটি চালান


আপনি ভাষা স্ট্যাক্স তৈরি করেছেন তা অবাক করে! এটা ভাল কাজ করছে।
rv7

ধন্যবাদ! গল্ফিং ভাষার স্থানগুলি আশ্চর্যজনকভাবে জনাকীর্ণ, এবং আমি নিশ্চিত নই যে স্ট্যাকস তার নিজস্ব গুণাগুণগুলির সাথে তার নিজের অস্তিত্বকে ন্যায্যতা দিতে পারে কিনা তবে আমার মূল লক্ষ্যটি ছিল যে আমি এটি করতে পারি এবং সম্ভবত কিছু শিখতে পারি তা দেখার জন্য। এটি প্রত্যাশার চেয়ে মজাদার হয়ে শেষ হয়েছে।
পুনরাবৃত্তি

2

পাইথন 3, 109 93 বাইট

import re
lambda x:bool(re.match(r'^((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(\.(?!$)|$)){4}$',x))

ব্যাখ্যা

প্রতিটি অক্টেট 0 - 255 হতে পারে:

  • 25 দিয়ে শুরু হয় এবং শেষ সংখ্যা হিসাবে 0-5 রয়েছে
  • 2 দিয়ে শুরু করুন, দ্বিতীয় অঙ্ক হিসাবে 0-4 এবং শেষে কোনও অঙ্ক রয়েছে
  • 1 এবং 00 - 99 দিয়ে বাকি সংখ্যা হিসাবে শুরু হয়
  • কেবলমাত্র 2 টি সংখ্যা রয়েছে - 1-9 প্রথমটি হ'ল এবং তার পরে কোনও অঙ্ক
  • বা কেবল একটি একক সংখ্যা

একটি অক্টেট একটি (।) দিয়ে শেষ হতে পারে বা কেবল শেষ হতে পারে, এই শর্ত দিয়ে যে এটি উভয়ই করতে পারে না, নেতিবাচক চেহারাটি (?!$)এই ক্ষেত্রে যত্ন নেয়

ধন্যবাদ @Zachary আমাকে তৈরীর জন্য উপলব্ধি আমি স্পেস বাতিল করতে পারেন (যেহেতু এটি কোড গলফ হয়)
ধন্যবাদ @DLosc উন্নতি এবং উপার্জন আমাকে আমার ভুল, তার এখন সংশোধন করা অর্জনে সহায়ক হবে।


2
এর জন্য কিছু ব্যাখ্যা সাহায্য করতে পারে।
নিসা

x: re.match=> x:re.match; , x=> ,x, এবং ) is=> এর )is3 টি বাইট সংরক্ষণ করা উচিত। এছাড়াও, রেজেক্সে, আপনি এবং => এর \dপ্রতিটি সংঘের জন্য ব্যবহার করতে পারেন । এটি দুর্দান্ত পোস্ট হিসাবে মনে হচ্ছে, যদিও! [0-9][1]1
Zacharý

[1-9][0-9]|[0-9]হতে পারে [1-9]\d|\d, (Zachary পরামর্শ প্রতি) যা হতে পারে [1-9]?\d। এছাড়াও, পরীক্ষার পরিবর্তে re.match(...)is not None, আপনি bool(re.match(...))যেহেতু ম্যাচের জিনিসগুলি সত্য এবং মিথ্যা , তাই আপনি এটি করতে পারেন None। :)
DLosc

হুম। প্রকৃতপক্ষে, এটি পরীক্ষার ক্ষেত্রে ব্যর্থ হয় 1.2.3.4.5(এবং এটিও 1.2.3.4., যা পরীক্ষার মামলার সরকারী তালিকায় নেই), কারণ এটি চতুর্থ সংখ্যার পরে স্ট্রিং-এর পরিবর্তে একটি সময়ের সাথে মেলে।
DLosc


2

কাঠকয়লা , 45 21 বাইট

I∧⁼№θ.³¬Φ⪪θ.¬№E²⁵⁶Iλι

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা: @ শ্যাগির জ্যাপ উত্তরটি পোর্ট করে 24 বাইট সংরক্ষণ করা হয়েছে। ব্যাখ্যা:

    θ                   Input string
   №                    Count occurrences of
     .                  Literal `.`
  ⁼                     Equal to
      ³                 Literal 3
 ∧                      Logical And
       ¬                Logical Not
          θ             Input string
         ⪪              Split on
           .            Literal `.`
        Φ               Filter by
            ¬           Logical Not
               ²⁵⁶      Literal 256
              E         Map over implicit range
                   λ    Map value
                  I     Cast to string
             №          Count occurrences of
                    ι   Filter value
I                       Cast to string
                        Implicitly print

123.-50.0.12বা যেমন নেতিবাচক পূর্ণসংখ্যার সাথে পরীক্ষার ক্ষেত্রে ব্যর্থ হয় 1.1.1.-80। অন্য সব কিছুর সূক্ষ্ম কাজ মনে হয়। সুতরাং <256চেক in [0,255]পরিবর্তে হওয়া উচিত ।
কেভিন ক্রুইজসেন

@ কেভিনিক্রুজসেন আসলে অবৈধ অক্ষরগুলি ফিল্টার করার কোডটি কাজ করছে না কারণ আমি অভ্যন্তরীণ লুপে ভেরিয়েবলটি পরিবর্তন করতে ভুলে গেছি। এখনই ঠিক করা উচিত।
নিল

2

রেটিনা , 46 44 বাইট

^
.
^(\.(25[0-5]|(2[0-4]|1\d|[1-9])?\d)){4}$

@ অলিভিয়ারগ্রোওয়ের এর জাভা উত্তরটির বন্দর , সুতরাং তাকে উর্ধ্বমুখী করা নিশ্চিত করুন!
-2 বাইট ধন্যবাদ @Neil

এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

^
.                           # Prepend a dot "." before the (implicit) input
^...$                       # Check if the entire string matches the following regex
                            # exactly, resulting in 1/0 as truthy/falsey:
 (                          #  Open a capture group
  \.                        #   A dot "."
    (25[0-5]                #   Followed by a number in the range [250,255]
    |(2[0-4]|         ) \d) #   or by a number in the range [200,249]
    |(      |1\d|     ) \d) #   or by a number in the range [100,199]
    |(          |[1-9]) \d) #   or by a number in the range [10,99]
    |(                )?\d) #   or by a number in the range [0,9]
 )                          #  Close capture group
  {4}                       #  This capture group should match 4 times after each other

আমার প্রয়াস (যা আমি পোস্ট করিনি কারণ সেই সময়ে প্রশ্নটি ধরে রাখা হয়েছিল) একই দৈর্ঘ্য ছিল, তবে \dগ্রুপটি অপ্টিমাইজেশন নেই, সুতরাং আপনি দুটি বাইট সংরক্ষণ করতে পারেন কারণ আপনার Mস্পেসিফিকেশনটির প্রয়োজন নেই শেষ লাইন.
নীল

পার্ল 6 উত্তরটি পোর্ট করে আমি রেটিনা 42 বাইটে নামিয়ে আনতে সক্ষম হয়েছি তবে এই উত্তরটি 0.8.2 এও কাজ করে যা আমার বন্দরটি দেয় না।
নিল

2

জেলি , 11 বাইট

⁹ḶṾ€ṗ4j€”.ċ

102564=4294967296

16256

কিভাবে?

⁹ḶṾ€ṗ4j€”.ċ - Link: list of characters, S
⁹           - literal 256
 Ḷ          - lowered range = [0,1,2,...,254,255]
  Ṿ€        - unevaluate €ach = ['0','1',...,['2','5','4'],['2','5','5']]
    ṗ4      - 4th Cartesian power = ALL 256^4 lists of 4 of them
            -               (e.g.: ['0',['2','5','5'],'9',['1','0']])
        ”.  - literal '.' character
      j€    - join for €ach (e.g. ['0','.','2','5','5','.','9','.','1','0'] = "0.255.9.10")
          ċ - count occurrences of right (S) in left (that big list)

কেন 65,536 আইপি সহ সংস্করণটি 1.8 সেকেন্ড সময় নেয়? o_O
ডেনিস

2

রেটিনা , 42 41 বাইট

~(K`

255*
["^(("|'|]")\.?\b){4}$"L$`
$.`

এটি অনলাইন চেষ্টা করুন! @ নলহ্নহোফের পার্ল answer উত্তরের আগের সংস্করণের উপর ভিত্তি করে @ ডিডকোডের উত্তর \.?\bথেকে ট্রিকটি চুরি করে 1 বাইট সংরক্ষণ করা হয়েছে । ব্যাখ্যা:

K`

কাজের ক্ষেত্র সাফ করুন।

255*

255 টি অক্ষর .োকান।

["^(("|'|]")\.?\b){4}$"L$`
$.`

জেনারেট করুন পরিসীমা 0..255 দিয়ে পৃথক |, s এর সাথে পূর্বে সমাধান ^((এবং suffixed সঙ্গে )\.?\b){4}$, এইভাবে রেগুলার এক্সপ্রেশন নির্মাণের ^((0|1|...255)\.?\b){4}$

~(

মূল ইনপুটটিতে এটি মূল্যায়ন করুন।


1

পিপ , 25 16 বাইট

a~=X,256RL4J"\."

কমান্ড-লাইন আর্গুমেন্ট হিসাবে প্রার্থীর আইপি ঠিকানা নেয়। এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

Regex সমাধান, মূলত পুনরাবৃত্তির স্ট্যাক্স উত্তরের একটি বন্দর ।

                  a is 1st cmdline arg (implicit)
    ,256          Range(256), i.e. [0 1 2 ... 255]
   X              To regex: creates a regex that matches any item from that list
                  i.e. essentially `(0|1|2|...|255)`
        RL4       Create a list with 4 copies of that regex
           J"\."  Join on this string
 ~=               Regex full-match
a                 against the input

1

জাভাস্ক্রিপ্ট, 89 বাইট

(_,r=`(${[...Array(256).keys()].join`|`})`)=>RegExp(`^${(r+'\\.').repeat(3)+r}$`).test(_)

এটি অনলাইন চেষ্টা করুন!

রেঞ্জের সাথে যোগ হওয়া এবং পালানো চরিত্রের পরে RegExpথাকা অ্যারের সূচকগুলি থেকে ক্যাপচার গ্রুপগুলি তৈরি করুন ( ) বারবার বারে যোগ হওয়া অ্যারের সাথে বন্ধ হয়ে তারপরে স্ট্রিং, রিটার্ন বা পাসের ইনপুটটির ফলাফলের সাথে মিলিত হয় ।length 2560-255|.^(0|1...|255)\.(0|1...|255)\.(0|1...|255)\.(0|1...|255)$3$truefalseRegExp.prototype.test()

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.