প্রাথমিক কোডটি প্রতিলিপি করে ক্রমবর্ধমান আকারের বর্গ তৈরি করুন


45

আপনার অ্যাসাইনমেন্টটি হ'ল দৈর্ঘ্যের একটি প্রোগ্রাম লিখতে হবে যা একটি ASCII- আর্ট স্কোয়ার (নীচে বর্ণিত) মুদ্রণ করে, যেটি প্রতিটি কোডের মধ্যবর্তী স্থানে আসল সোর্স কোডটি পেস্ট করার সাথে সাথে তার পাশের দৈর্ঘ্য 1 ইউনিট বৃদ্ধি করে ।

এই কাজটি খুব ভালভাবে সংজ্ঞায়িত করা আমার পক্ষে বেশ কঠিন, তাই আমি আপনাকে একটি উদাহরণ দেব:

  • ধরা যাক আপনার প্রারম্ভিক কোডটি ছিল CODEএবং এটি মুদ্রিত হয়েছিল:

    0
    
  • তারপরে, CODEমাঝখানে সন্নিবেশ করান : আপনার কোড হয়ে যায় COCODEDEএবং এটি মুদ্রণ করা উচিত:

    00
    00
    
  • CODEমাঝখানে পুনরায় সন্নিবেশ করান : আপনার কোডটি হয়ে যায় COCOCODEDEDE এবং মুদ্রণ করা উচিত:

    000
    000
    000
    
  • ইত্যাদি। আপনার উত্তরটি তাত্ত্বিকভাবে কয়েকটি সংখ্যক পুনরাবৃত্তির পরে কাজ করা উচিত, তবে আমি বুঝতে পারি যদি ভাষার পারফরম্যান্সের সীমাবদ্ধতার কারণে এটি একটি নির্দিষ্ট প্রান্তিকের উপর যুক্তিসঙ্গতভাবে চলতে পারে না।

কিছু নিয়ম:

  • আপনি আপনার স্কোয়ারের জন্য যে কোনও মুদ্রণযোগ্য ASCII (32-127) অক্ষর হিসাবে ব্যবহার করতে পারেন। আপনার পছন্দটি ধ্রুব হওয়া দরকার (প্রতিটি পুনরাবৃত্তির জন্য আপনার একই অক্ষরটি ব্যবহার করা উচিত)।

  • প্রাথমিক আউটপুট স্কোয়ারের পার্শ্ব-দৈর্ঘ্য 1 থাকতে হবে

  • একটি আসকি-শিল্প বর্গক্ষেত্রকে এন লাইনের সাথে স্ট্রিং হিসাবে সংজ্ঞায়িত করা হয় ( এন -1 লাইনফিড / নিউলাইন দ্বারা পৃথক ) এবং নির্বাচিত চরিত্রের এন অনুলিপিযুক্ত প্রতিটি লাইনের সাথে ।

  • আপনার আউটপুটে কোনও পিছনের নিউলাইন ব্যতীত কোনও এক্সট্রান্সিয়াস হোয়াইটস্পেস থাকার অনুমতি নেই।

  • আপনি ইনপুট এবং আউটপুট জন্য ডিফল্ট ব্যবহার করতে পারেন (প্রোগ্রাম বা ফাংশন অনুমোদিত, কিন্তু স্নিপেট নেই)।

  • মধ্যম আপনার কোড বিন্দু যেখানে সোর্স কোড দুটি অংশ যেমন যে দুই সমান মধ্যে বিভক্ত করা যেতে পারে হিসাবে সংজ্ঞায়িত করা হয়।

  • আপনার উত্তরগুলি আপনার মূল প্রোগ্রামের দৈর্ঘ্য বাইটে স্কোর করবে । সর্বনিম্ন বাইট গণনা জিতেছে। যদি কোনও টাই থাকে, তবে যে উত্তরটি আগে জমা দেওয়া হয়েছিল তা জয়ী হয়।

  • আপনি নিজের হাতে এটি না করে সন্নিবেশগুলি প্রয়োগ করতে এই প্রোগ্রামটি ব্যবহার করতে পারেন ।


