ওয়ার্ল্ড আইপিভি 6 দিন 2014


22

ওয়ার্ল্ড আইপিভি day দিনের বার্ষিকী উপলক্ষে , ইন্টারনেট সোসাইটি এক জুনের জন্য June জুন ২০১৪-এ আইপিভি 4 অফ করার একটি প্রচার প্রচার করেছে ।


আইপিভি 6 ঠিকানাগুলি তাদের দীর্ঘ আকারে আটটি কোলন-বিভক্ত 16-বিট হেক্স মান হিসাবে উপস্থাপিত হতে পারে। ঠিকানার উপর ভিত্তি করে, এগুলি বিভাগ 2.2 এর আইটেম 2 তে বর্ণিত হিসাবে সংক্ষিপ্তও করা যেতে পারে আরএফসি 3513 এর ঠিকানাগুলির পাঠ্য উপস্থাপনা :

শূন্য বিট সমেত লিখিত ঠিকানাগুলি সহজ করার জন্য শূন্যগুলি সঙ্কুচিত করার জন্য একটি বিশেষ সিনট্যাক্স পাওয়া যায়। "::" এর ব্যবহার 16 বিটের এক বা একাধিক গ্রুপকে নির্দেশ করে। "::" কেবল একবার ঠিকানায় উপস্থিত হতে পারে। "::" কোনও ঠিকানায় শীর্ষস্থানীয় বা পিছনের শূন্যগুলি সংকুচিত করতেও ব্যবহার করা যেতে পারে।

  • এই প্রতিদ্বন্দ্বিতা এন্ট্রি প্রোগ্রাম ঠিক একটি IPv6 ঠিকানা পারেন দীর্ঘ বা সংক্ষিপ্ত বিন্যাসে ফরম্যাট গ্রহণ হবে, এবং একই ঠিকানা প্রদর্শন করা হবে উভয় যাতে, দীর্ঘ ও স্বল্প মেয়াদী ফরম্যাটের।

  • ইনপুটটি কমান্ড-লাইন আর্গুমেন্ট, এসটিডিআইএন বা অন্য কোনও ইনপুট উত্স থেকে আসতে পারে যা আপনার পছন্দমত ভাষা পছন্দ করে।

  • আইপিভি 6 অ্যাড্রেসগুলি পার্স করার জন্য গ্রন্থাগারগুলি বা ইউটিলিটিগুলি নিষিদ্ধ করা হয়েছে (যেমন inet_ {n ট্যাপ, পিটন} () )।

  • যদি ইনপুট ঠিকানাটি অবৈধ হয় তবে আউটপুট ফাঁকা থাকবে (বা ঠিকানার অবৈধ নির্দেশ করে এমন কিছু উপযুক্ত ত্রুটি বার্তা দেওয়া হয়েছে)

  • যেসব ক্ষেত্রে ::সংক্ষিপ্তকরণ ঘটে থাকে সেখানে প্রদত্ত ঠিকানার জন্য কেবল একটি সংক্ষিপ্তকরণ অপারেশন ঘটতে পারে। যদি কোনও প্রদত্ত ঠিকানার জন্য একাধিক সংক্ষিপ্ত সংক্ষিপ্ততর অপারেশন থাকে তবে সামগ্রিকভাবে সংক্ষিপ্ততম ঠিকানা দেয় এমন ক্রিয়াকলাপ অবশ্যই ব্যবহার করা উচিত। এই বিষয়ে যদি কোনও টাই থাকে তবে প্রথম অপারেশনটি ব্যবহার করা হবে। এটি নীচের উদাহরণগুলিতে চিত্রিত হয়।

  • স্ট্যান্ডার্ড লুফোলগুলি এড়ানো হবে

উদাহরণ:

Input                         Output

1080:0:0:0:8:800:200C:417A    1080:0:0:0:8:800:200C:417A
                              1080::8:800:200C:417A

