পাওয়ারপ্রগ্রামিং: ও (1 ^ এন), ও (এন ^ 1), ও (2 ^ এন), ও (এন ^ 2) সমস্ত এক


65

এমন একটি প্রোগ্রাম লিখুন (বা ফাংশন) যা এটি পরিচালিত হয় তার উপর নির্ভর করে চারটি সাধারণ বড় ও টাইম জটিলতা প্রদর্শন করে। কোন ফর্ম এটা একটি ধনাত্মক পূর্ণসংখ্যা এন আপনি অনুমান হতে পারে কম 2 হয় লাগে 31

  1. প্রোগ্রামটি যখন আসল আকারে চালিত হয় তখন এর ধ্রুবক জটিলতা থাকা উচিত । অর্থাৎ জটিলতাটি Θ (1) বা সমতুল্য, (1 ^ N) হওয়া উচিত

  2. প্রোগ্রামটি যখন বিপরীত হয় এবং চালিত হয় তখন এর লিনিয়ার জটিলতা থাকা উচিত । অর্থাৎ জটিলতাটি Θ (এন) বা সমতুল্য Θ (এন ^ 1) হওয়া উচিত
    (যেহেতু বিপরীত হয়েছে N^1এটি বোঝায় 1^N।)

  3. যখন প্রোগ্রাম দ্বিগুণ , অর্থাৎ নিজেই ঘনিভূত, এবং চালানোর এটা থাকা উচিত সূচকীয় জটিলতা, নির্দিষ্টভাবে 2 এন । অর্থাৎ জটিলতাটি Θ (2 ^ N) হওয়া উচিত ।
    (যেহেতু এই জ্ঞান করে তোলে 2মধ্যে 2^Nদ্বিগুণ 1মধ্যে 1^N।)

  4. প্রোগ্রামটি দ্বিগুণ হয়ে গেলে এবং বিপরীত হয়ে চালিত হলে এর বহুপাক্ষিক জটিলতা হওয়া উচিত , বিশেষত এন 2 । অর্থাৎ জটিলতাটি Θ (N ^ 2) হওয়া উচিত ।
    (যেহেতু বিপরীত হয়েছে N^2এটি বোঝায় 2^N।)

এই চারটি কেসই আপনার পরিচালনা করতে হবে।

নোট করুন যে নির্ভুলতার জন্য আমি বড় ও-র পরিবর্তে বড় থিটা (Θ) স্বরলিপি ব্যবহার করছি কারণ আপনার প্রোগ্রামগুলির রানটাইমগুলি প্রয়োজনীয় জটিলতার দ্বারা উপরের এবং নীচে উভয়ভাবে আবদ্ধ হওয়া আবশ্যক। অন্যথায় কেবল ও (1) এ একটি ফাংশন লিখলে চারটি পয়েন্টই সন্তুষ্ট হবে। এখানে উপদ্রবটি বোঝা খুব বেশি গুরুত্বপূর্ণ নয়। মূলত, যদি আপনার প্রোগ্রামটি কিছু ধ্রুবক কে-এর জন্য কে * ফ (এন) অপারেশন করে থাকে তবে সম্ভবত এটি Θ (চ (এন)) এ হতে পারে।

উদাহরণ

যদি আসল প্রোগ্রামটি হত

ABCDE

তারপরে এটি চালানোর জন্য ধ্রুব সময় নেওয়া উচিত। অর্থাৎ ইনপুট এন 1 বা 2147483647 (2 31 -1) বা এর মধ্যে কোনও মানই হোক না কেন, এটি প্রায় একই পরিমাণে সমাপ্ত হওয়া উচিত।

প্রোগ্রামটির বিপরীত সংস্করণ

EDCBA

এন এর ক্ষেত্রে রৈখিক সময় নেওয়া উচিত, এটি সমাপ্ত হতে সময়টি প্রায় N এর সাথে আনুপাতিক হওয়া উচিত N সুতরাং এন = 1 কমপক্ষে সময় নেয় এবং এন = 2147483647 সবচেয়ে বেশি সময় নেয়।

