সমস্ত আইপিভি 6 ঠিকানা মুদ্রণ করুন


45

এটি আমাকে স্মরণ করিয়ে দেয় যখন কয়েক বছর আগে কেউ একটি টরেন্ট "হ্যাকার সরঞ্জাম: সমস্ত আইপি ঠিকানাগুলির সম্পূর্ণ তালিকা" আপলোড করে। এটি অবশ্যই ~ 4 বিলিয়ন আইপিভি 4 ঠিকানার একটি উত্পন্ন তালিকা ছিল, তবে হাজার হাজার "এইচ 4 xxx0rz" এটি ডাউনলোড করেছে। আম্মু, ইমাহ্যাকার চেহারা!

এটি তখন ছিল তবে আজকাল প্রত্যেকে আইপিভি 6 এ চলে গেছে । (রাইট?)

আপনার কাজ হ'ল একটি প্রোগ্রাম লিখুন যা সমস্ত আইপিভি 6 ঠিকানা ছাপে

আপনার এমন একটি সম্পূর্ণ প্রোগ্রাম লিখতে হবে যা কোনও ইনপুট নেয় না এবং আইপিভি 6 ঠিকানা, প্রতি লাইনে একটি, এবং অন্য কোনও আউটপুট প্রিন্ট করে না। আপনার প্রোগ্রামটি অবশ্যই অবৈধগুলি সহ সমস্ত 128 টি সম্ভাব্য ঠিকানা মুদ্রণ করবে । প্রতিটি ঠিকানা অবশ্যই একবার মুদ্রিত করা আবশ্যক। আপনি কোনও ক্রমে ঠিকানাগুলি মুদ্রণ করতে পারেন।

প্রতিটি ঠিকানা পূর্ণরূপে মুদ্রিত হতে পারে, 4 টি হেক্সাডেসিমাল অঙ্কের 8 টি দলকে কলোন দ্বারা পৃথক করা হয়েছে, যেমন

2001:0db8:85a3:0000:0000:8a2e:0370:7334

আপনি, নিজের বিবেচনার ভিত্তিতে, আরএফসি 5952 থেকে স্ট্যান্ডার্ড সংক্ষেপগুলির যে কোনওটি ব্যবহার করতে পারেন :

  • একটি গোষ্ঠীর শীর্ষস্থানীয় শূন্যগুলি বাদ দেওয়া যেতে পারে, এ ছাড়া এটি 0আরও সংক্ষেপে সংক্ষেপে বলা যায় না।
  • :: এক বা একাধিক সমস্ত শূন্য গোষ্ঠীর ক্রম সংক্ষেপে সংক্ষিপ্তসার হিসাবে ঠিকানার জন্য একবারে একবারে ব্যবহার করা যেতে পারে।
  • হেক্সাডেসিমাল অঙ্কগুলি ছোট হাতের বা বড় হাতের অক্ষর ব্যবহার করতে পারে।

যদি আপনি আরএফসি 5952 (কেবলমাত্র ছোট অক্ষরগুলি, সংক্ষিপ্ততম সম্ভব উপস্থাপনা, ::যেখানে এটি ব্যবহার করা যেতে পারে এমন একাধিক জায়গাগুলি থাকলে ব্যবহার করা যায়) এর মাধ্যমে উপস্থাপনের প্রস্তাবটি অর্জন করেন , আপনি একটি -20% বোনাস পাবেন

আউটপুট আকারের কারণে, আমরা সেখানে বসে থাকাকালীন আপনার প্রোগ্রামটি শেষ হওয়ার আশা করা যায় না। আপনার প্রোগ্রামটি কোনও সময়ে বাহ্যিক উপায়ে বাধাগ্রস্ত হতে পারে ( Ctrl+ C, শক্তি টানছে,…)। আপনার প্রোগ্রামটিকে অবশ্যই স্ট্রিম হিসাবে আউটপুট উত্পাদন করতে হবে, যাতে "যুক্তিসঙ্গত" অপেক্ষা করার পরে এটি কিছু লাইন তৈরি করতে পারে। মূলত, কেবল শেষে এটি মুদ্রণের জন্য মেমরিতে একটি বিশাল স্ট্রিং তৈরি করার অনুমতি নেই। যে কোনও প্রোগ্রাম যা "স্ট্যান্ডার্ড" পিসিতে মেমরির বাইরে চলে যায় তাকে অযোগ্য ঘোষণা করা হয়। (তা সত্ত্বেও, যদি আপনার প্রোগ্রামটি পর্যাপ্ত দীর্ঘকাল ধরে চলতে থাকে তবে এটি অবশ্যই সমস্ত আইপিভি 6 ঠিকানা মুদ্রণ করে প্রস্থান করতে হবে exit)

(যদি এই শর্তটি ওয়েব দোভাষীদের জন্য সমস্যা হয়ে থাকে যা শেষ না হওয়া পর্যন্ত প্রোগ্রামটি চালায় এবং তারপরে আপনাকে আউটপুটটি দেখতে দেয় এবং আপনার কোনও হোস্টেট ইন্টারপ্রেটার না থাকে তবে সমস্যার একটি ছোট সংস্করণে আপনার প্রোগ্রামটি পরীক্ষা করুন, এবং তারপরে সাবধানতার সাথে এটি সামঞ্জস্য করুন পুরো 2 128 এ ।)