FF01::101                     FF01:0:0:0:0:0:0:101
                              FF01::101

0:0:0:0:0:0:0:1               0:0:0:0:0:0:0:1
                              ::1

::                            0:0:0:0:0:0:0:0
                              ::

1:0:0:2:0:0:0:3               1:0:0:2:0:0:0:3
                              1:0:0:2::3

1:0:0:8:8:0:0:3               1:0:0:8:8:0:0:3
                              1::8:8:0:0:3

1:2:3:4:5:6:7:8               1:2:3:4:5:6:7:8
                              1:2:3:4:5:6:7:8

ABCD:1234                     <Invalid address format - no output>

ABCDE::1234                   <Invalid address format - no output>

1:2:3:4:5:6:7:8:9             <Invalid address format - no output>

:::1                          <Invalid address format - no output>

codegolf puzzle               <Invalid address format - no output>

এটি , তাই June ই জুন ২০১৪-তে বাইটের সংক্ষিপ্ত উত্তরটি বিজয়ী হিসাবে স্বীকৃত হবে।


ইনপুটটি বলুন 1:0:0:2:2::3। সংক্ষিপ্ত আউটপুট কি সেইরকম হবে নাকি 1::2:2:0:0:3? অপরিচ্ছন্নভাবে সংক্ষিপ্ত ইনপুটটির জন্য একই।
মার্টিন এন্ডার

@ m.buettner এই ক্ষেত্রে, আমি আপনাকে বাছাই করতে দেব।
ডিজিটাল ট্রমা

কি 1::2:0:0:0:3একটি সম্ভাব্য ইনপুট?
ব্যবহারকারী 12205


2
আমি মনে করি এটিই কেবল একমাত্র উপায় যেটি আমাকে আইপিভি 6 শিখিয়ে আনতে চলেছে। +1
বিবাদ

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6) - 198 , 183 , 180 , 188 , 187 বাইট

f=s=>/^(:[\da-f]{1,4}){8}$/i.test(':'+(s=s[r='replace'](d='::',':0'.repeat((n=8-s.split(/:+/).length%9)||1)+':')[r](/^:0|0:$/g,n?'0:0':0)))&&[s,s[r](/(\b0(:0)*)(?!.*\1:0)/,d)[r](/::+/,d)]

এবং কিছুটা দীর্ঘতর, কিছু পপ-আপগুলি (203 বাইট) সহ ইন্টারেক্টিভ সংস্করণ:

/^(:[\da-f]{1,4}){8}$/i.test(':'+(s=(s=prompt())[r='replace'](d='::',':0'.repeat((n=8-s.split(/:+/).length%9)||1)+':')[r](/^:0|0:$/g,n?'0:0':0)))&&alert(s+'\n'+s[r](/(\b0(:0)*)(?!.*\1:0)/,d)[r](/::+/,d))

Ungolfed:

function ipv6(str) {
    "use strict";
    var zeros = 8 - str.split(/:+/).length % 9

        ,longIP = str
            .replace('::', ':0'.repeat(zeros || 1) + ':')
            .replace(/^:0|0:$/g, zeros ? '0:0' : '0')

        ,shortIP = longIP
            .replace(/(\b0(:0)*)(?!.*\1:0)/,':')
            .replace(/::+/,'::');

    return /^(:[\da-f]{1,4}){8}$/i.test(':'+longIP) && [longIP, shortIP];
}

ব্যাখ্যা:

IPv6 ঠিকানার দীর্ঘ সংস্করণ গণনা করতে:

8 - str.split(/:+/).length % 9- আমাদের কয়টি শূন্য toোকাতে হবে তা গণনা করুন। তারা 8 - হেক্সের মানগুলির সংখ্যা। এখানে% 9 জন প্রহরী তাই এটি কখনও নেতিবাচক সংখ্যা হবে না।

