সীমাহীন কাউন্টারস্ট্রিং তৈরি করুন


11

একটি কাউন্টারস্ট্রিং হ'ল সফটওয়্যার টেস্টিংয়ে ব্যবহৃত ডেটা-র বর্ণনা টেস্ট ডেটা sort নিশ্চিত না যে এটি আসলে জেমস বাচ আবিষ্কার করেছিলেন , তবে আমি সেখান থেকে জানি।

ধারণাটি নিম্নরূপ: পরীক্ষার ডেটাতে অনেকগুলি তারকাচিহ্ন ( *) থাকে। নক্ষত্রের সামনের নম্বরটি আপনাকে জানায় যে টেস্টের ডেটা সেই পর্যায়ে কত দীর্ঘ long যদি আপনার পরীক্ষার তথ্যগুলির একটি অবস্থানটি জানতে হবে যা একটি নক্ষত্র নয়, শেষ নক্ষত্রটি সন্ধান করুন, এর আগে সংখ্যাটি দেখুন এবং পরবর্তী সংখ্যাগুলির সংখ্যা যুক্ত করুন।

ক্রমটি এভাবে শুরু হয়:

2*4*6*8*11*14*17*20*23*
             ^

আপনি দেখতে পাচ্ছেন, চিহ্নিত নক্ষত্রটি 14 স্থানে রয়েছে।

যদি কোনও ফাইল নিম্নলিখিত হিসাবে কাটা হতে থাকে

[...]2045*20

তারপরে আপনি আবিষ্কার করতে পারেন যে কোথাও 2047 টি অক্ষরের সীমা রয়েছে (2045 যেখানে নক্ষত্রটি আরও 2 2এবং এর জন্য 2 0))

সংক্ষিপ্ততম (এটি ) প্রোগ্রাম তৈরি করা আপনার কাজ যা সেই বিন্যাসের একটি স্বেচ্ছাসেবী দীর্ঘ পরীক্ষার স্ট্রিংকে আউটপুট করে (স্ট্যান্ড :: আউট বা ফাইল বা যাই হোক না কেন)। অক্ষরের দৈর্ঘ্যটি আর্গুমেন্ট হিসাবে দেওয়া হয়। প্রোগ্রামটি 2 গিগাবাইট পর্যন্ত টেস্ট ডেটা (ইনপুট মান 2147483647 অক্ষর) সমর্থন করবে।

2 গিগাবাইট ফাইলে "বিপজ্জনক" অবস্থানগুলি:

8*11*
98*102*
998*1003*
9998*10004*
99998*100005*
999995*1000003*
9999995*10000004*
99999995*100000005*
999999995*1000000006*

যদি 995 * 999 * এবং 995 * 1000 * বা এর অনুরূপ: না হয় তবে @ লিকি নুনের প্রশ্নের উত্তর দেওয়া উচিত ।

2147483647 ইনপুট মান সহ 2 জিবি ফাইলের সমাপ্তি:

2147483640*2147483

যদি এটি থেমে না থাকে তবে আপনি এটি কীভাবে পরীক্ষা করবেন?
লিকি নুন

2
অক্ষরগুলিতে কি সেই দৈর্ঘ্য?
দ্য বাইকিংভিকিং

4
আপনি প্রমাণ করতে পারেন যে, আমরা মধ্যে নির্বাচন করতে হবে না হবে 995*999*এবং 995*1000*কিছু যে ভালো?
লিকি নুন

1
ভবিষ্যতে, দয়া করে পোস্ট করার আগে আপনার চ্যালেঞ্জগুলিতে কিঙ্কগুলি খুঁজে বের করতে স্যান্ডবক্সটি ব্যবহার করুন।
মেগো

1
@ থমাস ওয়ালার যদি আমরা আরও দীর্ঘ আউটপুট তৈরি করতে পারি তবে আমরা কি কোনও ইনপুট না নিয়ে কেবল 2 জিবি স্ট্রিং তৈরি করতে পারি?
xnor

উত্তর:


4

হাস্কেল, 60 58 বাইট

একটি ফাংশন হিসাবে আমরা পেতে:

f=length.show
iterate(\n->1+n+(f$n+1+f n))2>>=(++"*").show

সম্পূর্ণ প্রোগ্রাম, 72 70 বাইট

এটি STDOUT এ অসীম কাউন্টারস্ট্রিংয়ের ফলাফল দেয়:

f=length.show
main=putStr$iterate(\n->1+n+(f$n+1+f n))2>>=(++"*").show

দৈর্ঘ্যের ইনপুট করতে 20 টি অতিরিক্ত বাইট প্রয়োজন:

main=interact(\j->take(read j)$iterate(\n->1+n+(f$n+1+f n))2>>=(++"*").show)