আপনার স্কোরটি বাইটে আপনার প্রোগ্রামের দৈর্ঘ্য, বোনাস পেলে ০.৮ দ্বারা গুণিত। এটি কোড গল্ফ, তাই সর্বনিম্ন স্কোর জেতে।


22
এটি 5.445 * 10¹⁵ ইয়োটাবাইট। এই সমস্ত ডেটা সংরক্ষণ করার জন্য, আপনার কমপক্ষে 15 টি আকারের ডেটাসেন্টার প্রয়োজন যা হার্ড ড্রাইভগুলি যতটা সম্ভব শক্তভাবে প্যাক করা ছাড়া কিছুই নয়। এটি একটি বড় টরেন্ট .....
কাজ ওল্ফ

7
@ আমার সম্পর্কে আমি ভাবছি যে ফাইলটি কতটা ছোট আকারে সংকুচিত হবে (যদিও জিজিপের মতো কিছু জেনেরিক সংক্ষেপণ ব্যবহার করে)।
SztupY

35
@ স্পটুপওয়াই: দৃশ্যত আউটপুটটি 25 বাইটে সংকোচিত করা যায় (ডিকম্প্রেশন অ্যালগরিদম = একটি পাইথ ইন্টারপ্রেটার, সংক্ষেপণ অ্যালগরিদম = পিপিসি-তে পোস্ট করা) এই সাইটে লুকানো থেকে মনে হয় পাইথ একটি বরং জেনেরিক সংকোচিত বিন্যাস।
বেন ভয়েগট

3
আমার অভিজ্ঞতায়, @ গিলস হ'ল একটি বাস্তব হেভিওয়েট! আপনি আমাদের ছোট পিপিসিজি কর্নারে এসও নিয়ে প্রশ্ন আনতে দেখে আনন্দিত! নেটওয়ার্কিং সম্পর্কিত প্রশ্নগুলি দেখতে আমার জন্য মজাদার।
ডিজিটাল ট্রমা

5
এটি আমাকে এসও সম্পর্কিত "সমস্ত সম্ভাব্য জিইউইডিগুলির ওপরে পুনরাবৃত্তি" প্রশ্নের মনে করিয়ে দেয়।
মাইক দ্য লাইয়ার

উত্তর:


5

পাইথ, 21 বাইট

KJ^8CdWJj\:ct.H+K=tJ4

Jপুনরুক্তি পরিবর্তনশীল হিসাবে কিছুক্ষণ লুপ ব্যবহার করে । সর্বাধিক ব্যবহার শুরু করে 8^chr(' ')। সেই প্রাথমিক মান যুক্ত করে প্যাডগুলি হেক্সে রূপান্তরিত করে, তারপরে প্রথম অক্ষরটি সরিয়ে ফেলুন।


এই কোডটি দেখে মনে হচ্ছে যেন কেউ তাদের কীবোর্ডে হাঁচি ফেলেছে, তারপরে এটি পরিষ্কার করার চেষ্টা করেছিল।
ডার্কস্কি

@ দার্কসকি এটি আপনার জন্য গল্ফল্যাংসগুলি রয়েছে: পি
এসোসোলিং ফল

50

পাইথন 3, 65 বাইট · 0.8 = 52.0

from ipaddress import*
n=4**64
while n:n-=1;print(IPv6Address(n))

7
ডাঙ অজগর! এটি সর্বদা সঠিক পদ্ধতি আছে! : ডি
মেয়রমন্টি

ipaddressঅজগর 3 শুধুমাত্র।

@ হারিকেন৯৯6, হ্যাঁ, আমি পাইপিয়ন থেকে পাইথন ২ এ এটি ব্যবহার করে আসছিলাম যে এটি কেবল পাইথন ৩-এর স্ট্যান্ডার্ড লাইব্রেরিতে প্রবেশ করেছে তাই আমি একটি বাইট ব্যয়ে এটি পাইথন 3 এ স্যুইচ করেছি।
অ্যান্ডারস কাসের্গ

@MDXF পাইথন আছে না ++ অথবা - অপারেটার
Draconis

14

পাইথ, 27 25 24 বাইট

দ্রষ্টব্য: কোডটিতে আগে একটি বাগ ছিল, এটি 1 বাইট সংরক্ষণ করে ফিক্স করে

J^4 64WJj\:c%"%032x"=tJ4

মত ঠিকানা মুদ্রণ

ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe
ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffd
ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc
...
0000:0000:0000:0000:0000:0000:0000:0003
0000:0000:0000:0000:0000:0000:0000:0002
0000:0000:0000:0000:0000:0000:0000:0001
0000:0000:0000:0000:0000:0000:0000:0000

প্যাড অপারেটর (আরও 24 বাইট) ব্যবহার করে পূর্ববর্তী (আরও জটিল) সংস্করণ:

J^4 64WJj\:c.[\032.H=tJ4

ব্যাখ্যা

J^4 64                  set J to 2^128
WJ                     while J is not 0:
            =tJ               decrement J
    %"%032x"                 format to length-32 hex string
   c           4            split every 4 chars
j\:                        join by : and print

পাইথ, 21 বাইট (অবৈধ)

jmj\:c.[\032.Hd4^4 64

এটি 1 সাল থেকে চালানো যাবে না) এটি কমপক্ষে 2 132 বাইট (2 52 ইওবাইট) মেমরি গ্রহণ করবে এবং 2) দোভাষী তার পছন্দ হয় না (2 128 ফিট করে না ssize_t, সুতরাং listআকারের কোনও আকার নেই) । এটি লিক্সোগ্রাফিকাল ক্রমে ঠিকানাগুলি মুদ্রণ করবে। আপনি ব্যবহারযোগ্য কিছুতে শেষে নম্বর (গুলি) পরিবর্তন করে অ্যালগরিদম ব্যবহার করে দেখতে পারেন।