replace('::', ':0'.repeat(zeros || 1) + ':')- "" :: কোলন দ্বারা পৃথক শূন্যগুলির সাথে প্রতিস্থাপন করুন। যদি যোগ করার জন্য কোনও জিরো না থাকে তবে এটি এখনও যুক্ত করে তাই শেষ পর্যন্ত ঠিকানাটি বৈধ হবে না

replace(/^:0|0:$/g, zeros ? '0:0' : '0')- যখন ঠিকানাটি "::" দিয়ে শুরু হয় বা শেষ হয় তখন splitহেক্স মানগুলির সংখ্যায় 1 যুক্ত করে (:: 1 -> ["", "1"]) এটি বিশেষ ক্ষেত্রে মোকাবেলা করে)

এটাই! এখন আসুন সংক্ষিপ্ত রূপটি গণনা করুন:

replace(/(\b0(:0)*)(?!.*\1:0)/,':') - দীর্ঘস্থায়ী জিরো সারিটি কোলন (গুলি) দিয়ে প্রতিস্থাপন করুন (এটি কতজনই নয়)।

replace(/::+/,'::') - কোনও অতিরিক্ত কলোন অপসারণ করুন

return /^(:[\da-f]{1,4}){8}$/i.test(':'+longIP) && [longIP, shortIP];- দীর্ঘ সংস্করণটি বৈধ আইপিভি 6 হয় কিনা পরীক্ষা করুন এবং উভয় সংস্করণ ফিরিয়ে দিন বা falseপরীক্ষায় ব্যর্থ হলে।

ফায়ারফক্সে পরীক্ষা:

>>> f('1080:0:0:0:8:800:200C:417A')
["1080:0:0:0:8:800:200C:417A", "1080::8:800:200C:417A"]
>>> f('FF01::101')
["FF01:0:0:0:0:0:0:101", "FF01::101"]
>>> f('0:0:0:0:0:0:0:1')
["0:0:0:0:0:0:0:1", "::1"]
>>> f('::')
["0:0:0:0:0:0:0:0", "::"]
>>> f('1:0:0:2:0:0:0:3')
["1:0:0:2:0:0:0:3", "1:0:0:2::3"]
>>> f('1:0:0:8:8:0:0:3')
["1:0:0:8:8:0:0:3", "1::8:8:0:0:3"]
>>> f('1:2:3:4:5:6:7:8')
["1:2:3:4:5:6:7:8", "1:2:3:4:5:6:7:8"]
>>> f('ABCD:1234')
false
>>> f('ABCDE::1234')
false
>>> f('1:2:3:4:5:6:7:8:9')
false
>>> f(':::1')
false
>>> f('1:2:3:4::a:b:c:d')
false
>>> f('codegolf puzzle')
false

আমার চেয়ে অনেক ভাল! এই জাতীয় ইনপুট হ্যান্ডেল করতে কেবল কিছু সংশোধন প্রয়োজন: 1 :,: 1 ::
edc65

এই একটি 1:2:3:4::a:b:c:d
২১:০৫

6

জাভাস্ক্রিপ্ট (E6) 246 305 284 292 319

ভারিভাবে সংশোধিত বিশেষ কেস :: এর জন্য বিশেষভাবে পরিচালিত, সংকোচনের ধাপটি লুপের জন্য এড়ানো হয় (তবে খুব প্রকৃতপক্ষে খুব কম নয়) আমি নিশ্চিত যে চূড়ান্ত সংকোচন পর্বকে আরও সংক্ষিপ্ত করা যায়। এখন নেই

F=i=>(c=':',d=c+c,z=':0'.repeat(9-i.split(c,9).length)+c,i=i==d?0+z+0:i[R='replace'](/^::/,0+z)[R](/::$/,z+0)[R](d,z>c?z:d),/^(:[\da-f]{1,4}){8}:$/i.test(k=c+i+c)&&[i,k[R]((k.match(/:(0:)+/g)||[]).sort().pop(),d)[R](/^:([^:])|([^:]):$/g,'$1$2')])

