নিজেকে ক্লোন করুন!


13

আপনাকে এমন একটি প্রোগ্রাম তৈরি করতে হবে যা বন্ধ না হওয়া পর্যন্ত অসীমভাবে নিজের নির্ভুল ক্লোন তৈরি করে। মূল প্রোগ্রামে যা আছে তা অবশ্যই ক্লোনগুলির মধ্যে থাকতে হবে। অন্য কথায়, ক্লোনগুলি এবং আসল প্রোগ্রামগুলি প্রতিটি উপায়ে এক রকম ব্যতীত ক্লোনগুলি সোর্স কোডের মতো একই ধরণের ফাইলে থাকতে হবে না (তারা পাঠ্য ফাইল হতে পারে)।

উদাহরণ:

যদি আমার মূল প্রোগ্রামটি হয়:

for i in range(0, 10):
     print i

ক্লোনটি অবশ্যই হওয়া উচিত:

for i in range(0, 10):
     print i

বিধি এবং ব্যাখ্যা:

  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ

  • ক্লোনগুলি অবশ্যই আসলটির সঠিক কপি হওয়া উচিত

  • ক্লোনগুলি অবশ্যই পঠনযোগ্য ফাইল হতে হবে যা সঠিক দোভাষীর ভিতরে রাখলে চালানো যায়

  • প্রোগ্রামটি তার নিজস্ব উত্স কোডটি পড়তে পারে

  • সমস্ত ক্লোন পৃথক ফাইল হতে হবে

  • আপনার প্রোগ্রাম মুদ্রণ অনুমোদিত নয়

  • ফাইলের নামগুলি বাইটের সংখ্যাতে গণনা করে

  • ক্লোনগুলি সোর্স ফাইলের মতো একই ডিরেক্টরিতে থাকতে হবে না বা একই ফাইলটির নাম ভাগ করতে হবে না

  • কমপক্ষে 1000 ক্লোন তৈরি করতে সক্ষম হওয়া উচিত

বিজয়ী:

সর্বনিম্ন বাইট জয়!

উত্তর:


3

Zsh , 19 17 9 বাইট

#!/bin/zsh
<$0>$$;$0

প্রতি মেটা উপর ঐক্যমত্য , কুঁড়েঘর বাইট গণনা থেকে বাদ দেওয়া হয়েছে।

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

নোট করুন যে টিআইওর কাঁটাচামচ সুরক্ষা 113 ফাইল তৈরি হওয়ার পরে প্রক্রিয়াটিকে হারাবে। এটি কোনও রক্ষণশীল সংস্থান সীমা ছাড়াই সহজেই কোনও সিস্টেমে 1000 টি ফাইল তৈরি করতে পারে।


আমি yes `<$0`|split -1অনেক ভাল চাই , তবে এটি বাইট গণনা দ্বিগুণ করে ...
ডেনিস

এটা খুব খারাপ, ইন-আউট যে ভালো ফেরৎ মধ্যে ভাল কাজ করে না ব্যাশ :( এক মুহূর্ত জন্য, আমি naively আপনি outgolfed আছে :) চিন্তা
জেপেলীন্

4

ব্যাচ, 32 বাইট

set/an=%1+1
copy %0 %n%
%0 %n%

@STDOUT- তে কোনও বিধিনিষেধ নেই বলেই ব্যবহার করা হচ্ছে না। %1খালি স্ট্রিংয়ের ডিফল্ট, তাই প্রথমবার nহয়ে যায় 1এবং প্রতিটি পাসে ইনক্রিমেন্ট থাকে। বিকল্পভাবে, এটি 28 বাইটের জন্য কাজ করতে পারে, তবে এ জাতীয় %random%ব্যবহারের সময় এলোমেলোভাবে আসলে কী তা আমার কোনও ধারণা নেই :

copy %0 %random%%random%
%0

2
আইআইআরসি %random%বর্তমান সময়ের ভিত্তিতে তৈরি এবং 0 থেকে 32,000 এর কিছু উপরে কিছু তৈরি করতে পারে।
ব্যবহারকারী 2428118

স্পষ্ট করার জন্য, %random%একটি পরিবর্তনশীল যা অ্যাক্সেস করা হলে @ ব্যবহারকারী 2428118 উল্লিখিত হিসাবে একটি এলোমেলো সংখ্যা দেয়।
কনর ও'ব্রায়েন