1
কী সম্পর্কে ... " " মানক "পিসিতে মেমরির বাইরে চলে এমন কোনও প্রোগ্রাম অযোগ্য ঘোষণা করা হয়েছে" " ?
টেসেল্ল্যাটিংহেকলার

2
পুনঃটুইটটি চালানো হবে না দ্বিতীয়টি আমি স্পষ্টভাবে অবৈধ হিসাবে চিহ্নিত করেছি।
পূর্কাকাডারী

12

সি (জিসিসি এক্সটেনশন সহ), 76 বাইট * 0.8 = 60.8

__uint128_t i;main(){char s[50];for(;inet_ntop(10,&i,s,49),puts(s),++i>0;);}

এই ব্যবহার 128-বিট ইন্টিজার জিসিসি এক্সটেনশন কেবল থেকে গণনা ::করা ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffinet_ntop()প্রতিটি ঠিকানা সঠিকভাবে ফর্ম্যাট করে যাতে -20% বোনাস দাবি করা যায়।

আউটপুট

sedপ্রতি মিলিয়নতম লাইনে 1 মিলিয়ন অবধি আউটপুট ব্যবহার করা:

$ ./ipv6all | sed -n '1~1000000p;10000000q'
::
4042:f00::
8084:1e00::
c0c6:2d00::
9:3d00::
404b:4c00::
808d:5b00::
c0cf:6a00::
12:7a00::
4054:8900::
$ 

দ্রষ্টব্য আমি একটি সামান্য এন্ডিয়ান x86_64 মেশিন ব্যবহার করছি, এবং সেই নেটওয়ার্ক ঠিকানাগুলি সর্বদা নেটওয়ার্ক-ক্রমে (বিগ-এন্ডিয়ান) থাকে, তাই এন্ডিয়ানাটি কার্যকরভাবে ব্যবহার করে অদলবদল করা হয় inet_ntop()। এটি কোনও বিষয় নয় - সমস্ত ঠিকানা এখনও (শেষ পর্যন্ত) প্রদর্শিত হবে।


11

সিজেম, 36 27 বাইট

G32#{(_"%032x"e%4/':*oNo}h;

-9 বাইটস @ ডেনিসকে ধন্যবাদ (আমি ভুলে গেছি যে সিজেমে স্ট্রিং ফর্ম্যাটিং রয়েছে)। ঠিকানাগুলি ছোট হাতের এবং উতরাই মুদ্রণ করে।

সুস্পষ্ট কারণে, জাভা দোভাষী ব্যবহার করুন, অনলাইন নয়। G32#অনলাইনে পরীক্ষার জন্য আপনি ছোট কিছু দিয়ে প্রতিস্থাপন করতে পারেন , যেমন এখানে শেষ 100 টি

ব্যাখ্যা

G32#             16^32 = 2^128. Call this n
{ ... }h;        While loop. The final ; is to pop n at the end
 (               Decrement n
 _               Copy n
 "%032x"e%       String format to hex, padded to 32 digits
 4/              Split into groups of 4
 ':*             Join with colons
 oNo             Output with newline

1
কি ধরণের আকর্ষণীয় তা হ'ল অনলাইন অনুবাদক, অবশ্যই আকারটি পরিচালনা করতে সক্ষম না হয়ে ফলাফলটিও ভুল প্রিন্ট করে। আপনি যদি লুপটি সরিয়ে থাকেন এবং কেবল প্রথম মানটি মুদ্রণ করেন তবে এটি মুদ্রণ করে 0000:0000:0000:0000:0000:0000:ffff:ffff। মনে হচ্ছে স্ট্রিং ফর্ম্যাটিংটি অনলাইনে ভিন্নভাবে কাজ করতে পারে। আমি নিশ্চিত করেছি যে এটি অফলাইন সংস্করণে দুর্দান্ত কাজ করে।
রেটো কোরাদি

nহিসাবে একই oNoমধ্যে Tio
এএসওলিং ফল 19

8

পাইথন 2.7, 67 বাইট

n=4**64
while n:n-=1;s='%032x'%n;exec"s=s[4:]+':'+s[:4];"*7;print s

কলোনগুলি সন্নিবেশ করানোর জন্য ব্যবহৃত পদ্ধতির পার্শ্ব প্রতিক্রিয়া হিসাবে, ঠিকানাগুলি বাম দিকে ডানদিকের কলাম সহ প্রিন্ট করা হয়:

ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
fffe:ffff:ffff:ffff:ffff:ffff:ffff:ffff
fffc:ffff:ffff:ffff:ffff:ffff:ffff:ffff
...
0003:0000:0000:0000:0000:0000:0000:0000
0002:0000:0000:0000:0000:0000:0000:0000
0001:0000:0000:0000:0000:0000:0000:0000

1
ঘোরাঘুরি সত্যি ঝরঝরে! এছাড়াও
বিচলিত

3
আপনি যদি বলেন যে ডানদিকের কলামটি বাম দিকে রয়েছে, এটি অবৈধ আইপিভি 6 ঠিকানা মুদ্রণ করছে, তবে কলামগুলি যদি সঠিক জায়গায় থাকে তবে তা [printing] the addresses in any order। ;)
টেসেল্ল্যাটিংহেকলার