Nderscore ধন্যবাদ

প্রোগ্রাম হিসাবে

মূলত জেএস পপআপ ব্যবহার করে ইনপুট এবং আউটপুট: p=prompt,p(F(p())) পপআপ দিয়ে এবং ফাংশন সংজ্ঞা ব্যতীত পুনর্লিখন, চর গণনাটি 260 এর নিচে হওয়া উচিত

অসমাপ্ত এবং কিছু মন্তব্য

F = i => (
  c = ':',
  d = c+c,
  z = ':0'.repeat(9-i.split(c,9).length) + c, 
  i = i == d ? 0+z+0 /* special case '::' */
    : i.replace(/^::/,0+z) /* special case '::...' */
       .replace(/::$/,z+0) /* special case '...::' */
       .replace(d, z > c ? z : d), /* here, if z==c, not valid: too much colons */
  /^(:[\da-f]{1,4}){8}:$/i.test(k = c+i+c) /* Check if valid */
  && [
   i, 
   k.replace((k.match(/:(0:)+/g)||[]).sort().pop(),d) /* find longest 0: sequence and replace it */
    .replace(/^:([^:])|([^:]):$/g,'$1$2') /* cut leading and trailing colons */
  ]
)

টেস্ট কনসোলে

i=['1080:0:0:0:8:800:200C:417A'
, '::1:2:3:4:5:6:7', '1:2:3:4:5:6:7::'
, '1:2:3:4::5:6:7:8'
, ':1:2:3:4:5:6:7', '1:2:3:4:5:6:7:'
, 'FF01::101', '0:0:0:0:0:0:0:1'
, '::', '1::', '::1', ':::1', '1:::'
, '1:0:0:2:0:0:0:3', '1:0:0:0:2:0:0:3', '1::8:0:0:0:3'
, '1:2:3:4:5:6:7:8'
, 'ABCD:1234', 'ABCDE::1234', ':::', '::::::::::'
, '1:2:3:4:5:6:7:8:9', '::::1', 'codegolf puzzle'];
i.map(x=>x+' => '+F(x)).join('\n')

টেস্ট আউটপুট

"1080:0:0:0:8:800:200C:417A => 1080:0:0:0:8:800:200C:417A,1080::8:800:200C:417A
::1:2:3:4:5:6:7 => 0:1:2:3:4:5:6:7,::1:2:3:4:5:6:7
1:2:3:4:5:6:7:: => 1:2:3:4:5:6:7:0,1:2:3:4:5:6:7::
1:2:3:4::5:6:7:8 => false
:1:2:3:4:5:6:7 => false
1:2:3:4:5:6:7: => false
FF01::101 => FF01:0:0:0:0:0:0:101,FF01::101
0:0:0:0:0:0:0:1 => 0:0:0:0:0:0:0:1,::1
:: => 0:0:0:0:0:0:0:0,::
1:: => 1:0:0:0:0:0:0:0,1::
::1 => 0:0:0:0:0:0:0:1,::1
:::1 => false
1::: => false
1:0:0:2:0:0:0:3 => 1:0:0:2:0:0:0:3,1:0:0:2::3
1:0:0:0:2:0:0:3 => 1:0:0:0:2:0:0:3,1::2:0:0:3
1::8:0:0:0:3 => 1:0:0:8:0:0:0:3,1:0:0:8::3
1:2:3:4:5:6:7:8 => 1:2:3:4:5:6:7:8,1:2:3:4:5:6:7:8
ABCD:1234 => false
ABCDE::1234 => false
::: => false
:::::::::: => false
1:2:3:4:5:6:7:8:9 => false
::::1 => false
codegolf puzzle => false"   

