ওয়ান ইন্সট্রাকশন সেট কম্পিউটার ডিজাইন করুন!


31

বিজ্ঞপ্তি: আমি যে উত্তর উত্তর আকর্ষণীয় আমি একটি অনুদান দিতে ইচ্ছুক।

আপনার চ্যালেঞ্জটি হল একটি টিউরিং-সম্পূর্ণ একটি নির্দেশিকা সেট কম্পিউটার (ওআইএসসি) ডিজাইন করা :

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

এখানে একক আদেশের কয়েকটি উদাহরণ রয়েছে যা একটি টুরিং-সম্পূর্ণ ওআইএসসি করে C

নিয়মাবলী:

আপনাকে অবশ্যই এর ব্যাখ্যা বা প্রমাণ সরবরাহ করতে হবে

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

আপনাকে অবশ্যই এর টুরিং-সম্পূর্ণতা প্রমাণ করতে হবে

আপনার ভাষা টিউরিং-সম্পূর্ণ তা আপনাকে অবশ্যই একটি আনুষ্ঠানিক প্রমাণ অন্তর্ভুক্ত করতে হবে। এটি করার একটি সহজ উপায় হ'ল এটি প্রমাণ করার মাধ্যমে এটি অন্য টিউরিং-সম্পূর্ণ ভাষার মতো আচরণ করতে পারে বা একই আচরণ করতে পারে। ব্যাখ্যার সর্বাধিক প্রাথমিক ভাষা হ'ল ব্রেইনফ ** কে

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

এখানে খুব সহজ-বাস্তবায়িত টুরিং-সম্পূর্ণ ভাষাগুলির একটি তালিকা রয়েছে।

অতিরিক্ত ওআইএসসি প্রয়োজনীয়তা

  • এই ওআইএসসির কেবল একটি নির্দেশ থাকতে হবে - এটির একটির টিউরিং-সম্পূর্ণ করার সাথে এটির একাধিক নির্দেশনা থাকতে পারে না।

  • আপনার ওআইএসসি আপনার পছন্দসই সিনট্যাক্স ব্যবহার করতে পারে। আপনার উত্তরে আপনাকে নির্দেশনা কী, ডেটা কী এবং কোনও নো-অপ্ট (উদাহরণস্বরূপ হোয়াইটস্পেস) বলতে হবে। সৃজনশীল হও!

  • যুক্তিগুলি কেবল পূর্ণসংখ্যার প্রয়োজন হয় না। উদাহরণস্বরূপ, /// একটি টুরিং-সম্পূর্ণ ওআইএসসির একটি সুন্দর উদাহরণ।

  • কীভাবে এবং কীভাবে ইনপুট এবং আউটপুট নেওয়া হয় এবং দেওয়া তা আপনার হাতে ছেড়ে যায়। বেশিরভাগ ওআইএসসিগুলি নির্দিষ্ট মেমরির অবস্থানগুলির মাধ্যমে I / O প্রয়োগ করে তবে এটি করার অন্যান্য উপায়ও থাকতে পারে এবং এটির জন্য আপনাকে উত্সাহ দেওয়া হয়।

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

ভোটিং

ভোটাররা, দয়া করে মনে রাখবেন বিরক্তিকর সাবমিশনগুলিকে সমর্থন করবেন না। উদাহরণ:

  • Lenguage -equivalents
  • বিদ্যমান ওআইএসসির একটি বাস্তবায়ন (উত্তরদাতারা, দয়া করে নিজের তৈরি করুন!)
  • একটি "ওআইএসসি" যেখানে প্রথম যুক্তি কল করার জন্য একটি আদেশ নির্দিষ্ট করে ( উদাহরণস্বরূপ )

যাইহোক, আপনার আকর্ষণীয়, সৃজনশীল জমাগুলি যেমন:

  • গাণিতিক সমীকরণের ভিত্তিতে একটি ওআইএসসি
  • নিউরাল নেটওয়ার্কের উপর ভিত্তি করে একটি টুরিং-সম্পূর্ণ জেআইএসসি
  • একটি ওআইএসসি যাতে আউটপুট I / O নির্দিষ্ট মেমরির অবস্থানের চেয়ে অন্য উপায়ে ঘটে

