কয়েক বছর ধরে প্রোগ্রামিং ল্যাঙ্গুয়েজ


167

এই চ্যালেঞ্জের মধ্যে, ব্যবহারকারীরা ক্রমবর্ধমান বয়স্ক হওয়ার মঞ্জুরিপ্রাপ্ত প্রোগ্রামিং ভাষায় তিনটি মোটামুটি সহজ কোডিংয়ের কাজ সম্পূর্ণ করার পালা নেবেন।

প্রথম জবাবটিতে অবশ্যই একটি প্রোগ্রামিং ভাষা ব্যবহার করা উচিত যা ২০১৫ সালে তৈরি হয়েছিল a একবার 2015 ভাষা থেকে কমপক্ষে একটি উত্তর পাওয়া গেলে, উত্তরগুলি 2014 সালে তৈরি হওয়া প্রোগ্রামিং ভাষাগুলি ব্যবহার করতে পারে Similarly একইভাবে, 2013 থেকে যে ভাষাগুলি ব্যবহার করে সেগুলির উত্তর অনুমোদিত নয় কমপক্ষে একটি 2014 উত্তর না হওয়া পর্যন্ত।

সাধারণভাবে, ওয়াই +1 সাল থেকে কোনও ভাষা ব্যবহার করে উত্তর জমা না দেওয়া পর্যন্ত Y বছর থেকে প্রোগ্রামিং ভাষার ব্যবহারের অনুমতি দেওয়া হয় না। একমাত্র ব্যতিক্রম Y = 2015।

আপনার ভাষার বছরের সন্ধান করা

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

উদাহরণস্বরূপ, পাইথন 1991 সালে "তৈরি" হয়েছিল , যদিও এর বিকাশ 1989 সাল থেকে চলছে এবং ১৯৯৪ সাল পর্যন্ত সংস্করণ 1.0 প্রকাশিত হয়নি।

যদি এই বছরটি এখনও সাবজেক্টিভ হয় তবে সর্বাধিক উপযুক্ত বছরটি চয়ন করতে আপনার সাধারণ জ্ঞানটি ব্যবহার করুন। বছরের পছন্দ সম্পর্কে সামান্য মতবিরোধে জড়িয়ে যাবেন না। দয়া করে এমন উত্সের একটি লিঙ্ক সরবরাহ করুন যা জানায় যে আপনার ভাষা কখন তৈরি হয়েছিল।

একটি প্রোগ্রামিং ভাষার বিভিন্ন সংস্করণ বা মান (যেমন পাইথন 1, 2, 3) একই প্রাথমিক বছরের সাথে একই ভাষা হিসাবে গণনা করা হয়।

সুতরাং, আপনার ভাষার বছর 2015 না হলে আপনি কেবল তার উত্তর জমা দিতে পারবেন উত্তরটি জমা দেওয়ার পরে যার ভাষার বছরটি আপনার সামনের বছর।

যদি আপনার একই বছরের সাথে কোনও বৈধ উত্তর ইতিমধ্যে উপস্থিত থাকে তবে আপনি উত্তর দিতে পারেন। আপনার ভাষা বছরের আগে বা পরে বিকশিত হয়েছিল তা বিবেচ্য নয়।

কাজ

আপনাকে অবশ্যই 1 থেকে 3 টি কার্য সম্পূর্ণ করতে হবে Tas কার্য 0 টি alচ্ছিক।

প্রোগ্রামিংয়ের তিনটি গুরুত্বপূর্ণ দিকের সাথে মিল রেখে এই কাজগুলি কমবেশি বেছে নেওয়া হয়েছিল: আউটপুট সরবরাহ করা (টাস্ক 1), লুপিং (কার্য 2), এবং পুনরাবৃত্তি (কার্য 3)।

কার্য 0 - ভাষার ইতিহাস (alচ্ছিক)

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

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

কার্য 1 - "হ্যালো, ওয়ার্ল্ড!" বৈকল্পিক

প্রিন্ট করে এমন একটি প্রোগ্রাম লিখুন

[language name] was made in [year made]!

আপনার ভাষার স্ট্যান্ডার্ড আউটপুট অঞ্চলে (অতি সাম্প্রতিক ভাষার জন্য স্টাডআউট) out

উদাহরণস্বরূপ, ভাষাটি পাইথন হলে আউটপুটটি হত:

Python was made in 1991!

টাস্ক 2 - এএসসিআইআই আর্ট এন

এমন একটি প্রোগ্রাম লিখুন যা ব্যবহারকারীকে একটি বিজোড় ইতিবাচক পূর্ণসংখ্যায় প্রবেশ করতে দেয় (আপনি ইনপুটটি সর্বদা বৈধ বলে ধরে নিতে পারেন), এবং অক্ষরটি ব্যবহার করে তৈরি করা একটি ASCII আর্ট লেটার এন প্রিন্ট করে N

যদি ইনপুটটি হয় 1, আউটপুটটি হ'ল:

N

যদি ইনপুটটি 3 হয়, আউটপুটটি হ'ল:

N N
NNN
N N

যদি ইনপুটটি 5 হয় তবে আউটপুটটি হ'ল:

N   N
NN  N
N N N
N  NN
N   N

যদি ইনপুটটি 7 হয় তবে আউটপুটটি হ'ল:

N     N
NN    N
N N   N
N  N  N
N   N N
N    NN
N     N

প্যাটার্নটি এভাবে চলতে থাকে। আউটপুটটিতে পেছনের স্থান থাকতে পারে।

কার্য 3 - জিসিডি

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

উদাহরণ:

8, 124
12, 84
3, 303
5689, 21
234, 876→ →6

আপনি একটি বিল্ট ইন ফাংশন ব্যবহার করতে পারেন তবে এটি আপনার ভাষার প্রথম সংস্করণে আছে কিনা তা খুঁজে বের করার চেষ্টা করুন। যদি তা না হয় তবে এটি ব্যবহার না করার চেষ্টা করুন।

বিধি

  • আপনি একাধিকবার উত্তর দিতে পারেন, তবে প্রতিটি নতুন উত্তরের অবশ্যই আপনার শেষ উত্তরের ভাষার কমপক্ষে 5 বছর পূর্বে তৈরি একটি ভাষা ব্যবহার করা উচিত। সুতরাং আপনি যদি 2015 এর ভাষা দিয়ে উত্তর দিয়ে থাকেন তবে 2010 টি ভাষা অনুমোদিত না হওয়া পর্যন্ত আপনি আর উত্তর দিতে পারবেন না। আপনি যদি ২০১০ এর উত্তর দিয়ে শুরু করেন তবে আপনি ২০১৫ এর উত্তরটি দ্বিতীয় উত্তরটি তৈরি করতে পারবেন না কারণ ২০১০ এর আগে নয়।
  • যদি সম্ভব হয় তবে আপনার কোডটি লিখুন যাতে এটি আপনার ভাষার প্রথম সংস্করণে (বা যতটা সম্ভব পুরানো সংস্করণ) কাজ করতে পারে। (এটি প্রয়োজনীয়তা নয় কারণ কিছু ভাষার জন্য পুরানো সংকলক / দোভাষী খুঁজে পাওয়া কঠিন হতে পারে))
  • ইতিমধ্যে পোস্ট করা একটি ভাষা পোস্ট করা থেকে বিরত থাকুন যদি না উত্তর উত্তরটিতে উল্লেখযোগ্য ত্রুটি থাকে বা আপনার কাজগুলি সম্পূর্ণ করার একটি খুব আলাদা পদ্ধতি না থাকে।
  • আপনার কোডটি গল্ফ করা ভাল তবে প্রয়োজনীয় নয়।
  • যে কোনও প্রোগ্রামের আউটপুটে একটি ট্রেলিং নিউলাইন ঠিক আছে।
  • কর্ম 2 এবং 3, 2 মত কিছু যুক্তিসঙ্গত সর্বাধিক নিচে সমস্ত ইনপুট মান 16 কাজ করা উচিত (খুব অন্তত 256)।
  • এই প্রশ্নটি পোস্ট করার আগে আপনার ভাষা অবশ্যই বিদ্যমান ছিল।
  • খুব পুরানো প্রোগ্রামিং ল্যাঙ্গুয়েজে আমাদের আজকের ধারণার চেয়ে বিভিন্ন ধরণের ইনপুট এবং আউটপুট থাকতে পারে। ্রফ. আপনার ভাষার প্রেক্ষাপটে আপনার দক্ষতার সর্বোত্তম কাজগুলি সম্পূর্ণ করুন।

স্কোরিং

আপনার জমা দেওয়ার স্কোরটি হ'ল:

upvotes - downvotes + (2015 - languageYear) / 2 

সুতরাং, পুরানো ভাষাগুলিতে সুবিধা প্রদান করে 2015 সালের আগে প্রতি বছর ভোটের গণনায় 0.5 টি যোগ করা হয়। সর্বোচ্চ স্কোর সহ জমাটি জয়লাভ করে।

উত্তর তালিকা

নীচের স্ট্যাক স্নিপেট তাদের ভাষা বছর অনুযায়ী সমস্ত বৈধ উত্তর তালিকাভুক্ত করে।

আপনার পোস্টটি সঠিকভাবে তালিকাভুক্ত করা হয়েছে তা নিশ্চিত করার জন্য আপনাকে এই মার্কডাউন লাইন দিয়ে শুরু করতে হবে:

#[year] - [language name]

উদাহরণ স্বরূপ:

#1991 - Python

ভাষার নাম কোনও লিঙ্কে থাকতে পারে (উত্তর তালিকার মধ্যে এটি একই লিঙ্ক হবে):

#1991 - [Python](https://www.python.org/)