আমি বরং একটি ফাংশন চেয়ে একটি প্রোগ্রাম চাই। আমি জাভাস্ক্রিপ্ট ভাল জানি না এটি সম্ভব কিনা তা জানার জন্য।
ডিজিটাল ট্রমা

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

এটি থেকে ইনপুট নিয়ে একটি প্রোগ্রাম তৈরি করা যেতে পারে prompt()। এখানে কিছু অপ্টিমাইজেশন রয়েছে যা এটিকে 290 এ নামিয়েছে
nderscore

@nderscore: thx, 1 ম প্রতিস্থাপন ইনপুট = '::' এর জন্য কাজ করে না, যাইহোক দুর্দান্ত কাজ!
edc65

@ edc65 আমি এই প্রতিস্থাপনের জন্য একটি সমাধান পেয়েছি :) pastie.org/private/kee0sdvjez0vfcMLvaxu8q
nderscore

4

পার্ল - 204 176 190 191 197

( -pপতাকার জন্য ২০২ টি +2 + টি )

$_=uc;(9-split/:/)||/^:|:$/||last;s/^::/0::/;s/::$/::0/;s|::|':0'x(9-split/:/).':'|e;/::|^:|:$|\w{5}|[^A-F0-:].*\n/||(8-split/:/)and last;s/\b0*(?!\b)//g;print;s/\b((0:)*0)\b(?!.*\1:0\b)/::/;s/::::?/::/

উদাহরণ:

$ perl -p ipv6.pl <<< 1:0:2:0::3
1:0:2:0:0:0:0:3
1:0:2::3
$ perl -p ipv6.pl <<< somethinginvalid
$ perl -p ipv6.pl <<< 1:2:0:4:0:6::8
1:2:0:4:0:6:0:8
1:2::4:0:6:0:8

ব্যাখ্যা:

# -p reads a line from stdin and stores in $_
#
# Convert to uppercase
$_ = uc;

# Detect the annoying case @kernigh pointed out
(9 - split /:/) || /^:|:$/ || last;

# Fix :: hanging on the beginning or the end of the string
s/^::/0::/;
s/::$/::0/;

# Replace :: with the appropriate number of 0 groups
s|::|':0' x (9 - split /:/) . ':'|e;

# Silently exit if found an extra ::, a hanging :, a 5-char group, an invalid
# character, or there's not 8 groups
/::|^:|:$|\w{5}|[^A-F0-:].*\n/ || (8 - split /:/) and last;

# Remove leading zeros from groups
s/\b0*(?!\b)//g;

# Output the ungolfed form
print;

# Find the longest sequence of 0 groups (a sequence not followed by something
# and a longer sequence) and replace with ::
# This doesn't replace the colons around the sequence because those are optional
# thus we are left with 4 or 3 colons in a row
s/\b((0:)*0)\b(?!.*\1:0\b)/::/;

# Fix the colons after previous transformation
s/::::?/::/

# -p then prints the golfed form of the address

1
"Ipv6.pl লাইন 1, <> লাইন 1 এ মারা গেছে" । এই প্রশ্ন মন্তব্যে সম্পর্কে জিজ্ঞাসা করা হয়েছিল। যদি কোনও বার্তা থাকে তবে এটি অবশ্যই স্পষ্ট হতে হবে যে এটি কোনও অবৈধ বার্তার কারণে। আমি প্রশ্নে তা পরিষ্কার করার চেষ্টা করেছি। নাহলে ভাল লাগছে!
ডিজিটাল ট্রমা

1
@ ডিজিটালট্রামা dieএকটি নীরব প্রস্থানটিতে পরিবর্তন হয়েছে।
mniip

1
একটি বাগ? এই প্রোগ্রামটি অবৈধ ঠিকানা গ্রহণ করে 1:2:3:4::a:b:c:d। এটি একটি বিরক্তিকর বিশেষ মামলা, কারণ বেশিরভাগ আট-কোলনের ঠিকানাগুলি অবৈধ, ::2:3:4:a:b:c:dএবং 1:2:3:4:a:b:c::উভয়ই বৈধ।
কর্নিগ