জয়লাভ

সঙ্গে , সবচেয়ে ভোট দিয়ে উত্তর জিতেছে! শুভকামনা!


10
একটি "নির্দেশ" কি? এবং আমরা কিভাবে তাদের গণনা করব?
গম উইজার্ড

1
@ ননওআইনি এখানে আমি আশা করি আমি এক্সডি ভোট দেওয়ার জন্য যথেষ্ট জানতাম
ব্রায়ান এইচ।

2
আমি এটাকে কমিয়ে দিয়েছি। আমি মনে করি এটি একটি খুব আকর্ষণীয় ধারণা, তবে আপনি একটি ওআইএসসি কী এবং কোনটি কীভাবে একটিকে নিশ্চিত করার তা ঠিক ব্যাখ্যা করেন না। আমি বিএফকে একটি ওআইএসসি করেছি, তবে এটি স্পষ্টতই প্রশ্নের উদ্ভবের বিরুদ্ধে, তবে প্রযুক্তিগতভাবে বৈধ।
NoOneIsHere

1
@ এমডিএক্সএফ আমি মনে করি না আপনি /// পেয়ে গেছেন: এটির একটি বিকল্প কমান্ড রয়েছে এবং এতে প্রিন্ট কমান্ড রয়েছে যা প্রতিস্থাপনের আদেশের কেবলমাত্র কোনও পার্শ্ব প্রতিক্রিয়া নয়
ধ্বংসাত্মক লেবু

1
@ নন আইনেইহর কারণ জনপ্রিয়তা-প্রতিযোগিতা । হ্যাঁ, এটি বৈধ, তবে এটির স্কোর খুব কম (ভোটের তালিকায়) রয়েছে, সুতরাং এটি জিতবে না।
ব্যবহারকারী 202729

উত্তর:


20

XOISC

এই ওআইএসসিটি ফোকারের এক্স-কম্বিনেটরের উপর ভিত্তি করে তৈরি করা হয়েছে যা নিম্নলিখিত হিসাবে সংজ্ঞায়িত হয়েছে:

X=λf .f (λg h x .g x (h x)) (λa b c .a)

যদি আমরা এই সত্যটি স্বীকার করি যে এসকেআই-ক্যালকুলাস টিউরিং সম্পূর্ণরূপে উপরের কোম্বিনেটরটিও টুরিং সম্পূর্ণ হয়। এটি কারণ, এস , কে এবং আমি এক্স এর শর্তে এইভাবে লেখা যেতে পারে :XSKIX

S=X (X X)K=X XI=S K K=X (X X) (X X) (X X)

এক্সওআইএসসি কীভাবে কাজ করে

অভ্যন্তরীণভাবে XOISC সেখান থেকে নির্দেশ গ্রহণ, একটি (প্রথমদিকে খালি) স্ট্যাক হয়েছে নিম্নলিখিত আছে একটি আর্গুমেন্ট হিসাবে:n

  • স্ট্যাক থেকে পপ উপাদানসমূহ (ফাংশন এফ 1এফ এন ), এফ 1 ( এফ 2 ( ( এফ এন এক্স ) ) ) টিপুনnf1fNf1 (f2 ((fN X)))

একবারে আর কোনও নির্দেশনা না থাকলে XOISC সমস্ত কমান্ড-লাইন আর্গুমেন্টগুলি (যদি থাকে) স্ট্যাকের দিকে ঠেলে দেবে, উদাহরণস্বরূপ:

[s1,, sMstack before, a1,, aNarguments]

চূড়ান্ত গণনা হবে ((((s1 s2)) sM) a1))aN


XOISC- র একটি নির্দেশিকা যেহেতু কেবল একটি যুক্তি গ্রহণ করে (মেমরি অফসেট) সেই নির্দেশের জন্য কোনও নাম ব্যবহার করারও কারণ নেই। সুতরাং একটি বৈধ উত্স ফাইলটি সম্পূর্ণরূপে নিউজলাইন বা হোয়াইটস্পেস দ্বারা পৃথক পূর্ণসংখ্যার সমন্বয়ে গঠিত যেমন উদাহরণস্বরূপ:

0 0 2 0 1 0 1

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

উদাহরণ

আসুন উপরের উদাহরণটি ধরুন (ডানদিকে বাড়ানো স্ট্যাক):

0pop 0 and apply (ie. push single X):[X]0again simply push X:[X, X]2pop 2 (a,b) and push a (b X):[X (X X)]0simply push X:[X (X X), X]1pop 1 (a) and push a X:[X (X X), X X]0simply push X:[X (X X), X X, X]1pop 1 (a) and push a X:[X (X X), X X, X X]

অবশেষে স্ট্যাকটি মূল্যায়ন করুন: বা কম বন্ধনী সহ এক্স ( এক্স এক্স ) ( এক্স এক্স ) ( এক্স এক্স ) যা আমরা ভাল পুরাতন এস কে কে পরিচয় হিসাবে স্বীকৃত ফাংশন।((X (X X)) (X X)) (X X)X (X X) (X X) (X X)S K K

টুরিং সম্পূর্ণতা

প্রুফ ধারণা

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

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

উদাহরণস্বরূপ, পূর্বে ব্যবহৃত অভিব্যক্তি: ((X (X X)) (X X)) (X X)

  • পেতে , আমাদের কেবল একটি দরকারX0
  • এরপরে আমরা একটি নতুন স্তরের বন্ধনীতে এসেছি, সুতরাং আমাদের আবার কেবল একটি দরকার 0
  • এখন দুটি বন্ধনী বন্ধ, সুতরাং আমাদের 2 টি উপাদান পপ করতে হবে: 2
  • আবার আমরা নতুন স্তরের বন্ধনীতে এসেছি, সুতরাং আমাদের একটি দরকার 0
  • দুটি বন্ধনী, আবার বন্ধ a 2
  • এবং আবার একই

সুতরাং আমরা একটি ভিন্ন (এখনও শব্দার্থ সমতুল্য) XOISC- প্রোগ্রামের সাথে শেষ করি:

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

যদি আমরা এই কৌশলটির সাথে থাকি তবে আমরা সহজেই কম্বিনেটর সমন্বিত যে কোনও এক্সপ্রেশনটি একটি XOISC প্রোগ্রামে রূপান্তর করতে পারি যা কেবল স্ট্যাকের উপর একটি একক ফাংশন রেখে দেয়।X

আনুষ্ঠানিক প্রমাণ

দেওয়া হয়েছে যে এসকেআই-ক্যালকুলাস টিউরিং সম্পূর্ণ, আমাদের দুটি জিনিস দেখাতে হবে:

  1. -combinator স্কি-ক্যালকুলাস জন্য একটি ভিত্তিX
  2. এক্সওআইএসসি কম্বিনেটরের সাথে গঠিত যে কোনও এক্সপ্রেশনকে উপস্থাপন করতে সক্ষমX

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

দ্বিতীয় অংশটি কাঠামোগত আবেগ দ্বারা প্রমাণিত করা যেতে পারে , যদিও এটি কিছুটা শক্তিশালী বক্তব্য প্রমাণ করা সহজ: যথা, কম্বিনেটর দ্বারা গঠিত যে কোনও অভিব্যক্তির জন্য একটি প্রোগ্রাম রয়েছে যা সেই অভিব্যক্তিটিকে স্ট্যাকের উপর একক অভিব্যক্তি হিসাবে ছেড়ে দেবে:X

সেখানে এই ধরনের নির্মাণের দুটি উপায় আছে অভিব্যক্তি, নয়তো এটা এক্স নিজেই বা এটা কিছু এক্সপ্রেশন জন্য এবং :XXf gfg

যেমন সাবেক এক তুচ্ছ হয় 0ছাড়বে একটি একক অভিব্যক্তি হিসাবে স্ট্যাক। এখন আমরা ধরে নিই যে দুটি প্রোগ্রাম রয়েছে ( F 1F N এবং G 1G K ) যা স্ট্যাকের উপর একক অভিব্যক্তি হিসাবে f এবং g ছেড়ে দেবে এবং প্রমাণ করবে যে বিবৃতিটিও f g এর জন্য ধারণ করেছে :XF1FNG1GKfgf g