প্রোগ্রামটির দ্বিগুণ সংস্করণ

ABCDEABCDE

এন এর ক্ষেত্রে দ্বি-থেকে-এন সময় নেওয়া উচিত That অর্থাৎ, এটি শেষ হতে সময়টি প্রায় 2 এন এর সমানুপাতিক হওয়া উচিত । সুতরাং যদি এন = 1 প্রায় এক সেকেন্ডের মধ্যে শেষ হয় তবে এন = 60 মহাবিশ্বের সমাপ্ত হতে আরও বেশি সময় লাগবে। (না, আপনি এটি পরীক্ষা করতে হবে না।)

প্রোগ্রামটির দ্বিগুণ এবং বিপরীত সংস্করণ

EDCBAEDCBA

এন এর ক্ষেত্রে স্কোয়ারড সময় নেওয়া উচিত, এটি যে সময়টি শেষ করতে সময় লাগে এটি N * N এর সাথে সমানুপাতিক হওয়া উচিত। সুতরাং যদি এন = 1 প্রায় এক সেকেন্ডে সমাপ্ত হয়, এন = 60 সমাপ্ত হতে প্রায় এক ঘন্টা সময় নিতে পারে।

বিস্তারিত

  • আপনাকে দেখানোর বা তর্ক করতে হবে যে আপনার প্রোগ্রামগুলি যে জটিলতায় আপনি বলছেন তা চলছে। কিছু টাইমিং ডেটা দেওয়া একটি ভাল ধারণা তবে তাত্ত্বিকভাবে জটিলতা কেন সঠিক তা বোঝানোর চেষ্টা করুন।

  • এটি ঠিক আছে যদি অনুশীলনে আপনার প্রোগ্রামগুলির সময়গুলি তাদের জটিলতার (অথবা এমনকি নির্বিচারবাদী) পুরোপুরি প্রতিনিধিত্ব না করে। যেমন ইনপুট N + 1 কখনও কখনও এন এর চেয়ে দ্রুত চলতে পারে

  • আপনি যে পরিবেশে আপনার প্রোগ্রামগুলি চালাচ্ছেন সে বিষয়টি গুরুত্বপূর্ণ। আপনি কীভাবে জনপ্রিয় ভাষাগুলি কখনই অ্যালগরিদমে ইচ্ছাকৃতভাবে সময় নষ্ট করেন না সে সম্পর্কে আপনি প্রাথমিক অনুমানগুলি তৈরি করতে পারেন তবে উদাহরণস্বরূপ, আপনি যদি জাভাগুলির নির্দিষ্ট সংস্করণটি দ্রুত বাছাই করা অ্যালগরিদমের পরিবর্তে বুদ্বুদ সাজানোর বিষয়টি জানেন তবে আপনার যদি কোনও বাছাই করা হয় তবে তা বিবেচনায় নেওয়া উচিত ।

  • এখানে সমস্ত জটিলতার জন্য ধরে নেওয়া যাক আমরা সবচেয়ে খারাপ-পরিস্থিতি সম্পর্কিত পরিস্থিতিতে কথা বলছি , সেরা-ক্ষেত্রে বা গড়-কেস নয়।

  • প্রোগ্রামগুলির স্পেস জটিলতা কোনও বিষয় নয়, কেবল সময়ের জটিলতা।

  • প্রোগ্রামগুলি কিছু আউটপুট করতে পারে। এটি কেবল গুরুত্বপূর্ণ যে তারা ইতিবাচক পূর্ণসংখ্যক N গ্রহণ করে এবং সঠিক সময়ের জটিলতা রয়েছে।

  • মন্তব্য এবং মাল্টলাইন প্রোগ্রাম অনুমোদিত। (আপনি ধরে নিতে পারেন উইন্ডোজ সামঞ্জস্যের জন্য \r\nবিপরীত is\r\n

বিগ হে রিমাইন্ডার

দ্রুত থেকে ধীরে ধীরে এটি O(1), O(N), O(N^2), O(2^N)(উপরে অর্ডার 1, 2, 4, 3)।

ধীর শর্তাবলী সর্বদা আধিপত্য, যেমন O(2^N + N^2 + N) = O(2^N)

O(k*f(N)) = O(f(N))ধ্রুবক কে। তাই O(2) = O(30) = O(1)এবং O(2*N) = O(0.1*N) = O(N)

মনে রাখবেন O(N^2) != O(N^3)এবং O(2^N) != O(3^N)

ঝরঝরে বড় হে ঠকানো শীট।

স্কোরিং

এটি নরমাল কোড গল্ফ। সংক্ষিপ্ততম আসল প্রোগ্রাম (ধ্রুবক এক সময়) বাইট জিতেছে।


দুর্দান্ত প্রশ্ন! গৌণ বিন্দু: আমাদের সবচেয়ে খারাপ-কেস / সেরা-কেস / গড়-কেস নির্দিষ্ট করতে হবে না, কারণ আকার N হিসাবে গণনা করা একমাত্র ইনপুট হ'ল এন নম্বর (যা বিটিডব্লিউ ইনপুট আকারের স্বাভাবিক ধারণা নয়: এটি হবে) ইনপুট এনটিকে আকারের লগ এন হিসাবে গণ্য করুন)। সুতরাং প্রতিটি এন এর জন্য কেবল একটিই মামলা রয়েছে যা একই সাথে সেরা, সবচেয়ে খারাপ এবং গড় কেস।
শ্রীভাতসার

5
মনে হচ্ছে আপনি জটিলতার সাধারণ সংজ্ঞা থেকে বিচ্যুত হয়েছেন। আমরা সবসময় একটি এলগরিদমের সময় জটিলতাটিকে এর ইনপুট আকারের ফাংশন হিসাবে সংজ্ঞায়িত করি । যে ক্ষেত্রে ইনপুটটি একটি সংখ্যা, ইনপুটটির আকারটি হ'ল সেই সংখ্যার বেস -২ লোগারিদম। সুতরাং প্রোগ্রামটির n = input(); for i in xrange(n): passতাত্পর্যপূর্ণ জটিলতা রয়েছে, কারণ এটি 2 ** kপদক্ষেপ নেয় , যেখানে k = log_2(n)ইনপুট আকার। নাটকীয়ভাবে প্রয়োজনীয়তাগুলি পরিবর্তন করার কারণে এটি কেস কিনা তা আপনার স্পষ্ট করা উচিত।
wchargin

উত্তর:


36

পাইথন 3 , 102 বাইট

try:l=eval(input());k=1#)]0[*k**l(tnirp
except:k=2#2=k:tpecxe
print(k**l*[0])#1=k;))(tupni(lave=l:yrt

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

এটি ও (1 ^ n) এর, যেহেতু প্রোগ্রামটি এটি করে:

  • ইনপুট মূল্যায়ন
  • অ্যারে তৈরি করুন [0]
  • এটা ছাপাও

বিপরীত:


try:l=eval(input());k=1#)]0[*l**k(tnirp
except:k=2#2=k:tpecxe
print(l**k*[0])#1=k;))(tupni(lave=l:yrt

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

এটি ও (এন ^ 1) এর, যেহেতু প্রোগ্রামটি এটি করে:

  • ইনপুট মূল্যায়ন
  • অ্যারে তৈরি করুন [0] * ইনপুট (0 ইনপুট হিসাবে বহুবার পুনরাবৃত্তি)
  • এটা ছাপাও

দ্বিগুণ:

try:l=eval(input());k=1#)]0[*k**l(tnirp
except:k=2#2=k:tpecxe
print(k**l*[0])#1=k;))(tupni(lave=l:yrt
try:l=eval(input());k=1#)]0[*k**l(tnirp
except:k=2#2=k:tpecxe
print(k**l*[0])#1=k;))(tupni(lave=l:yrt

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

এটি ও (2 ^ n) এর, যেহেতু প্রোগ্রামটি এটি করে:

  • ইনপুট মূল্যায়ন
  • অ্যারে তৈরি করুন [0]
  • এটা ছাপাও
  • ইনপুট মূল্যায়ন করার চেষ্টা করুন
  • ব্যর্থ
  • অ্যারে তৈরি করুন [0] * (2 ^ ইনপুট) (0 বার 2 বার হিসাবে ইনপুট)
  • এটা ছাপাও

দ্বিগুণ এবং বিপরীত:


try:l=eval(input());k=1#)]0[*l**k(tnirp
except:k=2#2=k:tpecxe
print(l**k*[0])#1=k;))(tupni(lave=l:yrt
try:l=eval(input());k=1#)]0[*l**k(tnirp
except:k=2#2=k:tpecxe
print(l**k*[0])#1=k;))(tupni(lave=l:yrt

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

এটি ও (এন ^ 2) এর, যেহেতু প্রোগ্রামটি এটি করে:

  • ইনপুট মূল্যায়ন
  • অ্যারে তৈরি করুন [0] * ইনপুট (0 ইনপুট হিসাবে বহুবার পুনরাবৃত্তি)
  • এটা ছাপাও
  • ইনপুট মূল্যায়ন করার চেষ্টা করুন
  • ব্যর্থ
  • অ্যারে তৈরি করুন [0] * (ইনপুট ^ 2) (ইনপুট স্কোয়ারের তুলনায় 0 বার বার)
  • এটা ছাপাও

কেন যখন একাধিক কল আসে তখন এটি ব্যবহারকারীর ইন্টারঅ্যাকশনটির জন্য অপেক্ষা করতে থাকে না input()?
জোনাথন অ্যালান

1
এটি এমন একটি ফাঁক যা ট্রান্সমিশনের শেষে "ট্রান্সমিশনের শেষ" সঞ্চারিত হয়?
ফাঁস নুন

1
তুমি কি এটা ব্যাখ্যা করতে পারবে?
ব্রেইন গাইড

1
পুনরায়: "ফাইলের সমাপ্তি" যুক্তি, আপনি জিনিসগুলি পিছনের দিকে তাকাচ্ছেন। আপনি যখন কোনও টার্মিনাল ব্যবহার করছেন, ইনপুটটির জন্য অনুরোধ থাকবে কারণ এটির সাথে কিছু সংযুক্ত রয়েছে; ctrl-D স্পষ্টভাবে কোনও ইনপুট না প্রেরণে প্রেরণ করা যেতে পারে। যদি ইনপুটটি কোনও খালি ফাইলের সাথে সংযুক্ত থাকে (যেমন আপনি যদি ইনপুট বাক্সটি খালি ছেড়ে দেন তবে টিআইও করেন), বা যদি এটি এমন কোনও ফাইলের সাথে সংযুক্ত থাকে যেখানে সমস্ত ইনপুট পড়েছে, কিছু করার জন্য ইনপুটটির অনুরোধের প্রয়োজন নেই; এটি ইতিমধ্যে জানে যে কোনও ইনপুট নেই। ইউনিক্স / লিনাক্সে, "ফাইলের শেষ" এবং "কোনও ইনপুট উপলব্ধ নেই" নিয়মিত ফাইলগুলিতে পৃথক পৃথক।

3
প্রথম kকেসটির জন্য, ইনপুটটি কি এবং lএটি একটি, তাই আপনি এখনও কম্পিউটিং করছেন, তাই 1**kনা? কোনটি গ্রহণ করা উচিত O(log(k))যে সত্য যে তুমি আর আমি এবং সবাই আগাম জানে যে এটা এক সত্ত্বেও?
রিচার্ড রাস্ট

18

পার্ল 5, 82 73 71 + 1 (-n পতাকার জন্য) = 72 বাইট

আমি নিশ্চিত আমি আরও (এটি) আরও গল্ফ করতে পারি, তবে এটি শয়নকাল, আমি যথেষ্ট সময় ডিবাগিংয়ে ব্যয় করেছি এবং এখনও আমার যা আছে তা নিয়ে আমি গর্বিত।

#x$=_$;
$x.=q;#say for(1..2**$_)#)_$..1(rof _$=+x$;;
eval $x;$x=~s/#//;

প্রোগ্রামটি নিজেই ইনপুটটি ব্যবহার করে না, এবং কেবল একটি মন্তব্যে শুরু হওয়া একটি স্ট্রিংকে মূল্যায়ন করে এবং তারপরে একটি একক স্ট্রিং প্রতিস্থাপন করে, তাই এটি ধ্রুবক সময়ে স্পষ্ট। এটি মূলত:

$x="#";
eval $x;
$x=~s/#//;

দ্বিগুণ:

#x$=_$;
$x.=q;#say for(1..2**$_)#)_$..1(rof _$=+x$;;
eval $x;$x=~s/#//;
#x$=_$;
$x.=q;#say for(1..2**$_)#)_$..1(rof _$=+x$;;
eval $x;$x=~s/#//;

যে বিটটি আসলে তাত্পর্যপূর্ণ সময় নেয় সেটি দ্বিতীয় কার্যকারিতা: এটি কমান্ডটি মূল্যায়ন করে say for(1..2**$_), যা 1 থেকে 2 ^ N পর্যন্ত সমস্ত সংখ্যা তালিকাভুক্ত করে, যা স্পষ্টতই সময়সাপেক্ষে সময় নেয়।

বিপরীত:

;//#/s~=x$;x$ lave
;;$x+=$_ for(1..$_)#)_$**2..1(rof yas#;q=.x$
;$_=$x#

এটি (নির্লজ্জভাবে) ইনপুটটির সংশ্লেষকে গণনা করে, যা পরিষ্কারভাবে রৈখিক সময় নেয় (যেহেতু প্রতিটি সংযোজন স্থির সময়ে থাকে)। যে কোডটি আসলে রান হয় তা সমান:

$x+=$_ for(1..$_);
$_=$x;

শেষ লাইনটি ঠিক তাই যাতে এই কমান্ডগুলি পুনরাবৃত্তি হয় তখন এটি চতুর্ভুজ সময় নেয় will

বিপরীত এবং দ্বিগুণ:

;//#/s~=x$;x$ lave
;;$x+=$_ for(1..$_)#)_$**2..1(rof yas#;q=.x$
;$_=$x#
;//#/s~=x$;x$ lave
;;$x+=$_ for(1..$_)#)_$**2..1(rof yas#;q=.x$
;$_=$x#

এটি এখন ইনপুটটির সংমিশ্রণের সংমিশ্রণটি গ্রহণ করে (এবং এটি ইনপুটের সংশ্লেমে যোগ করে, তবে যাই হোক না কেন)। যেহেতু এটি অর্ডার N^2সংযোজন করে, তাই এটি চতুর্ভুজ সময় নেয়। এটি মূলত:

$x=0;
$x+=$_ for(1..$_);
$_=$x;
$x+=$_ for(1..$_);
$_=$x;

দ্বিতীয় লাইন Nসংযোজন করে ইনপুটটির সংমিশ্রণটি আবিষ্কার করে , যখন চতুর্থটি summation(N)সংযোজন করে, যা হয় O(N^2)


গ্রেট! মূলধারার ভাষায় তা করা শক্ত হত! এই আমার উপভোগ আছে!
অর্জুন

ভাল হয়েছে, এটি বেশ সুন্দর। আপনি সম্ভবত এর $x.=q;##say...পরিবর্তে বোঝাতে চেয়েছিলেন $x.=q;#say...( #1 এর পরিবর্তে দুটি সহ )। (এটি আপনাকে ব্যাখ্যা করবে যে কেন আপনি 75 এর পরিবর্তে 76 বাইট গণনা করেছেন)। এছাড়াও, -nআপনার বাইটোকন্টে পতাকাটি গণনা করা উচিত , কারণ আপনার প্রোগ্রামটি এটি ছাড়া খুব বেশি কিছু করে না।
দাদা

@ দাদা আমি ঘটনাক্রমে আদেশ evalএবং s///আদেশগুলি স্থানান্তরিত করেছিলাম । আপনি যদি evalপ্রথমটি করেন তবে আপনার কেবল এটির প্রয়োজন #। ভালো বল ধরা!
ক্রিস

@ ক্রিস রাইট, এটি সত্যই কাজ করে। আপনি শেষটি বাদ দিতে পারবেন #: $x=~s/#//;বিপরীত উত্পাদনগুলি ;//#/s~=x$, যা আপনার প্রেক্ষাপটে কিছুই করে না, যেমন একটি শীর্ষস্থানীয় হিসাবে #। (যদিও আমি এটি পরীক্ষা করিনি)। নির্বিশেষে, একটি +1 করুন!
দাদা

@ দাদা আবার একবার ক্যাচ!
ক্রিস 16

17

আসলে , 20 বাইট

";(1╖╜ⁿr"ƒ"rⁿ@╜╖1(;"

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

ইনপুট: 5

আউটপুট:

rⁿ@╜╖1(;
[0]
5

বিপরীত:

";(1╖╜@ⁿr"ƒ"rⁿ╜╖1(;"

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

আউটপুট:

rⁿ╜╖1(;
[0, 1, 2, 3, 4]
5

দ্বিগুণ:

";(1╖╜ⁿr"ƒ"rⁿ@╜╖1(;"";(1╖╜ⁿr"ƒ"rⁿ@╜╖1(;"

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

আউটপুট:

rⁿ@╜╖1(;
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
rⁿ@╜╖1(;
rⁿ@╜╖1(;
[0]

দ্বিগুণ এবং বিপরীত:

";(1╖╜@ⁿr"ƒ"rⁿ╜╖1(;"";(1╖╜@ⁿr"ƒ"rⁿ╜╖1(;"

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

আউটপুট:

rⁿ╜╖1(;
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
rⁿ╜╖1(;
rⁿ╜╖1(;
[0, 1, 2, 3, 4]

মূল ধারণা

আসলে একটি স্ট্যাক-ভিত্তিক ভাষা।

  • abcO (1 n ) জটিলতাযুক্ত এমন একটি প্রোগ্রাম এবং এর দ্বিগুণে O (2 n ) জটিলতা রয়েছে।
  • defO (n 1 ) জটিলতা রয়েছে এমন একটি প্রোগ্রাম এবং এর দ্বিগুণে O (n 2 ) জটিলতা রয়েছে।

তারপরে, আমার জমাটি "abc"ƒ"fed"কোথায় ƒ, মূল্যায়ন হয়। এইভাবে, "fed"মূল্যায়ন করা হবে না।

স্বতন্ত্র প্রোগ্রাম জেনারেশন

প্রথম উপাদানটির সিউডোকোড ;(1╖╜ⁿr:

register += 1 # register is default 0
print(range(register**input))

দ্বিতীয় উপাদানটির সিউডোকোড ;(1╖╜ⁿ@r:

register += 1 # register is default 0
print(range(input**register))

আমি কখনও ভাবিনি যে এটি সম্ভব হবে! দুর্দান্ত কাজ, স্যার! +1
অর্জুন

@ অর্জুন আপনার প্রশংসা করার জন্য আপনাকে ধন্যবাদ।
ফাঁস নুন

এটি দুর্দান্ত এবং মন্তব্য আইএমও ব্যবহার না করে চ্যালেঞ্জের পক্ষে সত্যই বৃদ্ধি পেয়েছে। অসাধারণ!
শ্রীভাতসার

1
ভাল এটিতে মন্তব্য আছে ... স্ট্রিংগুলি মূল্যহীন এবং এনওপিগুলি ...
লিকি নুন

4

জেলি , 20 বাইট

আংশিকভাবে লিকি নুনের প্রকৃত সমাধান দ্বারা অনুপ্রাণিত ।

শীর্ষস্থানীয় এবং পেছনের নিউলাইনগুলি তাৎপর্যপূর্ণ।

সাধারন:


⁵Ŀ⁵
R
R²
2*R
‘
⁵Ŀ⁵

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

ইনপুট: 5

আউটপুট:

610

বিপরীত:


⁵Ŀ⁵
‘
R*2
²R
R
⁵Ŀ⁵

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

ইনপুট: 5

আউটপুট:

[1, 2, 3, 4, 5]10

দ্বিগুণ


⁵Ŀ⁵
R
R²
2*R
‘
⁵Ŀ⁵

⁵Ŀ⁵
R
R²
2*R
‘
⁵Ŀ⁵

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

ইনপুট: 5

আউটপুট:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]10

দ্বিগুণ এবং বিপরীত


⁵Ŀ⁵
‘
R*2
²R
R
⁵Ŀ⁵

⁵Ŀ⁵
‘
R*2
²R
R
⁵Ŀ⁵

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

ইনপুট: 5

আউটপুট:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]10

ব্যাখ্যা

এখানে কীটি রয়েছে Ŀযার অর্থ "সূচক এন-এ লিঙ্কটিকে একটি মোনাড হিসাবে কল করে।" লিঙ্কগুলি মূল লিঙ্কটি (নীচে-সর্বাধিক এক) বাদ দিয়ে 1 থেকে শুরু করে উপরে থেকে নীচে সূচিযুক্ত হয়। Ŀমডুলারটিও পাশাপাশি, তাই যদি আপনি 5 টি লিঙ্কের মধ্যে লিঙ্ক নম্বরে 7 কল করার চেষ্টা করেন, আপনি আসলে লিঙ্ক 2 কল করবেন।

এই প্রোগ্রামটিতে যে লিঙ্কটি ডাকা হচ্ছে তা হ'ল সূচীতে 10 এ এক ( ) প্রোগ্রামটির কোনও সংস্করণই নয়। যাইহোক, কোন লিঙ্কটি সূচী 10 এ রয়েছে সংস্করণটির উপর নির্ভর করে।

প্রতিটি পরে প্রদর্শিত হবে Ŀআছে যখন বিপরীত তাই এটা লঙ্ঘন করে না। প্রোগ্রামটি পার্স-টাইমে ত্রুটিযুক্ত হবে যদি এর আগে কোনও সংখ্যা না থাকে Ŀ। একটি হচ্ছে পরে জায়গা nilad, যা শুধু সোজা আউটপুট যায় একজন বাইরে।

মূল সংস্করণটি লিঙ্কটি কল করে , যা n + 1 গণনা করে।

বিপরীত সংস্করণটি লিঙ্কটিকে কল করে R, যা 1 ব্যাপ্তি তৈরি করে ... এন।

দ্বিগুণ সংস্করণটি লিঙ্কটিকে কল করে 2*R, যা 2 এন গণনা করে এবং 1 .. 2 এন পরিধি তৈরি করে ।

দ্বিগুণ এবং বিপরীত সংস্করণটি লিঙ্কটিকে কল করে ²R, যা n 2 গণনা করে এবং এর পরিধি 1 .. n 2 জেনারেট করে ।


4

বেফুঞ্জ -98 , 50 বাইট

সাধারণ

\+]#:\-1vk  !:;#
@k!:-1 .: ;#]#$ <;
[*:>@ 
&$< ^&;

এটি এখন পর্যন্ত 4 এর সহজতম প্রোগ্রাম - কেবলমাত্র আদেশগুলি কার্যকর করা হয় যা নিম্নলিখিত:

\+]
  !
  : @
&$< ^&;

"ডানদিকে ডান" কমান্ড ( ]) এবং একটি তীর আঘাতের আগে এই প্রোগ্রামটি কিছু অপ্রাসঙ্গিক স্টাফ করে । তারপরে এটি 2 টি "ইনপুট নিন" কমান্ডকে হিট করে। কারণ ইনপুটটিতে কেবলমাত্র 1 নম্বর রয়েছে এবং টিআইও কীভাবে আচরণ করে &, 60 সেকেন্ড পরে প্রোগ্রামটি প্রস্থান করে। যদি 2 ইনপুট থাকে (এবং কারণ আমি বাইটস যুক্ত না করেই পারি), আইপি "শেষ প্রোগ্রাম" ফাংশনটিতে যেতে পারে।

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

বিপরীত

;&^ <$&
 @>:*[
;< $#]#; :. 1-:!k@
#;:!  kv1-\:#]+\

এটি একটি আরও জটিল। সম্পর্কিত আদেশগুলি নিম্নরূপ:

;&^  $
  >:*[
;< $#]#; :. 1-:!k@
  :

যা সমান

;&^                   Takes input and sends the IP up. the ; is a no-op
  :                   Duplicates the input.
  >:*[                Duplicates and multiplies, so that the stack is [N, N^2
     $                Drops the top of the stack, so that the top is N
     ]#;              Turns right, into the loop
         :.           Prints, because we have space and it's nice to do
            1-        Subtracts 1 from N
              :!k@    If (N=0), end the program. This is repeated until N=0
;< $#]#;              This bit is skipped on a loop because of the ;s, which comment out things

এখানে গুরুত্বপূর্ণ অংশটি হ'ল :. 1-:!k@বিট। এটি দরকারী কারণ যতক্ষণ আমরা স্বল্প সময়ের জটিলতায় মৃত্যুর আগে স্ট্যাকের উপরে সঠিক জটিলতাটি চাপছি ততক্ষণ আমরা পছন্দসইটি পেতে পারি। এটি এইভাবে বাকি 2 টি প্রোগ্রামে ব্যবহৃত হবে।

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

দ্বিগুণ

\+]#:\-1vk  !:;#
@k!:-1 .: ;#]#$ <;
[*:>@ 
&$< ^&;\+]#:\-1vk  !:;#
@k!:-1 .: ;#]#$ <;
[*:>@ 
&$< ^&;

এবং সম্পর্কিত কমান্ডটি হ'ল:

\+]
  !
  :
&$< ^&;\+]#:\-1vk  !:;#
@k!:-1 .: ;#]#$ <;

এই প্রোগ্রামটি 2 লুপগুলিতে যায়। প্রথমত, এটি সাধারন প্রোগ্রামের মতো একই পথ অনুসরণ করে, যা স্ট্যাকের উপরে 1 এবং এন ঠেলে দেয়, তবে দ্বিতীয়টির চারপাশে মোড়কের পরিবর্তে &, আইপি একটি মন্তব্যে ঝাঁপিয়ে পড়ে এমন একটি লুপকে ধাক্কা দেয় 2^N:

        vk!:    If N is 0, go to the next loop.
      -1        Subtract 1 from N
 +  :\          Pulls the 1 up to the top of the stack and doubles it
  ]#            A no-op
\               Pulls N-1 to the top again

4 লাইনে থাকা অন্য বিটগুলি ;এস ব্যবহার করে এড়িয়ে চলেছে

(2 ^ N) স্ট্যাকের দিকে ধাক্কা দেওয়ার পরে, আমরা একটি রেখাটি নীচে উল্লিখিত মুদ্রণের লুপে সরিয়ে নিয়েছি। প্রথম লুপের কারণে, সময়ের জটিলতাটি Θ (N + 2 ^ N), তবে এটি হ্রাস Θ (2 ^ N) হয়।

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

দ্বিগুণ এবং বিপরীত

;&^ <$&
 @>:*[
;< $#]#; :. 1-:!k@
#;:!  kv1-\:#]+\;&^ <$&
 @>:*[
;< $#]#; :. 1-:!k@
#;:!  kv1-\:#]+\

সম্পর্কিত আদেশগুলি:

;&^

;< $#]#; :. 1-:!k@

 @>:*[

  :

এটি বিপরীত প্রোগ্রামের মতো প্রায় একইরূপে কাজ করে তবে এটি N^2স্ট্যাকের বাইরে পপ হয় না কারণ প্রোগ্রামের দ্বিতীয় অনুলিপিটির প্রথম লাইনটি প্রথমটির শেষ লাইনে যুক্ত হয়, যার অর্থ ড্রপ কমান্ড ( $) কখনই কার্যকর হয় না gets , তাই আমরা N^2স্ট্যাকের শীর্ষে প্রিন্টিং লুপে যাই ।

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

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