3

সেড, 276

আমার ipshorten.sed এ 275 বাইট রয়েছে, বর্ধিত নিয়মিত এক্সপ্রেশন ব্যবহার করতে -rস্যুইচ ইন sed -rfকরার জন্য 1 বাইট রয়েছে । আমি ওপেনবিএসডি সেড ব্যবহার করেছি (1)

ব্যবহার: echo ::2:3:4:a:b:c:d | sed -rf ipshorten.sed

s/^/:/
/^(:[0-9A-Fa-f]{0,4})*$/!d
s/:0*([^:])/:\1/g
s/://
s/::/:=/
s/(.:=)(.)/\10:\2/
s/^:=/0&/
s/=$/&0/
:E
/(.*:){7}/!{/=/!d
s//=0:/
bE
}
s/=//
/^:|::|:$|(.*:){8}/d
p
s/.*/:&:/
s/:((0:)+)/:<\1>/g
:C
s/0:>/>0:/g
/<0/{s/<>//g
bC
}
s/<>(0:)+/:/
s/<>//g
/^::/!s/://
/::$/!s/:$//

আমি 22 নিয়মিত এক্সপ্রেশন ব্যবহার করি, কারণ সেড সংখ্যার তুলনা করতে বা অ্যারে করতে পারে না। ইনপুট প্রতিটি লাইন জন্য, কমান্ড চালায় এবং লাইন মুদ্রণ। পরীক্ষার সময়, আমি একটি ফাইলে কথিত আইপি ঠিকানার বেশ কয়েকটি লাইন রেখেছি এবং এই ফাইলটি সিডে খাওয়িয়েছি। প্রসারিত নিয়মিত এক্সপ্রেশনগুলির একটি রেফারেন্স পুনরায় ফর্ম্যাট (7) এ

  1. s/^/:/লাইনের শুরুতে একটি অতিরিক্ত কোলন যুক্ত করে। আমি এই অতিরিক্ত কোলনটি পরবর্তী দুটি কমান্ড গল্ফ করতে ব্যবহার করি।
  2. /^(:[0-9A-Fa-f]{0,4})*$/!dপুরো লাইনটি শূন্য বা চারটি হেক্সাডেসিমাল অঙ্কের পরে কোলনের শূন্য বা আরও বেশি গ্রুপের সাথে মেলে কিনা তা পরীক্ষা করে। !চেকটিকে অবহেলা করে, তাই dখুব বড় হেক্সাডেসিমাল সংখ্যা বা অবৈধ অক্ষরের সাথে লাইনগুলি মুছে দেয়। যখন dএকটি লাইন মুছে ফেলা হয়, সেড এই লাইনে আর কোনও কমান্ড চালায় না।
  3. s/:0*([^:])/:\1/gপ্রতিটি নম্বর থেকে নেতৃস্থানীয় 0 গুলি মুছুন। এটা পরিবর্তন :0000:0000:হবে :0:0:। আমার অবশ্যই এটি করতে হবে কারণ আমার সংকোচনের লুপটি কেবল একক-অঙ্ক 0 এর সাথে কাজ করে।
  4. s/://অতিরিক্ত কোলন মুছে ফেলা হয়। এটি শুধুমাত্র প্রথম কোলন মুছে দেয়।
  5. s/::/:=/প্রথম পরিবর্তন ::করতে :=। এটি হ'ল পরে কমান্ডগুলি =তার চেয়ে বেশি মিলতে পারে ::এবং তাই =কোলন হিসাবে গণনা করা হয় না। যদি না থাকে তবে ::এই বিকল্পটি নিরাপদে কিছুই করে না।
    • এখন ::অবশ্যই কমপক্ষে একটি 0 করতে হবে, তবে এই 0 রাখার জন্য তিনটি পৃথক কেস রয়েছে।
  6. s/(.:=)(.)/\10:\2/প্রথম মামলা। যদি ::অন্য দুটি চরিত্রের মধ্যে থাকে তবে :=হয়ে যায় :=0:। এটি একমাত্র কেস যা একটি কোলন যুক্ত করে।
  7. s/^:=/0&/দ্বিতীয় মামলা। যদি ::লাইনের শুরুতে থাকে তবে সেখানে 0 রাখুন।
  8. s/=$/&0/::লাইন শেষে জন্য তৃতীয় কেস ।
  9. :E এক্সপেনশন লুপের জন্য লেবেল।
  10. /(.*:){7}/!{/=/!dলাইনে than টিরও কম কমন থাকলে শর্তসাপেক্ষ ব্লক শুরু হয়। পর্যাপ্ত কলোন /=/!dছিল না এমন লাইনগুলি মুছে দেয় ::
  11. s//=0:/একটি কোলন যুক্ত করুন। খালি //শেষ নিয়মিত প্রকাশটি পুনরাবৃত্তি করে, তাই এটি সত্যই s/=/=0:/
  12. bE:Eলুপ চালিয়ে যেতে শাখা ।
  13. }ব্লক বন্ধ করে দেয় এখন লাইনে কমপক্ষে সাতটি কলোন রয়েছে।
  14. s/=//মোছা =
  15. /^:|::|:$|(.*:){8}/dসম্প্রসারণের পরে চূড়ান্ত চেক। এটি নেতৃস্থানীয় কোলনের সাথে লাইনগুলি মুছে ফেলে, একটি অতিরিক্ত ::যা প্রসারিত হয়নি, একটি অনুবর্তনকারী কোলন, বা আট বা ততোধিক কলোন।
  16. p লাইনটি মুদ্রণ করে, যা দীর্ঘ আকারে একটি আইপি ঠিকানা।
  17. s/.*/:&:/ অতিরিক্ত কলোনে ঠিকানা মোড়ানো।
    • পরবর্তী কাজটি হল 0 টির মতো দীর্ঘতম গোষ্ঠীটি পছন্দ করা :0:0:0:এবং এর মধ্যে চুক্তি করা ::
  18. s/:((0:)+)/:<\1>/g0 এর প্রতিটি গ্রুপ খায়, তাই :0:0:0:হয়ে যাবে :<0:0:0:>
  19. :C সংকোচনের লুপের জন্য লেবেল।
  20. s/0:>/>0:/gপ্রতিটি মুখ থেকে একটি 0 সরানো, তাই :<0:0:0:>হয়ে যাবে :<0:0:>0:
  21. /<0/{s/<>//gকোনও মুখ খালি না থাকলে শর্তসাপূর্ণ ব্লক খোলে। s/<>//gসমস্ত খালি মুখ মুছে দেয়, কারণ এই গোষ্ঠীগুলি খুব ছোট short
  22. bC সংকোচনের লুপ অবিরত।
  23. }ব্লক বন্ধ করে দেয় এখন যে কোনও মুখ শূন্য এবং 0 এর দীর্ঘতম দলকে চিহ্নিত করে।
  24. s/<>(0:)+/:/দীর্ঘতম গ্রুপ চুক্তি, তাই :<>0:0:0:হয়ে উঠবে ::। টাইতে, এটি বাম দিকে খালি মুখটি তুলবে।
  25. s/<>//g অন্য কোনও খালি মুখ মুছে দেয়।
  26. /^::/!s/://এটির অংশ না হলে প্রথম অতিরিক্ত কোলন মুছে দেয় ::
  27. /::$/!s/:$//শেষ অতিরিক্ত কোলনের জন্য তাই করে। তারপরে সেড সংক্ষিপ্ত আকারে আইপি ঠিকানা প্রিন্ট করে।