3

ব্যাশ, 25, 16, 12, 11 বাইট

সম্পাদনাগুলি:

  • নিউলাইনটি (-1 বাইট) সরানো হয়েছে, "এটি চেষ্টা করুন অনলাইনে" যুক্ত করা হয়েছে। ধন্যবাদ @ ডেনিস!
  • ব্যাকগ্রাউন্ড জব পিআইডি $!ফাইলের নাম হিসাবে ব্যবহার করুন (প্রতি ~ 32k ফাইলে পুনরায় ব্যবহার করা হবে, তবে এটি এখন অনুমোদিত), -4 বাইট

Golfed

#!/bin/bash
$0&cp $0 $!

ব্যাখ্যা

একটি অনুলিপি করার আগে & এর সাথে একটি পটভূমি কাজ হিসাবে নিজেকে পুনরায় স্প্যানস করে, যাতে প্রতিটি পুনরাবৃত্তি তার নিজস্ব পিআইডি এর অধীনে চলে।

ফাইলের নাম হিসাবে শেষ কাজ পিআইডি ব্যবহার করে।

এটি অসীমভাবে চলতে পারে (বা থামার আগ পর্যন্ত) তবে ক্লোন ফাইলের নামগুলি পুনরায় ব্যবহার করা হবে। প্রতি ~ 32k পুনরাবৃত্তি।

হত্যা করতে কিছুটা দুষ্টু হতে পারে তবে এএফাইক নিয়মের বিরুদ্ধে নয়।

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


আপনার কি এমন কোনও পরীক্ষার জায়গা আছে যেখানে আমি নিজের জন্য এটি ব্যবহার করে দেখতে পারি?
অ্যান্থনি ফ্যাম

@ পাইথনমাস্টার, আমি সাধারণত টিউটোরিয়াল পয়েন্টের অনলাইন টেস্টবেড ব্যবহার করব, তবে এতে ইউইড ইনস্টল নেই, এবং স্ক্রিপ্টটি এত বেশি আইও করা পছন্দ করে না।
Zeppelin

আইআই / ও-তে টিআইওর সমস্যা নেই। এছাড়াও, আপনার পরে নতুন লাইনের দরকার নেই &tio.run/nexus/bash#VY5BS8NAEIXP7q943W5tq6QpelMRRCIIGg/…
ডেনিস

3

রুবি, 78 বাইট , 77 43 + 4 (ফাইলের নাম: a.rb) = 47 বাইট

  • সংস্করণ 1.2

43 বাইট + নাম / @ অ্যালেক্সিসকে এত সংক্ষিপ্ত ধন্যবাদ!

loop{File.write "#{$.+=1}",open("a.rb",?r)}

এটি প্রায় হিসাবে গল্ফড হিসাবে আমি মনে করি এটি পেতে চলেছে

  • সংস্করণ 1.1

73 বাইট + নাম / @ অ্যালেক্সিস অ্যান্ডারসনকে ধন্যবাদ

i=0
loop do
File.open("#{i}",?w){|b|b.puts File.read("a.rb",?r)}
i+=1
end
  • সংস্করণ 1.0

74 বাইট + নাম

i=0
loop do
File.open("#{i}","w") do{|b|b.puts File.read("a.rb")}
i+=1
end

এটি আমার প্রথম রুবি উত্তর তাই সমস্ত তথ্য স্বাগত।


ফাইল খোলার জন্য কার্নেল ওপেন ফরোয়ার্ড, আপনি ফাইলটি বাদ দিতে সক্ষম হবেন। পুরাপুরি। w "w" এর জায়গায় w আপনার কাছে কোঁকড়া ধনুর্বন্ধনী আছে বলে আমি মনে করি ফাইল.ওপেনের কাজটি অকেজো।
অ্যালেক্সিস অ্যান্ডারসন

ফাইল.রেড ('a.rb') এর জায়গায় ('a.rb',? r) খুলুন
অ্যালেক্সিস অ্যান্ডারসন

? ডাব্লু একটি চরিত্র ডাব্লু। তার নিজস্ব একটি স্ট্রিং। ? w == 'ডাব্লু' সুতরাং আপনার "? ডাব্লু" তে কোটগুলির দরকার নেই
অ্যালেক্সিস অ্যান্ডারসন