এটি আপনার প্রায় র‍্যাম আকারের মতো কাজ করে, যেহেতু হাস্কেল সংখ্যাসমৃদ্ধ ধরণের ক্ষেত্রে ডিফল্ট হয় Integer



2

পাইথন 2, 74 72 66 64 61 বাইট

f=lambda n,i=2:"%d*"%i+f(n,len(`i+2`)-~i)[:n-2]if i<n*2else""

একটি পূর্ণসংখ্যা n নেয় এবং দৈর্ঘ্য n এর কাউন্টারস্ট্রিং আউটপুট দেয়।

প্রোগ্রাম সংস্করণ, 69 বাইট:

s,n,i="",input(),2
while i<2*n:s+="%d*"%i;i+=len(`i+2`)+1
print s[:n]

স্টিডিন থেকে একটি পূর্ণসংখ্যা n নেয় এবং দৈর্ঘ্যের এনের কাউন্টারিং প্রিন্ট করে।

সংক্ষিপ্ত, তবে প্রায় কার্যকরী, বিকল্প সংস্করণ:

n,i=input(),2
while i<2*n:print("%d*"%i)[:n-i],;i+=len(str(i+2))+1

1

পাওয়ারশেল ভি 5, 97 বাইট

param($n)$l=1;for($i=0;$i-lt$n){$i+="$i*".length;if("$i".Length-gt$l){$i++;$l++};ac .\o "$i*" -n}

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয় $n, সহায়কটি সেট করে $lযা আমরা আমাদের পূর্ণসংখ্যার দৈর্ঘ্যের উপর নজর রাখতে ব্যবহার করি। তারপরে, আমরা 0উপরে থেকে লুপ করব $n। প্রতিটি পুনরাবৃত্তি, আমরা তৈরি স্ট্রিং এবং একটি নক্ষত্র $iদ্বারা বৃদ্ধি । তারপর, যদি এর পরিবর্তিত (যেমন, আমরা 2 ডিজিটের থেকে 3 সংখ্যার সরানো), আমরা উভয় সাহায্যকারী বাড়ায় ength পরিবর্তনশীল এবং (অতিরিক্ত অঙ্ক জন্য অ্যাকাউন্টে)। তারপরে আমরা oNewLine সহ বর্তমান ডিরেক্টরিতে ফাইল যুক্ত করতে কমান্ডটি ব্যবহার করি।.length$i.length$i$l$iadd-content"$i*".\o-n

বিশেষ দ্রষ্টব্য

  • V5 প্রয়োজন, যেহেতু -noNewLineপ্যারামিটারটি শেষ পর্যন্ত সেই সংস্করণে যুক্ত হয়েছিল।
  • পাওয়ারশেল স্বয়ংক্রিয়ভাবে এ থেকে রূপান্তরিত [int]হবে [double](না, আমি জানি না কেন এটি যায় না [long]), সুতরাং এটি সঠিকভাবে ইনপুট হ্যান্ডেল করবে 2147483648কোনও সমস্যা ছাড়াই than তাত্ত্বিকভাবে, এটি অভিযোগ করার আগে কোথাও না কোথাও 1.79769313486232E+308(সর্বোচ্চ মান [double]) ইনপুট হ্যান্ডেল করবে তবে আমি প্রত্যাশা করি যে ঘটনার আগেই ডিস্কটি পূর্ণ হয়ে যায়। ;-)
  • লুপ শর্তসাপেক্ষ চেকিংয়ের কারণে, এটি ফাইলের সর্বনিম্ন ইনপুট দৈর্ঘ্যের আউটপুট আসবে । উদাহরণস্বরূপ, ইনপুট জন্য 10এটি আউটপুট হবে 2*4*6*8*11*, যেহেতু ইনপুট চেয়ে 11প্রথম $iমান বৃহত্তর।

পাওয়ারশেল ভি 2 +, এছাড়াও 97 বাইট (প্রতিযোগী নয়)

param($n)$l=1;-join(&{for($i=0;$i-lt$n){$i+="$i*".length;if("$i".Length-gt$l){$i++;$l++};"$i*"}})

কোনও ফাইলে প্রেরণের পরিবর্তে, এটি লুপের পুনরাবৃত্তিকে আবদ্ধ করে এবং তারপরে -joinএগুলি স্ট্রিংয়ের সাথে একত্রে এনে দেয়। এটি v5 এর চেয়ে আগের সংস্করণে কাজ করতে দেয়। যাইহোক, .NET [string]একটি নির্মাণকারীর মতো একটি সংজ্ঞা String(char c,Int32 length)দেয়, এই সংস্করণটি সর্বোচ্চ ইনপুট প্রয়োজনীয়তা পূরণ করে না , যেহেতু আউটপুট স্ট্রিংটি ওভারফ্লো এবং বারফ হয়ে যাবে।