1

পাইথন 3: 387 টি অক্ষর

এমনকি ভুলভাবে সংক্ষিপ্ত ইনপুট নিয়ে কাজ করে।

$ echo '1::2:0:0:0:3' | python3 ipv6.py 
1:0:0:2:0:0:0:3
1:0:0:2::3

ডবল পরিবর্তে ':::'সঙ্গে '::'মতানুযায়ী সত্যিই খারাপ কিন্তু নিশ্চিত না 0 এর দীর্ঘতম স্ট্রিং সঙ্গে পরিচ্ছন্নভাবে চুক্তি কিভাবে যখন এটি এক বা উভয় প্রান্ত abuts।

c=':'
p=print
try:
 B=[int(x,16)if x else''for x in input().split(c)];L=len(B)
 if any(B)-1:B=[''];L=1
 if L!=8:s=B.index('');B[s:s+1]=[0]*(9-L)
 for b in B:assert-1<b<2**16
 H=[format(x,'X')for x in B];o=c.join(H);p(o);n=''.join(str(h=='0')[0]for h in H)
 for i in range(8,0,-1):
  s=n.find('T'*i)
  if s>=0:H[s:s+i]=[c*2];p(c.join(H).replace(c*3,c*2).replace(c*3,c*2));q
 p(o)