7

ভেরিলোগ, 335

আমার প্রথম ভেরিলোগ জমা, সম্ভবত আরও গল্ফিং ব্যবহার করতে পারে তবে এখনই করার মতো শক্তি আমার নেই। cঘড়ি, oASCII আউটপুট হয়। সংক্ষিপ্তসার পরিবর্তে শূন্য-প্যাডিংয়ের কারণে বিন্যাস বোনাসের জন্য যোগ্যতা অর্জন করে না।

module b(output[0:38]o,input c);reg[127:0]a;wire[0:39]d;assign o=d[0:38];always @(posedge c) a<=a+(~(&a));genvar i,j;generate for(i=0;i<8;i=i+1) begin:q for(j=0;j<4;j=j+1) begin:r assign d[5*i+j]=a[16*i+4*j:16*i+4*j+7]>9?{4'h6,a[16*i+4*j:16*i+4*j+7]-9}:{4'h3,a[16*i+4*j:16*i+4*j+7]};end assign d[5*i+4]=8'h3A; end endgenerate endmodule

আউটপুট ASCII করতে কিছুটা বিট-টুইডলিংয়ের পরে এটি একটি সাধারণ পুনরাবৃত্তি। আমি একটি ছোট হ্যাক দিয়ে শেষ গ্রুপ পরে কোলন কাটা। সংশ্লেষিত করে এবং আইএসই 13.7 লিন 64 এ xc3s500e-4ft256-4 এর জন্য কাজ করতে দেখা যায়।


6

সি, 91-126 বাইট

আমার আসল সংস্করণ, 119 বাইট।

long a[9],i;
f(long*x){if(65536&++*x)*x=0,f(x+1);}
main(){for(;!a[8];f(a))for(i=7;i+1;i--)printf(i?"%lx:":"%lx\n",a[i]);}

সেরা গল্ফযুক্ত পোর্টেবল-ইশ সংস্করণ, 103 বাইট (এই কয়েকটি ধারণার জন্য @ ডেনিসকে ধন্যবাদ)

long*p,a[9];
main(i){while(!a[8]){
for(i=8;i--;printf(i?"%lx:":"%lx\n",a[i]));
for(p=a;++*p>>16;*p++=0);}}

ব্যাখ্যা: অ্যালগরিদম নিজেই যুক্তিসঙ্গত সোজা। স্বাক্ষরবিহীন ইন্টের চেয়ে আমি দীর্ঘ ব্যবহার করেছি কারণ এটি খাটো। ফাইল পর্যায়ে এগুলি ঘোষণার অর্থ হ'ল জিরো দিয়ে সমস্ত কিছুর পূর্বনির্ধারিত। fফাংশন যা প্রতিটি শব্দের কম 16 বিট করে পরিচালিত বহন সঙ্গে একটি সহজ বৃদ্ধি। লুপটি যখন 129 তম বিটে যায় তখন শেষ হয়।

প্রিন্টফের জন্য পিছন দিকে বিভক্ত করার অর্থ হল যে আমরা ঠিকানাগুলি "যথাযথ" ক্রমে মুদ্রণ করি এবং একটি নতুন লাইন প্রিন্ট করার জন্য চেক কয়েক অক্ষর ছোট হয়।

এটি কিছু অ-বহনযোগ্য নির্মাণ ব্যবহার করে। এটি সর্বোত্তম সি এর কে ও আর ডায়ালেক্ট হিসাবে বিবেচিত, যেহেতু এটি অন্তর্নির্মিত ইনট রিটার্ন টাইপ ব্যবহার করে এবং এতে stdio.h অন্তর্ভুক্ত করে না। এবং আমার দীর্ঘ ব্যবহারের বিষয়টি এটি দ্বারা অবহিত হয়েছিল - বেশিরভাগ আধুনিক সিস্টেমে ইনটি যথেষ্ট কারণ এটি 32 বিট। এটি সম্ভবত PDP-11 ইউনিক্সে অশোধিত চালানো যেতে পারে।

তবে এটি খাটো হতে পারে। যদি আমরা ধরে নিই যে আমরা int ব্যবহার করতে পারি (হয় 16 বিটের চেয়ে প্রকারের বৃহত্তর আকারে, অথবা বিভিন্ন প্রকারের সাথে ঠিক 16 বিটের একটি ধরণের যা দুটি সিস্টেমে যেমন দুটি সংখ্যার পরিপূরক এবং পাটিগণিত রোলওভারে সত্য হয়), আমরা পরিত্রাণ পেতে পারি দীর্ঘ ব্যবহার সম্পর্কিত স্টাফ।

16 বিট, 97 বাইটের চেয়ে বেশি বিস্তৃত জন্য সংস্করণ।

a[9],*p;main(i){while(!a[8]){
for(i=8;i--;printf(i?"%x:":"%x\n",a[i]));
for(p=a;++*p>>16;*p++=0);}}

16-বিট সিস্টেমের জন্য সংস্করণ, 91 বাইট।