1
আমাকে অবশ্যই স্বীকার করতে হবে যে আমি আগে পোস্ট করা এই কুইন প্রশ্ন থেকে অনুপ্রাণিত হয়েছিলাম । লোকেরা যদি এটি খুব কাছে বলে মনে করে, তবে আমি আনন্দের সাথে এটি মুছে ফেলব। আমি যদি কোনও ভুল করে থাকি তবে আমাকেও ক্ষমা করুন, আমি এখানে নিয়মগুলি নিয়ে খুব বেশি অভিজ্ঞ নই। :)

2
পিপিসিজিতে আপনাকে স্বাগতম! আমি আপনার ভবিষ্যতের চ্যালেঞ্জগুলির জন্য স্যান্ডবক্স ব্যবহার করার পরামর্শ দিচ্ছি ।
ব্যবহারকারী 202729 12

7
সাইটে স্বাগতম! ডুপের জালে না পড়ে অনুপ্রেরণার জন্য অন্য চ্যালেঞ্জের দুর্দান্ত ব্যবহার :)
শেগি

আপনার সহায়ক প্রোগ্রাম একাধিক লাইন সহ প্রোগ্রামগুলির জন্য কাজ করে না। অন্যান্য প্রশ্ন থেকে এই পরিবর্তিত সংস্করণটি সম্পর্কে কীভাবে ?
জো কিং

1
@ user77954 তবে আমার ব্রেইনফাক কোডটি আপনার অজগর থেকে ছোট :( (এর আগে কেউ কি এর আগে কখনও বলেছিল?)
জো কিং

উত্তর:


41

পাইথ , 2 বাইট


5

এটি অনলাইন চেষ্টা করুন! এছাড়াও চেষ্টা করুন এটা দ্বিগুণ , তিনগুণ !

ওটা কিভাবে কাজ করে?

\nএটি হ'ল কমান্ড যা একই সাথে এটি ফেরত দেওয়ার সময় একটি অনুভূত নিউলাইন দিয়ে তার যুক্তিটি প্রিন্ট করে । সুতরাং, প্রতিবার আপনি কোনও সন্নিবেশ করার সময়, আপনি পূর্ণসংখ্যার আক্ষরিক ৫ টি একটি সংখ্যায় পরিণত করেন যা 5 টি কনটেনটেডের এন কপি থাকে , এবং শীর্ষস্থানীয় নিউলাইনগুলি মূলত নিশ্চিত করে নিন যে এটি উপযুক্ত সংখ্যক বার মুদ্রিত হয়েছে, সুতরাং এটি বর্গক্ষেত্র বজায় রেখে keeping


6
পবিত্র
ফ্রিক্সটি

অনুকূলতার প্রমাণ (: পি): যেহেতু বাইট গণনা অবশ্যই সমান এবং নেতিবাচক হতে পারে না, তাই সর্বনিম্ন সম্ভাব্য বাইট গণনাটি 0 বাইট হয়। 0 টি বাইটের ঠিক 1 টি প্রোগ্রাম রয়েছে , যা কার্য সম্পাদন করে না। সুতরাং, 2 বাইট অনুকূল।
মিঃ এক্সকোডার 20

10
প্রত্যেকে (বিশেষত এইচএনকিউ ভোটার), অন্যান্য উত্তরগুলিতেও যান এবং এফজিআইটিডাব্লিউ প্রভাবটি এড়িয়ে যান।
ব্যবহারকারী 202729

25

জাভাস্ক্রিপ্ট (ES6), 42 32 30 বাইট

s=[this.s]+0;  console.log(s);

দ্বিতীয় পুনরাবৃত্তি:

s=[this.s]+0;  s=[this.s]+0;  console.log(s);console.log(s);

একটি সংযোজন করে এই কাজ 0করতে sপ্রতিটি সময় কোড প্রথমার্ধে চালানো হয়, এবং প্রিন্টিং sনিজেই প্রতিটি সময় দ্বিতীয়ার্ধে চালানো হয়। জাভাস্ক্রিপ্ট চার quirks সুবিধা গ্রহণ করে:

  1. বর্তমান পরিবেশের সাথে উল্লেখ করা যেতে পারে this। এটি আমাদের this.sজায়গায় করতে দেয় s
  2. কোনও সম্পত্তি অ্যাক্সেস করার সময় কোনও ত্রুটি নিক্ষেপের পরিবর্তে কোনও বস্তুর উপর সংজ্ঞাযুক্ত নয় এমন জাভাস্ক্রিপ্ট ফিরে আসে undefined
  3. একটি অ্যারে প্লাস সংখ্যার একটি স্ট্রিং প্রদান করে। [1,2,3] + 4 === "1,2,34"
  4. একটি অ্যারে স্ট্রিংফাই undefinedকরার সময়, খালি স্ট্রিংয়ে রূপান্তরিত হয়, যার অর্থ [undefined] + 0 === "0"

একসাথে রাখুন, এর অর্থ হ'ল আমরা প্রথমার্ধটি (শূন্যের একটি স্ট্রিং তৈরি করে) কেবল 13 বাইটে প্রকাশ করতে পারি। alertপরিবর্তে যদি ব্যবহারের console.logঅনুমতি দেওয়া হয় তবে আমরা দ্বিতীয়ার্ধটি সংক্ষিপ্ত করে আরও 4 টি বাইট সংরক্ষণ করতে পারি।


অভিনন্দন, আমি যে পরীক্ষা দিয়েছি তা পাস!

1
... বুদ্ধিমান! :)
শেগি

