রাটার , 310 বাইট
n=e=$Input;
a=0;
w=While[{m=Modulo[$e];Not[m[1]];}];
w=w[{f=For[4];f=f[@x];f=f[{Print[$e];q=Equal[$x];i=If[{q[1];}];i=i[{k=Times[$e];}];Do[$i];i=If[{q[2];}];i=i[{k=Add[$e];}];Do[$i];i=If[{q[3];}];i=i[{k=Subtract[$e];}];Do[$i];i=If[{q[4];}];i=i[{k=Divide[$e];}];Do[$i];e=k[a=Increment[$a]];}];Do[$f];}];
Do[$w];
এটি অনলাইন চেষ্টা করুন!
এটি প্রায় সময় আমি আবার রুটার ব্যবহার করেছি। দুর্ভাগ্যক্রমে, এটি কোনও কাজের জন্য সেরা ভাষা নাও হতে পারে, কারণ এর কোনও রূপ নেইeval , বিবৃতি দিলে আমাকে চারটি ব্যবহার করতে বাধ্য করে cing
কিভাবে এটা কাজ করে
রুটার কীভাবে কাজ করে
ভাষা কীভাবে কাজ করে তার একটি সংক্ষিপ্ত অগ্রণী: সবকিছুই হয় একটি অ্যাসাইনমেন্ট বা একটি ফাংশন এবং প্রতিটি ফাংশন হ'ল একটি যুক্তি গ্রহণ করে। অপারেশনের জন্য যেগুলির জন্য একাধিক যুক্তি প্রয়োজন (যেমন গুণ), প্রথম কলটি একটি আংশিক ফাংশন প্রদান করে, যখন দ্বিতীয় তর্ক দিয়ে আবার ডাকা হয়, প্রত্যাশিত ফলাফলটি দেয়। উদাহরণ স্বরূপ:
left = Times[5];
Print[left[6]];
30 প্রিন্ট আউট হবে: এটি অনলাইন চেষ্টা করুন!। যদিও এটি সাধারণত বিকল্প বিকল্পের চেয়ে দীর্ঘ হয়, এটি সময়ে সময়ে কোনও ফাংশনকে একটি ধ্রুবক যুক্তি, এবং একটি পরিবর্তিত যুক্তি সহ বারবার বলা হয়, যেমন টাইমস টেবিলগুলি প্রিন্ট করার সময়।
এই একটি যুক্তির নিয়ম লুপ এবং শর্তসাপেক্ষ সহ স্থির বা পরিবর্তনশীল নয় এমন সমস্ত কিছুর জন্য প্রযোজ্য। তবে লুপ এবং শর্তসাপেক্ষে (For , Each, While, DoWhile, Ifএবং IfElse) হয় করা সম্ভব , যার অর্থ, যাতে আসলে তাদের চালানোর জন্য,, Doফাংশন কল করা আবশ্যক (উত্তর শেষ লাইনটি দেখুন)। আবার, বারবার একই লুপটি চালানোর সময় এটি বাইটস সংরক্ষণ করতে পারে, বা লুপের সংজ্ঞা এবং চলমান ব্যবস্থার মধ্যে আপনাকে নির্বিচার কোড চালানোর অনুমতি দেয়।
অবশেষে, ভেরিয়েবলগুলি উল্লেখ করার তিনটি উপায় রয়েছে, যার সবগুলিই এই প্রোগ্রামটিতে ব্যবহৃত হয়। প্রথমটি হ'ল সরাসরি রেফারেন্সিং , যেখানে ভেরিয়েবলের নামটি একটি $প্রতীক সহ উপস্থাপিত হয় । এটি সরাসরি ভেরিয়েবলের মান অ্যাক্সেস করে এবং এটি ফেরত দেয়। দ্বিতীয়টি হ'ল কার্যক্ষম রেফারেন্সিং , যার কোনও উপসর্গের অক্ষর নেই। এটি কোডটি ভেরিয়েবলগুলিকে নির্ধারিত (সম্ভাব্য আংশিক) ফাংশন এবং একটি নির্দিষ্ট মান সহ প্রকৃত ভেরিয়েবলের মধ্যে পার্থক্য করতে দেয়। অবশেষে, অপ্রত্যক্ষ রেফারেন্সিং , @প্রতীক সহ উপস্থাপিত , একটি পরিবর্তনশীল তৈরি করে (যদি এটি ইতিমধ্যে বিদ্যমান না থাকে) এবং প্রদত্ত সুযোগের মধ্যে ভেরিয়েবল অবজেক্টটি প্রদান করে। এই (যেমন আপনি একটি লুপ পরিবর্তনশীল তৈরি করার অনুমতি দেয় iমধ্যে for i in range(...))।
আসল সমাধান কীভাবে কাজ করে
নিখরচায় কোডটি এখানে:
n = elem = $Input;
var = 0;
while = While[{
mod = Modulo[$elem];
Not[mod[1]];
}];
while = while[{
for = For[4];
for = for[@index];
for = for[{
Print[$elem];
equal = Equal[$index];
if = If[{ equal[1]; }];
if = if[{ func = Times[$elem]; }];
Do[$if];
if = If[{ equal[2];}];
if = if[{ func = Add[$elem];}];
Do[$if];
if = If[{ equal[3];}];
if = if[{ func = Subtract[$elem];}];
Do[$if];
if=If[{ equal[4];}];
if=if[{ func = Divide[$elem];}];
Do[$if];
elem = func[var = Increment[$var]];
}];
Do[$for];
}];
Do[$while];
এটি অনলাইন চেষ্টা করুন!
আপনি দেখতে পাচ্ছেন, এটি তিনটি ভেরিয়েবল বরাদ্দ করে শুরু হয় n , eএবং aযা যথাক্রমে ইনপুট, ক্রমানুসারে পরিবর্তন উপাদান, এবং প্রতিটি নতুন উপাদানের জন্য পরিমার্জন সংখ্যা প্রতিনিধিত্ব করে। তারপরে আমরা কিছুক্ষণ লুপ তৈরি করি:
w=While[{m=Modulo[$e];Not[m[1]];}];
ধনুর্বন্ধনী ( {এবং }) কোডের একটি ব্লক সংজ্ঞায়িত করে , যেখানে ব্লকের চূড়ান্ত বিবৃতিটি লুপের জন্য শর্ত is এই ক্ষেত্রে, আমরা একটি আংশিক মডুলো ফাংশন সংজ্ঞা দিয়ে শুরু করি যা দ্বিতীয় যুক্তিতে গ্রহণ করবেm এবং ফিরে আসবে e % m। আমরা তখন সাথে এই আংশিক ফাংশন কল1 তার দ্বিতীয় যুক্তি হিসাবে, ফিরে 0পূর্ণসংখ্যার জন্য এবং ভাসমানগুলির জন্য একটি শূণ্য পূর্ণসংখ্যার ger এরপরে আমরা ম্যাপিং এর যৌক্তিকতাটি গণনা করি না0 → 1 এবং n → 0 , n ≠ 0।
এরপরে আমরা লুপের দেহের সমন্বয়ে নিখুঁত এককথায় আসি:
w=w[{f=For[4];f=f[@x];f=f[{Print[$e];q=Equal[$x];i=If[{q[1];}];i=i[{k=Times[$e];}];Do[$i];i=If[{q[2];}];i=i[{k=Add[$e];}];Do[$i];i=If[{q[3];}];i=i[{k=Subtract[$e];}];Do[$i];i=If[{q[4];}];i=i[{k=Divide[$e];}];Do[$i];e=k[a=Increment[$a]];}];Do[$f];}];
এই লুপের প্রাথমিক অংশটি লুপের জন্য যা পুনরাবৃত্তি হয় 4উইন্ড লুপের প্রতিটি পুনরাবৃত্তির বারবার একটি পুনরাবৃত্তির পরিবর্তনশীল থাকে xএবং এতে থাকে:
Print[$e];
q=Equal[$x];
i=If[{q[1];}];i=i[{k=Times[$e] ;}];Do[$i];
i=If[{q[2];}];i=i[{k=Add[$e] ;}];Do[$i];
i=If[{q[3];}];i=i[{k=Subtract[$e] ;}];Do[$i];
i=If[{q[4];}];i=i[{k=Divide[$e] ;}];Do[$i];
e=k[a=Increment[$a]];
প্রথম বিবৃতিটি ক্রমের প্রতিটি পুনরাবৃত্তি পরিবর্তন করার আগে মুদ্রণ করে। এরপরে আমরা লুপ ভেরিয়েবলের সাথে সাম্যতা যাচাই করার জন্য একটি আংশিক ফাংশন তৈরি করি xএবং বিবৃতি যদি চারটি হয়। প্রতিটি বিবৃতি চেক যদি xহয় যথাক্রমে 1, 2, 3 বা 4 সমান, এবং তারপর নির্ধারণ kপ্রতিটি ফাংশন *, +, -এবং /, তাহলে এটি একটি আংশিক ফাংশন মধ্যে তোলে সঙ্গে eতার আর্গুমেন্ট হিসাবে। শেষ পর্যন্ত, আমরা এটির দ্বিতীয় যুক্তি, এবং বৃদ্ধি হিসাবে চালানোর eজন্য নির্ধারিত করি ।kaa