a[9],*p;main(i){while(!a[8]){
for(i=8;i--;printf(i?"%x:":"%x\n",a[i]));
for(p=a;!++*p;p++);}}

আশ্চর্যের ব্যাপার, যদিও, মূল কে & R এর কম্পাইলার আসলে int- এ ছাড়া ঘোষণা সমর্থন দেয়নি (এটা জরিমানা প্রনয়ন কিন্তু একইরূপে বহিরাগত এবং সেইজন্য লিংক সময়ে অনির্দিষ্ট যেমন ভেরিয়েবল), তাই একটি অতিরিক্ত তিন বাইট ঘোষণা পরিবর্তন প্রয়োজন হয় int*p,a[9];জন্য মোট 94।

এছাড়াও, যদি অনুমান করা হয় যে আউটপুট সম্পূর্ণ করার আগে এটি বাধাগ্রস্ত হয় তবে একটি কঠিন বাধা ছিল, আমরা পাঁচটি বাইট সংরক্ষণ করে শেষ চেকটি সরিয়ে ফেলতে পারি।

বোনাস: সম্পূর্ণ এএনএসআই বহনযোগ্য সংস্করণ, 126 বাইট:

#include<stdio.h>
long*p,i,a[9];
int main(){while(!a[8]){
for(i=8;i--;printf(i?"%lx:":"%lx\n",a[i]));
for(p=a;++*p>>16;*p++=0);}}

সমস্ত সংস্করণে নিউলাইনগুলি পঠনযোগ্যতার জন্য এবং এমন জায়গাগুলিতে সন্নিবেশ করা হয় যেখানে শ্বেত স্পেস প্রয়োজন হয় না #includeএবং এএনএসআই সংস্করণে রেখার পরে নতুন লাইন বাদে বাইট গণনা থেকে বাদ দেওয়া হয় ।

এএনএসআই সংস্করণ ব্যতীত সমস্ত সংস্করণ মূলের শেষে এসে পড়ে এবং তাই অপারেটিং সিস্টেমে একটি উত্সাহী প্রস্থান কোডটি ফিরে আসতে পারে।


1
বহনযোগ্যতা এখানে সাধারণত উদ্বেগের বিষয় নয়। এটি আমার মেশিনে কাজ করে:a[9];f(int*x){if(++*x>>16)*x=f(x+1);}main(i){for(;!a[8];f(a))for(i=8;i--;)printf(i?"%x:":"%x\n",a[i]);}
ডেনিস

আপনি আমার চেয়ে স্পষ্টতই আরও ভাল। যাদের মধ্যে আমি খুব অবাক হয়েছি তাদের মধ্যে কিছু কাজ করে তবে i--কন্ডিশন চেক সম্পর্কে আমার সত্যিই চিন্তা করা উচিত ছিল ।
র্যান্ডম 832

আপনি যখন এটি পরীক্ষা করেছেন, আপনি কি বহন করা অবধি পুরো পথটি চালিয়েছেন? আমার মেশিনটি আপনার সংস্করণে গড়িয়ে পরে [0] এ এলোমেলো মান রাখে।
র্যান্ডম 832

হ্যাঁ. প্রথম 6,553,601 আইপি ঠিকানাগুলি আমার মেশিনে সঠিকভাবে মুদ্রিত হয়েছে।
ডেনিস

আইডিয়োন এটি পছন্দ করে না তবে এটি কোডপ্যাডে কাজ করে: মোড়ানোa[0] এবং মোড়ানোa[1]
ডেনিস

5

AutoIt3, 142 231 বাইট

For $a=0 To 2^32-1
For $b=0 To 2^32-1
For $c=0 To 2^32-1
For $d=0 To 2^32-1
$s=StringFormat("%08x%08x%08x%08x",$a,$b,$c,$d)
For $j=0 To 8
ConsoleWrite(StringMid($s,$j*4+1,4)&($j<7?":":""))
Next
ConsoleWrite(@LF)
Next
Next
Next
Next

ব্যাখ্যা

  • For $a=0 To 2^32-1: সম্ভাব্য সংমিশ্রণগুলি 0-2 ^ 32 ((2 ^ 32) ^ 4 = 2 ^ 128) এর চেয়ে 4 বার ইট্রেট করুন।
  • $s=StringFormat("%08x%08x%08x%08x",$a,$b,$c,$d): 32 (4 * 32) দৈর্ঘ্যের সাথে সংখ্যাগুলি হেক্সাডেসিমাল স্ট্রিংয়ে রূপান্তর করুন।
  • For $j=0 To 8: স্ট্রিংয়ের সমস্ত 8 টি বিভাগে Iterate।
  • ConsoleWrite(StringMid($s,$j*4+1,4)&($j<7?":":"")): স্ট্রিং থেকে পরবর্তী 4 টি অক্ষর বের করুন এবং :শেষে একটি কোলন ( ) যুক্ত করুন , যদি আমরা শেষ বিভাগে পৌঁছে না যাই, তবে কনসোলে সবকিছু আউটপুট করুন
  • Next: লুপটির অভ্যন্তরটি শেষ করুন
  • ConsoleWrite(@LF): লাইনের শেষে একটি লাইন-ফিড যুক্ত করুন
  • Next: বাইরের জন্য লুপগুলি শেষ করুন