18

অভিনন্দন, আমি যে পরীক্ষা দিয়েছি তা পাস!

2
টিএফডাব্লু আপনি আসলে জিনিসগুলিকে অতিরিক্ত জটিল করে তোলেন এবং এই উত্তরটি দেখুন।
যাদু অক্টোপাস উরন

17

পাইথন 2 , 42 38 28 বাইট

id='%s@'%id  ;print id[22:];

এটি অনলাইন চেষ্টা করুন! । আপনি 2 য় এবং 3 য় পুনরাবৃত্তি চেষ্টা করতে পারেন


উহ ... চরিত্র, স্ট্রিং নয়।
ব্যবহারকারী 202729

@ ব্যবহারকারী 202729 মাথা আপ করার জন্য ধন্যবাদ, স্থির =]
রড


9

সি (জিসিসি) , 170 168 96 80 72 70 বাইট

অনেক ছোট সংস্করণ। তবুও আশা করি আমি প্রিপ্রোসেসর ছাড়াই সমাধান খুঁজে পেতাম।

i;main(n){for(;i++<n;)printf
#if 0

#endif
(" %*c",n=__LINE__/4, 10);}

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

পুরানো 168 বাইট সংস্করণ:

#ifndef A
#define A p(c){putchar(c);}j,n;main(i){for(
#else
#define A n++,
#endif
A



#ifndef B
#define B i=++n;i--;p(10))for(j=n;j--;)p(64);}
#else
#define B
#endif
B

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



@ ব্যবহারকারী 202729 আহ, হ্যাঁ। ভেবেছিলাম আমি একটি টাইপো ঠিক করেছি তবে একটি বাগ প্রবর্তন করেছি। প্রত্যাবর্তন করা হচ্ছে।
গ্যাস্ট্রোপনার

8

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

False+=1      ;print'*'*False;

এটি অনলাইন চেষ্টা করুন! , 2 য় এবং 3 য় পুনরাবৃত্তি