except:0

চূড়ান্ত প্রতিস্থাপন passসঙ্গে raiseদেখতে এটি কীভাবে তা বিপর্যয় বিকৃত ইনপুট বিরুদ্ধে রক্ষা।

$ cat ipv6-test.sh 
echo '1080:0:0:0:8:800:200C:417A' | python3 ipv6.py
echo '1:2:3:4:5:6:7:8' | python3 ipv6.py
echo 'FF01::101' | python3 ipv6.py
echo '0:0:0:0:0:0:0:1' | python3 ipv6.py
echo '0:0:0:0:1:0:0:0' | python3 ipv6.py
echo '1:0:0:0:0:0:0:0' | python3 ipv6.py
echo '::' | python3 ipv6.py
echo '1:0:0:2:0:0:0:3' | python3 ipv6.py
echo '1::2:0:0:0:3' | python3 ipv6.py
echo '1:0:0:8:8:0:0:3' | python3 ipv6.py
echo 'ABCD:1234' | python3 ipv6.py
echo 'ABCDE::1234' | python3 ipv6.py
echo '1:2:3:4:5:6:7:8:9' | python3 ipv6.py
echo ':::1' | python3 ipv6.py
echo 'codegolf puzzle' | python3 ipv6.py
$ ./ipv6-test.sh 
1080:0:0:0:8:800:200C:417A
1080::8:800:200C:417A

1:2:3:4:5:6:7:8
1:2:3:4:5:6:7:8

FF01:0:0:0:0:0:0:101
FF01::101

0:0:0:0:0:0:0:1
::1

0:0:0:0:1:0:0:0
::1:0:0:0

1:0:0:0:0:0:0:0
1::


0:0:0:0:0:0:0:0
::

1:0:0:2:0:0:0:3
1:0:0:2::3

1:0:0:2:0:0:0:3
1:0:0:2::3

1:0:0:8:8:0:0:3
1::8:8:0:0:3

@ ডিজিটালট্রামা সংশোধন করেছেন। আমি "0: 0: 0 ..." অনুসন্ধান করছিলাম এবং এটি 0 এর পিছনে ক্যাপচার করছিল
নিক টি

আপনি আজকাল "আউটসুট" শব্দটি সত্যিই শুনতে পান না
ক্লাডিউ

একটি বাগ? এই প্রোগ্রামটি গৃহীত 1:2:3:4::a:b:c:dকিন্তু প্রত্যাখ্যাত উভয় ::2:3:4:a:b:c:dএবং 1:2:3:4:a:b:c::। আমি বিশ্বাস করি এটি তিনবারই ভুল ছিল।
কর্নিগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.