প্রত্যাশিত আউটপুট আকার: (এক লাইন (39 বাইট) + লাইন-ফিড) (= 40 বাইট) * 2 ^ 128 = 1.361 * 10 ^ 16 ওয়াইবি (ইয়োটাবাইট)


মানে না 4^64 - 1?
অ্যান্ডারস কাসরগ

@ অ্যান্ডারস ক্যাসরগ আপাতদৃষ্টিতে আমার এমনকি 2 ^ 32-1 অবধি 4 টি লুপ ব্যবহার করা দরকার, কারণ অটোআইটি 4 ^ 64 এর মতো বড় মানগুলিকে পার্স করতে পারে তবে এগুলি একটি লুপে ব্যবহারের জন্য সংরক্ষণ করতে পারে না, কারণ পূর্ণসংখ্যা কেবল 2 to 32 পর্যন্ত যায় অটোআইটে -1
জায়ান্ট্রি ট্রি

5

দারুচিনি গাম, 16 বাইট

0000000: 678b 36d0 b54c d44d 8bc5 455b 8d0c 0500  g.6..L.M..E[....                               .

এটি অনলাইনে চেষ্টা করুন। (টিআইও আউটপুট সীমাবদ্ধ করে)

ব্যাখ্যা

gমোডে রাখে দারুচিনি গাম মোড উৎপন্ন । বাকী স্ট্রিংগুলি এই রেজেক্সে সংক্ষেপিত হয়:

[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]

এরপরে এটি সমস্ত সম্ভাব্য স্ট্রিংয়ের একটি জেনারেটর তৈরি করে যা রেজেক্সের সাথে মেলে এবং এর মাধ্যমে পুনরাবৃত্তি করে প্রতিটি এককে মুদ্রণ করে।

কিছুটা মজাদারভাবে, গল্ফিয়ার রেজেক্স ([0-9a-f]{4,4}:){7,7}[0-9a-f]{4,4}প্রকৃতপক্ষে উপরের রেজেক্সের চেয়ে দীর্ঘ স্ট্রিংকে সংকুচিত করে।


4

কমোডোর বেসিক 2.0, 339 বাইট

লোয়ার-কেস হেক্সস সংখ্যা পেতে, এই প্রোগ্রামটি "স্থানান্তরিত মোডে" (টিপুন <SHIFT>+<C=>) এ লিখিত আছে

1k=65535:a=0
2fOb=0tok:fOc=0tok:fOd=0tok:fOe=0tok:fOf=0tok:fOg=0tok:fOh=0tok
3x=a:goS6:?":";:x=b:goS6:?":";:x=c:goS6:?":";:x=d:goS6:?":";:x=e:goS6:?":";:x=f
4goS6:?":";:x=g:goS6:?":";:x=h:goS6:?
5nE:nE:nE:nE:nE:nE:nE:nE:a=a+1:ifa<65536tH2
6y=x/4096:goS7:y=x/256aN15:goS7:y=x/16aN15:goS7:y=xaN15:goS7:reT
7?mI("0123456789abcdef",y+1,1);:reT

মেমোরি, স্ক্রিনের আকার, ডেটা আকার এবং অন্যান্য সীমাবদ্ধতার কারণে কমোডোর 64 এ কেবল এই কাজটি করা একটি চ্যালেঞ্জ ছিল। আমি সংক্ষিপ্ত প্রতিনিধিত্ব বাস্তবায়ন বিবেচনা করেছিলাম, তবে অন্যান্য সীমাবদ্ধতাগুলি (যেমন লুপ সূচক হিসাবে অ্যারে উপাদানগুলি ব্যবহার করার ক্ষেত্রে অনির্ধারিত অক্ষমতা) এর অর্থ এটি একটি অনুমান 1000 বাইট দ্বারা প্রোগ্রামের দৈর্ঘ্য বৃদ্ধি করবে।

লাইন 7 হ'ল একটি বাস্তবায়ন HEX$(), যা কমোডোর বেসিক 2.0 এর অভাব রয়েছে। আমি এটির DEF FNজন্য একটি ব্যবহার করতে পারি না কারণ সেগুলি কেবল স্ট্রিং নয়, সংখ্যাগুলি ফিরিয়ে দিতে পারে। লাইন হ'ল একটি সাবরুটিন যা এটি চার অঙ্কের একটি গোষ্ঠীতে প্রয়োগ করে, যা ফাংশনগুলি স্ট্রিংগুলি ফিরে আসতে পারলে যথেষ্ট সংক্ষিপ্ত হত।

2 এবং 5 টি রেখা আটটি নেস্টেড লুপ, "লুপের জন্য সাত" হিসাবে প্রয়োগ করা হয়েছে এবং শর্তসাপেক্ষ গোটো কারণ আটটি "লুপগুলির জন্য, যখন ঠিকানাটি প্রিন্ট করার জন্য দুটি" গসুব "এর সাথে মিলিত হবে, তখন সি 64 এর ক্ষুদ্র স্ট্যাকটি উপচে যাবে।

একটি সি 64 প্রায় 1.3 * 10 ^ 31 বছরের রানটাইমের জন্য প্রতি সেকেন্ডে প্রায় 1.2 টি ঠিকানা মুদ্রণ করতে পারে।


4

পাওয়ারশেল (ভি 4), 193 166 162 145 103 বাইট

টিমমিডির নন-বোনাস সংস্করণ 103 বাইটে:

$i=[bigint]::Pow(4,64);while($i-gt0){('{0:X32}'-f($i-=1)-replace'0(?=.{32})'-re‌​place'.{4}(?!$)','$0:')}

145 * 0.8 = 116 বাইটে বোনাস সংস্করণ সহ পূর্ববর্তী

থেকে সাহায্যে TimmyD এবং tomkandy , যিনি যে পয়েন্ট আউট 0 -eq $falseকিন্তু ([bigint]0) -eq $true। সুতরাং আমার সমস্ত পূর্ববর্তী সংস্করণ শেষ হবে না।

$i=[bigint]::Pow(4,64);while($i-gt0){$i-=1;[IPAddress]::Parse((('{0:X32}'-f$i
)-replace'0(?=.{32})'-replace'.{4}(?!$)','$0:')).IPAddressToString}

এর আগে 162-তে কিছু রেজেেক্স পরিবর্তনের আগে:

$i=[bigint]::Pow(4,64)
while($i){$i-=1;if(($x='{0:X32}'-f$i).Length-eq33){$x=$x.Substring(1)}
[IPAddress]::Parse(($x-replace'.{4}(?!$)','$0:')).IPAddressToString}

"এমন একটি চ্যালেঞ্জ যেখানে পাওয়ারশেলের উচিত যুক্তিযুক্ত প্রতিযোগিতামূলক হওয়া!" - আমি, আমি চেষ্টা করার আগে।

ব্যাখ্যা

# PowerShell (PS) has no IP address arithmetic, e.g. IP + 1
#- PS has no 128 bit integers
#- PS has no automatic bignums

# Start from the top, with the BigInteger specialised Power()
$i = [BigInt]::pow(4,64)

# Loop 4**64 through 1, work with $i-1 for ff... -> ::0
while ($i) {
    # PS has no decrement operator for bignums
    # (no using $i-- in the while loop test)
    $i-=1

    # The Net.IPAddress class can't turn a BigInteger
    # into an IPv6 address directly. And because it mashes
    # IPv4 and IPv6 into one class, there's no obvious way 
    # to make a small number always cast to an IPv6 address.
    # Format the bignum as a string of 32 hex digits.
    $x = '{0:X32}' -f $i

    # The BigInteger often formats as /33/ hex digits, 
    # with a leading zero (to avoid unintentional +/- sign bits)
    # ( https://msdn.microsoft.com/library/dd268287 )
    # So remove the leading 0, if there is one
    if (($x).Length-eq33){$x=$x.Substring(1)}

    # I can't always remove the leading zero, because it 
    # can't parse FFFFF... into an address without colons
    # and this regex replace into groups of 4 with colons
    # would go wrong at length 31. No : after the last group
    # This is still better than split/join ... because there
    # isn't a split-into-groups-of-N that I know of.
    $x = ($x -replace '.{4}(?!$)', '$1:'

    # Woo! * 0.8 bonus! 45 characters to save 38! :D
    [IPAddress]::Parse($x).IPAddressToString

}

95 বোনাস ছাড়াই। আমাকে [বিগিন্ট] এর সাথে পরিচয় করিয়ে দেওয়ার জন্য আপনাকে দু'জনকে ধন্যবাদ, বরং এটি সুবিধাজনক (যে জিনিসের জন্য আমি প্রথম স্থানে পোশের কাজ করা উচিত নয় ...)for($g=[bigint]::pow(2,128);$g;$g-=1){'{0:X32}'-f$g-replace'(?=(.{4})+$)',':'-replace'^0+:',''}
টমক্যান্ডি

দুঃখিত হওয়া উচিতfor($g=[bigint]::pow(2,120);$g;$g-=1){'{0:X32}'-f$g-replace'(?=(.{4})+$)',':'-replace'^0*:',''}
টমক্যান্ডি

for($g=[bigint]::pow(2,128);$g-gt0;$g-=1){'{0:X32}'-f$g-replace'(?=(.{4})+$)',':'-replace'^\d*:',''}হ্যাঁ, প্রথম ঠিকানাটি ভুল তবে এটি শেষে পুনরাবৃত্তি করা হয়নি। এছাড়াও নোট করুন যে আপনার while($i)মধ্যে শূন্য থামবে না - [boolean][bigint]0সত্য হিসাবে মূল্যায়ন করুন
টমক্যান্ডি

@ টমক্যান্ডি ওহ বাহ, আমি অবশ্যই কেবলমাত্র শেষের পরীক্ষাটি int i = 5 কে ইনট হিসাবে নির্ধারণ করেই করেছি (কমপ্লেক্স 0 টি either মিথ্যা নয় ... এবং খালি স্ট্রিংও নয় I "এটি পাইথন নয়") আমার আরও মনোযোগ দেওয়া উচিত)। ধন্যবাদ! (এবং আপনার এই স্ক্রিপ্টটি 0:আর শীর্ষস্থান থেকে মুক্তি পাবে না: /)
টেসেল্লাটিংহেকলার

@ টেসেল্লাটিংহেকলার বোনাসের জন্য যাচ্ছেন না দুঃখজনকভাবে 13 বাইট সংক্ষিপ্ত - $i=[bigint]::Pow(4,64);while($i-gt0){('{0:X32}'-f($i-=1)-replace'0(?=.{32})'-replace'.{4}(?!$)','$0:')}103 এ ...
অ্যাডমবর্কবার্ক

3

অটোআইটি 3, 137 বাইট

For $i=0 To 4^64
$s=StringFormat("%032x",$i)
For $j=0 To 7
ConsoleWrite(StringMid($s,$j*4+1,4)&($j<7?':':''))
Next
ConsoleWrite(@LF)
Next

আমি এটি জানি তবে আমি এখানে নতুন :(
rav_kr

শুধু নিশ্চিত হয়েই আপনি জানেন। ধন্যবাদ।
mbomb007

মানে না 4^64 - 1?
অ্যান্ডারস কাসরগ

2

পাইথন 2, 95 বাইট

def i(p=0):
 while p<4**64:print':'.join(hex(p)[2:].zfill(32)[4*s:4*s+4]for s in range(8));p+=1

কেবল 0 থেকে 2 ^ 128 পর্যন্ত প্রতিটি সংখ্যার মধ্য দিয়ে যায়। প্রথমে এটি বর্তমান নম্বরটিকে হেক্সাডেসিমাল স্ট্রিংয়ে রূপান্তর করে, তারপরে '0x'সেই ফাংশনটি দেয় ps এরপরে এটি স্ট্রিংটি সামঞ্জস্য করে সামনের দিকে 32 টি শূন্য এবং তারপরে এটি চারটি গ্রুপে বিভক্ত হয়। অবশেষে এটি চারটি দলের সাথে কলোনের সাথে যোগ দেয়, এটি মুদ্রণ করে এবং বর্তমান সংখ্যায় 1 যুক্ত করে। যুক্ত বোনাস রয়েছে যে আপনি যদি এটি দেন তবে আপনি যে কোনও মূল্যে এটি শুরু করতে পারেন, তবে কোনও ইনপুট প্রয়োজন হয় না।


যদি আপনার উত্তরটি কোনও ফাংশন হয় তবে আপনাকে এটিকে কল করার দরকার নেই :)
বিটা ডিকায়

@ বেটাডেকে তখন আমার ভুল বোঝাবুঝি হয়েছিল। সংশোধন করা হয়েছে! ধন্যবাদ।
স্থিতি

2

হাস্কেল 111

s[]=[[]]
s(a:b)=[y:z|z<-s b,y<-a]
r=replicate
main=mapM putStrLn$s$tail$concat$r 8$":":r 4"0123456789abcdef"

আমার নিজস্ব সিকোয়েন্স ফাংশন দিয়ে sএটি আর স্মৃতি ফাঁস করে না, তবে আর গল্ফ লাগবে না।


আপনি এটি কীভাবে সংকলন করবেন যাতে এটির স্মৃতিশক্তি শেষ না হয়? আমার জিএইচসি ভি 7.10.2 এবং স্টাডি সহ সংকলন অপশন এটি মেমরি ফাঁস।
নিমি

2

সিবিএম বেসিক ভি 7.0 (166 টি অক্ষর)

a=65535
fOi=0toa:fOj=0toa:fOk=0toa:fOl=0toa:fOm=0toa:fOn=0toa:fOo=0toa:fOp=0toa:?hE(i)":"hE(j)":"hE(k)":"hE(l)":"hE(m)":"hE(n)":"hE(o)":"hE(p):nE:nE:nE:nE:nE:nE:nE:nE

মার্কের উত্তর কমোডোর 64৪ এর বেসিক ২.০-এর জন্য যা হেক্সাডেসিমালে মুদ্রণের সংখ্যাগুলির জন্য অন্তর্নির্মিত কমান্ডের অভাব রয়েছে। তবে HEX$()বেসিক .0.০ এ ফাংশনটির জন্য কমোডোর 128 সংস্করণটি অনেক কম sh এটি একটি একক লজিকাল লাইনের সাথে মানানসই নয় (যা সি 128 এ 160 অক্ষরের মধ্যে সীমাবদ্ধ) তবে এখনও সরাসরি মোডে দুটি পৃথক লাইন হিসাবে প্রবেশ করা যেতে পারে।


দেখে মনে হচ্ছে আপনি নিজের অর্ধেক লুপগুলি মিস করছেন। একটি আইপিভি 6 ঠিকানা 128 বিট, 64 বিট নয়।
চিহ্নিত করুন

@ মার্ক: এটি নির্দেশ করার জন্য ধন্যবাদ! আমি সমস্যা সমাধান করেছি।
সাইকোনাট

2

রুবি 75

x=->s,n{n>0?65536.times{|m|x.(s+?:*(8<=>n)+m.to_s(16),n-1)}: p(s)};x.('',8)

এটি একটি পুনরাবৃত্ত সমাধান যা প্রতিটি উপসর্গ গ্রহণ করে এবং প্রতিটি সম্ভাব্য প্রত্যয় খুঁজে পায়। Recursively।


ল্যাম্বডাসের সাথে সংক্ষিপ্ত ফাংশন সংজ্ঞা পান:x=->s,n{...};x['',8]
ডোরকনব

0

TCL 341 318 301

proc ip6 {p c} {
    set s %x:%x:%x:%x:%x:%x:%x:%x
    set p [scan $p $s]
    while {[set d 7]} {
        $c [format [string map {x 04x} $s] {*}$p]
        while {[set i [lindex $p $d]]==0xFFFF} {
            lset p $d 0
            if {!$d} return
            incr d -1
        }
        lset p $d [incr i]
    }
}
ip6 fFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:0000 puts
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.