এটি এই সত্যটি ব্যবহার করে যে পাইথনের বুলগুলি মূলত অন্তর্নির্মিত এবং নাম Falseএবং Trueপাইথন 2 এ পুনরায় স্বাক্ষরযোগ্য ছিল।

পাইথন 1 , 32 বাইট

exit=exit+'*'  ;print exit[30:];

এটি অনলাইন চেষ্টা করুন! , 2 য় এবং 3 য় পুনরাবৃত্তি

পাইথন 1 builtin স্ট্রিং সালে exitএবং quitইন্টারেক্টিভ শেল কিভাবে এটি থেকে প্রস্থান করার জন্য ব্যবহারকারী অবহিত অস্তিত্ব। ডিফল্ট মান "Use Ctrl-D (i.e. EOF) to exit."


1
আমি প্রস্তাব দিতে যাচ্ছিলাম n=False+=1;print'*'*n;, তবে আমি ভুলে যাচ্ছি যে এটি পাইথন বৈশিষ্ট্য নয় ...
ETH প্রোডাকশনগুলি


6

হাস্কেল , 68 বাইট

let s@(z:n)="0\n"in case lines<$>[]of(h:t):_->(h:h:t)>>(z:h++n);_->s

এটি একবার অনলাইনে চেষ্টা করুন , দু'বার বা তিনবার

হাস্কেলের আলস্যতার কারণে উপরের মত একটি অভিব্যক্তি একটি ফাংশন হিসাবে গণ্য হয় যা এই মেটা প্রশ্ন অনুসারে কোনও যুক্তি গ্রহণ করে না ।


5

ব্রেনফাক , 44 34 বাইট