এছাড়াও, আপনি আপনার পাইপলাইনে প্রায় 2 গিগাবাইট ডলার স্ট্রিং রাখতে চান না। শুধু Sayin'.


1.79769313486232E + 308 অবশ্যই কাজ করবে না, কারণ একটি ফ্লোটে অল্প সংখ্যক যুক্ত করা মান আর কোনও পরিবর্তন করে না। স্ট্যাকওভারফ্লো / প্রশ্নগুলি দেখুন / 12596695/… সুতরাং আমার অনুমান যে এটি একবার "আপগ্রেড" হয়ে দ্বিগুণ হওয়ার পরে এটি কাজ করা বন্ধ করে দেয়
টমাস ওয়েলারের

@ থমাস ওয়েলারের পাওয়ারশেলগুলি [double]64-বিট are উদাহরণস্বরূপ, রান for($i=2147483645;$i-lt2147483655;$i++){"$i - " + $i.GetType()}একটি নিয়মিত অগ্রগতি দেখাতে হবে $iকিন্তু Typeএ পরিবর্তন 2147483648করতে double। আমি নিশ্চিত যে এক পর্যায়ে এটি কাজ করা বন্ধ করে দেবে, সম্ভবত প্রায় 15 ডলার অঙ্কের নির্ভুলতা বা কখন .ToStringব্যবহার শুরু হয় e[double]::MaxValueএকটি গুরুতর ঊর্ধ্বসীমা চেয়ে বিজ্ঞাপন তামাশা বেশি ছিল।
অ্যাডমবর্কবার্ক

1

পাইথন 3, 126 114 99 বাইট

def f(x,s=''):
 i=t=2
 while len(s)<x:i+=len(str(t+i))-len(str(t));s+=str(t)+'*';t+=i
 print(s[:x])

একটি ফাংশন যা অক্ষরকে কাটাতে স্ট্রিংটি কাটাতে হবে এবং STDOUT এ প্রিন্ট করে তার যুক্তির মাধ্যমে ইনপুট নেয়।

কিভাবে এটা কাজ করে

স্ট্রিংয়ের সংখ্যার মধ্যে পার্থক্যটি প্রথমদিকে 2 হয় Every বর্তমান সংখ্যার অঙ্কের সংখ্যা এবং বর্তমান সংখ্যার সংখ্যার পার্থক্যের সাথে পার্থক্যটি যোগ করে এটি অর্জন করা যেতে পারে, যা প্রয়োজন হলে কেবল 1 হয়। স্ট্রিংয়ের দৈর্ঘ্য ইনপুটের চেয়ে কম থাকলে ফাংশনটি কেবল লুপ হয়, স্ট্রিংয়ের সাথে সংযোজন করে এবং প্রয়োজনীয়তা অনুযায়ী পার্থক্য এবং সংখ্যা আপডেট করে এবং তারপরে মুদ্রণের আগে ছাঁটা হয়।

আইডিয়নে চেষ্টা করে দেখুন

অসীম আউটপুট সংস্করণ, 69 বাইট

s=i=2
while 1:i+=len(str(s+i))-len(str(s));print(end=str(s)+'*');s+=i

1

আর, 92 বাইট

    N=nchar;f=function(n){z=0;y="";while(z<n){z=z+N(z+N(z)+1)+1;y=paste0(y,z,"*")};strtrim(y,n)}

উদাহরণ আউটপুট:

f (103) [1] "2 * 4 * 6 * 8 * 11 * 14 * 17 * 20 * 23 * 26 * 29 * 32 * 35 * 38 * 41 * 44 * 47 * 50 * 53 * 56 * 59 * 62 * 65 * 68 * 71 * 74 * 77 * 80 * 83 * 86 * 89 * 92 * 95 * 98 * 102 * 1 "


0

জেলি , 22 19 18 বাইট

2µṾL+®‘¹©=¡=µ³#j”*

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

nস্ট্রিংয়ে প্রথম সংখ্যাগুলি সন্ধান করুন এবং তারপরে তালিকায় যুক্ত করুন। nমন্তব্যগুলিতে ওপি কর্তৃক অনুমোদিত এটির চেয়ে এটি দীর্ঘতর হবে ।

প্রোগ্রামটি নির্বাচিতভাবে #লুপের সাথে ক্রমের বর্তমান নম্বর সহ নিবন্ধকে আপডেট করে ¹©=¡। আমি আশা করছিলাম যে ©এটি দ্বিতীয় হতে পারে µউদাহরণস্বরূপ দ্বিতীয়টির পরে , তবে দুর্ভাগ্যক্রমে এটি কার্যকর হয় না এবং আমি কোনও জিনিস আরও ছোট করতে পারি না।

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