প্রোগ্রাম প্রথম উত্পন্ন করবে স্ট্যাক এবং তারপর উত্পন্ন করবে কিন্তু এর পরিবর্তে শুধুমাত্র পপিং অংশ এটি পপ আপ করবে এবং এটি প্রযোজ্য যেমন এটি স্ট্যাকের উপর একক অভিব্যক্তি এফ জি ছেড়ে দেয় । ∎F1FN G1GK1 (GK+1)fggff g

অনুবাদক

ইনপুট

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

উদাহরণ হিসাবে এখানে এমন একটি প্রোগ্রাম যা দুটি সংখ্যাকে গুণ করে: এটি অনলাইনে চেষ্টা করুন!

এছাড়াও আপনি ব্যবহার করে আর্গুমেন্ট হিসাবে ফাংশন সরবরাহ করতে পারে দে Bruijn সূচকের , উদাহরণস্বরূপ Scombinator \\\(3 1 (2 1))(অথবা λλλ(3 1 (2 1)))। তবে এটি স্বীকার করে S, K, Iএবং অবশ্যই Xcombinator।

আউটপুট

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

অ্যাসেম্বলার

অবশ্যই যে কোনও নিম্ন-স্তরের ভাষার একটি এসেম্বলারের প্রয়োজন যা এটিতে একটি উচ্চ-স্তরের ভাষা রূপান্তরিত করে, আপনি কেবল কোনও ইনপুট ব্যবহার করতে পারেন (উপরে দেখুন) এবং -aপতাকাটি ব্যবহার করে এটি কোনও XOISC- প্রোগ্রামে অনুবাদ করতে পারেন , এটি অনলাইনে চেষ্টা করুন! **


* লিঙ্কটি নিচে থাকলে, এই পোস্টে এইচটিএমএল মন্তব্য হিসাবে একটি অনুলিপি রয়েছে।

** এটি এমন প্রোগ্রামে ফলাফল যা প্রাথমিকতার জন্য পরীক্ষা করে, এটি অনলাইনে চেষ্টা করে!


1
আইওটা কম্বিনেটরের পরিবর্তে আপনি এক্স কম্বিনেটর বাছাই করার কোনও কারণ আছে?
এফসোলিং ফল

1
@ এ্যাসোলেংফ্রুট: হ্যাঁ, এছাড়াও আরও বেশ কয়েকটি বিকল্প রয়েছে, শেষ পর্যন্ত আমি সেইটির জন্য বেছে নিয়েছিলাম কারণ এটি এসকে তৈরি করতে সবচেয়ে কম অ্যাপ্লিকেশন ব্যবহার করে। দেখে মনে হয়েছিল এটি সেরা অভিনয় করবে (টিবিএইচ আমি নিজে তুলনা করি নি)।
ბიმო

1
BTW। আপনি যদি আগ্রহী হন তবে লিঙ্কযুক্ত কাগজে বেশ কয়েকটি সংযুক্তকারীগুলির একটি দুর্দান্ত তুলনা রয়েছে।
13

19

আঁকা

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