অতিক্রম করা 44 এখনও নিয়মিত 44; (

,>-[<+>---]++++++++++[<]>[.>]<----

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

দ্বিগুণ , তিনগুণ চেষ্টা করুন । দেখো, কোন প্যাডিং নেই!

স্কোয়ারগুলি মুদ্রণ করে U। এটি 10 +s এর ঠিক নীচে বিভক্ত হয় ।



5

ব্রেন-ফ্লাক , 74 বাইট

(((((()()()){}){}){}){})((()()()()()<>){})<>([]){({}[()]<(({})<>)<>>)}{}<>

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

এটি দ্বিগুণ এবং তিনগুণ চেষ্টা করুন

ব্যাখ্যা

(((((()()()){}){}){}){}) # push 48 ("0") onto first stack
((()()()()()<>){})       # push 10 (\n) onto second stack
<>([]){({}[()]<          # a number of times equal to the height of the first stack:
  (({})<>)<>             #   copy the top of the first stack to the second stack
>)}{}<>                  # cleanup and return to second stack

ব্রেক পয়েন্টটি মাঝখানে রয়েছে <> "পুশ 10" বিভাগের । এটি ভেঙে তৃতীয় স্ট্যাকের 5 টি রেখে দেবে যতক্ষণ না আমরা সংশ্লিষ্ট দ্বিতীয়ার্ধে পৌঁছাব, যেখানে 10 ধাক্কা দিয়ে ডানদিকে ফিরে যাওয়া শুরু হবে যেখানে এটি ছেড়ে গেছে।

22 বাইটে মুদ্রণযোগ্য এএসসিআইআই মান (স্পেস) ধাক্কা দেওয়া সম্ভব হলেও এটি কেন্দ্রীয়কে <>চাপ দেওয়ার পরে কার্যকর করা হবে 5। আরও দুটি বাইট যুক্ত করে, আমি সরাতে সক্ষম হয়েছি <>যাতে ধাক্কা দেওয়ার দিকে সমস্ত অগ্রগতি 10তৃতীয় স্ট্যাকের দিকে থাকে। বোনাস হিসাবে, এটি ফলাফলগত বর্গকে আরও নান্দনিকভাবে আনন্দদায়ক করে তুলেছে।



4

টিনাইলিস্প , 112 বাইট

(load library) (d N((q((x)(i x(inc x)1)))(v(h(t(t(h(t(q())))))))))(join(repeat-val(string(repeat-val 42 N))N)nl)

এটি অনলাইন চেষ্টা করুন! এছাড়াও দ্বিগুণ এবং পাঁচগুণ

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

কোডের দ্বিতীয় কপিটি সন্নিবেশ করা হলে, এটি এর অভ্যন্তরে স্থাপন করা হয় (q()), যা এটি একটি তালিকায় আবৃত করে। তারপরে (h(t(t(h(t(...))))))সেই তালিকায় অংশটি ড্রিল করে (d N(v(...))এটি মূল্যায়ন; তারপরে আমরা এটিকে নামবিহীন ফাংশনে প্রেরণ করি (q((x)(i x(inc x)1)))যা ফল সংখ্যাটি যদি এটির সংখ্যা হয় তবে বৃদ্ধি করে এবং খালি তালিকায় যদি 1 প্রদান করে। কোডটির বহিরাগত নেস্টেড সংস্করণে চূড়ান্ত ফলাফল নির্ধারিত হয়N । সংক্ষেপে, আমরা একটি অদ্ভুত পুনরাবৃত্তি সেট আপ করেছি যা নীড়ের স্তরের সংখ্যা গণনা করে।

কোডের দ্বিতীয়ার্ধটি তারপরে নক্ষত্রের একটি স্ট্রিং তৈরি করে Nতারপরে এই Nজাতীয় স্ট্রিংগুলির একটি তালিকা তৈরি করে তারপরে নিউলাইনগুলিতে তালিকার সাথে যুক্ত হয়। ফলাফলটি একটি পিছনের নিউলাইন দিয়ে প্রদর্শিত হয়।


3

আর , 44 বাইট

F=F+1;T=TRUE*TRUE+12;
write(strrep(1,F),"");

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

একটি পেছনের নিউলাইন সহ প্রিন্ট করুন। T=TRUE*TRUE+12শুধু প্যাড দৈর্ঘ্য হয়।

এটি দ্বিগুণ করার চেষ্টা করুন এবং এটি তিনগুণ চেষ্টা করুন


আপনি সেমিকোলনগুলি মুছে ফেলে 2 বাইট অপসারণ করতে পারেন। আমি মনে করি প্রথম লাইনের শেষে একটি জায়গা রয়েছে, যা আপনি একটি প্রতিস্থাপন করতে পারেন #: F=F+1;T=TRUE*TRUE+12#<নিউলাইন>write(strrep(1,F),"")
আন্দ্রে কোস্টায়ারকা

দুর্ভাগ্যক্রমে @ আন্দ্রে কোস্টায়ারকা যেটি 43 বাইট হবে যা সমান নয়।
জিউসেপ


3

SNOBOL4 (CSNOBOL4) , 130 68 বাইট

এখন কোন মন্তব্য নেই! পুরানো অ্যালগরিদমের ব্যাখ্যার জন্য সম্পাদনা ইতিহাস দেখুন ।

	X =X + 1
	A =ARRAY(X,DUPL(1,X));
I	I =I + 1
	OUTPUT =A<I>	:S(I)
END

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

এটি দ্বিগুণ এবং তিনগুণ চেষ্টা করুন

ব্যাখ্যা:

	X =X + 1		;* increment X
	A =ARRAY(X,DUPL(1,X));	;* create an x-length array with 1 repeated x times for each element
I	I =I + 1		;* for i < x
	OUTPUT =A<I>	:S(I)	;* output a[i]
END

যেহেতু একটি ENDলেবেল প্রয়োজনীয় এবং প্রথম ENDলেবেল উপেক্ষা করার পরে যে কোনও কিছুই , আমরা এই চ্যালেঞ্জের জন্য দুটি সুবিধা পেয়েছি:

  • প্রোগ্রামের প্রথমার্ধে অপারেশনগুলি পুনরাবৃত্তির Xজন্য বারবার Xপুনরাবৃত্তি হয়
  • সেখানে (দোভাষীর কাছে) লেবেল সহ কেবলমাত্র দ্বিতীয় অর্ধের একটি অনুলিপি থাকবে ।

এটি পরামর্শ দেয় যে আমরা প্রথম অর্ধের জন্য পুনরাবৃত্তিটি ব্যবহার করি এবং তারপরে আউটপুট Xবার পুনরাবৃত্তি করতে আমরা আরও "প্রচলিত" লেবেলিং পদ্ধতির ব্যবহার করতে পারি ।

প্রথম অর্ধেক হয়

	X =X + 1
	A =ARRAY(X,DUPL(1,X));

যা, যখন বারংবার, বৃদ্ধি Xসময়ের উপযুক্ত নম্বর, এবং একটি সৃষ্টি ARRAY Aথেকে সূচকের সঙ্গে 1থেকে Xএবং যেখানে প্রতিটি উপাদান Aস্ট্রিং 1পুনরাবৃত্তি Xবার।

তারপরেও প্রোগ্রামটি কতবার পুনরাবৃত্তি করা যায়, দোভাষী কেবলমাত্র তা দেখেন:

I	I =I + 1
	OUTPUT =A<I>	:S(I)
END

যা একটি সাধারণ SNOBOL প্রোগ্রাম যা Aসূচকের সীমা ছাড়িয়ে না যাওয়া পর্যন্ত একটির মধ্যে একটির উপাদানগুলির মুদ্রণ করে প্রোগ্রামটি শেষ করে না।

;সাধারণত oneচ্ছিক লাইন টার্মিনেটরটি এক-লাইন EVALবা CODEস্টেটমেন্টগুলির জন্য সংরক্ষিত থাকে যা খুব সুন্দরভাবে বাইট গণনাটি 68 এ নিয়ে আসে এবং অর্ধেকটি বিন্দু চিহ্নিত করে, কোডটি সেখানে যুক্ত করার অনুমতি দেয়।


3

শর্টসি , 56 44 বাইট

-12 বাইট: অপেক্ষা করুন আমি শর্টসি ব্যবহার করছি কেন কিছু সংক্ষিপ্ত সি স্টাফ ব্যবহার করবেন না

s[];A
strcat(s,"@");//
Js);/*filling space*/

আমি স্ট্যান্ডার্ড সি ব্যবহার করতাম, তবে এর একটি }শেষে প্রয়োজন যা প্রতিরূপে মেসে যায়। শর্টসি এটি ইওএফ এ অন্তর্ভুক্ত করে licit