যে উত্তরগুলি এই ফর্ম্যাটটি অনুসরণ করে না, বা এমন এক বছর রয়েছে যা এখনও অনুমোদিত নয়, অথবা এমন কোনও ব্যবহারকারী এসেছেন যা ইতিমধ্যে গত 5 বছরে উত্তর দিয়েছে তা অবৈধ হিসাবে চিহ্নিত হয়েছে।

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script>$(function(){function e(e,r){var a="https://api.stackexchange.com/2.2/questions/48476/answers?page="+e.toString()+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter=!YOKGPOBC5Yad160RQxGLP0r4rL";$.get(a,r)}function r(e){if(e.items.forEach(function(e){var r=e.link,a=e.owner.display_name,i=e.body.match(/<h1\b[^>]*>(\d{4}) - (.*?)<\/h1>/);if(i&&i.length>=3)var h=parseInt(i[1]),u=i[2];h&&u&&n>=h&&h>=t&&(!d.hasOwnProperty(e.owner.user_id)||d[e.owner.user_id]-h>=p)?(d[e.owner.user_id]=h,h==t&&--t,o.hasOwnProperty(h)||(o[h]=[]),o[h].push({language:u,user:a,link:r,score:e.score+(n-h)/2})):s.push(' <a href="'+r+'">'+a+"</a>")}),e.has_more)runQuery(++a,r);else{for(var i=n,h=[];o.hasOwnProperty(i);){for(var u=$("<tr>").append($("<td>").text(i.toString())),l=$("<td>"),c=$("<td>"),g=$("<td>"),f=0;f<o[i].length;f++){var v=o[i][f];l.append(v.language),c.append($("<a>").html(v.user).attr("href",v.link)),g.append(v.score),f+1<o[i].length&&(l.append("<br><br>"),c.append("<br><br>"),g.append("<br><br>"))}u.append(l).append(c).append(g),h.push(u),--i}$("#answers").find("tbody").append(h),s.length>0?$("#invalid").append(s):$("#invalid").remove()}}var a=1,n=2015,t=n-1,p=5,o={},s=[],d={};e(1,r)})</script><style>html *{font-family: Helvetica, Arial, sans-serif;}table{border: 4px solid #a4a; border-collapse: collapse;}th{background-color: #a4a; color: white; padding: 8px;}td{border: 1px solid #a4a; padding: 8px;}div{font-size: 75%;}</style><table id='answers'> <tr> <th>Year</th> <th>Language</th> <th>User (answer link)</th> <th>Score</th> </tr></table><div id='invalid'><br>Invalid Answers:</div>


2
এটি সাহায্য করা উচিত।
ফিটফাট

20
উইকিপিডিয়ায় প্রতিটি কিছুর জন্য একটি তালিকা রয়েছে: এটি বছরের পর বছর অনাবৃত ভাষার জন্য for
সান্চাইজস

2
টাস্ক 3-এ আসলে পুনরাবৃত্তি ব্যবহার করা উচিত বা এটি কি যথেষ্ট ফলাফল করে যা সঠিক ফলাফল দেয়? আমার নিজের জিসিডি ফাংশনটি লিখতে হলে আমি সাধারণত একটি লুপ ব্যবহার করি তবে আমি এই চ্যালেঞ্জের জন্য বিশেষত একটি পুনরাবৃত্ত একটি লিখেছিলাম wrote অনেক জমা দেওয়া উত্তর রয়েছে যা কেবলমাত্র একটি লুপ ব্যবহার করে।
সিজে ডেনিস

5
আমাদের ঠিক
মেরিনাস

5
যদি আমরা এটি 1952-এ ফিরে পেতে পারি তবে আমার কাছে এমন একটি haveতিহাসিক মেশিন রয়েছে যা 1951 (পেগাসাস) সমাধান করতে পারে এবং সেগুলি পরীক্ষা করতে পারে!
ব্রায়ান টম্পসেট - :

উত্তর:


172

2013 - ডোজস্ক্রিপ্ট

ডেজস্ক্রিপ্ট 2013 সালে জাচ ব্রুগম্যান দ্বারা নির্মিত একটি ভাষা। এটি জাভাস্ক্রিপ্টকে মেম্যাটিক শিবা ইনাসের অভ্যন্তরীণ একাঙ্কের মতো পড়ার জন্য সিনট্যাক্স-রিপ্লেসমেন্ট ছাড়া আর কিছু নয়।

হ্যালো ডোজে

console dose loge with "Dogescript was made in 2013!"

এএসসিআইআই আর্ট

such N much N
          much i as 0 next i smaller N next i more 1
              very doge is ("N" + " ".repeat(N-2) + "N").split('')
              s[i] is "N";
              console dose loge with doge.join('')
                              wow
                                      wow

GCD

such gcd_doge much doge, dooge
    rly dooge
              gcd_doge(dooge, doge % dooge)
  but
    rly doge smaller 0
           -doge
    but
          doge
  wow
        wow

112
বাহ, যেমন +1। খুব উত্তর। অনেক গুণ।
অ্যালেক্স এ।

27
আমি এই উত্তরটিকে উঁচু করে তোলার জন্য কোডগল্ফে যোগদান করেছি!
ডেরেক টোমস

21
আমি সরাসরি মুখের সাথে জিসিডিও পড়তে পারি না
কোল জনসন

16
আমি gcd_doge কে ভাল_ডগ হিসাবে পড়তে পারি না। সহায়তা
ইয়ান

ফ্যান্টাস্টিক। তবে, LANGUAGE.md অনুসারে, ডাবল উদ্ধৃতিগুলি সমর্থিত নয়। s[i]বিট একটি ব্যাখ্যা খুব পছন্দ করবে!
ডক্টর

66

2015 - রেটিনা

রেটিনা হ'ল একটি রেজেক্স-ভিত্তিক প্রোগ্রামিং ল্যাঙ্গুয়েজ, যা আমি কিছু হোস্ট ভাষায় রেজেক্সকে কল করার অপ্রয়োজনীয় ওভারহেড না রেখে কেবলমাত্র রেইগেক্স-উত্তর দিয়ে পিপিসিজি চ্যালেঞ্জের সাথে প্রতিযোগিতা করতে সক্ষম হতে লিখেছিলাম। রেটিনা টুরিং-সম্পূর্ণ। এটি প্রমাণ করার জন্য আমি একটি 2-ট্যাগ সিস্টেম সলভারের পাশাপাশি 110 টি বিধি প্রয়োগ করেছি । এটি সি # তে লিখিত হয়েছে, সুতরাং এটি .NET ফ্লেভার (ডিফল্টরূপে) এবং ECMAScript স্বাদ (একটি পতাকা দ্বারা) উভয় সমর্থন করে।

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

নিম্নলিখিত প্রতিটি জমা দেওয়াতে প্রতিটি লাইন পৃথক উত্স ফাইলে যায়। (বিকল্পভাবে, আপনি নতুন -sবিকল্পটি ব্যবহার করতে পারেন এবং সমস্ত লাইন একক ফাইলে রেখে দিতে পারেন)) খালি ফাইল / লাইনগুলি উপস্থাপন করা হয় <empty>। ফাইল / লাইনগুলিতে একটি একক স্থান অন্তর্ভুক্ত হিসাবে উপস্থাপিত হয় <space>

ব্যাখ্যাগুলি বেশ দীর্ঘ, তাই আমি তাদের পোস্টের শেষে সরিয়ে নিয়েছি।

অনুষ্ঠানসমূহ

"ওহে বিশ্ব!" বৈকল্পিক

<empty>
Retina was made in 2015!

এএসসিআইআই আর্ট এন

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

;`^
#
;+`(\d*)#(?:(((((((((9)|8)|7)|6)|5)|4)|3)|2)|1)|0)
$1$1$1$1$1$1$1$1$1$1$2$3$4$5$6$7$8$9$10#
;`#
<empty>
;`\d
N
;`.(?<=(?=(.*\n)).*)|\n
$1
;`N(?=N\n.*\n.*\n`$)
<space>
;+`N(?=.?(.)+\n.* (?<-1>.)+(?(1)!)\n)
<space>
;`(?<=^.*\n.*\nN)N
S
;+`(?<=\n(?(1)!)(?<-1>.)+S.*\n(.)+N?)N
S
S
<space>

GCD

এটির জন্য প্রয়োজন যে একটি নতুন লাইন দিয়ে STDIN সমাপ্ত করা হবে না

;`\b(?=\d)
#
;+`(\d*)#(?:(((((((((9)|8)|7)|6)|5)|4)|3)|2)|1)|0)
$1$1$1$1$1$1$1$1$1$1$2$3$4$5$6$7$8$9$10#
;`#
<empty>
;`\d
1
;`^(.+)\1* \1+$
$1
;`$
#:0123456789
;+`^(?=1)(1*)\1{9}(#(?=.*(0))|1#(?=.*(?<3>1))|11#(?=.*(?<3>2))|111#(?=.*(?<3>3))|1111#(?=.*(?<3>4))|11111#(?=.*(?<3>5))|111111#(?=.*(?<3>6))|1111111#(?=.*(?<3>7))|11111111#(?=.*(?<3>8))|111111111#(?=.*(?<3>9)))
$1#$3
#|:.*
<empty>

ব্যাখ্যা

"ওহে বিশ্ব!" বৈকল্পিক

এটি মোটামুটি তুচ্ছ। এটি কোনও ইনপুট নেয় না (যেমন একটি খালি স্ট্রিং), কোনও কিছুর সাথে মেলে না এবং এর সাথে প্রতিস্থাপন করে Retina was made in 2015![\s\S]*উদাহরণস্বরূপ প্যাটার্নটি প্রতিস্থাপন করে কেউ এটিকে নির্বিচারে ইনপুটটির জন্যও কাজ করতে পারে । এটি STDIN স্লার্প করবে এবং আউটপুটটির সাথে এটির সমস্ত প্রতিস্থাপন করবে।

এএসসিআইআই আর্ট এন

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

;`^
#

সরল: ইনপুটটিতে একটি প্রিপেন্ড #করুন। এটি আনারিতে রূপান্তরিত করতে চিহ্নিতকারী হিসাবে ব্যবহৃত হবে।

;+`(\d*)#(?:(((((((((9)|8)|7)|6)|5)|4)|3)|2)|1)|0)
$1$1$1$1$1$1$1$1$1$1$2$3$4$5$6$7$8$9$10#

এটি এক অঙ্ককে অ্যানারিতে রূপান্তর করে। এটি ইতিমধ্যে রূপান্তরিত অঙ্কগুলি নেয় (\d*)এবং তাদের 10 বার পুনরাবৃত্তি করে। এবং তারপরে এটি পরবর্তী অঙ্কটি নেয় এবং উপযুক্ত সংখ্যার সংযোজন করে। অঙ্কগুলির প্রকৃত মান এই পর্যায়ে অপ্রাসঙ্গিক। যখন #সংখ্যার শেষে পৌঁছে যায়, তখন রেজেক্স আর মেলে না এবং রূপান্তরটি সম্পন্ন হয়। উদাহরণ হিসাবে, নম্বরটি 127হিসাবে প্রক্রিয়া করা হবে

#127
1#27
111111111122#7
1111111111221111111111221111111111221111111111221111111111221111111111221111111111221111111111221111111111221111111111227777777#

যেখানে শেষ লাইনে 127 ডিজিটের অক্ষর রয়েছে।

;`#
<empty>
;`\d
N

দুটি সহজ পর্যায়ে যা এ থেকে মুক্তি পায় #এবং তারপরে সমস্ত অঙ্কগুলিতে রূপান্তর করে N। নিম্নলিখিতটিতে আমি 7উদাহরণ হিসাবে ইনপুট ব্যবহার করব । সুতরাং এখন আমরা পেয়েছি

NNNNNNN

পরবর্তী পর্যায়ে

;`.(?<=(?=(.*\n)).*)|\n
$1

প্রতিটিটিকে Nপুরো স্ট্রিংয়ের সাথে প্রতিস্থাপন করে (মনে রাখবেন এটিতে একটি ট্রেলিং নিউলাইন রয়েছে), এবং নিজেই পিছনের নিউলাইনটি সরিয়ে দেয়। সুতরাং, এটি একক সারিটিকে একটি বর্গাকার গ্রিডে পরিণত করে:

NNNNNNN
NNNNNNN   
NNNNNNN
NNNNNNN
NNNNNNN
NNNNNNN
NNNNNNN

এখন উপরের ত্রিভুজ প্রথমে, নীচের ডান কোণে N কে একটি স্পেসে পরিণত করে আমরা জিনিসগুলি শুরু করি:

;`N(?=N\n.*\n.*\n`$)
<space>

চেহারাটি নিশ্চিত করে যে আমরা সঠিকটি সংশোধন করছি N। এই দেয়

NNNNNNN
NNNNNNN   
NNNNNNN
NNNNNNN
NNNNN N
NNNNNNN
NNNNNNN

এবং এখন

;+`N(?=.?(.)+\n.* (?<-1>.)+(?(1)!)\n)
<space>

একটি রেজেক্স যা Nকোনও স্থানের অক্ষরের উপরে বা উপরে বাম কোণে মিলে যায় এবং একটি স্থান দিয়ে এটি প্রতিস্থাপন করে। প্রতিস্থাপনটির পুনরাবৃত্তি হওয়ার কারণে এটি মূলত একটি বন্যা-ভরস, যা প্রাথমিক স্থান থেকে তৃতীয় অক্টান্টকে আরও স্পেসে পরিণত করে:

N     N
NN    N   
NNN   N
NNNN  N
NNNNN N
NNNNNNN
NNNNNNN

এবং অবশেষে, আমরা নীচের ত্রিভুজ দিয়ে একই জিনিসটি পুনরাবৃত্তি করি, তবে আমরা একটি আলাদা অক্ষর ব্যবহার করি, যাতে ইতিমধ্যে বিদ্যমান স্থানগুলি ভুল বন্যার ভরাটের কারণ না করে:

;`(?<=^.*\n.*\nN)N
S

বীজ সেট করে:

N     N
NN    N   
NSN   N
NNNN  N
NNNNN N
NNNNNNN
NNNNNNN

তারপর

;+`(?<=\n(?(1)!)(?<-1>.)+S.*\n(.)+N?)N
S

বন্যা ভরাট করে

N     N
NN    N   
NSN   N
NSSN  N
NSSSN N
NSSSSNN
NSSSSSN

এবং পরিশেষে

S
<space>

এগুলিকে Sস্থানগুলিতে পরিণত করে এবং আমাদের কাজ শেষ হয়েছে:

N     N
NN    N   
N N   N
N  N  N
N   N N
N    NN
N     N

GCD

অ্যানারিতে জিসিডি আসলে রিজেেক্সের সাথে খুব তুচ্ছ। এর বেশিরভাগটি দশমিক থেকে দশকে রূপান্তরিত থেকে একরকম এবং একাকার হয়ে থাকে। এটি আরও কমপ্যাক্টভাবে করা যেতে পারে তবে এটি কোনও কোড গল্ফ নয়, তাই ...

;`\b(?=\d)
#
;+`(\d*)#(?:(((((((((9)|8)|7)|6)|5)|4)|3)|2)|1)|0)
$1$1$1$1$1$1$1$1$1$1$2$3$4$5$6$7$8$9$10#
;`#
<empty>
;`\d
1

এই স্তরগুলি মূলত উপরের মত একই, উভয় ইনপুট সংখ্যা রূপান্তরিত হয় এবং ফলাফলটি 1s এর পরিবর্তে s ব্যবহার করে N(এটি যে বিষয়টি বিবেচনা করে তা নয়)। সুতরাং যদি ইনপুটটি ছিল 18 24, তবে এটি উত্পাদন করবে

111111111111111111 111111111111111111111111

এখন

;`^(.+)\1* \1+$
$1

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

অবশেষে, দশমিক রূপান্তর থেকে unary ...

;`$
#:0123456789

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

;+`^(?=1)(1*)\1{9}(#(?=.*(0))|1#(?=.*(?<3>1))|11#(?=.*(?<3>2))|111#(?=.*(?<3>3))|1111#(?=.*(?<3>4))|11111#(?=.*(?<3>5))|111111#(?=.*(?<3>6))|1111111#(?=.*(?<3>7))|11111111#(?=.*(?<3>8))|111111111#(?=.*(?<3>9)))
$1#$3

এটি আগে অ্যানারি বিস্তারের বিপরীত। আমরা বর্তমান 10 টির মধ্যে সবচেয়ে বড় একাধিক পাই। তারপরে আমরা বাকীগুলির উপর ভিত্তি করে পরবর্তী অঙ্কটি চয়ন করি, এবং সংখ্যার মাধ্যমে মার্কারটি সরানোর সময় একাধিকটি 10 ​​দ্বারা বিভক্ত করি।

#|:.*
<empty>

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


আমি মনে করি যে আপনাকে সাংখ্যিক ইনপুটটিকে আনারি স্ট্রিংয়ে রূপান্তর করতে নির্দেশনা যুক্ত করা উচিত এবং আনারি স্ট্রিংটিকে সংখ্যার ইনপুটতে রূপান্তর করার নির্দেশনা যুক্ত করা উচিত। খাঁটি রেজেক্সের সাথে রূপান্তরটি দুর্দান্ত তবে অনেকটা জটিল।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

8
+1 আমি বেশ নিশ্চিত যে 2015 জমাটি কোডগল্ফ ব্যবহারের জন্য একটি ভাষা হবে।
জিরো ফাইবার

@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ আমি আগে এটি বিবেচনা করছিলাম। আমি মনে করি বেশিরভাগ কোড গল্ফগুলির জন্য, আমি সম্ভবত কেবল ইউনারি ইনপুট নেব (যদি না চ্যালেঞ্জটি স্পষ্টভাবে "দশমিক" বা কিছু নির্দিষ্ট করে ...)। আমি এর জন্য একই কাজ করার কথা ভেবেছিলাম, তবে এটি কোনও কোড গল্ফ নয়, এবং আমি এটি দেখাতে চেয়েছিলাম যে আমি দশমিক ইনপুট এবং আউটপুটও পরিচালনা করতে পারি।
মার্টিন এন্ডার

6
চমৎকার কাজ. রেটিনা সত্যিই দুর্দান্ত। এবং একপাশে হিসাবে, এটি আপনার নামের পাশে হীরা দেখে সত্যিই দুর্দান্ত! :)
অ্যালেক্স এ।

মজার বিষয় যদিও এই প্রতিযোগিতায় পুরানো ভাষাগুলি পছন্দ করা হয়েছে, তবে এটি সর্বাধিক কনিষ্ঠতম এখনও জিতেছে =)
ক্লাডিউ

60

2013 - স্ন্যাপ !

স্ন্যাপ ! স্ক্র্যাচ ভিত্তিক একটি ভাষা যা বার্কলে বিশ্ববিদ্যালয়ে তৈরি। এটি প্রথম শ্রেণীর ডেটা এবং কাস্টম ব্লক (ফাংশন) সমন্বিত স্ক্র্যাচে আপগ্রেড। স্ক্র্যাচের মতো এটি পাঠ্য ভিত্তিক নয়, বরং দৃশ্যত "ব্লক" দ্বারা সম্পন্ন হয় যা একসাথে স্ন্যাপ করে।

স্ন্যাপ ! , জাভাস্ক্রিপ্টে লিখিত, BYOB এর উত্তরসূরি, যা স্কেক স্মল্টাল্কে লেখা হয়েছিল। স্ন্যাপ ! জনসাধারণের ভোগের উদ্দেশ্যে খালাস বিটা ছিল মার্চ 2013

স্ন্যাপ ! আসলে কোন গুরূত্বপূর্ণ ভাষা নয়। এটি বার্কলে এবং অন্যান্যদের বিউটি অ্যান্ড জয়ের অফ কম্পিউটারিং (বিজেসি) এপি সিএস কোর্সের জন্য প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে ব্যবহৃত হয় ।

আমি পরীক্ষা এবং স্টাফ সাহায্য।

"হ্যালো ওয়ার্ল্ড" বৈকল্পিক

এএসসিআইআই আর্ট "এন"

এখানে চিত্র বর্ণনা লিখুন

এটি কয়েকটি ব্লকের জন্য stdlib ব্যবহার করে।

এখানে খুব বেসিক লুপিং। একটি ইনপুট নেয়। তারপরে আমরা এগুলি কেবল একসাথে যুক্ত করে বলি (এন = 5 এর ফলাফল):

এখানে চিত্র বর্ণনা লিখুন

আমি এখানে 1 এর পরিবর্তে 2 স্পেস ব্যবহার করতে স্বাধীনতা নিয়েছি কারণ স্ন্যাপ! মনোস্পেসে স্টাফ বলে না।

GCD

ইউক্যালিডিয়ান অ্যালগরিদম খুব দ্রুত নয়, তবে এটি কার্যকর হয় এবং এটি খুব সহজ। (দুঃখিত, আমি ব্লকের নামে একটি টাইপ করেছি Now

এখানে চিত্র বর্ণনা লিখুন

এই ফাংশন সংজ্ঞাটি তখন এই ব্লক তৈরি করবে:

এখানে চিত্র বর্ণনা লিখুন


3
এই এলিস মধ্যে প্রোগ্রামিং মত অনেক দেখায় ...
mbomb007

4
এটি আপনি ব্লক ভিত্তিক ভাষাগুলির সাথে পান। এটি আসুন, প্রচুর ভাষা একই রকম দেখায়। ;)
স্কিমোনস্টার

1
এমনকি স্ক্র্যাচের একটি আধুনিক ফাংশন রয়েছে তাই আমি ধরে নিয়েছি যে আপনি যদি (b == 0) উপর ভিত্তি করে একটি ব্লক দিয়ে GCM / GCD ফাংশনটি দ্রুত তৈরি করতে পারেন তবে অন্য কোনও GCM (b, a% b)
অ্যালকিমিস্ট

55

2007 - ললকোড

ভাষার ইতিহাস

ললকোডি 2007 সালে ল্যাঙ্কাস্টার বিশ্ববিদ্যালয়ের গবেষক অ্যাডাম লিন্ডসে তৈরি করেছিলেন। এর সিনট্যাক্সটি চিজবার্গার, ইনক। দ্বারা জনপ্রিয় লোকেটস মেমসের ভিত্তিতে তৈরি is

"ওহে বিশ্ব!" বৈকল্পিক

HAI
VISIBLE "LOLCODE wuz maed in 2007!"
KTHXBYE

এএসসিআইআই আর্ট এন

HAI

BTW, read n from stdin
GIMMEH n

BTW, convert n from YARN to NUMBR
n R PRODUKT OF n AN 1

BOTH SAEM n AN 1, O RLY?
    YA RLY
        VISIBLE "N"
    NO WAI
        VISIBLE "N"!

        I HAS A butt ITZ 1
        IM IN YR toilet UPPIN YR butt TIL BOTH SAEM butt AN DIFF OF n AN 1
            VISIBLE " "!
        IM OUTTA YR toilet

        VISIBLE "N"

        I HAS A kat ITZ 2
        IM IN YR closet UPPIN YR kat TIL BOTH SAEM kat AN n
            VISIBLE "N"!
            BOTH SAEM kat AN 2, O RLY?
                YA RLY
                    VISIBLE "N"!
                NO WAI
                    I HAS A doge ITZ 1
                    IM IN YR l00p UPPIN YR doge TIL BOTH SAEM doge AN DIFF OF kat AN 1
                        VISIBLE " "!
                    IM OUTTA YR l00p
                    VISIBLE "N"!
            OIC

            I HAS A brd ITZ 1
            IM IN YR haus UPPIN YR brd TIL BOTH SAEM brd AN DIFF OF n AN kat
                VISIBLE " "!
            IM OUTTA YR haus

            VISIBLE "N"
        IM OUTTA YR closet

        VISIBLE "N"!

        I HAS A d00d ITZ 1
        IM IN YR lap UPPIN YR d00d TIL BOTH SAEM d00d AN DIFF OF n AN 1
            VISIBLE " "!
        IM OUTTA YR lap

        VISIBLE "N"
OIC

KTHXBYE

স্ট্যান্ডিন ব্যবহার করে মানগুলি স্ট্রিং (YARNs) হিসাবে পড়ে GIMMEH। এগুলিকে 1 দ্বারা গুণিত করে সংখ্যাসূচক (NumbRs) এ রূপান্তর করা যেতে পারে।

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

GCD

HAI

GIMMEH a
a R PRODUKT OF a AN 1

GIMMEH b
b R PRODUKT OF b AN 1

I HAS A d00d ITZ 1
IM IN YR food UPPIN YR d00d TIL BOTH SAEM b AN 0
    I HAS A kitty ITZ a
    I HAS A doge ITZ b
    a R doge
    b R MOD OF kitty AN doge
IM OUTTA YR food

VISIBLE SMOOSH "gcd is " a

KTHXBYE

SMOOSH স্ট্রিং সংক্ষেপণ সম্পাদন করে।


13
অবশেষে, একটি ভাষা প্রত্যেকে বুঝতে পারে।
ASCIIThenANSI

26
IM IN YR toilet UPPIN YR buttদুর্দান্ত পরিবর্তনশীল নাম
কোল জনসন

13
@ColeJohnson: আমি সবসময় বদলে পরিবর্তনশীল নামের যে পরিস্থিতি জানার জন্য চয়ন করতে চেষ্টা x1, x2ইত্যাদি
অ্যালেক্স উ:

2
অত্যধিক হাসিখুশি. কাজের সময় আমার এই পড়া উচিত নয়।
অ্যালান হুভার

@ অ্যালানহুভার: স্পষ্টতই তেহ লোল্জ তেহ জব্জের চেয়ে বেশি গুরুত্বপূর্ণ।
অ্যালেক্স এ।

43

1982 - পোস্টস্ক্রিপ্ট

পোস্টস্ক্রিপ্ট ভেক্টর গ্রাফিক্স তৈরি এবং মুদ্রণের জন্য একটি ভাষা।

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

পোস্টস্ক্রিপ্টকে যে স্ট্যান্ডার্ডটি প্রতিস্থাপন করা হয়েছে তা পিডিএফ নামে পরিচিত একটি অল্প পরিচিত ফর্ম্যাট।

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

পোস্টস্ক্রিপ্ট যেহেতু একটি মুদ্রণের ভাষা, তাই এটি কিছু মুদ্রণের জন্য ব্যবহার করা আরও উপযুক্ত মনে হয় তারপরে কনসোলে আউটপুট প্রেরণ করুন।

কার্যক্রম 1

/Courier findfont
12 scalefont
setfont
newpath

100 370 moveto
(PostScript was made in 1982!\n) show

প্রথম কয়েকটি লাইন আঁকতে একটি ক্যানভাস সেট আপ করেছে। তারপরে movetoকমান্ড পিএসকে একটি নির্দিষ্ট অবস্থানে আঁকতে বলে এবং showপৃষ্ঠায় স্ট্রিংটি মুদ্রণ করে। নোট করুন যে বন্ধনীগুলি পোস্টস্ক্রিপ্টে একটি স্ট্রিং চিহ্নিত করে, উদ্ধৃতি চিহ্ন নয়।

টাস্ক 2

/asciiartN {% stack: N row col
            % output: draws an "ASCII art" N

  % PostScript doesn't allow you to pass variables directly into a function;
  % instead, you have to pass variables via the global stack. Pop the variables
  % off the stack and define them locally.
  6 dict begin
  /row exch def
  /col exch def
  /N exch def

  % Define how much space will be between each individual "N"
  /spacing 15 def

  % Get the width of the "N". We need this to know where to draw the right-hand
  % vertical
  /endcol col spacing N 1 sub mul add def

  % One row is drawn at a time, with the bottom row drawn first, and working
  % upwards. This stack variable tracks which column the diagonal is in, and so
  % we start on the right and work leftward
  /diagcol endcol def

  % Repeat N times: draw one row at a time
  N {
    % Left-hand vertical of the "N"
    col row moveto
    (N) show

    % Right-hand vertical of the "N"
    endcol row moveto
    (N) show

    % Diagonal bar of the "N"
    diagcol row moveto
    (N) show

    % Advance to the next row. This means moving the row one space up, and the
    % diagonal position one place to the left.
    /row row spacing add def
    /diagcol diagcol spacing sub def

  } repeat

  end
} def

1 100 200 asciiartN
3 150 200 asciiartN
5 230 200 asciiartN

আমি "ASCII আর্ট" এন আঁকার জন্য একটি ফাংশন লিখেছি, তবে পোস্টস্ক্রিপ্ট ফাংশনগুলির পক্ষে কোনও যুক্তি নেওয়ার উপায় নেই। পরিবর্তে, আপনি আপনার যুক্তিগুলি স্ট্যাকের দিকে ঠেলাচ্ছেন, তারপরে সেগুলি ফিরিয়ে আনুন। এই /x exch defলাইন।

উদাহরণ: ধরুন স্ট্যাকটি হ'ল 8 9 2। প্রথমে আমরা নামটিকে /xস্ট্যাকের দিকে ঠেলে দিই , তাই স্ট্যাকটি 8 9 2 /xexchঅপারেটর দুই স্ট্যাক মান বিনিময়সমূহ, তাই এখন স্ট্যাক হয় 8 9 /x 2। তারপরে defশীর্ষ দুটি স্ট্যাকের মানগুলি পপ করে এবং /xমানটি নির্ধারণ করে 2। স্ট্যাক এখন 8 9

আমি যখন পোস্টস্ক্রিপ্ট ব্যবহার করা শুরু করলাম তখন আমি এটি কিছুটা বিভ্রান্তিকর দেখতে পেলাম। আমি স্ট্যাকটি সম্পর্কে একটি তাত্ত্বিক ধারণা হিসাবে পড়েছি, তবে এটি প্রথমবার ব্যবহারে ব্যবহার করা হয়েছিল।

ফাংশনটির বাকি অংশটি কিছু অঙ্কন কোড: বাম-থেকে-ডান-থেকে-ডায়াগোনাল থেকে এক সময়ে এক সারি ভরাট ডানদিকের কোণে শুরু করুন।

কার্য 3

/modulo {% stack: x y
         % output: returns (x mod y)
  3 dict begin
  /y exch def
  /x exch def

  % If x = y then (x mod y) == 0
  x y eq {0} {

    % If x < y then (x mod y) == x
    x y lt {x} {

      % If x > y then subtract floor(x/y) * y from x
      /ycount x y div truncate def
      /x x ycount y mul sub def

      /x x cvi def
      x

    } ifelse
  } ifelse
} def

/gcd {% stack: a b
      % returns the gcd of a and b
  2 dict begin
  /b exch def
  /a exch def

  % I'm using the recursive version of the Euclidean algorithm

  % If b = 0 then return a
  b 0 eq {a} {

    % Otherwise return gcd(b, a mod b)
    /a a b modulo def
    b a gcd
  } ifelse

} def

/displaygcd {% stack: a b xcoord ycoord
             % displays gcd(a,b) at position (xcoord, ycoord)
  5 dict begin
  /ycoord exch def
  /xcoord exch def
  /b exch def
  /a exch def
  /result a b gcd def

  xcoord ycoord moveto
  result 20 string cvs show

  % end
} def

8 12 100 80 displaygcd
12 8 150 80 displaygcd
3 30 200 80 displaygcd
5689 2 250 80 displaygcd
234 876 300 80 displaygcd

আবার, আমি ইউক্লিডের অ্যালগরিদমের একটি ফর্ম ব্যবহার করেছি, তবে আমি ভুলে যেতে পারি যে পোস্টস্ক্রিপ্টটির একটি মডুলো অপারেটর রয়েছে, তাই আমাকে নিজের লেখাটি লিখতে হয়েছিল। এটি স্ট্যাক-ভিত্তিক প্রোগ্রামিংয়ের সীমাবদ্ধতার একটি দরকারী অনুস্মারক হিসাবে পরিণত হয়েছিল। আমার প্রথম প্রয়োগটি moduloপুনরাবৃত্তির উপর ভিত্তি করে ছিল:

modulo(x, y)
    if (x = y) return 0
    elif (x < y) return x
    else return module(x - y, y)

আপনি যখন xএটি বড় এবং yছোট হয় এটিকে চালানোর চেষ্টা না করা পর্যন্ত এটি ঠিক আছে (উদাঃ 5689 এবং 2)। আপনার স্ট্যাকের কেবল 250 টি উপাদান থাকতে পারে এবং তাই আমি স্ট্যাকের সীমাটি পেরিয়ে গিয়েছিলাম। উফ। আমাকে সেই ড্রইং বোর্ডে ফিরে যেতে হয়েছিল।

জিসিডি কোড নিজেই মোটামুটি সহজ। তবে ঠিক যেমন ফাংশনগুলি আর্গুমেন্ট নিতে পারে না, সুতরাং তাদের ফেরতের মান নেই। পরিবর্তে, আপনাকে ফলাফলটিকে স্ট্যাকের দিকে ঠেলে দিতে হবে যেখানে পরে অন্য কেউ এটি পপ করতে পারেন। যে কি aএবং b a gcdলাইন করুন: যখন তারা মূল্যায়ন সমাপ্ত করেছি, তারা স্ট্যাকের মান ধাক্কা।

আপনি যদি কোনও ডকুমেন্টে সমস্ত কোড রাখেন এবং এটি মুদ্রণ করেন তবে আউটপুটটি এমন দেখাচ্ছে:

এখানে চিত্র বর্ণনা লিখুন


8
হাহাহা আমি কাগজের মুদ্রিত টুকরাটির ছবি পছন্দ করি। 1982

1
এছাড়াও, কীভাবে আপনি (আক্ষরিক) স্ট্যাক ওভারফ্লো পেয়েছেন তার বিবরণের জন্য ধন্যবাদ - কেন ভাষাগুলির সর্বাধিক পুনরাবৃত্তির গভীরতা রয়েছে তা আমি আরও স্বজ্ঞাতভাবে বুঝতে পারি।
ডিএলসাস

2
@ অ্যালেক্সা: হ্যাঁ, তবে একটি ডট-ম্যাট্রিক্স প্রিন্টআউট (কাগজের পাশে ছিদ্র সহ) আরও উপযুক্ত হ'ল । ;-)
আমোস এম কার্পেন্টার

@ অ্যামোসএম.ক্যারপেন্টার: সত্যই নয়, আমি মনে করি না যে কোনও ডট-ম্যাট্রিক্স প্রিন্টার পোস্টস্ক্রিপ্টকে সমর্থন করেছে। এটি সর্বদা লেজার প্রিন্টারগুলির সাথে বেশ বাঁধা ছিল।
নিনজালজ

41

২০০৯ - > <>

বেফুঞ্জ দ্বারা অনুপ্রাণিত হয়ে,> <> (ফিশ) হ'ল একটি মজাদার স্ট্যাক-ভিত্তিক 2 ডি ভাষা, যেমন প্রোগ্রামের প্রবাহ উপরে, নীচে, বাম বা ডান হতে পারে। প্রাথমিক সংস্করণ> <> দেখানো multithreading যেখানে [এবং ]নির্মিত ও থ্রেড শেষ হয়েছে, কিন্তু সরলতা কারণ এই নির্দেশাবলী তৈরি এবং যথাক্রমে নতুন স্ট্যাকগুলি সরানোর পরিবর্তন করা হয়েছে।

> <> এর জন্য বর্তমান সরকারী দোভাষী এখানে পাওয়া যাবে । দুর্ভাগ্যক্রমে, এসোলাং উইকিতে পুরাতন দোভাষীর লিঙ্কটি নষ্ট হয়ে গেছে।

"ওহে বিশ্ব!" বৈকল্পিক

"!9002 ni edam saw ><>"l?!;obb+0.

স্ট্রিংটি কীভাবে পিছনের দিকে লেখা রয়েছে তা নোট করুন -> <> প্রযুক্তিগতভাবে স্ট্রিং নেই, কেবলমাত্র ডাটা টাইপের সাথে চর, ইনট এবং ফ্লোটের এক অদ্ভুত মিশ্রণ রয়েছে। "স্ট্রিং পার্সিংকে টগল করে প্রতিটি অক্ষর একটি স্ট্রোকের সমাপ্তি অবধি স্ট্যাকের দিকে ঠেলে দেয় "

কোডের দ্বিতীয়ার্ধটি তারপর স্ট্যাকের দৈর্ঘ্যকে ধাক্কা দেয় l, এটি শূন্য কিনা তা পরীক্ষা করে ?!এবং যদি প্রোগ্রামটি শেষ হয়ে যায় ;। অন্যথায় নির্দেশ পয়েন্টারটি অব্যাহত থাকে, oকার্যকর করার আগে স্ট্যাকের শীর্ষে আউটপুট দেয় bb+0., যা পয়েন্টারটিকে (22, 0)ঠিক আগে অবস্থানে নিয়ে যায় l, একটি লুপ তৈরি করে।

এএসসিআইআই আর্ট এন

&0 > :&:&:*=?;  :&:&%  :0=?v  :&:&1-=?v  :{:{-&:&,{=?v   " " o   \

                           > ~"N"o                           v    
   +                                  > ~"N"oao              v    
   1                                                 >"N"o   v    

   \                                                         <   /

স্পষ্টতার জন্য ব্যবধান সহ। আপনি এখানে নতুন অনলাইন ইন্টারপ্রেটারে এটি ব্যবহার করে দেখতে পারেন এবং নির্দেশ পয়েন্টারটি প্রায় কাছাকাছি যেতে পারেন - কেবল "প্রাথমিক স্ট্যাক" পাঠ্য বাক্সে একটি নম্বর লিখতে ভুলবেন না। আপনি যদি পাইথন ইন্টারপ্রেটারের মাধ্যমে চলছেন -vতবে স্ট্যাকটি আরম্ভ করার জন্য পতাকা ব্যবহার করুন , যেমন

py -3 fish.py ascii.fish -v 5

এই প্রোগ্রামের জন্য, আমরা ইনপুট করা nসঙ্গে রেজিস্টার মধ্যে &এবং 0, যা আমরা ডাকবো ধাক্কা i"পুনরাবৃত্তিও" জন্য। প্রোগ্রামের বাকি অংশটি একটি দৈত্য লুপ যা এটির মতো চলে:

:&:&:*=?;          If i == n*n, halt. Otherwise ...
:&:&%              Push i%n
:0=?v              If i%n == 0 ...
>~"N"o               Print "N"
:&:&1-=?v          Else if i%n == n-1 ...
>~"N"oao             Print "N" and a newline
:{:{-&:&,{=?v      Else if i%n == i//n, where // is integer division...
>~"N"o               Print "N"
" "o               Otherwise, print a space
1+                 Increment i

তারপরে আমরা শুরু থেকে লুপটি পুনরাবৃত্তি করি।

তীরগুলি ^>v<প্রোগ্রাম প্রবাহের দিক পরিবর্তন করে এবং আয়নাগুলি /\প্রোগ্রাম প্রবাহের দিক প্রতিবিম্বিত করে।

GCD

>:{:}%\
;n{v?:/
v~@/

গল্ফড> <> প্রোগ্রামটি কেমন দেখতে পারে তার একটি উদাহরণ এখানে। আবারও, আপনি এটি অনলাইন ইন্টারপ্রেটারে চেষ্টা করতে পারেন ("প্রাথমিক স্ট্যাক" বাক্সে দুটি কমা-বিভাজিত মান লিখুন, উদাহরণস্বরূপ 111, 87) বা -vপাইথন ইন্টারপ্রেটারের পতাকা ব্যবহার করে , উদাহরণস্বরূপ

py -3 fish.py gcd.fish -v 111 87

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

এখানে চিত্র বর্ণনা লিখুন

মনে রাখবেন যে> <> টরওডিয়াল, সুতরাং নীচের বাম vনির্দেশটি যখন কার্যকর করা হয় তখন নির্দেশ পয়েন্টারটি নীচের দিকে যায়, চারপাশে মোড়ানো হয় এবং শীর্ষে আবার উপস্থিত হয়।


সম্পাদনা করুন: কোডটি পুরোপুরি ডান থেকে বামে চালিত করে চালিত করে, @randomra এর সাথে তিনটি বাইট শেভ করতে সক্ষম হয়েছে

<~@v!?:%}:{:
;n{/

অনুমান আমি যথেষ্ট গল্ফ না :)


27
এবং এইভাবেই আমি জানতে পারি যে নামটি ><>একটি প্যালিনড্রোম।
জেভ আইজেনবার্গ

33

2012 - উপাদান

এটি এমন একটি ভাষা যা আমি ২০১২ এর প্রথম দিকে একটি সাধারণ গল্ফিংয়ের ভাষা হিসাবে আবিষ্কার করেছি। এর মাধ্যমে, আমি বোঝাতে চাইছি যে কোনও অপারেটর ওভারলোডিংয়ের খুব কম নেই। অপারেটরগুলি বেশিরভাগ আধুনিক গল্ফিং ভাষার তুলনায় সহজ এবং সংখ্যায়ও কম।

এই ভাষার সর্বাধিক আকর্ষণীয় বৈশিষ্ট্য হ'ল এর ডেটা স্ট্রাকচার। আছে দুই stacks এবং একটি হ্যাশ যে তথ্য সংরক্ষণ করতে ব্যবহৃত হয়।

এম-স্ট্যাক হ'ল প্রধান স্ট্যাক, যেখানে পাটিগণিত এবং অন্যান্য বেশিরভাগ অপারেশন হয়। যখন ডেটা ইনপুট করা বা মুদ্রিত করা হয়, এটি এখান থেকে যায় বা এখান থেকে পুনরুদ্ধার করা হয়।

সি-স্ট্যাক হ'ল কন্ট্রোল স্ট্যাক। এখানেই বুলিয়ান পাটিগণিত হয়। সি-স্ট্যাকের শীর্ষ মানগুলি শর্ত হিসাবে যদি এবং যখন লুপগুলি ব্যবহার করে।

হ্যাশটি যেখানে ভেরিয়েবলগুলি সংরক্ষণ করা হয়। ;এবং~ সংরক্ষণ এবং যথাক্রমে হ্যাশ থেকে তথ্য পুনরুদ্ধার।

এলিমেন্ট একটি খুব দুর্বল টাইপের ভাষা। এটি পার্লের ক্ষমতাকে স্ট্রিং এবং তদ্বিপরীত হিসাবে অবাধে ব্যাখ্যা করার ক্ষমতা ব্যবহার করে।

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

OP    the operator.  Each operator is a single character
STACK tells what stacks are affected and how many are popped or pushed
      "o" stands for "other effect"
HASH  tells if it involves the hash
x & y represent two values that are already on the stack, so the effect of
      the operator can be more easily described

OP     STACK  HASH   DESCRIPTION
text     ->m         --whenever a bare word appears, it pushes that string onto 
                       the main stack
_       o->m         --inputs a word and pushes onto main stack
`       m->o         --output.  pops from main stack and prints
xy;    mm->    yes   --variable assignment.  the top stack element y is assigned 
                       the value x
~       m->m   yes   --variable retrieval.  pops from main stack, pushes contents 
                       of the element with that name
x?      m->c         --test. pops x and pushes 0 onto control stack if x is '0' or 
                       an empty string, else pushes 1
><=     m->c         --comparison. pops two numbers off of stack and performs 
                       test, pushes 1 onto control stack if true and 0 if false
'       m->c         --pops from main stack and pushes onto control stack
"       c->m         --pops from control stack and pushes onto main stack
&|     cc->c         --AND/OR. pops two items from control stack, performs and/or 
                       respectively, and pushes result back onto control stack
!       c->c         --NOT. pops a number off of control stack, pushes 1 if 0 or 
                       empty string, 0 otherwise
[]       c           --FOR statement (view the top number number from control stack 
                       and eval those many times)
{}       c           --WHILE (loop until top number on control stack is 0, also 
                       does not pop)
#       m->          --discard. pops from main stack and destroys
(       m->mm        --pops from main stack, removes first character, pushes the 
                       remaining string onto stack, and pushes the removed character 
                       onto stack
)       m->mm        --pops from main stack, removes last character, pushes the 
                       remaining string onto stack, and pushes the removed character 
                       onto stack
+-*/%^ mm->m         --arithmetic. pops two most recent items, adds/negates
                       /multiplies/divides/modulates/exponentiates them, and places 
                       the result on the stack 
xy@    mm->o         --move. pops x and y and moves xth thing in stack to move to 
                       place y in stack
x$      m->m         --length. pops x and pushs length of x onto the stack
xy:    mm->o         --duplication. pops x and y and pushes x onto the stack y times
xy.    mm->m         --concatination. pops x and y and pushes x concatonated with y
\        o           --escapes out of next character, so it isn't an operator and can
                       be pushed onto the stack
,      m->mm         --character conversion. pops from main stack, coverts it to char
                       and pushes, and converts to num and pushes
Newlines and spaces separate different elements to be pushed 
onto the stack individually, but can pushed onto the stack using \

টাস্ক 1 - পাঠ্য প্রিন্ট করুন

Element\ was\ made\ in\ 2012\!`

ভাষার অন্যতম বিশ্রী অংশ হ'ল স্ট্রিং ডিলিমিটারের অভাব, যার কারণেই এই স্ট্রিংয়ে পালানোর অক্ষর প্রয়োজন। দ্য`শেষে স্ট্রিং ছাপে।

টাস্ক 2 - এএসসিআইআই আর্ট এন

_+'[y~1+y;0[1+4:"2:'=1=|y~=|\ [#N]`"#]\
`]

এখানে, আপনি কিছু স্ট্যাক ম্যানিপুলেশন প্রত্যক্ষ করবে। ব্যাখ্যাটি ফর্ম্যাট করতে কিছুটা সহজ করার জন্য, আমি নিউলাইনটিকে একটি Lএবং স্পেসের সাথে একটি প্রতিস্থাপন করব S

_+'[y~1+y;0[1+4:"2:'=1=|y~=|\S[#N]`"#]\L`]
_+'      input line, convert to #, move to c-stack
[        FOR loop
 y~1+y;  increment the y-pos
 0       set the x-pos (the top # on the stack) to zero
 [       FOR loop
  1+4:   increment x-pos and make 3 additional copies (4 is total #)
  "2:'   make a copy of the N size on the main stack
  =      if x-pos == size
  1=     or if x-pos == 1
  y~=|   of if x-pos == y-pos
  \S     (always) push a space
  [      the IF body (technically a FOR loop)
   #N    if true, remove the space and push an N
  ]      end IF
  `      output the pushed character
  "#     remove the result of the conditional
 ]       end x-pos FOR
 \L`     output a newline
]        end y-pos FOR

এই উত্তরের কিছু চরম গল্ফ করার পরে, আমি একটি 39 বাইট সমাধান পেয়েছি, যদিও এটি আরও জটিল।

_'1[y~+y;[#1+3:"2:'%2<y~=|\ [#N]`"]\
`]

কার্য 3 - জিসিডি

__'{"3:~2@%'}`

এটি একটি স্ট্যাক-ভিত্তিক পদ্ধতি।

__                 input the two numbers
  '                use one of the number as a condition so the WHILE loop starts
   {        }      a WHILE loop. Repeats while the c-stack has a true value on top
    "              get the number back from the c-stack to do operations on it
     3:            make it so that there are threes copies on the stack
       ~           takes one of the copies from earlier and converts it to a zero
        2@         take the top item on the stack and move it behind the other two #s
          %        modulo operation
           '       use this number as the condition
             `     since one number is zero (and on the c-stack) print the 
                   other number, which is on m-stack

29

2012 - জুলিয়া

ভাষার ইতিহাস

জুলিয়া 2012 সালে জেফ বেজনসন, স্টেফান কার্পিনস্কি এবং ভাইরাল শাহ দ্বারা বিকাশ করা হয়েছিল, যখন জেফ ম্যাসাচুসেটস ইনস্টিটিউট অফ টেকনোলজির (এমআইটি) ছাত্র ছিলেন, অধ্যাপক অ্যালান এডেলম্যান পরামর্শ দিয়েছিলেন। বিভিন্ন অ্যাপ্লিকেশনগুলিতে ব্যবহারের সহজতা বজায় রাখার জন্য তারা মুক্ত প্রোগ্রাম, দ্রুত এবং গতিশীল (অন্যান্য অনেক কিছুর মধ্যে) একটি প্রোগ্রামিং ভাষার আকাঙ্ক্ষায় অনুপ্রাণিত হয়েছিল। পণ্যটি ছিল জুলিয়া, উচ্চ পারফরম্যান্স বৈজ্ঞানিক কম্পিউটিংয়ের একটি নতুন পদ্ধতি।

"ওহে বিশ্ব!" বৈকল্পিক

println("Julia was made in 2012!")

জুলিয়ায় STDOUT এ মুদ্রণ করা বেশ সহজ!

এএসসিআইআই আর্ট এন

function asciin(n)
    # Create an nxn matrix of spaces
    m = fill(" ", (n, n))

    # Fill the first and last columns with "N"
    m[:,1] = m[:,n] = "N"

    # Fill the diagonal elements with "N"
    setindex!(m, "N", diagind(m))

    # Print each row of the matrix as a joined string
    for i = 1:n
        println(join(m[i,:]))
    end
end

কোডটি পঠনযোগ্যতার জন্য অভিযুক্ত, তবে জুলিয়া হোয়াইটস্পেসে কোনও বিধিনিষেধ আরোপ করে না।

GCD

function g(a, b)
    b == 0 ? a : g(b, a % b)
end

ফাংশনে তালিকাভুক্ত শেষ জিনিসটি সুস্পষ্টভাবে ফিরে আসে।


27

1988 - গণিত

নাকি আমি ওল্ফ্রাম ভাষা বলি ?

কার্য 0

ম্যাথামেটিকার স্রষ্টা হলেন স্টিফেন ওল্ফ্রাম, ওল্ফ্রাম রিসার্চের প্রতিষ্ঠাতা ও সিইও। গণিতের বিকাশের আগে তিনি পদার্থবিদ ছিলেন। পদার্থবিজ্ঞানে প্রচুর পরিমাণে বীজগণিতের গণনা ছিল, তাই তিনি ম্যাকসিমা ব্যবহারকারীর হয়ে উঠলেন ।

উল্ফর্যাম 1979, যখন তিনি 20 তিনি ভাবলেন যে তিনি Macsyma চেয়ে ভাল সি এ এস প্রয়োজন পদার্থবিদ্যা করতে ছিল তার পিএইচডি পেয়েছেন, তাই সে লিখতে শুরু জন্য SMP ("সিম্বলিক ম্যানিপুলেশন প্রোগ্রাম") । এসএমপির প্রথম সংস্করণ 1981 সালে প্রকাশিত হয়েছিল। এসএমপি ম্যাথমেটিকার পূর্বসূর ছিলেন। যদিও এটি গাণিতিকের উপর গভীর প্রভাব ফেলেছিল, এর কোনও কোডই কখনও ম্যাথমেটিকার জন্য ব্যবহৃত হয়নি।

1986 সালে, ওল্ফ্রাম একটি "চূড়ান্ত গণনা সিস্টেম" লেখার সিদ্ধান্ত নিয়েছে। তিনি 1986 সালে কোডটি লেখা শুরু করেছিলেন এবং 1986 সালে ওল্ফ্রাম রিসার্চ প্রতিষ্ঠা করেছিলেন Finally

গণিত ০.০

আমি ম্যাথমেটিক্স 1.0 খুঁজে পাইনি। আসলে ম্যাথামেটিকা ​​০.০ এর উইন্ডোজ বা লিনাক্স সংস্করণ ছিল না। তবে আমি একটি চীনা ওয়েবসাইটে ম্যাথমেটিক্স ২.০ পেয়েছি। এটি এখনও উইন্ডোজ এক্সপিতে চালানো যেতে পারে।

গণিত ২.০

কার্যক্রম 1

Print["Mathematica was made in 1988!"]

বা সহজভাবে:

"Mathematica was made in 1988!"

টাস্ক 2

আজকের গণিতে আমরা লিখতে পারি:

asciiArtN[n_] := Print @@@ SparseArray[{i_, 1 | i_ | n} -> "N", {n, n}, " "]

জুলিয়া এবং আর এর মতো এটিও একটি ম্যাট্রিক্স সমাধান। গাণিতিকায়, আপনি প্যাটার্ন ম্যাচিং ব্যবহার করে একটি বিচ্ছিন্ন ম্যাট্রিক্স সংজ্ঞায়িত করতে পারেন।

যাইহোক, SparseArrayগাণিতিক 5.0 তে প্রবর্তিত হয়েছিল, সুতরাং আমরা ম্যাথমেটেমিয়া 1.0 এ এটি ব্যবহার করতে পারি না।

এখানে ম্যাথমেটিক্স ০.০ তে কাজ করা একটি সমাধান রয়েছে:

asciiArtN[n_] := Block[{f},
  f[i_, 1]  = "N";
  f[i_, i_] = "N";
  f[i_, n]  = "N";
  f[__]     = " ";
  Apply[Print, Array[f, {n, n}], 1];
]

আমরা লিখতে পারি না f[i_, 1 | i_ | n] = "N"কারণ Alternativesম্যাথমেটিক্স ২.০ এ চালু হয়েছিল।

কার্য 3

আমরা কেবল বিল্ট-ইন ফাংশনটি ব্যবহার করতে পারি:

gcd = GCD

বা আমরা GCD এর সংজ্ঞাটি ব্যবহার করতে পারি:

gcd = Max[Intersection @@ Divisors[{##}]] &;

অথবা আমরা LCM ব্যবহার করতে পারি , যদিও সাধারণত LCM কে GCD থেকে গণনা করা হয়:

gcd = Times[##]/LCM[##] &;

অথবা আমরা প্যাটার্ন মিলের সাথে ইউক্লিডিয়ান অ্যালগরিদম ব্যবহার করতে পারি:

gcd[a_, 0] := a
gcd[a_, b_] := gcd[b, Mod[a, b]]

বা বেনামে ফাংশন হিসাবে:

gcd = If[#2 == 0, #1, #0[#2, Mod[##]]] &;

উপরের সমস্ত ফাংশন গাণিতিক ০.০ তে প্রবর্তিত হয়েছিল।


3
এটি আমার চেয়ে অনেক ভাল উত্তর। আমি আমার মুছে ফেলব।
মার্টিন এন্ডার

25

1999 - এক্সএসএলটি

ওয়ার্ল্ড ওয়াইড ওয়েব কনসোর্টিয়াম (W3C) এর এইচটিএমএল, টেক্সট, ইত্যাদি মধ্যে এক্সএমএল রূপান্তর জন্য XSLT নির্মিত নিম্নলিখিত উদাহরণ অনুমান ইনপুট মধ্যে লেখা হয় <input>..</input>ট্যাগ।

কার্যক্রম 1

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" indent="no"/>
  <xsl:template match="/input">XSLT was made in 1999!</xsl:template>
</xsl:stylesheet>

এই এক সহজ। এটি একটি মেলেinput শীর্ষ স্তরের ট্যাগের সাথে এবং এটি পছন্দসই আউটপুট সহ প্রতিস্থাপন করে।

টাস্ক 2

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" indent="no"/>
  <xsl:template match="/input">
    <xsl:call-template name="loop">
      <xsl:with-param name="i">1</xsl:with-param>
      <xsl:with-param name="n">
        <xsl:value-of select="."/>
      </xsl:with-param>
    </xsl:call-template>
  </xsl:template>
  <xsl:template name="loop">
    <xsl:param name="i"/>
    <xsl:param name="n"/>
    <xsl:choose>
      <xsl:when test="$i = 1 or $i = $n">
        <xsl:text>N</xsl:text>
        <xsl:call-template name="spaces">
          <xsl:with-param name="n">
            <xsl:value-of select="$n - 2"/>
          </xsl:with-param>
        </xsl:call-template>
        <xsl:text>N&#13;&#10;</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>N</xsl:text>
        <xsl:call-template name="spaces">
          <xsl:with-param name="n">
            <xsl:value-of select="$i - 2"/>
          </xsl:with-param>
        </xsl:call-template>
        <xsl:text>N</xsl:text>
        <xsl:call-template name="spaces">
          <xsl:with-param name="n">
            <xsl:value-of select="$n - $i - 1"/>
          </xsl:with-param>
        </xsl:call-template>
        <xsl:text>N&#13;&#10;</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="$i &lt; $n">
      <xsl:call-template name="loop">
        <xsl:with-param name="i">
          <xsl:value-of select="$i + 1"/>
        </xsl:with-param>
        <xsl:with-param name="n">
          <xsl:value-of select="$n"/>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
      <xsl:template name="spaces">
    <xsl:param name="n"/>
    <xsl:if test="$n &gt; 0">
      <xsl:text> </xsl:text>
      <xsl:call-template name="spaces">
        <xsl:with-param name="n">
          <xsl:value-of select="$n - 1"/>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

এটি একটি 2 পুনরাবৃত্তাকার টেম্পলেট সংজ্ঞা দেয় loopএবং spacesloopপরামিতি সহ iএবং অবস্থান থেকে শুরু করে এর nজন্য পছন্দসই আউটপুট উত্পন্ন করবে । প্যারামিটার সহ উত্পন্ন হবেnispacesnn স্পেস ।

কার্য 3

এর জন্য ইনপুট অবশ্যই <input><num>..</num><num>..</num></input>ট্যাগগুলিতে থাকতে হবে ।

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" indent="no"/>
  <xsl:template match="/input">
    <xsl:call-template name="gcd">
      <xsl:with-param name="a"><xsl:value-of select="num[1]"/></xsl:with-param>
      <xsl:with-param name="b"><xsl:value-of select="num[2]"/></xsl:with-param>
    </xsl:call-template>
  </xsl:template>
  <xsl:template name="gcd">
    <xsl:param name="a"/>
    <xsl:param name="b"/>
    <xsl:choose>
      <xsl:when test="$b = 0"><xsl:value-of select="$a"/></xsl:when>
      <xsl:otherwise>
        <xsl:call-template name="gcd">
          <xsl:with-param name="a"><xsl:value-of select="$b"/></xsl:with-param>
          <xsl:with-param name="b"><xsl:value-of select="$a mod $b"/></xsl:with-param>
        </xsl:call-template>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

এটি কেবলমাত্র একটি পুনরাবৃত্তাকার টেম্পলেট gcdযা ইউক্যালিডিয়ান অ্যালগরিদম ব্যবহার করে।


এবং তারা বলে ইন্টারকল অদ্ভুত!
kirbyfan64sos

2
@ kirbyfan64sos ন্যায্য হওয়ার জন্য, এটি যাইহোক এই জিনিসগুলির জন্য ব্যবহার করা উচিত নয় ...
LegionMammal978

24

2014 - সিজেএম

সিজাম পিপিসিজি ব্যবহারকারী আদিতসু দ্বারা নির্মিত হয়েছিল এবং এপ্রিল 2014 সালের দিকে প্রকাশিত হয়েছিল ।

"ওহে বিশ্ব!" বৈকল্পিক

"CJam was made in 2014!"

প্রোগ্রামের শেষে সিজেএম স্বয়ংক্রিয়ভাবে স্ট্যাকের সামগ্রীগুলি মুদ্রণ করে

এএসসিআইআই আর্ট এন

ri:R'#*a_R2-,{_)S*'#+\R((-zS*+}%+\+R<zN*

কোড ব্যাখ্যা:

ri:R                                       "Read the input as integer in R";
    '#*a                                   "Get a string of R # and wrap it in an array";
        _R2-,{                }%           "Copy that string and then run this loop R-2";
                                           "times for the diagonal";
              _)S*                         "Get iteration index + 1 spaces";
                  '#+                      "Append the hash";
                     \R((-zS*+             "Append remaining spaces";
                                +\+        "Append and prepend the initial # string";
                                   R<      "Take only R columns/rows. This is for";
                                           "tackling input 1";
                                     zN*   "Transpose and join with new lines";

এসটিডিএন এর মাধ্যমে এন এর উচ্চতা / প্রস্থকে ইনপুট হিসাবে নিয়ে যায়। এটি এখানে অনলাইনে চেষ্টা করুন

GCD

l~{_@\%}h;

এসটিডিএন এর মাধ্যমে দুটি সংখ্যা ইনপুট হিসাবে নেয়। এটি এখানে অনলাইনে চেষ্টা করুন


আমি বুঝতে পেরেছি যে এটি [কোড-গল্ফ] নয়, তবে আপনি ASCII-art N প্রোগ্রামটি ছোট করে ri_S*0'NtW'Nta1$*\,Sf*'Nf+..e>N*আধুনিক সিজেমে করতে পারেন।
Esolanging ফল

24

1990 - হাস্কেল

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

কার্যক্রম 1

main = putStrLn "Haskell was made in 1990!"

টাস্ক 2

-- Infinite list of growing letters 'N'
bigNs :: [[[Char]]]
bigNs = ["N"]
      : ["NN","NN"]
      : [ ins (ins 'N' t) $ map (ins ' ') n | n@(t:_) <- tail bigNs ]

-- Insert a new element after the head (i.e. at the second position).
ins :: a -> [a] -> [a]
ins x (l:ls) = l:x:ls

ডেমো, পুরো অসীম তালিকা মুদ্রণ করুন (যতক্ষণ না ব্যবহারকারী অবরুদ্ধ হয়, বা বিশ্ব শেষ হয় না ...)

GHCi> mapM_ (putStrLn . unlines) bigNs
N

NN
NN

N N
NNN
N N

N  N
NN N
N NN
N  N

N   N
NN  N
N N N
N  NN
N   N

N    N
NN   N
N N  N
N  N N
N   NN
N    N

...

অবশ্যই, আপনি অনন্ত তালিকার কেবল একটি উপাদান অ্যাক্সেস করে সহজেই এর মধ্যে একটিতে পৌঁছাতে পারেন:

main :: IO ()
main = do
   i <- readLn
   putStrLn . unlines $ bigNs!!i

কার্য 3

gcd' :: Integer -> Integer -> Integer
gcd' a 0 = a
gcd' a b = gcd' b $ a`mod`b

23

1972 - INTERCAL

এবং আপনি ভেবেছিলেন ফোর্টরান এবং কোবোল অদ্ভুত। এই উন্মাদ হয়!

কার্যক্রম 1

DO ,1 <- #27
DO ,1SUB#1 <- #110
DO ,1SUB#2 <- #32
DO ,1SUB#3 <- #72
PLEASE DO ,1SUB#4 <- #136
DO ,1SUB#5 <- #88
DO ,1SUB#6 <- #136
PLEASE DO ,1SUB#7 <- #64
DO ,1SUB#8 <- #80
DO ,1SUB#9 <- #46
PLEASE DO ,1SUB#10 <- #22
DO ,1SUB#11 <- #104
DO ,1SUB#12 <- #184
PLEASE DO ,1SUB#13 <- #202
DO ,1SUB#14 <- #78
DO ,1SUB#15 <- #48
PLEASE DO ,1SUB#16 <- #96
DO ,1SUB#17 <- #128
DO ,1SUB#18 <- #162
PLEASE DO ,1SUB#19 <- #110
DO ,1SUB#20 <- #32
DO ,1SUB#21 <- #114
PLEASE DO ,1SUB#22 <- #120
DO ,1SUB#23 <- #240
DO ,1SUB#24 <- #128
PLEASE DO ,1SUB#25 <- #208
DO ,1SUB#26 <- #200
DO ,1SUB#27 <- #52
DO READ OUT ,1
DO GIVE UP

আমি ইন্টারপালের ইনপুট এবং আউটপুট সিস্টেম ব্যাখ্যা করার চেষ্টা করতে যাচ্ছি না; শুধু পড়া এই এবং আশা করি আপনি মারা যাবেন না।

টাস্ক 2

DO WRITE IN 7
DO .1 <- .7
DO .2 <- #1
PLEASE DO (1010) NEXT
DO .8 <- .3
DO .5 <- .7
DO .6 <- .8
DO ,9 <- #2

DO (100) NEXT
DO (1) NEXT

(100) DO (99) NEXT
DO ,9SUB#1 <- #142
DO ,9SUB#2 <- #114
PLEASE DO READ OUT ,9
DO ,9SUB#1 <- #176
DO ,9SUB#2 <- #80
PLEASE DO READ OUT ,9
PLEASE GIVE UP

(99) DO .1 <- .7
DO .2 <- #1
PLEASE DO (1010) NEXT
DO .1 <- '.3~.3'~#1
PLEASE DO FORGET .1
DO RESUME #1

(1) PLEASE DO (3) NEXT
PLEASE DO FORGET #1
DO (1) NEXT

(3) DO (4) NEXT
PLEASE GIVE UP

(4) DO (8) NEXT
DO ,9SUB#1 <- #176
DO ,9SUB#2 <- #80
PLEASE DO READ OUT ,9
DO .6 <- .8
DO .1 <- .5
DO .2 <- #1
DO (1010) NEXT
DO .5 <- .3
DO .1 <- '.5~.5'~#1
PLEASE DO FORGET .1
DO RESUME #1

(8) DO (5) NEXT

(5) PLEASE DO (6) NEXT
PLEASE DO FORGET #1
DO (5) NEXT

(6) PLEASE DO (7) NEXT
DO RESUME #2

(7) DO (10) NEXT
DO .1 <- .6
DO .2 <- #1
PLEASE DO (1010) NEXT
DO .6 <- .3
DO .1 <- '.6~.6'~#1
PLEASE DO FORGET .1
DO RESUME #1

(10) DO (11) NEXT
DO (13) NEXT
DO (14) NEXT
DO (15) NEXT

(11) DO (111) NEXT
DO (112) NEXT

(13) DO (113) NEXT
DO (112) NEXT

(14) DO (114) NEXT
DO (112) NEXT

(111) DO .1 <- .6
DO .2 <- .8
DO (1010) NEXT
DO .1 <- '.3~.3'~#1
PLEASE DO FORGET .1
DO RESUME #1

(112) DO ,9SUB#1 <- #142
DO ,9SUB#2 <- #114
PLEASE DO READ OUT ,9
DO RESUME #3

(113) DO .1 <- .6
DO .2 <- #1
DO (1000) NEXT
DO .1 <- .5
DO .2 <- .3
DO (1010) NEXT
DO .1 <- '.3~.3'~#1
PLEASE DO FORGET .1
DO RESUME #1

(114) DO .1 <- '.6~.6'~#1
PLEASE DO FORGET .1
DO RESUME #1

(15) DO ,9SUB#1 <- #252
DO ,9SUB#2 <- #4
PLEASE DO READ OUT ,9
DO RESUME #2

করুণাময় উদারতা. এটি আমাকে কিছুটা বের করতে লাগল। লেবেল নম্বরগুলি একটি জগাখিচুড়ি এবং তাই এটি প্রতিফলিত করে। কেউ জিজ্ঞাসা না করে আমি এটি ব্যাখ্যা করার চেষ্টা করব না।

কার্য 3

DO WRITE IN .5
DO WRITE IN .6

DO (1) NEXT

(1) PLEASE DO (3) NEXT
DO FORGET #1
DO (1) NEXT

(3) DO (4) NEXT
DO READ OUT .5
PLEASE GIVE UP

(4) DO .1 <- .5
DO .2 <- .6
PLEASE DO (1040) NEXT
DO .1 <- .3
DO .2 <- .6
PLEASE DO (1039) NEXT
DO .2 <- .3
DO .1 <- .5
DO (1010) NEXT
DO .5 <- .6
DO .6 <- .3
DO .1 <- '.6~.6'~#1
PLEASE DO FORGET .1
DO RESUME #1

এটি একটি বাচ্চা সহজ। ইন্টারকলের ... অদ্ভুততার কারণে, আপনাকে এই জাতীয় নম্বরগুলি প্রবেশ করতে হবে:

THREE FIVE

উদাহরণস্বরূপ, 42 এবং 16 এর জিসিডি পেতে, আমি প্রবেশ করবো:

FOUR TWO
ONE SIX

এটি রোমান সংখ্যায় সংখ্যাটিও মুদ্রণ করে ... কারণ এটি আপনার জন্য আন্তরিক!


2
এটি 19 7 2 হওয়া উচিত নয় ? (এটি লেখার পরে যদি আপনি খানিকটা চঞ্চল হন তবে আমি বুঝতে পারি: পি) এই উত্তরটির কারণে আপনার উত্তরটি অবৈধ বলে বিবেচিত হবে, যা লজ্জাজনক হবে।
মেরিনাস 21

@ মারিনাস আপনাকে ধন্যবাদ! সংশোধন করা হয়েছে!
kirbyfan64sos 21

5
দয়া করে ব্যাখ্যা করুন। (আপনার কাছে সময় থাকলে অবশ্যই।;)
DLosc

1
ইন্টারকল আমার প্রিয় ভাষা যা আমি কখনও শিখিনি!
সিজে ডেনিস

1
PLEASE GIVE UP। আমি এটি ইতিমধ্যে করেছি .-।
রেডক্লুভার

23

1967 - এপিএল

১৯৫7 সালে হার্ভার্ড বিশ্ববিদ্যালয়ে কেন আইভারসন অ্যারে হেরফেরের জন্য একটি গাণিতিক স্বরলিপি বিকাশ শুরু করেছিলেন। 1960 এর দশকে, তাঁর স্বীকৃতি আইবিএম-তে একটি প্রোগ্রামিং ভাষায় রূপান্তরিত হয়েছিল। প্রথম আংশিক বাস্তবায়ন ১৯63৩ সালে তৈরি হয়েছিল এবং এটি এমনকি উচ্চ বিদ্যালয়ে শিক্ষার্থীদের ট্রান্সসেন্টেন্টাল ফাংশন সম্পর্কে শেখানোর জন্য ব্যবহৃত হয়েছিল। একটি পূর্ণ, ব্যবহারযোগ্য প্রয়োগের জন্য 1965 সাল পর্যন্ত অপেক্ষা করতে হয়েছিল two দুই বছর এটি কেবলমাত্র আইবিএম দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত হয়েছিল। ১৯6767 সালে, আইবিএম জনগণের কাছে একটি এপিএল অনুবাদক প্রকাশ করেছিল যা আইবিএম ১১৩০ কম্পিউটারে চলেছিল, যা ১৯ finished finished সালে শেষ হয়েছিল। আপনি বুঝতে পারেন যে এর জন্য একটি বছর বেছে নেওয়া কীভাবে কঠিন, তবে আমি মনে করি এটি 1967 হওয়া উচিত, যেহেতু এই প্রথম বছরটি একটি সম্পূর্ণ বাস্তবায়ন জনসাধারণের জন্য উপলব্ধ করা হয়েছিল। যদি সত্যিই কেউ একমত না হন তবে আমি এটি পরিবর্তন করতে পারি।

একটি এমুলেটর হিসাবে APL \ 360 এর উত্স কোডটি অনলাইনে রয়েছে । এই উদাহরণগুলি পরীক্ষা করার জন্য আমি এটি ব্যবহার করেছি। এটি 1967 সালের, এবং এপিএল \ 1130 সহ (পূর্বোক্ত আইবিএম 1130 এর জন্য) এটি আসল কম-বেশি less যেমনটি প্রত্যাশিত, এটি খুব আদিম is এটা যেমন শিষ্টাচার ছোট হাতের অক্ষর যেমন, কোনো অপারেটর সমর্থন অভাব আছে শুধুমাত্র builtin ফাংশন সঙ্গে কাজ করে এবং builtin ফাংশন সেট খুব বিক্ষিপ্ত আছে (বিশেষ করে, হয় শুধুমাত্র or , এবং নেই না হিসাবে দ্বিগুন gcd)। মূল, পূর্ণ বিবরণ পাওয়া যায় এখানে , কিন্তু, আমি লক্ষ্য করেছি যে সংস্করণ আমার কাছে তা থাকত উদাসীন, যে নথি থেকে সম্মান সঙ্গে এমনকি সম্পূর্ণ নয় প্রমুখ।

আমি প্রোগ্রামগুলি উভয়ই ইউনিকোড বিন্যাসে সরবরাহ করেছি (যাতে আপনি সেগুলি পড়তে পারেন), এবং মূল এনকোডিংয়ে (যাতে আপনি এটিকে এমুলেটরের এপিএল উইন্ডোতে কেটে পেস্ট করতে পারেন)।

অবিশ্বাস্যভাবে, এই প্রোগ্রামগুলি ডায়ালগ, এনএআরএস 2000 এবং জিএনইউ এপিএলের আধুনিক সংস্করণগুলিতে কোনও পরিবর্তন ছাড়াই (এনকোডিং ব্যতীত) সঠিকভাবে চলে। সুতরাং আমি অনুমান করি যে আমি পোর্টেবল এপিএল লেখার উপায় খুঁজে পেয়েছি: কেবল এটি 1967 এর ভান করুন!

কার্যক্রম 1:

ইউনিকোড:

⎕←'APL WAS MADE IN 1967!'

APL \ 360:

L[Kapl was made in 1967ÝK

কার্য 2:

ইউনিকোড:

⎕←' N'[1+((2⍴N)⍴(⍳N)∊1,N)∨(⍳N)∘.=⍳N←⎕]

APL \ 360:

L[K nK;1-::2Rn"R:In"E1,n"(:In"J.%In[L'

কার্য 3:

আমি এটি স্ট্যান্ডার্ড পুনরাবৃত্তির উপায়ে সমাধান করেছি। তত্ত্ব অনুসারে, আপনি জে জবাব মত চালাক এবং অ্যারে-ভিত্তিক কিছু করতে পারেন; অনুশীলনে, তবে এটিতে ও (এন) মেমরির ব্যবহার রয়েছে এবং তাড়াতাড়ি ফ্লাওয়ার-পাওয়ার-যুগ শক্ত করে তোলে - এবং সফ্টওয়্যার।

ইউনিকোড:

∇R←A GCD B
R←A
→(B=0)/0
R←B GCD B|A
∇

⎕←⎕ GCD ⎕

APL \ 360:

Gr[a gcd b
r[a
{:b%0"/0
r[b gcd bMa
G

L[L gcd L

এটা সত্যিই দারুন.
অ্যালেক্স এ।

22

1996 - ওকামল

কাউকে 1996 টি পূরণ করার জন্য দিনের চেয়ে বেশি অপেক্ষা করা ছিল, তাই আমি রুবিকে পূরণ করতে পারি। আচ্ছা কেন তখন ওসিএএমএল শিখি না, হ্যাশেল এর অনুরূপ ...

ওহে বিশ্ব

print_endline "OCaml was made in 1996!";;

হওয়া ASCII

let ascii n =
  let rec ascii' = function
    | 0 -> ()
    | i ->
        let s = "N" ^ String.make (n-2) ' ' ^ "N" in
        String.fill s (n-i) 1 'N';
        print_endline s;
        ascii' (i-1)
  in ascii' n;;

পরিবর্তনীয় স্ট্রিং!

GCD

let rec gcd a b = if b = 0 then a else gcd b (a mod b);;

না ==এবং ইনফিক্স mod, এটি দুর্দান্ত


আমি দুঃখিত, আমি রুবি ভরেছি :)
জিরো ফাইবার

4
এই চ্যালেঞ্জটির উত্তর দেওয়ার জন্য কোনও ভাষা শেখার জন্য +1। :)
অ্যালেক্স এ।

আপনি সবেমাত্র F # শিখেছেন! (এটি সিএলআর প্লাস কিছু অতিরিক্ত অতিরিক্ত ওসিএএমএল)।
রবার্ট ফ্রেজার 3

22

2005 - প্রস্তাবনা

প্রিলেলেড একটি খুব মজাদার ভাষা, যার উত্স কোডটি বেশ কয়েকটি "ভয়েসস" নিয়ে গঠিত যা সমান্তরালে সম্পাদিত হয় এবং যা আমি সমস্যার সমাধান করতে সত্যিই উপভোগ করি । এটা তার বোন ভাষার হওয়া ASCII উপস্থাপনা হতে বোঝানো হয় Fugue , যা আসলে তার সোর্স কোড হিসাবে .MIDI ফাইল লাগে এবং নির্দেশাবলী ভয়েসেস সুর মধ্যে অন্তর যেমন প্রস্তাবনা পাওয়া এনকোড করে।

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

0-9 ... Push the corresponding digit.
+   ... Add the top two numbers on the stack.
-   ... Subtract the top number from the one beneath.
#   ... Discard the top of the stack.
^   ... Copy the top value from the voice above.
v   ... Copy the top value from the voice below.
?   ... Read a number and push it onto the stack.
!   ... Print the top number (and pop it from the stack).
(   ... If the top of the stack is zero, jump past the matching ')'.
)   ... If the top of the stack is zero, jump to the column after the matching '('.

কিছু অতিরিক্ত নোট:

  • ভয়েসগুলি চক্রযুক্ত, সুতরাং ^নীচের ভয়েস থেকে শীর্ষ ভয়েস কপিগুলিতে (এবং বিপরীতে)।
  • একাধিক ?এবং !একই কলামে উপরে থেকে নীচে চালিত হয়।
  • অনুযায়ী ভাষা স্পেসিফিকেশন , ?এবং !পড়তে ও লিখতে সংশ্লিষ্ট চরিত্র কোড সহ অক্ষর। তবে পাইথন ইন্টারপ্রেটারের পরিবর্তে নম্বরগুলি প্রিন্ট করার জন্য কোডটিতে একটি স্যুইচ রয়েছে। পরীক্ষার উদ্দেশ্যে আমি আসলে একটি পরিবর্তিত সংস্করণ ব্যবহার করছি যা অক্ষরের পরিবর্তে সংখ্যাগুলিও পড়তে পারে । তবে এগুলির চারপাশে usকমত্য হল যে সংখ্যাগত ইনপুট / আউটপুট আসলে বাইট মান হিসাবে দেওয়া যেতে পারে, সুতরাং এই সংশোধনগুলি সংখ্যার সাথে সম্পর্কিত বৈধ প্রোগ্রামগুলি তৈরি করার প্রয়োজন হয় না।
  • সমন্বয় (এবং )একই ভয়েস থাকতে হবে না। শর্তের জন্য ব্যবহৃত ভয়েসটি সর্বদা সেখানে (উপস্থিত হয়। সুতরাং, এর উল্লম্ব অবস্থান )সম্পূর্ণ অপ্রাসঙ্গিক।
  • প্রিলিউডের যুগপত মৃত্যুর প্রকৃতির কারণে, একই কলামে থাকা কোনও নির্দেশ (লুপটি শুরু হওয়ার আগে একবার কার্যকর করা হয় এবং লুপটি প্রবেশ করানো হয় কিনা তা নির্বিশেষে। একইভাবে একই কলামে কোনও নির্দেশ )প্রতিটি পুনরাবৃত্তির শেষে কার্যকর করা হয়, এই পুনরাবৃত্তির পরে লুপটি বেরিয়ে আসবে কিনা তা নির্বিশেষে।

আমি খুব বেশি মন্তব্য না করে প্রথমে আপনাকে তিনটি প্রোগ্রামটি দেখাব। আপনি নীচে বিস্তৃত ব্যাখ্যা পেতে পারেন।

অনুষ্ঠানসমূহ

"ওহে বিশ্ব!" বৈকল্পিক

9(1-)v98+^++!9v+!  v88++2+!^  ! ^9-3-! v      !    v2-!55+!
8 8+ !     7v+! 1v+!88+^+!^4-!^ v8-^ !!!9v+  !^9+9+!  v5+!
     ^98++4+! ^8-! ^4-   ^ #!^6-!    ^^  #5+! v    ^2-!1+!

আপনি যদি পাইথন দোভাষী ব্যবহার করছেন তবে তা নিশ্চিত করুন NUMERIC_OUTPUT = False

এএসসিআইআই আর্ট এন

      v2-(1-)v         
9(1-)?1-( v!  (1-55+!      0     (0)#  ))55+!
4-4+                  v^-#
     v!      v! v1-v!(1- ^(#^!0)# v! )v!
6 8+           v#

সহজেই ব্যবহারের জন্য, এই প্রোগ্রামটি সংখ্যা হিসাবে ইনপুট পড়ার দ্বারা উপকৃত হয় তবে আউটপুট অবশ্যই সংখ্যাযুক্ত হবে না। সুতরাং আপনি যদি পরিবর্তিত পাইথন দোভাষী ব্যবহার করেন, সেট করুন

NUMERIC_INPUT = True
NUMERIC_OUTPUT = False

GCD

?(                         v)
? (^-(0 # v   #       ^+0)#^ !
     ^^ (##v^v+)#  0 (0 )   
      1) ^ #  - 1+(#)#

এটি সমস্ত সংখ্যার ইনপুট / আউটপুট ie সহ সেরা ব্যবহৃত হয়

NUMERIC_INPUT = True
NUMERIC_OUTPUT = True

ব্যাখ্যা

"ওহে বিশ্ব!" বৈকল্পিক

এটি মোটামুটি সোজা-এগিয়ে। আমি সমস্ত অক্ষরের জন্য অক্ষর কোড ক্রমাগত উত্পন্ন করতে 3 টি ভয়েস ব্যবহার করছি Prelude was made in 2005!। আমি কম্পিউটিং দিয়ে শুরু করি 8 + 9*8 = 80যা এর অক্ষর কোড P:

 9(1-)
 8 8+

এর পরে আমি বেশিরভাগটি কেবল পূর্বের অক্ষর কোডটি অনুলিপি করি এবং পরেরটির সাথে পার্থক্যটি যোগ বা বিয়োগ করি। কোডটি এখানে, তবে !মুদ্রিত হওয়া অক্ষরের সাথে প্রতিস্থাপিত প্রত্যেকটির সাথে (এবং _স্থানগুলির %জন্য এবং অঙ্কগুলির জন্য):

9(1-)v98+^++r9v+u  v88++2+w^  _ ^9-3-a v      _    v2-%55+!
8 8+ P     7v+l 1v+e88+^+_^4-s^ v8-^ de_9v+  n^9+9+%  v5+%
     ^98++4+e ^8-d ^4-   ^ #a^6-m    ^^  #5+i v    ^2-%1+!

চূড়ান্তটি 55+!একটি উত্তীর্ণ নিউলাইনটি প্রিন্ট করে, কেবল এটি দুর্দান্ত।

পার্শ্ব নোট হিসাবে, ভয়েসগুলির সংখ্যা এই কাজের জন্য বেশ স্বেচ্ছাসেবী, তবে 3 মোটামুটি সুবিধাজনক কারণ এটি বৃহত্তম সংখ্যা যেখানে প্রতিটি ভয়েস একে অপরের ভয়েসকে সরাসরি অ্যাক্সেস করতে পারে।

এএসসিআইআই আর্ট এন

      v2-(1-)v         
9(1-)?1-( v!  (1-55+!      0     (0)#  ))55+!
4-4+                  v^-#
     v!      v! v1-v!(1- ^(#^!0)# v! )v!
6 8+           v#

5 টি ভয়েস সহ, এটি অবশ্যই আমি এখনও অবধি লিখেছি সবচেয়ে জটিল প্রোগ্রামগুলির মধ্যে একটি। ভয়েসগুলির মোটামুটি নিম্নলিখিত উদ্দেশ্য রয়েছে:

  1. কেবলমাত্র একটি সহায়ক ভয়েস যা N-1অভ্যন্তরীণ লুপে ব্যবহারের জন্য সঞ্চয় করে ।
  2. এটি "মূল" ভয়েসের সাজানোর মতো, যা ইনপুট পড়ে, একটি গুরুত্বপূর্ণ স্যুইচ থাকে এবং এতে বাইরের লুপও থাকে (যেমন সারিগুলির উপরে একটি)।
  3. এটি 32সুবিধামত স্থান মুদ্রণের জন্য একটি সঞ্চয় করে ।
  4. এতে অন্তঃস্থ লুপ রয়েছে (কলামগুলির উপরে একটি)।
  5. এটি একটি 78সুবিধামত প্রিন্ট করতে একটি সঞ্চয় N

আসুন কোড অংশ দ্বারা অংশ। প্রথমত, আমি তৈরি করছি 32যেমন -4 + 9*4এবং 78হিসাবে 6 + 9*8:

9(1-)
4-4+

6 8+

Nইনপুট পড়ার সময় Nএবং সংরক্ষণ করার সময় N-1এবং N-2প্রথম দুটি ভয়েসে আমি এখন একক মুদ্রণ করছি (কারণ আমাদের সর্বদা একটি প্রয়োজন) :

      v2-
     ?1-

     v!

এরপরে, একটি "লুপ" শর্তযুক্ত রয়েছে N-1। লুপের শেষে, দ্বিতীয় ভয়েস সর্বদা হ্রাস করা হয় 0এবং লুপটি প্রথম পুনরাবৃত্তির পরে প্রস্থান করে। তাই মূলত, এটি শুধুমাত্র if(N > 1){...}। লুপের পরে আমরা একটি একক ট্রেলিং নিউলাইন প্রিন্ট করি। পুনরুদ্ধার করতে, আমরা এখন নিম্নলিখিত কাঠামো পেয়েছি:

      v2-
9(1-)?1-(                               )55+!
4-4+
     v!
6 8+

এই শর্তসাপেক্ষে আমরা প্রথমে N-2শূন্যস্থান এবং Nপ্রথম সারিটি সম্পন্ন করার জন্য একক এবং N-1ভবিষ্যতে ব্যবহারের জন্য আমরা প্রথম ভয়েসটিতেও সঞ্চয় করি :

         (1-)v         
          v!  

             v!

এখন কোডের আসল মাংস। প্রথমত, একটি বাহ্যিক লুপ রয়েছে যা N-1সারিগুলি মুদ্রণ করে । প্রতিটি সারির জন্য, আমরা প্রথমে একটি নতুন লাইন প্রিন্ট করি এবং একটি N। তারপরে আমরা N-2সময়গুলি লুপ করব , হয় ফাঁকা স্থানগুলি বা Nগুলি মুদ্রণ করুন (এর পরে আরও কিছু)। এবং অবশেষে আমরা অন্য মুদ্রণ N:

               1-55+!  

                v1-v!(               )v!
               v#

পরিশেষে, মজাদার অংশ: প্রতিটি সারি মুদ্রণ (এবং Nডান অবস্থানে থাকা )। প্রিলিডে আসলে / তে অন্য কোনও নেই, তাই আমাকে আলাদা আলাদা কণ্ঠে দুটি লুপ ব্যবহার করে এটি তৈরি করতে হবে। অভ্যন্তরীণ এবং বাহ্যিক লুপ ভেরিয়েবল বিয়োগ করে শর্তটি সহজেই পাওয়া যায় - আমরা 0প্রিন্ট Nকরতে চাইলে পাই এবং কোনও স্থান মুদ্রণ করতে চাইলে শূন্য-বিহীন কিছু পাওয়া যায়।

প্রিলেডে if / অন্যটির মূল ধারণাটি হ'ল প্রাসঙ্গিক মান - "যদি" (বা শূন্য নয়) কোডের পরে একটি লুপ স্থাপন করা হয় এবং এটিকে চাপ দিয়ে অবিলম্বে প্রস্থান করা হয় 0। অন্য ভয়েসে, আপনি একটি শূন্য-মান রাখবেন না এবং "যদি" লুপের পরে অন্য লুপ রাখবেন। "যদি" লুপ চলাকালীন আপনি সেই অন্য ভয়েসের উপরে একটি শূন্য রেখেছিলেন, যাতে "অন্য "টিকে মৃত্যুদন্ড কার্যকর হওয়া থেকে আটকাতে পারে। আপনি শূন্য-অ-মানগুলির শীর্ষে শূন্য মানগুলি চাপছেন বা নীচে শূন্য থাকলে অ-শূন্য মানটি বাতিল করুন কিনা সে বিষয়ে কিছুটা নমনীয়তা রয়েছে তবে এটি সাধারণ ধারণা। আপনি যদি প্রাসঙ্গিক ভয়েস ব্যবহার চালিয়ে যেতে চান তবে আপনাকে পরে কিছু পরিষ্কার করতে হবে। কোডটি দেখতে এটির মতো:

                           0     (0)#
                      v^-#
                      1- ^(#^!0)# v! 

এবং এটাই!

GCD

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

?(                         v)
? (^-(0 # v   #       ^+0)#^ !
     ^^ (##v^v+)#  0 (0 )   
      1) ^ #  - 1+(#)#

সুতরাং আমরা এবার চারটি ভয়েস পেয়েছি। প্রথম ভয়েস কেবল ট্র্যাক রাখে bএবং এতে মূল সমাপ্তির শর্ত থাকে (যেমন লুপটি bহয়ে গেলে প্রস্থান হয় 0)। দ্বিতীয় ভয়েসে অন্তর্ভুক্ত রয়েছে aএবং ভয়েসগুলির সাহায্যে তিনটি এবং চারটি গণনার a % bপূর্বে ফলাফলটি অদলবদলের আগে b। অবশেষে, !প্রিন্টগুলি aযখন b == 0

প্রথমে সাইনাম অংশটি দেখুন :

     (0 # v   #
     ^^ (##v^v+)#
      1) ^ #  -

ইনপুট নম্বরটি nসেই ভয়েসগুলির প্রথমটিতে (সম্পূর্ণ প্রোগ্রামে দ্বিতীয় ভয়েস) পাওয়া যায়। ফলাফলটি নীচের কণ্ঠে শেষ হবে। অন্য দুটি কণ্ঠ শূন্য (যেমন শূন্যে ভরা) আশা করা যায়। লক্ষ্য করুন যে, যদি n == 0, তবে উভয় লুপ এড়িয়ে যায় এবং নীচের ভয়েসটিতে এখনও থাকে 0যা আমরা চাই।

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

এখন মডিউল যতবার বাস্তবায়িত হয় bথেকে aপর্যন্ত ফলাফলের নেতিবাচক। যখন এটি হয়, আমরা bআবার একটি যুক্ত করি । এই বিট:

  (^-  signum         ^+0)#
       signum      0 (0 )   
       signum   1+(#)#

নীচের দিকে if / অন্য নির্মাণগুলি লক্ষ করুন, যা আমি টাস্ক 2 এর জন্য ব্যবহার করেছি to


2
এটি সত্যিই একটি প্রিলিউড টিউটোরিয়ালের অংশ হওয়া উচিত।
অ্যালেক্স এ।

21

2007 - স্ক্র্যাচ

স্ক্র্যাচ এমআইটি দ্বারা শিক্ষাগত উদ্দেশ্যে তৈরি একটি ভাষা। আমি এটির সাথে 5 বছরের জন্য খুব জড়িত; আরও পরে।

এই সমস্ত এখানে দেখা যাবে

আমি এখনই খুব তাড়াতাড়ি এসেছি এবং পরে স্নিপেটগুলি ব্যাখ্যা করব। আশা করি তারা প্রীতি স্ব-ব্যাখ্যামূলক হলেও।

কার্যক্রম 1

এখানে চিত্র বর্ণনা লিখুন

টাস্ক 2

এখানে চিত্র বর্ণনা লিখুন

কার্য 3

এখানে চিত্র বর্ণনা লিখুন


এটা কি এখনও পরে?
ডিফিউয়ার

21

1972 - সি

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

সি নিজেই বি এর বংশধর, যা আমি আশা করি এই তালিকায়ও শেষ হবে। কোনও 'এ' প্রোগ্রামিং ভাষা ছিল না: বি বিসিপিএলের একটি রূপ, যা পরিবর্তিত সিপিএল হয়। এই ভাষাগুলির কোনওটিই খুব জনপ্রিয় ছিল না। তবে, বিসিপিএল হ'ল সেই ভাষা যেখানে প্রথম "হ্যালো ওয়ার্ল্ড" প্রোগ্রাম লেখা হয়েছিল। আর একটি মজার তথ্য হ'ল বি এর মতামত /* */এবং //মতামত উভয়ই ছিল , কিন্তু সি //মন্তব্যগুলি বাদ দিলেন । এগুলি পরে সি -৯ স্ট্যান্ডার্ডের সাথে পুনরায় চালু করা হয়েছিল।

এখানকার সি প্রোগ্রামগুলির ইউনিক্স ভি 5 সি সংকলক দিয়ে 1974 সাল থেকে পরীক্ষা করা হয়েছিল This এটি আমি খুঁজে পাওয়া এবং কাজ করতে পারার ক্ষেত্রে প্রাচীনতম সংকলক ছিল এবং এই প্রোগ্রামগুলি একটি আধুনিক সি সংকলকটিতে সংকলন করবে না। (পরিবর্তিত পরিবর্তনগুলির মধ্যে একটি হ'ল মিউটেশন অপারেটরগুলি যেমন +=ব্যবহৃত হত =+।)

#include <... >এখনও উপস্থিত ছিল না। উভয়ই প্রমিত লাইব্রেরি করেনি। আমার নিজের লেখা ছিল atoi। কোনটি অনুমোদিত এবং কোনটি অনুমোদিত নয় তা নির্ধারণ করার জন্য আমি ভি 5 উত্সের কোডের মধ্য দিয়ে গিয়েছিলাম। আমি যে সংস্করণটি ব্যবহার করেছি এটির মধ্যে প্রথমটি ছিল struct, তবে যেহেতু আমি সেগুলি ব্যবহার করি নি, এবং সিনট্যাক্সটি ভি 7 (কেএন্ডআর সি হিসাবে) অবধি খুব বেশি পরিবর্তিত হয়েছে বলে মনে হয় না, এটি সম্ভবত পূর্ববর্তী সংস্করণগুলির সাথেও কাজ করবে।

ভি কোড উত্স কোড যেমন ব্যবহার করে আমার কোডটি একই স্টাইলে লিখতে আমি যথাসাধ্য চেষ্টা করেছি। (যদিও এটি মারাত্মকভাবে সামঞ্জস্যপূর্ণ নয়))

ইউনিক্স ভি 5-এর একটি লিঙ্কের জন্য এখানে দেখুন , একটি এমুলেটর এবং এটি একটি আধুনিক কম্পিউটারে চালু হওয়ার নির্দেশাবলী।

কার্যক্রম 1

main()
{
   write(1, "C was made in 1972!\n", 20);
}

টাস্ক 2

atoi(str)
char *str;
{
    register num, digit;
    while (digit = *str++) {
        num =* 10;
        num =+ digit - '0';

    }
    return num;
}

N(n)
{
    register x, y;
    for (y=1; y<=n; y++) {
        for (x=1; x<=n; x++) {
            write(1, " N"+(x==1||x==y||x==n), 1);
        }
        write(1, "\n", 1);
    }
}

main(argc, argv)
char *argv[];
{
    N(atoi(argv[1]));
}

কার্য 3

atoi(str)
char *str;
{
    register num, digit;
    while (digit = *str++) {
        num =* 10;
        num =+ digit - '0';
    }
    return num;
}

gcd(a, b)
{
    return b ? gcd(b, a%b) : a;
}

main(argc, argv)
char *argv[];
{
    printf("%d\n", gcd(atoi(argv[1]), atoi(argv[2])));
}

বাহ, আমি বুঝতে পারিনি যে কতটা সি পরিবর্তিত হয়েছে ... আপনি কোথা থেকে এই সংকলকটি পেয়েছেন?
kirbyfan64sos

1
সংকলকটি ইউনিক্স ভি 5 এর সাথে অন্তর্ভুক্ত রয়েছে। একটি ব্লগ পোস্টের বর্ণনায় একটি লিঙ্ক রয়েছে যা আপনাকে দেখায় যে ফাইলগুলি কোথায় পাবেন এবং এটি একটি আধুনিক কম্পিউটারে কীভাবে চালানো যায়। (এটি এখানে ) একবার আপনার এটি চলমান হয়ে গেলে, আপনি কোডটি ব্যবহার করে এটি ব্যবহার করতে পারেন cat > file.c। (Ctrl-D দিয়ে শেষ করুন, বরাবরের মতো)। এছাড়াও, সি কম আপনার মনে হতে পারে পরিবর্তিত হয়েছে: যদি আপনি অদলবদল =*এবং =+মধ্যে atoiআধুনিক সমকক্ষও জন্য ফাংশন *=এবং +=একটি আধুনিক জিসিসি তাদের ঠিক সূক্ষ্ম কম্পাইল হবে এবং তারা চালানোর জন্য, খুব। খুব কমই কোনও সতর্কতা, এমনকি।
মেরিনাস

1
minnie.tuhs.org/cgi-bin/utree.pl?file=V2/c হ'ল আমি প্রাপ্ত সি-র প্রথম সংকলক (ভি 2 থেকে, তারিখের '72)।
ওবেরন

20

২০০৯ - ইদ্রিস

ইদ্রিস একটি নির্ভরশীল-টাইপযুক্ত, খাঁটি কার্যকরী ভাষা যা নির্ভরযোগ্য প্রকারের সাথে অর্জনযোগ্য এমন অত্যন্ত কঠোর প্রমাণ সম্ভাবনা প্রদানের পরিবর্তে বাস্তব-বাস্তব অ্যাপ্লিকেশনগুলির জন্য ব্যবহারিকভাবে ব্যবহারযোগ্য হওয়ার উপর জোর দেয়।

কার্যক্রম 1

module Main

main : IO ()
main = putStrLn "Idris was made in 2009!"

টাস্ক 2

module InN

import Data.Fin
import Data.Vect

genN : Vect n (Vect n Char)
genN = [[ if inN x y then 'N' else ' ' | x<-range ]| y<-range ]

||| Helper function, determines whether the char at coordinate (x,y)
||| is part of the letter:
inN : Fin n -> Fin n -> Bool
inN {n=S _} x y = x==0 || x==y || x==last

এটি একটি প্রোগ্রাম নয় কেবল একটি ফাংশন (আরও সুনির্দিষ্টভাবে, নির্ভরশীল মান ), দ্বি-মাত্রিক অ্যারে হিসাবে পছন্দসই অক্ষর এন তৈরি করে।

$ idris ascii-n.idr 
     ____    __     _                                          
    /  _/___/ /____(_)____                                     
    / // __  / ___/ / ___/     Version 0.9.17.1-
  _/ // /_/ / /  / (__  )      http://www.idris-lang.org/      
 /___/\__,_/_/  /_/____/       Type :? for help               

Idris is free software with ABSOLUTELY NO WARRANTY.            
For details type :warranty.
Type checking ./ascii-n.idr
*ascii-n> genN {n=4}
[['N', ' ', ' ', 'N'],
 ['N', 'N', ' ', 'N'],
 ['N', ' ', 'N', 'N'],
 ['N', ' ', ' ', 'N']] : Vect 4 (Vect 4 Char)

কার্য 3

module gcd

gcd' : Nat -> Nat -> Nat
gcd' a Z = a
gcd' a b = gcd' b $ a`mod`b

নোট করুন যে আমাকে নামটি বেছে নিতে হয়েছিল gcd'কারণ gcdএটি ইদ্রিস উপস্থানে ইতিমধ্যে সংজ্ঞায়িত করা আছে।

Type checking ./gcd.idr
*gcd> gcd' 8 12
4 : Nat
*gcd> gcd' 12 8
4 : Nat
*gcd> gcd' 234 876
6 : Nat

যে দেখে মনে হচ্ছে তারা Haskell, নিল আনা :এবং ::, এবং পরিবর্তিত _করা Z
wchargin

@WChargin Zআসলে এর নির্মাতা 0 : Nat। আন্ডারস্কোরটি ইদ্রিসে যেমন হ্যাসকেলে ব্যবহৃত হয় তেমন ব্যবহৃত হয়।
বন্ধ হয়ে গেছে

ওহ, ভাল, আপনি সেখানে যান! :)
wchargin

19

2014 - পাইথ

যেহেতু আমাদের সিজেএম রয়েছে, আমাদের পাশাপাশি সম্পূর্ণতার জন্য পাইথও থাকতে পারে :)

পাইথ হ'ল @ আইস্যাকের একটি গল্ফ করা ভাষা যা পাইথনের সংকলন করে। এটি প্রক্রিয়াগত হওয়ার জন্য এবং উপসর্গের স্বরলিপি ব্যবহারের জন্য উল্লেখযোগ্য। পাইথ প্রথম জুন 2014 এর দিকে হাজির হয়েছিল ।

"ওহে বিশ্ব!" বৈকল্পিক

"Pyth was made in 2014!

একটি বন্ধ হওয়া উক্তিটির অভাব নোট করুন, যা পাইথ প্রোগ্রামটি স্ট্রিংয়ে শেষ হলে .চ্ছিক।

এএসসিআইআই আর্ট এন

VQ+\Nt+P++*Nd\N*t-QNd\N

এটি অনলাইনে চেষ্টা করুন । পাইথন সমতুল্য:

Q = eval(input())
for N in range(Q):
    print("N"+((" "*N+"N"+(Q-N-1)*" ")[:-1]+"N")[1:])

বা প্রসারিত (প্রথম এবং তৃতীয় লাইন অন্তর্ভুক্ত):

Q = eval(input())                                        # 
for N in range(Q):                                       #   VQ
    print(                                          )    # 
          "N"+                                           #     +\N
              (                                )[1:]     #        t
                                           +"N"          #         +              \N
               (                     )[:-1]              #          P
                         +(Q-N-1)*" "                    #           +      *t-QNd
                     +"N"                                #            +   \N
                " "*N                                    #             *Nd

GCD

=GvwWQAGQ,Q%GQ)G

এই প্রোগ্রামটি ইউক্লিডিয়ান অ্যালগরিদম ব্যবহার করে এবং একটি নিউলাইন দ্বারা পৃথক দুটি সংখ্যা নেয়। এটি অনলাইনে চেষ্টা করুন

Q = eval(input())     #
G = eval(input())     #    =Gvw
while Q != 0:         #        WQ
  G, Q = Q, G % Q     #          AGQ,Q%GQ)
print(G)              #                   G

i.uQএমনকি যদি আমরা জিসিডির জন্য বিল্টিন ব্যবহার করি তবে এটি আরও খাটো। এটি সমপরিমাণ print(gcd(*eval(input())))(ইনপুট হিসাবে দুটি কমা-বিভাজিত সংখ্যা গ্রহণ)।


দ্রাত - আমি পাইথ এক্সপি করতে
যাচ্ছিলাম

@ আইস্যাচজি আমি আশ্চর্য হওয়ার মতো সাহায্য করতে পারি না, এবং পাশাপাশি এটি এখানে জিজ্ঞাসা করতে পারি: পাইথ কোনওভাবেই, আকার বা আকারে পাইগ দ্বারা অনুপ্রাণিত হয়েছিল?
3uʎs

@ ɐɔıʇǝɥʇuʎs পাইথ তৈরির আগে আমি পিওয়াইজি দেখেছি এবং এটি 1 অক্ষর - 1 ধারণার পদ্ধতির উপর প্রভাব ফেলতে পারে। তবে পাইথকে যদি কিছু অনুপ্রাণিত করে তবে এটি সম্ভবত গল্ফস্ক্রিপ্ট ছিল।
isaacg

17

1964 - ডার্টমাউথ বেসিক

বেসিক হ'ল সাধারণ-উদ্দেশ্যমূলক, উচ্চ-স্তরের প্রোগ্রামিং ভাষার একটি পরিবার, যার নকশার দর্শন ব্যবহারের সহজতে জোর দেয়। 1964 সালে জন জে কেম্যানি এবং টমাস ই কর্টজ নিউ হ্যাম্পশায়ারের ডার্টমাউথ কলেজে মূল বেসিক ভাষাটি ডিজাইন করেছিলেন। তারা বিজ্ঞান ও গণিত ব্যতীত অন্যান্য ক্ষেত্রে কম্পিউটার ব্যবহারের জন্য শিক্ষার্থীদের সক্ষম করতে চেয়েছিল।

আমি ১৯ manual64 সাল থেকে বেসিকের এই ম্যানুয়ালটিটি দেখছি , এবং ডার্থমাউথ সময় ভাগ করে নেওয়ার সিস্টেমটির এই এমুলেটরটি এটি চালু। সার্ভারটি এখনও চালু আছে, তবে দুঃখের সাথে একটি অ্যাকাউন্ট নিবন্ধন করা অসম্ভব বলে মনে হচ্ছে। আপাতত, এই প্রোগ্রামগুলির তাত্ত্বিকভাবে কাজ করা উচিত:

কার্যক্রম 1

10 PRINT "BASIC WAS MADE IN 1964"
20 END

টাস্ক 2

10 READ N
15 FOR Y = 1 TO N STEP 1
20 FOR X = 1 TO N STEP 1
25 IF X = 1 THEN 50
30 IF X = N THEN 50
35 IF X = Y THEN 50
40 PRINT " ",
45 GO TO 55
50 PRINT "N",
55 NEXT X
60 PRINT
65 NEXT Y
70 DATA 5
75 END

আউটপুটটিং এর মতো কিছু:

N                       N
N     N                 N
N           N           N
N                 N     N
N                       N

প্রোগ্রামের অংশ হিসাবে ইনপুটটি কীভাবে টাইপ করা হয় তা লক্ষ্য করুন ( 70 DATA 5); READউপরের নির্দেশ উপায় নেই থেকে তথ্য নিয়ে আসে। কোনও স্ট্রিং কনটেনটেশন নেই, তবে ম্যানুয়ালটির ৩.১ অনুচ্ছেদে বর্ণনা করা হয়েছে যে কীভাবে PRINTফলাফল আউটপুটে টেবুলেটেড "জোনগুলিতে" লেখা হয়।

কার্য 3

ইউক্লিডের অ্যালগরিদমের ধীর সংস্করণ:

10 READ A, B
20 IF A = B THEN 80
30 IF A < B THEN 60
40 LET A = A - B
50 GO TO 20
60 LET B = B - A
70 GO TO 20
80 PRINT A
85 DATA 144, 250
90 END

outputting:

2

অবশেষে, কেউ বেসিক করেছে।
মেরিনাস

16

২০১০ - ডাব্লুটিএফজেওএমএফজি

ডাব্লুটিএফজেওএমএফজি ব্রেনফাকের উপর ভিত্তি করে একটি রহস্যময় ভাষা। এটি ২০১০ সালে জে সানডাহাল তৈরি করেছিলেন। "ডাব্লুটিএফজেওএমএফজি" "কী কাজটি? জেন অপটিমাইজড ম্যালিসিভ ফাইল গফার্স!" ।

এখানে * নিক্স সিস্টেমের জন্য একটি সংকলক রয়েছে

কার্যক্রম 1

'WTFZOMFG was made in 2010!\n"

টাস্ক 2

/&(-.N%3 >&>s-{-(-. ).N}>{-(-. ).N}_0 '\n")

ব্যাখ্যা:

দুঃখিত। আমি ব্যাখ্যা লিখতে ভাল না।

/                                           # read the number and store it in cell 0
 &                                          # copy it to cell 1
  (                                         # loop while cell 0 isn't 0
   -                                        # decrease the value of cell 0
    .N                                      # print "N"
      %3                                    # copy cell 0 to cell 3
                                            # a space must be added after the number. I don't know if it's a bug of the compiler or a feature.
         >                                  # move to cell 1
          &                                 # copy cell 1 to cell 2
           >                                # move cell 2
            s                               # let cell 2 = cell 2 - cell 3
             -                              # decrease the value of cell 2
              {                             # if cell 2 isn't 0
               -                            # decrease the value of cell 2
                (-. )                       # while cell 2 isn't 0, decrease it and print " "
                     .N                     # print "N"
                       }                    # end if
                        >                   # move cell 3
                         {                  # if cell 3 isn't 0
                          -                 # decrease the value of cell 3
                           (-. )            # while cell 3 isn't 0, decrease it and print " "
                                .N          # print "N"
                                  }         # end if
                                   _0       # move to cell 0
                                      '\n"  # print a newline
                                          ) # 

কার্য 3

/>>/(<<&>dm<s&>>%0 <&>)<<\

ইউক্লিডিয়ান অ্যালগরিদম। ডাব্লুটিএফজেওএমএফজির মোডের জন্য কোনও কমান্ড নেই, সুতরাং আমাকে d(বিভাজন), m(গুণ) এবং s(বিয়োগ) ব্যবহার করতে হবে।


16

2009 - যাও

গো হ'ল গুগল দ্বারা বিকাশিত প্রোগ্রামিং ভাষা। উন্নয়নটি 2007 সালে শুরু হয়েছিল, তবে গো 2009 সালের নভেম্বরে ঘোষণা করা হয়েছিল।

গো সি দ্বারা প্রভাবিত একটি স্ট্যাটিকালি-টাইপড ভাষা যা সংক্ষিপ্ততা, সরলতা এবং সুরক্ষার উপর জোর দেয়।

কার্যক্রম 1:

package main
import "fmt"

func main(){
    fmt.Println("Go was made in 2009!")
}

প্রথম লাইন কোডের প্যাকেজ ঘোষণা করে। এমনকি একটি লাইন মুদ্রণ হিসাবে একটি সাধারণ উদাহরণ একটি প্যাকেজের অংশ হওয়া প্রয়োজন। এবং এক্সিকিউটেবল সবসময় বলা হয় main

কার্য 2:

package main

import (
        "fmt"
        "strings"
)

func main(){
    var n int
    fmt.Scan(&n)

    for i := 0; i < n; i++ {
        a := make([]string, n, n)
        for j := 0; j < n; j++ { a[j] = " " }

        a[0] = "N"
        a[i] = "N"
        a[n-1] = "N"

        s := strings.Join(a, "")
        fmt.Println(s)
    }
}

গো-র একটি যথেষ্ট সংক্ষিপ্ত পরিবর্তনশীল ঘোষণা রয়েছে ( i := 0একইরকম var i int = 0) এবং সংকলকটি প্রকারটি নির্ধারণ করে। গতিশীল ভাষাগুলিতে এটি সাধারণত একটি বৈশিষ্ট্য। এই সংক্ষিপ্ত স্বরলিপিটি ব্যবহার করে ভেরিয়েবলগুলিতে ফাংশন নির্ধারণ করা ( f := func(x int) int {/* Code */}) বন্ধ করা এবং তৈরি করা খুব সহজ create

কার্য 3:

package main

import "fmt"

func gcd(a, b int) int {
    for b != 0 {
        a, b = b, a%b
    }
    return a
}

func main(){
    var a, b int
    fmt.Scan(&a)
    fmt.Scan(&b)

    fmt.Println(gcd(a, b))
}

এখানে আপনি a, b = b, a%bবাক্য গঠন দেখতে পারেন , যা সত্যিই দুর্দান্ত। আমি সঠিক নামটি জানি না, তবে পাইথনে একে টুপল আনপ্যাকিং বলা হয়। একই পদ্ধতিতে আপনি কোনও ফাংশন ( func f() (int, string) { return 42, "Hallo"}) থেকে একাধিক মান ফেরত দিতে পারেন ।

এই কোডে ঘটে যাওয়া আর একটি বিষয় হ'ল লুপ। গো লুপের জন্য শুধুমাত্র লুপ। যখন-লুপস বা ডু-ওয়ে-লুপের উপস্থিতি নেই। তবে আপনি সহজেই লুপ for condition {}বা অসীম লুপের জন্য একটি সমতুল্য তৈরি করতে পারেন for {}


16

1991 - পাইথন

ভাষার ইতিহাস

১৯৮০ এর দশকের শেষের দিকে, গাইডো ভ্যান রসুম পাইথনকে শখ হিসাবে তৈরি করা শুরু করেছিলেন। এর নামটি মন্টি পাইথনের ফ্লাইং সার্কাস থেকে এসেছে, এটি একটি ব্রিটিশ টেলিভিশন শো, যার মধ্যে রসাম একজন অনুরাগী। প্রথম পাইথন বাস্তবায়ন ১৯৮৯ সালে শুরু হয়েছিল এবং ১৯৯১ সালে এটি প্রকাশিত হয়েছিল years

"ওহে বিশ্ব!" বৈকল্পিক

print("Python was made in 1991!")

ইনপুটটির আশেপাশে প্রথম বন্ধনীগুলি নোট করুন print। যদিও এই সিনট্যাক্সটি পাইথন 2 এ কাজ করে, সাধারণত পাইথন 2 এ আপনি এই বন্ধনীগুলি বাদ দিতে পারেন। যাইহোক, এগুলি পাইথন ৩ এ প্রয়োজনীয় Z

এএসসিআইআই আর্ট এন

def asciin(n):
    if n == 1:
        print("N")
    else:
        print("N" + " "*(n-2) + "N")

        for i in range(2, n):
            print("N" + " "*(i-2) + "N" + " "*(n-i-1) + "N")

        print("N" + " "*(n-2) + "N")

ফাংশন ব্যবহার করে সংজ্ঞায়িত করা হয় def। স্ট্রিং কনটেনটেশন ব্যবহার করে +স্ট্রিং পুনরাবৃত্তি করা হয় *

GCD

def gcd(a, b):
    if b == 0:
        return(a)
    else:
        return(gcd(b, a % b))

দ্রষ্টব্য যে পাইথনের স্ট্রাকচার্ড হোয়াইটস্পেস প্রয়োজন।


16

1968 - অ্যালগল 68

আলগোল 68 আলফোল 60 এর উত্তরসূরি হিসাবে আইএফআইপি ওয়ার্কিং গ্রুপ 2.1 দ্বারা সংজ্ঞায়িত হয়েছিল।

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

সমস্ত নিয়ন্ত্রণ স্ট্রাকচারের সংক্ষিপ্ত আকার রয়েছে পাশাপাশি এক্সপ্রেশন ব্যবহার করে একটি দীর্ঘ ফর্ম রয়েছে। এটি অপারেটরদের সংজ্ঞাও অনুমোদন করে।

ভাষার লক্ষ্যগুলি হিসাবে উল্লেখ করা হয়:

ALGOL এর নকশার মূল লক্ষ্য এবং নীতিগুলি 68:

  • সম্পূর্ণরূপে এবং বর্ণনার স্পষ্টতা
  • অরথোগোনাল ডিজাইন,
  • নিরাপত্তা,
  • দক্ষতা
  • স্ট্যাটিক মোড চেকিং
  • মোড-স্বতন্ত্র পার্সিং
  • স্বতন্ত্র সংকলন
  • লুপ অপ্টিমাইজেশন
  • উপস্থাপনা - ন্যূনতম এবং বৃহত্তর চরিত্রের সেটগুলিতে

এই প্রোগ্রামগুলিকে আলগোল 68 জিনির দোভাষী দিয়ে পরীক্ষা করা হয়েছে , যা ভাষার সম্পূর্ণ বাস্তবায়ন।

আধুনিক প্রোগ্রামাররা আলাদা আলাদা দেখতে পেতে পারে এমন কয়েকটি বৈশিষ্ট্য হ'ল খালি বিবৃতি অনুমোদিত নয়। আপনি কেবল ;কোথাও যুক্ত করতে পারবেন না । আপনার SKIPস্পষ্টত কিছু না চাইলে আপনার বিবৃতিটি ব্যবহার করতে হবে । এটি খুব সহজেই সমবর্তী প্রোগ্রামগুলির কোডিংয়ের অনুমতি দেয়। কম্পিউটারে কাজ করার একটি ভাষা 68 এছাড়াও উল্লেখযোগ্য হল, পিছন কীওয়ার্ড terminators যেমন, এই ধরনের হিসাবে ব্যবহৃত esac , আদ্যাশক্তি , ফাই ইত্যাদি

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

যদি আমি < 0 তবে ফাই এড়িয়ে যান

এটি প্রাইম স্ট্রপিং মোডে একটি সংকলক হিসাবে প্রস্তুত হতে পারে :

'IF' I 'LT' 0 'THEN' 'SKIP' 'FI'

ইন ডট stropping মোড এই হবে:

.IF I .LT 0 .THEN .SKIP .FI

ইন কেস stropping মোড এই হবে:

IF i < 0 THEN SKIP FI

আমি এই ভাষার প্রতি প্রচুর ভালবাসা পেয়েছি কারণ আমি একটি সংকলক বাস্তবায়নের একটিতে কাজ করেছি, পাশাপাশি এটিতে বেশ কয়েক বছর ধরে প্রোগ্রামিং করেছি।

কার্যক্রম 1

মুদ্রণ ("আলগোল 68 1968 সালে তৈরি হয়েছিল!", নিউলাইন ))

এখানে লক্ষ্য করার বিষয়টি হ'ল ডাবল বন্ধনী he এটি কারণ মুদ্রণ একটি ফাংশন যা একক যুক্তি গ্রহণ করে যা সমস্ত ধরণের ইউনিয়নের একটি পরিবর্তনশীল দৈর্ঘ্যের অ্যারে। অভ্যন্তরীণ প্রথম বন্ধনী হ'ল অ্যারে নির্মাণকারী। এই দৃ strongly়ভাবে টাইপ করা ভাষায় পলিমারফিজমটি এভাবে পরিচালনা করা হয়।

স্ট্রপিং মোড ক্ষেত্রে:

print (("Algol 68 was made in 1968!", newline))


C:\>a68g HelloWorld.a68
Algol 68 was made in 1968!

টাস্ক 2

     int n ;
     পড়ুন (( n ));
     জন্য আমি থেকে 1 থেকে এন না
          জন্য থেকে 1 থেকে এন না
               ¢ এখানে আমরা একটি সংক্ষিপ্ত যদি দফা ব্যবহার ¢
               মুদ্রণ ((( = 1 বা = আমি বা = |
                    "N" মানে
               |
                    ""
               )))
          আদ্যাশক্তি ;
     মুদ্রণ (( নিউলাইন ))
    

স্ট্রপিং মোড ক্ষেত্রে:

 INT n;
 read ((n));
 FOR i FROM 1 TO n DO
        FOR j FROM 1 TO n DO
            CO here we use an abbreviated IF clause CO
            print (( ( j = 1 OR j = i OR j = n |
                 "N"
            |
                 " "
            ) ))
        OD ;
        print ((newline))
    OD

C:\>a68g ASCIIart.a68
8
N      N
NN     N
N N    N
N  N   N
N   N  N
N    N N
N     NN
N      N

কার্য 3

     ¢ আমরা কম্পিউটারে কাজ করার একটি ভাষা 68 আমাদের নিজস্ব অপারেটার বর্ণনা করতে পারেন ¢
     অপ % = ( int একটি , ) int :
          (( = 0 |
               একটি
          |
               % ( একটি গেলিক ভাষার )
          ));
     int i , j ;
     পড়ুন (( আমি , জে ));
     মুদ্রণ (( আমি % জে , নিউলাইন ))

স্ট্রপিং মোড ক্ষেত্রে:

COMMENT we can define our own operators in Algol 68 COMMENT
OP % = ( INT a, b) INT:
    ((b = 0 |
        a
    |
       b % (a MOD b)
    ));
INT i,j;
read((i,j));
print(( i % j , newline))


C:\>a68g GCD.a68
4 12
         +4

7
এগুলি সম্ভবত 30 বছরেরও বেশি সময় আমি লিখেছি এবং সম্পাদিত করেছি প্রথম অ্যালগল 68 প্রোগ্রাম। আমি এটি এতটাই চলন্ত পেয়েছিলাম যে এটি আমাকে অশ্রুসঞ্চারিত করেছিল। আমি কখনই বুঝতে পারিনি "হ্যালো ওয়ার্ল্ড!" প্রোগ্রাম এত সংবেদনশীল হতে পারে!
ব্রায়ান টম্পসেট - :01

1
আমি 60 এর দশকের ভাষাগুলির জন্য এতক্ষন অপেক্ষা করছিলাম এবং বিসিপিএল, সিমুলা, করাল 66, ফোর্টরান 66, পিএল / 1, এসএনওবিএল 4, পিওপি -1 এবং আরও একটি পুরো ভেলা সহ কেবল প্রস্তুত ছিলাম, কেবলমাত্র আবিষ্কার করার জন্য যে আমার কাছে নিয়ম রয়েছে 5 বছরের ভাষা অপেক্ষা করতে ... কমপক্ষে অন্য কারও জন্য লাঙ্গল দেওয়ার জন্য একটি সমৃদ্ধ ফুরোও রয়েছে।
ব্রায়ান টম্পসেট - :

ফোর্টরান 6666 (পাঞ্চকার্ডের সহিংসতার জগাখিচুড়ি), এপিএল (পরাশক্তি-প্রতীকগুলির অদ্ভুত খন্দক) এবং আলগোল between৮ এর মধ্যে পার্থক্যগুলি দেখতে সত্যিই দুর্দান্ত which যা আসলে বেশ সুন্দর। আজকের মতো, বিভিন্ন ধরণের বিভিন্ন পদ্ধতির সন্ধানের জন্য আপনার রত্ন ভাষাগুলি সন্ধান করার দরকার ছিল ... ততক্ষণে এটি মূলধারার ছিল, তাই না?
পাল্টে ঘড়ির

অবশ্যই, সংশোধিত প্রতিবেদনটি এহ, 1976 সাল পর্যন্ত প্রকাশিত হয়নি? কমপক্ষে এটি স্প্রিংজারের কপিরাইটের বছর। এবং আমি যে স্ক্যানটি পেয়েছি তাতে 1978 এর উল্লেখ রয়েছে
রিয়াল্টো

[১] এ ভ্যান উইজনগার্ডেন (এডি।), ব্ল মাইলোকস, ১.ই.এল পেক, সিবিএ কোস্টার, আলগোরিদিমিক ভাষার প্রতিবেদন ALGOL 68, নিউমার। ম্যাথ। 14 (1969) 79-218; এছাড়াও কিবেনিয়েটিকা ​​6 (1969) এবং 7 (1970) এ। [২] এ। ভ্যান উইজঙ্গারডেন, ব্ল মাইলক্স, ১. ই এল পেক, সিবিএ কোস্টার, এম: সিন্টজফ, সিবি লিন্ডসে, এলজিএলটি মের্টেনস এবং আরজি ফিসকার, অ্যালগরিদমিক ভাষা ALGOL Rev৮, অ্যাক্টা ইনফোর্মেট সম্পর্কিত সংশোধিত প্রতিবেদন। 5 (1975) অংশ 1-3 (স্প্রিংগার, বার্লিন দ্বারা প্রকাশিত প্রিন্টস, এবং ম্যাথমেটিক্স সেন্ট্রাম, আমস্টারডাম দ্বারা গণিত কেন্দ্র ট্র্যাক্ট 50 হিসাবেও প্রকাশিত); এছাড়াও
সিগপ্ল্যান নোটিসে

16

1962 - এসএনওবোল

"StriNg ওরিয়েন্টেড এবং সিমবুলিক ভাষা"। প্রথমে প্রতীকীভাবে সিম্বলিক এক্সপ্রেশন ইন্টারপ্রেটার বলা হয়, 'এসএক্সআই', যাকে তারপরে 1960-এর দশকের নার্ভগুলিকে তাদের কাজ জমা দেওয়ার সময় লজ্জা পেতে বাধা দেওয়ার জন্য পরিবর্তন করতে হয়েছিল। সত্য গল্প.

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

প্রথম এসএনওবিওএল-তে কেবলমাত্র প্যাটার্ন ম্যাচিং এবং বেসিক পাটিগণিত ছিল। SNOBOL 3 এর পরে ফাংশন যুক্ত এবং I / O পরিবর্তন করেছে তবে অন্যথায় মনে হয় পিছনের দিকে সামঞ্জস্যপূর্ণ ছিল। এসএনওবিএল 4 সিনট্যাক্সটি পরিবর্তন করেছে এবং সেখান থেকে এটি আইকন হিসাবে বিকশিত হয়েছে যা প্যাটার্নটি মিলিয়ে রাখে তবে অন্যথায় প্রায় "সাধারণ" প্রোগ্রামিং ভাষার মতো দেখায়।

আমি যে প্রোগ্রামগুলি লিখেছি সেগুলি কেবলমাত্র মূল কাগজে বর্ণিত কার্যকারিতা ব্যবহার করে, সুতরাং I / O ব্যতীত মূল SNOBOL এর সাথে কাজ করা উচিত, যা আমি এসএনওবিএল 3 স্টাইলে করেছি যাতে জাভা ইন্টারপ্রেটার তাদের চালাতে পারে। কাগজ থেকে, পার্থক্যটি মনে হচ্ছে যে এসএনওবিএল 1 একটি বিশেষ SYSভেরিয়েবলের সাথে প্যাটার্ন ম্যাচিং ব্যবহার করে , অন্যদিকে এসএনওবিএল 3 ইনপুট এবং আউটপুট ভেরিয়েবল ব্যবহার করে:

  • ইনপুট:
    • 1 SYS .READ *DATA*
    • 3 DATA = SYSPPT
  • আউটপুট:
    • 1 SYS .PRINT 'A STRING' AND VARIABLES
    • 3 SYSPOT = 'A STRING' AND VARIABLES

এই বিকল্পগুলি তৈরি করা আপনাকে 'আসল' এসএনওবিএল 1 পাওয়া উচিত, অবশ্যই, আপনি এটি চালাতে পারবেন না।

কার্যক্রম 1

START   SYSPOT = 'SNOBOL WAS MADE IN 1962!'

টাস্ক 2

এটি গণিত, স্ট্রিং হ্যান্ডলিং এবং প্রবাহ নিয়ন্ত্রণ দেখায়। SNOBOL3 এর কার্যকর কার্যকারিতা রয়েছে, EQসমতা যাচাই করার মতো ; মূল SNOBOL না, তাই আমি সেগুলি ব্যবহার করি না।

* READ N FROM INPUT
START   SYSPOT = 'SIZE?'
        SZ = SYSPPT

* INITIALIZE
        CS = ''
        ROW = '0'

* OUTPUT PREVIOUS ROW AND START NEXT ONE
ROW     COL = '0'
        SYSPOT = CS
        CS = ''

COL     SUCC = 'N'
        EQ1 = COL
        FAIL = 'CHKE'
        EQ2 = '0'         /(EQUAL)
CHKE    FAIL = 'CHKR'
        EQ2 = SZ - '1'    /(EQUAL)
CHKR    FAIL = 'SPACE'
        EQ2 = ROW         /(EQUAL)

* CONCATENATE THE RIGHT CHARACTER TO THE CURRENT LINE         
SPACE   CS = CS ' '       /(NEXT)
N       CS = CS 'N'       /(NEXT)

* FOR NUMBERS, SUBSTRING MATCH IS ENOUGH IF IT IS KNOWN A<=B
NEXT    COL = COL + '1'
        COL SZ            /F(COL)
        ROW = ROW + '1'
        ROW SZ            /F(ROW)S(FIN)

* THERE SEEMS TO BE NO EQUALITY CHECK, JUST SUBSTRING MATCHING
* OF COURSE, EQ1 == EQ2 IFF EQ1 CONTAINS EQ2 AND VICE VERSA
* THIS ALSO ILLUSTRATES INDIRECTION
EQUAL   EQ1 EQ2           /F($FAIL)
        EQ2 EQ1           /S($SUCC)F($FAIL)

* OUTPUT THE LAST LINE
FIN     SYSPOT = CS     

কার্য 3

প্রথম, বিরক্তিকর। নোটের একমাত্র জিনিসটি হ'ল ছোট থেকে চেক, স্ট্রিং-ভিত্তিক এসএনওবিওএল আসলে কী ছিল (B - A) '-'তা বোঝায় : এর অর্থ " বিএর ফলাফলটি কি একটি বিয়োগ করে?" এসএনওবিএল 3 এছাড়াও করতে পারে LE(B,A), তবে এসএনওবিএল 1 পারেনি (কমপক্ষে কাগজটি এটি উল্লেখ করে না)।

* READ A AND B
START   SYSPOT = 'A?'
        A = SYSPPT
        SYSPOT = 'B?'
        B = SYSPPT

* GCD LOOP
STEP    '0' (A - B)          /S(DONE)
        (B - A) '-'          /S(AB)F(BA)
AB      A = A - B            /(STEP)
BA      B = B - A            /(STEP)
DONE    SYSPOT = 'GCD: ' A

অবশ্যই, যখন আপনার সম্পূর্ণরূপে স্ট্রিং এবং প্যাটার্ন ম্যাচিংয়ের ভিত্তিতে কোনও ভাষা থাকে, তখন প্যাটার্নের মিল এবং প্রতিস্থাপনটি বাস্তবে ব্যবহার না করা লজ্জার বিষয় হবে। সুতরাং, thoseনারিতে এবং রূপান্তরিত করার রুটিনগুলি সহ সেইসব অ্যানারি-ভিত্তিক জিসিডি রয়েছে।

* READ A AND B
START   SYSPOT = 'A?'
        A = SYSPPT
        SYSPOT = 'B?'
        B = SYSPPT

* CONVERT TO UNARY
        UNA.IN = A
        UNA.FIN = 'ADONE'          /(UNA)
ADONE   A = UNA.R
        UNA.IN = B
        UNA.FIN = 'BDONE'          /(UNA)
BDONE   B = UNA.R


* USE STRING MATCHING TO FIND GCD
STEP    '' B                       /S(GDONE)
MATCH   A B =                      /S(MATCH)
        C = B
        B = A
        A = C                      /(STEP)

* CONVERT BACK TO DECIMAL
GDONE   DEC.IN = A
        DEC.FIN = 'DONE'           /(DEC)
DONE    SYSPOT = 'GCD: ' DEC.R     /(FIN)

***************************** 
* DECIMAL TO UNARY SUBROUTINE
UNA     UNA.R =
UNA.DGT UNA.IN *.DGT/'1'* =        /F($UNA.FIN)
        .X = UNA.R
        UNA.R =
UNA.MUL .X *.Y/'1'* =              /F(UNA.ADD)
        UNA.R = UNA.R '##########' /(UNA.MUL)
UNA.ADD '1' .DGT                   /S(UNA.1)
        '2' .DGT                   /S(UNA.2)
        '3' .DGT                   /S(UNA.3)
        '4' .DGT                   /S(UNA.4)
        '5' .DGT                   /S(UNA.5)
        '6' .DGT                   /S(UNA.6)
        '7' .DGT                   /S(UNA.7)
        '8' .DGT                   /S(UNA.8)
        '9' .DGT                   /S(UNA.9)
        '0' .DGT                   /S(UNA.DGT)
UNA.1   UNA.R = UNA.R '#'          /(UNA.DGT)
UNA.2   UNA.R = UNA.R '##'         /(UNA.DGT)
UNA.3   UNA.R = UNA.R '###'        /(UNA.DGT)
UNA.4   UNA.R = UNA.R '####'       /(UNA.DGT)
UNA.5   UNA.R = UNA.R '#####'      /(UNA.DGT)
UNA.6   UNA.R = UNA.R '######'     /(UNA.DGT)
UNA.7   UNA.R = UNA.R '#######'    /(UNA.DGT)
UNA.8   UNA.R = UNA.R '########'   /(UNA.DGT)
UNA.9   UNA.R = UNA.R '#########'  /(UNA.DGT)

*****************************
* UNARY TO DECIMAL SUBROUTINE
DEC     DEC.R =
DEC.DGT '' DEC.IN                  /S($DEC.FIN)
        .X = DEC.IN
        DEC.IN =
DEC.DIV .X '##########' =          /F(DEC.ADD)
        DEC.IN = DEC.IN '#'        /(DEC.DIV)
DEC.ADD '' .X                      /S(DEC.0)
        '#' .X                     /S(DEC.1)
        '##' .X                    /S(DEC.2)
        '###' .X                   /S(DEC.3)
        '####' .X                  /S(DEC.4)
        '#####' .X                 /S(DEC.5)
        '######' .X                /S(DEC.6)
        '#######' .X               /S(DEC.7)
        '########' .X              /S(DEC.8)
        '#########' .X             /S(DEC.9)
DEC.0   DEC.R = '0' DEC.R          /(DEC.DGT)
DEC.1   DEC.R = '1' DEC.R          /(DEC.DGT)
DEC.2   DEC.R = '2' DEC.R          /(DEC.DGT)
DEC.3   DEC.R = '3' DEC.R          /(DEC.DGT)
DEC.4   DEC.R = '4' DEC.R          /(DEC.DGT)
DEC.5   DEC.R = '5' DEC.R          /(DEC.DGT)
DEC.6   DEC.R = '6' DEC.R          /(DEC.DGT)
DEC.7   DEC.R = '7' DEC.R          /(DEC.DGT)
DEC.8   DEC.R = '8' DEC.R          /(DEC.DGT)
DEC.9   DEC.R = '9' DEC.R          /(DEC.DGT)

FIN     START

দুর্দান্ত পটভূমি কাজ! 1961-এর জন্য খুব বেশি কিছু নয় - দেখে মনে হচ্ছে আমাদের কাছে
কমিট রয়েছে

15

2012 - টাইপস্ক্রিপ্ট

টাইপস্ক্রিপ্ট মাইক্রোসফ্ট দ্বারা বিকাশিত এবং রক্ষণাবেক্ষণ করা একটি নিখরচায় ও মুক্ত উত্স প্রোগ্রামিং ভাষা।

মূল লক্ষ্য: যে কোনও ব্রাউজার। যে কোনও হোস্ট। যে কোনও ওএস। মুক্ত উৎস. এটি 2012 সালের অক্টোবরে প্রকাশিত হয়েছিল

হ্যালো টাইপস্ক্রিপ্ট

Task1(name:string,year:number) {
    return name + " was made in "+ year +"!";
}

এএসসিআইআই আর্ট

Task2(n:number,separator:string,space:string) {
    var result:string = "";
    for (var k = 0; k < n; k++)
    {
        for (var j = 0; j < n; j++)
        {
            var i = ((n * k) + j) % n;
            result+=(i == 0 || i == n - 1 || i == k) ? "N" : space;
        }
        result+=separator;
    }
    return result;
}

GCD

Task3(a:number,b:number) {
    while (a != 0 && b != 0)
        {
            if (a > b)
                a %= b;
            else
                b %= a;
        }

        if (a == 0)
            return b;
        else
            return a;
}

এটি অনলাইনে চেষ্টা করুন এবং এর স্ক্রিনকাস্ট করুন


4
আপনি একটি জিনিস উল্লেখ করতে ভুলে গেছেন: টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্টের একটি সুপারসেট যা কয়েকটি সিনট্যাক্স পরিবর্তন সহ এবং (?) দৃ strong়-টাইপযুক্ত ভেরিয়েবল এবং যুক্তিগুলির অনুমতি দেয়।
ইসমাইল মিগুয়েল

1
হে আমার ,শ্বর, এমএস দ্বারা উন্মুক্ত উত্স!
মেগা ম্যান

15

2011 - ডার্ট

ডার্ট হ'ল গুগল দ্বারা বিকাশ করা একটি ওপেন সোর্স প্রোগ্রামিং ল্যাঙ্গুয়েজ যা জাভাস্ক্রিপ্টের প্রতিস্থাপন হিসাবে বিকশিত হয়েছে (এটিকে জাভাস্ক্রিপ্টে সংকলন করে ভেবেছিল)। এটি গুটো সম্মেলনের সময় ২০১১ সালে গুগল দ্বারা প্রকাশ করা হয়েছিল ve

"ওহে বিশ্ব!" ভেরিয়েন্ট:

main() {
  print('Dart was made in 2011!');
}

এএসসিআইআই আর্ট এন:

ব্রুটফোর্স পদ্ধতিটি 0 (n²) এ চলে, তবে আপনি যদি জায়ান্ট নম্বর ব্যবহার না করেন তবে তা সত্যিই গুরুত্বপূর্ণ নয়।

asciiN(int number){
    if(number == 1){
        print('N');
    }else{
        for(var i = 1; i <= number; i++){
            String currentLine = "";
            for(var j = 1; j <= number; j++){
                if(j==1 || j == number || j == i){
                    currentLine = currentLine + "N";
                }else{
                    currentLine = currentLine + " ";
                }
            }
            print(currentLine);
        }
    }
}

GCD

স্নাপ থেকে সরল ইউক্যালিড পদ্ধতি! উপরোক্ত উদাহরণ

int gcd(int first, int second){
if(second > first){
   return gcd(second, first);
    }else{
        if(first == 0){
            return second;
        }else{
            if(second ==0){
                return first;
            }else{
                return gcd(second, first-second);
            }
        }
    }
}

5
আমি মনে করি না যে আপনি কোনও C n ASCII শিল্পকে O (n²) এর চেয়ে কম আউটপুট করতে পারবেন।
পাওলো ইবারম্যান

@ PaŭloEbermann আমি বড় ও স্বরলিপি বা জটিলতা কীভাবে গণনা করতে পারি তার সাথে তেমন পরিচিত নই, তবে জুলিয়া উদাহরণটি দেখে মনে হচ্ছে এটি ও (N²) নয়।
Nzall

@AlexA। মুদ্রণ () ফাংশনটি এন অক্ষরের একটি স্ট্রিং প্রিন্ট করে। আমি মনে করি যে ফাংশন কলটি কার্যকর করতে কমপক্ষে O (n) সময় প্রয়োজন। লুপে, তাই পুরো প্রোগ্রামটির জন্য ও (এন)
পাওলো ইবারম্যান

@AlexA। আমি মনে করি ইবারম্যান যে বিষয়ে কথা বলছেন তা হ'ল আপনার মুদ্রণ ফাংশনে আপনার কাছে এন স্ট্রিং কনক্যাটনেটেশন অপারেশন রয়েছে। আমরা উভয়ই আমাদের ফাংশনগুলিতে স্ট্রিং কনটেক্সটেশন করি না। আমি তাদের প্রতি অভ্যন্তরীণ লুপ পুনরাবৃত্তির জন্য একবার করি, আপনি এগুলি প্রতিটি মুদ্রণ () এর জন্য করেন।
Nzall

1
যদি এটি অসি শিল্প না হয় তবে এটি এন (এন স্ক্রিনে 3 টি রেখা আঁকতে ও (এন) হবে) প্রতিটি লাইন হ'ল (এন) অতএব হে (এন) জটিলতা)। অথবা, আপনি বলতে পারেন, এন এর রেন্ডারিংয়ে ও (এন) জটিলতা রয়েছে ...
হি

15

2010 - মরিচা

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

কার্যক্রম 1

fn main()
{
    println!("Rust was made in 2010!");
}

Task2

fn main()
{
    // get commandline arguments
    // "test 3"
    let args : Vec<_> = std::env::args().collect();

    // convert 2nd argument to integer
    let n = u32::from_str_radix( args[1].as_ref(), 10 ).unwrap();
    print_n( n );
}

fn print_n( n: u32 )
{
    for y in range( 0, n )
    {
        for x in range( 0, n )
        {
            if x == 0 || x == y || x + 1 == n
            {
                print!("N");
            }
            else
            {
                print!(" ");
            }
        }
        println!("");
    }
}

ব্যাখ্যা:

if x == 0 || x == y || x + 1 == n

কেবল উল্লম্ব (বাম এবং ডান |) এবং তির্যক ( \) মুদ্রণের জন্য যত্ন নেয়

কার্য 3

ইউক্লিডিয়ান_এলগোরিদমের সহজ বাস্তবায়ন

fn main()
{
    // get commandline arguments
    // "test 453 3"
    let args : Vec<_> = std::env::args().collect();

    // convert 2nd and 3rd argument to integers
    let a = u32::from_str_radix( args[1].as_ref(), 10 ).unwrap();
    let b = u32::from_str_radix( args[2].as_ref(), 10 ).unwrap();
    let g = gcd( a, b );
    println!( "GCD of {} and {} is {}", a, b, g );
}

fn gcd( mut a: u32, mut b: u32 ) -> u32
{
    while b != 0
    {
        let c = a % b;
        a = b;
        b = c;
    }
    return a;
}

আপনি কীভাবে স্টিন থেকে দুটি স্পেস-সেপারেটেড পূর্ণসংখ্যাকে ইনপুট করতে পারবেন তা দেখিয়ে একটি স্নিপেট যুক্ত করতে পারেন?
জিরো ফাইবার

3
মরিচা "2010" সালে তৈরি হয়েছিল? প্রোগ্রামিং ভাষার টাইমলাইনে তেমন কথা বলা হয়েছে , তবে আসল নিবন্ধটি বলেছে যে এটি কেবল ২০১০ সালে ঘোষণা করা হয়েছিল (আসলে ২০১১ সালে রেফারেন্স দ্বারা প্রমাণিত হয়েছিল ) এবং ২০১২ সালে এই সংস্করণ 0.2 প্রকাশিত হয়েছিল।
এমবিলেম

1
@ সম্প্রীতিপাণ্ডা, তাড়াতাড়ি দেখুন //raw
lapekowogu

1
দেখতে কিছুটা আধুনিক-ইশ লাগছে। এটি কি কম্পাইলারের প্রকাশিত ওয়ার্কিং সংস্করণটি প্রথম <s> প্রকাশিত </ s> সংকলন করতে পারে?
vi।

15

2015 - মাফিন এমসি

মুফিন এমসি হ'ল একটি ক্ষমতায়নের (দ্রুত) সরঞ্জাম হিসাবে প্রয়োজনীয়তার বাইরে ফেব্রুয়ারী ২০১৫ এর মাঝামাঝি সময়ে ফ্রাঙ্ক পোর্চার ( http://franckys.com ) রচিত একটি টুরিং-সম্পূর্ণ, মজাদার (তবে গুরুতর), কার্যকরী এবং সংক্ষিপ্তবাদী ম্যাক্রো-ভাষা language নতুন তাহিটি ফ্যাশন ব্র্যান্ডের জন্য প্রেস্টাশপ-ভিত্তিক বণিক সাইটের সাথে সম্পর্কিত সমস্ত জায়-সম্পর্কিত ক্রিয়াকলাপ চালাতে এবং চালানোর জন্য একমাত্র ফ্রন্ট-এন্ড কন্ট্রোলার হিসাবে ব্যবহৃত স্প্রেডশিট: বিদ্রোহী তাহিতি ( http://mutinytahiti.com - শিগগিরই লঞ্চ হয়েছে)।

মাফিন এমসি হ'ল MU ক্ষুদ্র F অবাস্তব এফ ল লেজিবল IN লাইন এম এর সংক্ষিপ্ত রূপ acro সি ommand ভাষা।

আমাদের প্রয়োজনীয়তাগুলি পূরণ করতে, মাফিন এমসির মূল বৈশিষ্ট্যগুলি নমনীয় এবং দক্ষ 1 ম শ্রেণির অন্তর্নির্মিত সিমেটিক কনস্ট্রাক্টগুলি যেমন পুনরাবৃত্তিকারী , অলস-মূল্যায়ন , মাল্টি ফান্টেক্টর , স্ট্রিং-প্রোডাক্টের চারপাশে নকশা করা হয়েছে ।

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

মাফিন এমসি তালিকা শব্দার্থবিজ্ঞান (ধরণের) পাওয়ার-সেট শব্দার্থবিজ্ঞানের উপর ধার করে , যা:

  1. সমস্ত মাফিন এমসির ক্রিয়াকলাপ সম্ভবত একটি তালিকা তৈরি করে, সম্ভবত খালি।
  2. কোনও পৃথক তালিকা উপাদানের অ্যাক্সেস সর্বদা সেই উপাদানটির তৈরি একটি-মান-তালিকা দেয় (একে সিঙ্গলটন হিসাবে ভাবেন)।
  3. খালি তালিকা হ'ল তালিকার ক্রিয়াকলাপে নিরপেক্ষ উপাদান।

এর সাথে পুনর্মিলন করার জন্য, নিম্নলিখিতগুলি সহায়তা করতে পারে:

  • কেউ তালিকার পাওয়ার-সেটটির উপাদান হিসাবে একটি তালিকাটিকে ভিজ্যুয়ালাইজ করতে পারে যা সর্বাধিক কার্ডিনালিটি রয়েছে।
  • তালিকার পাওয়ার-সেটটির উপাদান হিসাবে তালিকার উপাদানটিকে ভিজ্যুয়ালাইজ করুন যা সেই উপাদানটির তৈরি সিঙ্গলটন।
  • খালি সেটটি খালি সেট হিসাবে কল্পনা করুন; এটি হল, খালি-সেটটির পাওয়ার-সেটটির একমাত্র উপাদান।

যেমন, একটি খালি তালিকা উপাদান অ্যাক্সেস খালি তালিকা উত্পাদন করে, এবং একটি ত্রুটি না! প্রকৃতপক্ষে, মাফিন এমসি অনেকগুলি traditionalতিহ্যবাহী ক্রিয়াকলাপগুলির শব্দার্থক উপায়টিকে প্রসারিত করে যতটা সম্ভব ত্রুটিগুলি ছুঁড়ে ফেলার চেষ্টা করে।

কার্যক্রম 1

#(say "MuffinMC was born in 2015 out of necessity !")

#(...)মাফিন হয় এমসি বিল্ট-ইন ফাংশন একটি অ evaled যুক্তি তালিকায় একটি ফাংশন প্রয়োগের জন্য এখানে ম্যাক্রো কমান্ড say, পার্ল থেকে ধার করা।

#(say 1 2 3 ...) কার্যত অভিন্ন map {say $_} (1,2,3,...)

টাস্ক 2

ফাংশনটি সংজ্ঞায়িত করুন ascii-art():

=(ascii-art
    '( =(*  x   #(2- $(_1))
        I   I( *($(x) " ") N)
            foo '( #(. #(I $(x))) ))
    #(say ?( #(== $(_1) 1) N "N#(map foo #(.. 1 $(_1)))N" ))
 ))

Ascii-art()সবচেয়ে সংক্ষিপ্ত ওয়ার্কিং ফর্ম (88 বাইট):

=(f'(=(* x#(2-)I I(*($(x)" ")N)g'(#(.#(I$(x)))))#(say?(#(==$(_1)1)N"N#(map g#(..))N"))))
  • =(var val...)একটি ভেরিয়েবল সংজ্ঞায়িত করতে বা এটি পুনরায় নিয়োগের জন্য মুফিন এমসি ম্যাক্রো কমান্ড।

  • $(var)একটি ভেরিয়েবলের মান অ্যাক্সেস করার জন্য মাফিন এমসি ম্যাক্রো কমান্ড। এটি $(v1 v2 ...)একবারে অনেকগুলি ভেরিয়েবল অ্যাক্সেস করতে স্বাভাবিকভাবে ফর্মটি গ্রহণ করে ।

  • =(* var1 val1 var2 val2 ...)সমান্তরাল কার্যভারগুলি মোকাবেলা করার জন্য মুফিন এমসি ম্যাক্রো কমান্ডের বর্ধিতাংশ =(...)

  • ভেরিয়েবলগুলি _1, _2... গতিশীলভাবে স্কোপ করা হয় (অগভীর বাঁধাইয়ের প্রক্রিয়া) এবং স্বয়ংক্রিয়ভাবে ফাংশনের যুক্তিগুলিতে আবদ্ধ হয়ে সেট করা থাকে। পার্ল 5 থেকে নেওয়া, সিস্টেম ভেরিয়েবল #(আর্গুমেন্টের সংখ্যা) এবং @(আর্গুমেন্টের তালিকা) এছাড়াও স্বয়ংক্রিয়ভাবে সেট হয়ে গেছে।

  • কার্যগুলি হ'ল যে কোনও সংখ্যা মুফিন এমসির বিবৃতিতে আবদ্ধ vari

এই আকর্ষণীয় সমাধানটি দুটি প্রাকৃতিক মাফিন এমসির অন্তর্নির্মিত বৈশিষ্ট্যগুলির সংমিশ্রণ থেকে আসে :

  1. সাইক্লিং-পুনরাবৃত্তিকারীদের সংজ্ঞায়িত করার জন্য মাফিন এমসি I(...) ম্যাক্রো কমান্ড, পরে কার্যকরী ফর্মের সাথে ব্যবহার করা হয়েছে #(my-iterator want-number-of-values),

  2. মাফিন এমসির স্ট্রিং-প্রোডাক্ট কনস্ট্রাক্ট, প্রাকৃতিক ভেরিয়েবল ইন্টারপোলেশনের একটি এক্সটেনশান, যা কোনও স্ট্রিং দেওয়া হয়েছে "F1 F2 F3...", যেখানে এফ আই এস হয় মফিন এমসি স্ট্রিং আক্ষরিক বা মুফিন এমসি ম্যাক্রো কমান্ড (ওরফে ফাংশনাল ফর্ম), যতগুলি স্ট্রিং তৈরি করবে পণ্য কার্ডিনাল (এফ 1) এক্স কার্ডিনাল (এফ 2) এক্স দ্বারা প্রদত্ত ...

উদাহরণস্বরূপ, প্রদত্ত এক্সএ ভেরিয়েবল যা 2 টি মান রাখে, a এবং b বলে, এবং y আরও একটি ভেরিয়েবল যা 3 টি মান রাখে, বলে, 1 2 3, তারপরে স্ট্রিংয়ের মূল্যায়ন "x=$(x) y=$(y))"6 ক্রম অনুসারে 6 বিভিন্ন মান তৈরি করবে:

  • "X = Ay = 1"
  • "X = Ay = 2"
  • "X = Ay = 3"
  • "X = = 1 দ্বারা"
  • "X = = 2 দ্বারা"
  • "X = = 3 দ্বারা"

এটি মুফিন এমসির জন্য ডিজাইন করা হয়েছে মিটিন প্রকল্পের অত্যন্ত আকাঙ্ক্ষিত বৈশিষ্ট্যগুলির মধ্যে একটি ।

চালাও এটা !

#(ascii-art 1)

N


#(ascii-art 3)

N N  
NNN  
N N 


#(map '( #(ascii-art $(_1))) 5 7 9)

N   N
NN  N
N N N
N  NN
N   N

N     N
NN    N
N N   N
N  N  N
N   N N
N    NN
N     N

N       N
NN      N
N N     N
N  N    N
N   N   N
N    N  N
N     N N
N      NN
N       N

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

আমাদের অ্যালগরিদম অনুসরণের উপর ভিত্তি করে:

Ascii-art (n) এ কল দেওয়া, {n = 2 পি + 1 | পি পূর্ণসংখ্যা, পি> = 0}, উত্পন্ন শিল্পে এন অক্ষরের এন স্ট্রিং রয়েছে, যার মধ্যে দুটি, সবচেয়ে বুদ্ধিমানতম এবংতমতম, স্থির এবং সর্বদা একই: 'এন'। এটি কেবল মাঝের স্ট্রিং উত্পাদন করতে সমস্যা হ্রাস করতে দেয়। উদাহরণস্বরূপ, এন = 5 দেওয়া, আমরা নীচের 5 টি মধ্যবর্তী স্ট্রিং তৈরি করতে চাই, প্রতিটি এন -2 অক্ষর দ্বারা তৈরি (আমরা আরও ভাল ভিজ্যুয়ালাইজের স্বার্থে স্থানটিকে '_' দ্বারা প্রতিস্থাপন করেছি):

    The 5 strings :
        _ _ _
        N _ _ 
        _ N _
        _ _ N
        _ _ _

    can be seen as resulting from splitting in groups of 3 characters
    the following infinite sequence of 4 characters :


        /---- < _ _ _ N > ----\
       |                       |
        \---------------------/    


    which, once unfolded, yields the infinite ruban : 

        _ _ _ N _ _ _ N _ _ _ N _ _ _ N _ _ _ N _ _ _ N ...
              ^     ^     ^     ^     
        _ _ _ |     |     |     |
              N _ _ |     |     | 
                    _ N _ |     |
                          _ _ N |
                                _ _ _
  • এই জাতীয় মধ্যবর্তী স্ট্রিংগুলি সহজেই 3 টির ('_' '_' '_' 'N')5 টি গ্রুপে 4 টি উপাদান ক্রমের উপরে সাইক্লিং করে উত্পাদিত হতে পারে ; প্রদত্ত এন, ফাংশনটির ইনপুট, এই জাতীয় ক্রমটি এন -2 অক্ষর '_'দ্বারা তৈরি করা হয়, অক্ষরটি অনুসরণ করে 'N'। এই অনুক্রমের উপর সাইক্লিংয়ের জন্য মাফিন এমসির I(sequence) অন্তর্নির্মিত পুনরাবৃত্তকারী (একটি পুনরুক্তি যা তার প্রাথমিক মানের ক্রমগুলি চিরকাল চক্র করে রাখে) এর মধ্যে ক্রমটি এম্বেড করা ছাড়া আর কিছুই দরকার না ।

  • তারপরে আমরা আমাদের মধ্যবর্তী স্ট্রিংগুলি দৈর্ঘ্যের এন -2 এর মধ্য দিয়ে উত্পাদন করতে পারি এবং আমাদের পুনরাবৃত্তিকে তার পরবর্তী এন -2 মান (এন - 2 অক্ষর) দিতে বলি, যা একত্রে প্রত্যাশিত মধ্যবর্তী স্ট্রিং উত্পাদন করতে সম্মিলিত হয়।

  • উপরের প্রক্রিয়াটির n বার পুনরাবৃত্তি করে এন মধ্যম স্ট্রিংগুলি এন ফলাফলগুলি সংগ্রহ করার জন্য একটি মানচিত্র ব্যবহার করে তৈরি করা হয় (এন -2 অক্ষরের এন স্ট্রিং)।

  • আমরা অন্য শক্তিশালী মাফিন ব্যবহার এমসি বিল্ট-ইন কনস্ট্রাক্ট, যথা স্ট্রিং পণ্য , এন চূড়ান্ত স্ট্রিং উত্পাদন করতে: "N#(map...)N"

  • এবং এটাই !

    Commented script  
    
    =(ascii-art                    Define the 'ascii-art' variable to hold
                                   the function's definition.
                                   When called, its argument, the actual
                                   value of n, will be bound to the system
                                   variable _1, accessed as $( _1 ).
    
        '(                         '(...) quote macro-command -- protects 
                                   its arguments, here the function 
                                   definition, from being evaluated.
                                   We want to keep it literally for further evaluation.
    
           =(*                     =(*...) // assignment macro-command.
                                   Similar to the Lisp (let (...)...),
                                   not the let* !
    
               x #(2- $(_1))       Define the variable x to hold the value 
                                   n-2.   
    
               I I(                Define I to be an iterator over the 
                                   the x+1 characters sequence :
                    *( $(x) " ")   . x white-space characters
                    N              . 1 'N' character (here the atom N)
                 )
    
               foo '(              Define the variable foo as a function 
                      #(.          to catenate ( #(. s1...) )
                         #(I $(x)) the iterator's next x elements.
                       )            
               )
           )                       End of =(*...
    
        #(say                      Print each element of:
           ?(                      If
              #(== $(_1) 1)        n equals 1
      N                    the atom N,
      "N#(map foo #(.. 1 $(_1)))N" else the n strings as a string-product 
                                   resulting from foo-computing the  
           )                       n middle-strings.
         )
     ))
    

কার্য 3

ফাংশনটি সংজ্ঞায়িত করুন gcd():

=(gcd '( ?( #(== $(_2) 0)
        $(_1)
            #(self $(_2) #(mod $(_1) $(_2)))) ))

gcd()এর আসল সংক্ষিপ্ততম ফর্ম (37 বাইট - 2 বাইটস রডলভার্টাইসকে ধন্যবাদ জানায়)

=(g'(?(#(z$(_2))$(_1)#(g$(_2)#(mod)))))

চালাও এটা !

#(gcd 225 81)

ফলন 9।

এটাই.

সুন্দর খেলাটির জন্য এবং সম্ভবত আপনার আগ্রহের জন্য আপনাকে ধন্যবাদ। ভাষাটি যে কারও সাথে খেলতে, এটি ব্যবহার করতে বা এটি প্রসারিত করতে চায় তাদের কাছে ভাষা উপলভ্য। কেবল এটির জন্য জিজ্ঞাসা করুন এবং আমি এটি প্রেরণে খুশি হব।

চিয়ার্স

ফ্রাঙ্ক


গীত। মাফিন এমসির বর্তমান বাস্তবায়ন পার্ল 5 এ রয়েছে। সোর্স কোডটি আধুনিক পার্লের প্রায় 2000 লাইনের মতামত সহ মন্তব্যগুলি এবং এটি একটি নন-রিগ্রেশন টেস্ট স্যুট সহ বান্ডিল হয়ে আসে যা মফিন এমসির নির্মাণ ও শব্দার্থবিদ্যা শিখতে দুর্দান্ত ।


সত্যিই সুন্দর! আসকি-আর্টের সংক্ষিপ্ততম ফর্মটির একটি সংক্ষিপ্ত ফাংশন নাম রয়েছে, তবে জিসিডি সংক্ষিপ্ত নয়। এটি কি ইচ্ছাকৃত, কারণ যদি এটি না হয় তবে আপনি আরও 2 বাইট শেভ করতে পারেন। +1
রডলফিটো

অবশ্যই, এবং এটি উদ্দেশ্যমূলক। আমি কি ? হ্যাঁ, এটি করা যাক;) পোস্টের জন্য ধন্যবাদ, এবং আপনার প্রশংসা।
ফ্রাঙ্ক পোর্চার

1
যেহেতু আপনি অতিরিক্ত অক্ষরগুলি থেকে মুক্তি পাওয়ার চেষ্টা করছেন (এবং কারণ আমি একটি অযোগ্য ব্যাকরণ-কদর্য হতে পারি), আপনি প্রথম কাজের জন্য বিস্মৃত চিহ্নের সামনে স্থানটি সরিয়ে ফেলতে (উচিত) করতে পারেন। ফরাসি আফাইক ভাষায় সেই স্থানটি সঠিক, তবে ইংরেজিতে নয়।
আমোস এম কার্পেন্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.