i = 0 লুপ ডু ফাইল.রাইট করুন "# {i}", খুলুন ("a.rb",? r) i + = 1 টি শেষ
অ্যালেক্সিস অ্যান্ডারসন

প্রকৃতপক্ষে, আপনি লুপ পদ্ধতির জন্যও কোঁকড়া ধনুর্বন্ধনী ব্যবহার করতে পারেন
অ্যালেক্সিস অ্যান্ডারসেন


2

সি #, 104 102 বাইট

-২ বাইট বার্কলেব্রসকে ধন্যবাদ

namespace System.IO{class a{static void Main(){int i=0;while(1>0){i++;File.Copy("c{i}.cs");}}}}

না, এটি সবচেয়ে ছোট নয়। তবে এটি সি #। তুমি কি আশা কর?


1
আপনার কোনও নেমস্পেসের দরকার নেই যাতে আপনি পুরোপুরি যোগ্যতা অর্জন করতে পারেন File.Copy। লুপের জন্য পরিবর্তন করা যাতে আপনি ইন্ট ডিক্লেয়ারেশনটি ইনলাইন করতে পারেন এবং 1>0অংশটি সরাতে পারেন । আর বৃদ্ধি প্রাক iমধ্যে File.Copyবিবৃতি, আপনি 86 বাইট দেয় আমি বিশ্বাস করি:class P{static void Main(){for(int i=0;;)System.IO.File.Copy("c.cs","c"+ ++i+".cs");}}
TheLethalCoder

আসলে এটি কাজ করবে না কারণ c.csআউটপুট ডিরেক্টরিতে হবে না এবং ম্যানুয়ালি সেখানে অনুলিপি করতে হবে। কিভাবে কাজ করে?
TheLethalCoder

স্ট্রিং ইন্টারপোলেশন সম্পর্কে ভুলে যাবেন না $"c{++i}.cs"2 বাইটের চেয়ে কম"c"+ ++i+".cs"
বার্কলেব্রস

1

প্রক্রিয়াজাতকরণ, 55 + 5 (ফাইলের নাম) = 60 বাইট

আমি জানি না ফাইলের নামটি অতিরিক্ত বাইট হিসাবে গণনা করে

for(int i=0;;)saveStrings(i+++"",loadStrings("a.pde"));

বেশ কয়েকটি বিল্টিনগুলির একটি সিরিজ সমস্ত একসাথে বেঁধেছে

ব্যাখ্যা

for(int i=0;;)           //A complex piece of code that cannot be explained in words alone
saveStrings(             //Save param2 (String[]) into file param1 (String)
 i+++"",                 // filename: the int i (and then is incremented)
 loadStrings("a.pde")    // content: load the content of file a.pde as a String[]
);

"জটিল কোড" হাসছে
রোমান গ্রাফ


1

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

from shutil import*
a=__file__
while`copy(a,a*2)`:a*=2

তোমার কি নেই import sys?
স্যামুয়েল শিফেরোভিচ 21

নিবন্ধন করুন আমি নিশ্চিত না যে এই সম্পাদনাটি আমি যে বাইট গণনাটি ব্যবহার করছিলাম সেটি এখন প্রদর্শিত প্রোগ্রামের জন্য কীভাবে বেঁচে গিয়েছিল
ব্লু

1

গণিত, 41 বাইট

For[a=0,1>0,$Input~CopyFile~ToString@a++]

পুরো প্রোগ্রাম। কপি নিজস্ব উৎস ফাইলে 0, 1, 2, ইত্যাদি বর্তমান ডিরেক্টরির মধ্যে।


1

পিএইচপি, 91 60 বাইট

ম্যানটওয়ার্কের জন্য 31 বাইট সংরক্ষণ করা হয়েছে

<?for(;;)file_put_contents(++$i,file_get_contents("f.php"));

ব্যবহার: $ php f.phpক্লোনস f.phpএবং তার কোডের মত ফাইলের নামের মধ্যে অসীম নিজেই প্রতিলিপি 1, 2, 3... সময়সীমার পর্যন্ত।

পূর্ববর্তী সংস্করণ:

<?for($i=0;;$i++)$p=fwrite(fopen("$i.php","w"),fread(fopen($f="f.php","r"),filesize($f)));

ব্যবহার: $ php f.phpক্লোনস f.phpএবং এটির কোড প্রতিলিপি অসীম নিজেই পছন্দ f1.php, f2.php, f3.php... f(n).phpসময়সীমার পর্যন্ত।


ক্লোন ফাইলের নাম যেমন কিছু হতে পারে, কেন কেবল এক্সটেনশন ছাড়াই সংখ্যা ব্যবহার করবেন না? <?for(;;)file_put_contents(++$i,file_get_contents("f.php"));
manatwork

0

বেক, 29 (21) বাইট,

{while(close(i++)||1)print>i}

close()অনির্দিষ্টকালের জন্য চলতে চলতে এটি প্রয়োজন যেমন অ্যাডাব্লু অন্যথায় এটি উত্পন্ন সমস্ত হ'ল খালি ফাইল।

ক্লোন গণনার যদি সীমা থাকে তবে উদাহরণস্বরূপ 5:

{while(++i<5)print>i}

প্রোগ্রাম 21 বাইট হবে।

প্রোগ্রামটি একটি ফাইলে পেস্ট করুন aএবং রান করুন:

$ awk -f a a

0

পাইথন, 69 বাইট

a=open(__file__).read()
i=0
while 1:i+=1;open(`i`+'.py','w').write(a)

আমি aফাইলটির নামটি ব্যবহার করার চেষ্টা করেছি , তবে (আশ্চর্যরূপে) উইন্ডোজ a=open(__file__).read()\ni=0\nwhile 1:i+=1;open(আই নামক ফাইল পছন্দ করে না +'.py','w').write(a)। আমি এটি চেষ্টা করেছিলাম:

a=open(__file__).read()
i=''
while 1:i+='.py';open(i,'w').write(a)

তবে এটি আমাকে এই ত্রুটি দেয়:

Traceback (most recent call last):
  File "C:/Python27/codeGolfCopy.py", line 3, in <module>
    while 1:i+='.py';open(i,'w').write(a)
IOError: [Errno 2] No such file or directory: '.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py'

এটি 83 টি ফাইল তৈরি করে তবে এটি প্রয়োজনীয় 1000 এর কাছাকাছিও নয়।

আপনি যদি এই ফাইলগুলি সরাতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

import os;i = 1
while 1:os.remove(`i`+'.py');i+=1

0

আরবিএক্স.লুয়া, 14 বাইট

এই ফাইল ফাইলটি আমি জানি না

script:Clone()

ক্লোন নিজেই। এটি উদাহরণস্বরূপ হিসাবে, আবার রান, সুতরাং স্বয়ংক্রিয় পুনরাবৃত্তি প্রদান।



0

পাইথন 2, 61 বাইট (ইউনিক্স) 65 (ক্রস প্ল্যাটফর্ম)

ইউনিক্স - 61 বাইট

import os;i=1
while os.popen('cp %s %i.py'%(__file__,i)):i+=1

ইউনিক্স সিপিতে সিস্টেম কপি-ফাইল - কমান্ড রয়েছে। পপেনের মাধ্যমে কনসোল ব্যবহার করা আমাকে সিপি দিয়ে ফাইলটি অনুলিপি করতে দেয়। পুরানো ফাইল ডিরেক্টরিতে নতুন ফাইলগুলি স্পোন করবে।

ক্রসপ্ল্যাটফর্ম - 65 বাইট

i=0
while 1:i+=1;open('%i.py'%i,'w').write(open(__file__).read())

এটি কাজ করে, ডিফল্ট হিসাবে খোলা পড়ার অনুমতি দেয়।

Funfact: প্রতিস্থাপন 1:i+=1সঙ্গে i:i-=1এবং এটি আমি কপি থামবে।

এটি ছাড়া আমি @ মুডিফিশের চেয়ে ছোট করার কোনও উপায় দেখছি না।


0

সি, 80 বাইট

main(a){while(1)printf(a="main(a){while(1)printf(a=%c%s%c,34,a,34);}",34,a,34);}

আপনি এটি হত্যা না করা পর্যন্ত মুদ্রণ করে। অসীম লুপ সহ কেবল একটি স্ট্যান্ডার্ড সি কুইন।

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