প্রোগ্রামটিতে একটি লাইন শনাক্তকারী (# বা হোয়াইটস্পেস সহ স্বেচ্ছাসেবী স্ট্রিং), দুটি পূর্ণসংখ্যা ( xএবং y) এবং আরও দুটি লাইন সনাক্তকারী ( aএবং b) সমন্বিত লাইনের ক্রম থাকে ।

প্রোগ্রাম রান নিম্নরূপ:
লাইন হিসেবে চিহ্নিত থেকে শুরু startপয়েন্টার অবস্থান (0, 0) নির্দেশিত সঙ্গে, কর্তৃক প্রদত্ত পরিমাণ দ্বারা পয়েন্টার সরানো xএবং yএবং এই স্কোয়ারের পয়েন্টার উপর (যদি না বর্গ ইতিমধ্যে চিহ্নিত করা হয় এখন চিহ্নিত, যে ক্ষেত্রে মৃত্যুদণ্ড কার্যকর হয়)। তারপরে, aসরাসরি সংলগ্ন স্কোয়ারগুলির মধ্যে কমপক্ষে একটি চিহ্নিত করা থাকলে এবং bঅন্যথায় লাইন করার জন্য লাইনে ঝাঁপ দিন ।

দোভাষীদের গ্রিডের চূড়ান্ত ফলাফলটি কোনও ধরণের চিত্র, ক্যানভাস ইত্যাদি হিসাবে আউটপুট করতে উত্সাহ দেওয়া হয়

টুরিং-সম্পূর্ণতার

অঙ্কন টুরিং-সম্পূর্ণ কারণ ভাষায় একটি মিনস্কি মেশিনের একটি পরিবর্তিত সংস্করণ (जिसे বিকল্প বলা হয়) সংকলন করা সম্ভব।

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

উদাহরণ: এই মিনস্কি মেশিন

1 inc A 2
2 inc A 3
3 dec A 3 4
4 halt

এই বিকল্প প্রোগ্রামে পরিণত হয়:

1 inc 2
2 nop 3
3 inc 4
4 nop 5
5 dec 6 8
6 nop 5
7 halt
8 halt

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

তারপরে, বিকল্প প্রোগ্রামটি ড্র হিসাবে সরাসরি অনুবাদ করা হয়েছে:

প্রোগ্রামটি এই ব্লক দিয়ে শুরু হয়।

start 0 0 a a
a 3 0 b b
b -3 1 c c
c 3 0 d d
d -3 2 e e
e 3 0 f f
f 3 -3 i1_a i1_a

inc, decএবং nopএকে অপরের মতো প্রায় একইভাবে অনুবাদ করা হয়। সব ক্ষেত্রেই প্রথম বা দ্বিতীয় রেজিস্টার (উপরে বর্ণিত হিসাবে) পরিবর্তন করার মধ্যে কোনও পার্থক্য নেই। এখানে একটি বর্ধিত পরিমাণ রয়েছে inc 2:

i1_y 0 -2 i1_z i1_y
i1_z 3 -1 i1_a i1_a
i1_a -5 1 i1_b i1_b
i1_b 0 2 i1_c i1_c
i1_c 0 2 i1_d i1_e
i1_d 0 2 i1_d i1_f

i1_e 5 0 i2_z i2_y
i1_f 5 0 i2_z i2_y

i1_xঅংশগুলির সংখ্যাগুলি বর্তমান নির্দেশিকার সূচকে এবং i2_xঅংশগুলিতে পরবর্তী নির্দেশিকার সূচকে সম্পাদন করতে হবে।

nopনির্দেশ যেমন অনুবাদ করা যায়:

i1_y 0 -2 i1_z i1_y
i1_z 3 -1 i1_a i1_a
i1_a -5 1 i1_b i1_b
i1_b 0 2 i1_c i1_c
i1_c 0 2 i1_d i1_e
i1_d 0 2 i1_d i1_f

i1_e 5 -2 i2_z i2_y
i1_f 5 -2 i2_z i2_y

এটি হ্রাস:

i1_y 0 -2 i1_z i1_y
i1_z 3 -1 i1_a i1_a
i1_a -5 1 i1_b i1_b
i1_b 0 2 i1_c i1_c
i1_c 0 2 i1_d i1_e
i1_d 0 2 i1_d i1_f

i1_e 5 -2 i3_z i3_y
i1_f 5 -4 i2_z i2_y

i3_x যদি কাউন্টারটি ইতিমধ্যে 1 হয় তবে ডাকা নির্দেশকে বোঝায়।

হল্ট:

i1_y 0 0 0 0
i1_z 0 0 0 0

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

দোভাষী

পাইথনে দু'জন অনুবাদক রয়েছেন pre এগুলি ড্রয়ের গিটহাবের সংগ্রহস্থলে পাওয়া যাবে ।

  1. ড্র.পি : এই দোভাষীটি কমান্ড লাইনের জন্য বোঝানো হয়েছে এবং প্রোগ্রাম উত্সটিকে একটি আর্গুমেন্ট হিসাবে গ্রহণ করে। প্রতিটি পদক্ষেপের পরে, এটি কার্যকর করা কমান্ড এবং নির্দেশ পয়েন্টারের অবস্থানকে আউটপুট করে; প্রোগ্রামটি থামার পরে, এটি চিহ্নিত ঘরগুলির সংখ্যা মুদ্রণ করে।
  2. draw_golly.py এই সংস্করণ ব্যবহার করে বিস্ময়সূচক অব্যয় জন্য ঠিক ভুল উদ্দেশ্য সহজ গ্রাফিকাল আউটপুট, একটি পপ-আপ বক্স মাধ্যমে উৎস গ্রহণ যখন স্ক্রিপ্ট শুরু। গলি পাইথনের সাথে কিছুটা চটচটে হতে পারে, তাই নিশ্চিত হয়ে নিন যে আপনি পাইথন 2 ইনস্টল করেছেন (এবং 32-বিট গলিকে 64-বিট পাইথন বা এর বিপরীতে মিশ্রিত করবেন না)। গলির বিল্টিন সেল গ্রিডের মাধ্যমে আউটপুট সরবরাহ করা হয়।

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


1
অ্যামেজিং! চ্যালেঞ্জটি করার একটি খুব অনন্য উপায় খুঁজে পেয়ে অভিনন্দন।
এমডি এক্সএফ

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

গলির পক্ষে সেরা সেলুলার অটোমেটা সিমুলেটরের পক্ষে +1।
হাইলিরাডিওঅ্যাকটিভ

14

-3

এখানে সংক্ষেপে।

স্মৃতি

মেমোরিটি টেপের মানচিত্র, যেখানে কীগুলি স্ট্রিং হয় এবং মানগুলি নির্বিচারে আকারের পূর্ণসংখ্যা হয়।

অতিরিক্তভাবে, সেখানে লেবেলগুলির একটি সেট রয়েছে, যেখানে প্রোগ্রামটি লাফিয়ে উঠতে পারে।

একটি স্ট্যাক রয়েছে, এতে অপারেন্ডস রয়েছে, যা স্ট্রিংগুলি রয়েছে।

একটি অফস্ট রয়েছে, যা মেমরির টেপগুলিতে কোথায় এটি অ্যাক্সেস করতে পারে তা নিয়ন্ত্রণ করে।

ওয়ান ইন্সট্রাকশন

-। প্রথমত, এটি LABELস্ট্যাকের বাইরে একটি স্ট্রিং পপ করে । যদি এটি LABELএকটি লেবেল হিসাবে অপরিজ্ঞাত থাকে তবে এটি লেবেলটি সংজ্ঞায়িত করে এবং সেই লেবেলের উত্স (যেমন এটি এখান থেকে ধাক্কা দিয়েছিল) এবং বর্তমান নির্দেশকে পরিষ্কার করে। অন্যথায়, এটি শীর্ষ দুটি মান Aএবং নিম্নলিখিত ব্যবহার করে নিম্নলিখিত গণনা সম্পাদন করে B:

if mem[A] < mem[B]:
    jump to LABEL
if mem[A] != mem[B]:
    mem[A]--
else:
    mem[B]++

মনে রাখবেন যে অতিরিক্ত আর্গুমেন্ট বা অপর্যাপ্ত আর্গুমেন্ট থাকলে প্রোগ্রামটির স্থিতি দেখিয়ে প্রোগ্রামটি ত্রুটিযুক্ত হয়ে যায়।

অফসেটটির মান অ্যাক্সেস করে সংশোধন করা যেতে পারে .

উদাহরণ কোড

X-

i i X-
i i X-
i i X-
i i X-
i i X-
i i X-
i i X-

এই সেট পরিবর্তনশীল iথেকে 7, বৃদ্ধিশীল দ্বারা 7বার।

X-

i i X-
i i X-
i i X-
LOOP-
    a a X-
    a a X-
    j i LOOP-

এটি i+1ধ্রুবক দ্বারা গুণিত হয় 2

টুরিং সম্পূর্ণতার প্রমাণ

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

আমি আরও বিশ্বাস করি যে কোনও বিসিটি -৩ প্রোগ্রাম হিসাবে লেখা যেতে পারে।


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