2

পার্ল 5 , 25 বাইট

24 বাইট কোড +1 এর জন্য -p

প্রশংসা করুন যে আপনি কমান্ডলাইন পতাকাগুলি অনুমতি দিতে নাও চাইতে পারেন, দয়া করে এটি আমাকে বৈধ নয় কিনা তা জানান।

$@=0 x++$n;;$_="$@
"x$n;

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



1

Zsh , 10 বাইট

s+=0
<<<$s

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

... হ্যাঁ, এটি কিছুটা ভাল। এন স্ট্রিং এ যুক্ত করুন, তারপরে এন টাইপ করুন। সক্রিয় <<<foo<<<fooকাজ ঠিক আছে।


Zsh , 64 বাইট

অক্ষর ব্যবহৃত: (স্থান)।

f(){printf '%*s\n' $1}
:<<'E'

E
repeat $[i=LINENO/3];f $i
exit

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

মিডপয়েন্টটি দ্বিতীয় Eএবং এটি অনুসরণ করে নতুন লাইনের মধ্যে রয়েছে। Eকোডের ঠিক মাঝখানে ঘটে এমন একটি হেরডোক শেষ হবে a


LOL @ "সামান্য" উন্নতি। এটি প্রকাশ করতে পারেs+=0;<<<$s
রোব্লগিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.