@0@6000000@5
}0&0&0&0&0
>0@6&3
\\--\/&2
@0/\@4\/&1!!
@4@1..@2@5@3
IIIIIIIIIIII
FF&1FF&2FF&3
@1OO@2OO@3OO
:I
}1..}10001F7
=9&1++..&1&0
&0}0&1&0{1{1
{>\/{0//
:O
}0
+Z
+C
{0
এটি কেবল 256 এর নীচের মানের জন্য কাজ করে যেহেতু মার্বেলস একটি 8 বিটের ভাষা।
কিভাবে এটা কাজ করে
মার্বেলাস হ'ল একটি 2 ডি ভাষা যা 8 টি বিট মার্বেল দ্বারা প্রকাশিত মানের যা প্রতিটি টিকের উপর একটি কক্ষের নিচে পড়ে যদি না কোনও ডিভাইস তাদের নিচে পড়তে বাধা দেয়। এই মার্বেলাস প্রোগ্রামটি 3 টি বোর্ড নিয়ে গঠিত; আসুন শুরু করা যাক সবচেয়ে সহজ:
:O
}0
+Z
+C
{0
:O
বোর্ডের নাম (সুনির্দিষ্টভাবে বলতে গেলে, হ'ল নামটি এবং: ব্যাখ্যা করা হয়েছে যে এই লাইনটি একটি নাম bo বোর্ডগুলি একটি নাম দেওয়ার মাধ্যমে, অন্য বোর্ডগুলি তাদের }0
কাছে কল
করতে পারে একটি ইনপুট ডিভাইস, এটি কোনও হিসাবে দেখা যায় এই ফাংশনটির যুক্তি the ফাংশনটি ডেকে এলে এই ঘরটি একটি ইনপুট মার্বেল (মান) দ্বারা প্রতিস্থাপিত হবে +Z
35 এটির পাশ দিয়ে যে কোনও মার্বেলে 35 টি যুক্ত হয় এবং এটি পড়তে
দেয় +C
same একই কাজ করে তবে কেবল 12 যোগ করে {0
একটি আউটপুট সেল যখন কোনও মার্বেল এই ঘরে পৌঁছায়, ফাংশনটি প্রস্থান করবে এবং এই আউটপুট ডিভাইসে মানটি ফিরিয়ে দেবে।
সুতরাং সমস্ত একসাথে, এই বোর্ডটি একটি মান নেয় এবং তারপরে এটি 47 যুক্ত করে। আমাদের জন্য এটির অর্থ এটি কোনও একক সংখ্যাকে অঙ্ক -1 এর এসিআই কোডে পরিণত করে (এটি অবশ্যই 10 এর জন্যও কাজ করবে)।
:I
}1 .. }1 00 01 F7
=9 &1 ++ .. &1 &0
&0 }0 &1 &0 {1 {1
{> \/ {0 //
এই বোর্ডটি আরও কিছুটা জটিল দেখাচ্ছে। আপনি সনাক্ত করতে সক্ষম হওয়া উচিত:I
বোর্ডের নাম হিসাবে এবং কিছু ইনপুট এবং আউটপুট ডিভাইস সন্ধান করতে পারে। আপনি লক্ষ্য করবেন যে আমাদের দুটি পৃথক ইনপুট ডিভাইস রয়েছে }0
এবং }1
। এর অর্থ এই ফাংশনটিতে 2 ইনপুট লাগে। আপনি লক্ষ্য করবেন যে }1
ডিভাইসের দুটি উদাহরণ রয়েছে । ফাংশনটি কল করার পরে, এই উভয় কক্ষে একই মান থাকবে। }0
ইনপুট ডিভাইস সরাসরি একটি উপরে \/
এই একটি ট্র্যাশক্যান হিসাবে কাজ করে এবং কোন মার্বেল যে অবিলম্বে এটি উপর বৃক্ষের পতন দূর করে দেয়, ডিভাইস।
আসুন দেখে নেওয়া যাক }1
ইনপুট ডিভাইসগুলির দ্বারা বোর্ডে রাখা মার্বেলগুলির মধ্যে একটির কী ঘটে :
}1
=9 &1
&0
{>
এটি প্রথম টিকটিতে নেমে =9
ডিভাইসে আঘাত করবে । এটি মার্বেলটিকে ওআইফের মান 9 এর সাথে তুলনা করে এবং বিবৃতিটি যদি =9
মূল্যায়ন করে তবে মার্বেলটিকে পড়তে দেয় । মার্বেল ডানদিকে ঠেলা যায় যদি না।&0
এবং &1
সিঙ্ক্রোনাইজার হয়। তারা মার্বেল ধরে রাখে যা অন্য সমস্ত &n
সিঙ্ক্রোনাইজারগুলি পূরণ না করা পর্যন্ত তাদের উপর পড়ে । যেমনটি আপনি আশা করতে পারেন, এটি শর্তাধীন বোর্ডের অন্য কোনও অংশে ভিন্ন আচরণকে ট্রিগার করবে।
}1 00 01 F7
++ .. &1 &0
&1 &0 {1 {1
{0 //
যদি আমি আপনাকে বলি যে ++
এটি একটি ইনক্রিমেন্টর, আপনি ইতিমধ্যে বিভিন্ন সিঙ্ক্রোনাইজারগুলি কী পূরণ করতে হবে তা বলতে সক্ষম হওয়া উচিত। বামে &1
ইনপুট মান }1
+ 1 &0
ধারণ করবে , এর পরবর্তী অংশে 0 (00
একটি ভাষা আক্ষরিক, ষড়্দ্বেষের মধ্যে উপস্থাপিত)। দ্বিতীয়টিতে &1
মান 1 এবং ডানটি &0
পূর্ণ হবে F7
যা একটি মান থেকে 9 বিয়োগ করে যেহেতু মার্বেলাসের অতিরিক্ত 256 হয় mod
//
একটি ডিফলেক্টর ডিভাইস, যা কোনও মার্বেলকে নীচে নামার পরিবর্তে বাম দিকে ঠেলে দেয়।
এগুলি একসাথে রাখলে এটি পাওয়া যায়: মার্বেলটি যদি }1
9 হয় তবে &0
সিঙ্ক্রোনাইজারগুলি পূর্ণ হয়ে যায়। এর ফলে 0 মান {0
আউটপুট এবং F7
(অথবা -9) {1
আউটপুট মধ্যে পড়তে পারে। যদি }1
9 না হয় তবে এটি +1 {0
দিয়ে পূর্ণ হবে }1
এবং {0
এতে 1 টি থাকবে There একটি {>
ডিভাইসও রয়েছে, এটি একটি বিশেষ আউটপুট যা বোর্ডের পাশে একটি মার্বেলের নীচে স্থির করে out এটি }1
9 এর সমান হলে এটি পূর্ণ হবে ।
@0 @6 00 00 00 @5
}0 &0 &0 &0 &0
>0 @6 &3
\\ -- \/ &2
@0 /\ @4 \/ &1 !!
@4 @1 .. @2 @5 @3
II II II II II II
FF &1 FF &2 FF &3
@1 OO @2 OO @3 OO
ঠিক আছে, এখন একটি বড় জন্য। এই বোর্ডটির একটি সুস্পষ্ট নাম নেই, কারণ এটি ফাইলের মূল বোর্ড। এর অন্তর্নিহিত নাম Mb
। আপনার কয়েকটি ঘর সনাক্ত করতে সক্ষম হওয়া উচিত। একটি ইনপুট ডিভাইস রয়েছে, কিছু ভাষার আক্ষরিক ( 00
এবং FF
)। কিছু সিঙ্ক্রোনাইজার রয়েছে এবং একটি অপসারণকারী রয়েছে। এই টুকরো টুকরো টুকরো মাধ্যমে পদক্ষেপ দিন।
@0 @6
}0 &0
>0 @6
\\ --
@0 /\ @4
সুতরাং ইনপুট মান (কমান্ড লাইন ইনপুট যেহেতু এটি মূল বোর্ড তাই) শীর্ষে }0
অবস্থিত যেখানে দ্বিতীয় কক্ষে শুরু হয় । এটি নীচে পড়ে >0
ডিভাইসে পৌঁছাবে , এটি অন্য তুলনামূলক ডিভাইস। 0 টিরও বেশি বড় মার্বেল পড়ে অন্য কোনও মার্বেল ডানদিকে ঠেলে দেয়। (যেহেতু মার্বেলাস ভেরিয়েবলগুলি স্বাক্ষরযুক্ত নয়, ঠিক ঠিক 0 টি ডানদিকে ঠেলে দেবে)। এই শূন্য মানের মার্বেলটি তখন @6
ডিভাইসে আঘাত করবে । এটি একটি পোর্টাল এবং মার্বেলটিকে অন্য কোনও সম্পর্কিত পোর্টালে স্থান করে দেয়, ঠিক এক্ষেত্রে উপরে। 0 টি মার্বেল &0
সিঙ্ক্রোনাইজারে পৌঁছাবে এবং অন্য কোথাও কিছু জিনিস ট্রিগার করবে ।
যদি মার্বেল 0 না হয় তবে এটি নীচে পড়ে যায় এবং \\
হিট দ্বারা ডানদিকে প্রতিবিম্বিত --
হয় যা একে একে হ্রাস করে এবং তারপরে পড়ে যায় /\
, একটি ক্লোনার। এই ডিভাইসটি একটি মার্বেল নেয় এবং এর একটি অনুলিপি ডানদিকে এবং একটি বামে আউটপুট দেয়। বাম দিকটিকে অন্যের দিকে নিয়ে যাওয়া হবে @0
যেখানে মার্বেলটি আবার একই ক্রমের মধ্য দিয়ে যাবে। বামটিকে অন্য কোথাও নিয়ে যাওয়া হবে। এটি আমাদের একটি লুপ দেয়, যা প্রতি লুপে একবার কমান্ড লাইন ইনপুট হ্রাস করে এবং প্রতিটি লুপটিতে 0 পৌঁছানোর আগে পর্যন্ত কিছু আচরণকে ট্রিগার করে then এটি তারপরে অন্য কিছু আচরণকে ট্রিগার করে।
চলুন এক নজরে দেখে নেওয়া যাক @4
প্রতিটি লুপের মধ্যে মার্বেলটি pushedুকিয়ে দিয়ে কী ঘটে ।
@4 @1 .. @2 @5 @3
II II II II II II
FF &1 FF &2 FF &3
@1 OO @2 OO @3 OO
এখানে (3 FF
) টি ভাষার আক্ষরিক রয়েছে যা অবিলম্বে পোর্টালে পড়বে। এই পোর্টালগুলি তাদের তিনটি II
ডিভাইসে নিয়ে যাবে। আমরা II
বোর্ডটি :I
আরও নীচে সংজ্ঞায়িত বোর্ডকে বোঝায় । যেহেতু :I
2 টি পৃথক ইনপুট ডিভাইস রয়েছে তাই এটি অন্য বোর্ডে প্রতিনিধিত্ব করতে 2 কক্ষ প্রশস্ত হতে হবে। যেহেতু আমাদের 6 টি কোষ রয়েছেII
, আমরা ক্যামে বলি যে আমাদের বোর্ডে এই ফাংশনটির 3 টি উদাহরণ রয়েছে।
FF
(অথবা 256 বা -1 আপনি যদি) মার্বেল ইনপুট কোষে বসবে :I
(এক বেশি) যে untill আছে যথেষ্ট ইনপুট মার্বেল STO ফাংশন শুরু অপেক্ষা ফাংশন। এর যেখানে যে @4
মাধ্যমে একে লুপ সেখানে পড়ে পোর্টাল। একজন আসে decremented কমান্ড লাইন ইনপুটের কপি করুন। এটি বামতম :I
বোর্ডটিকে ট্রিগার করবে । 256 (বা -1) মানগুলির সাথে আরম্ভ করুন এবং কমান্ড লাইন ইনপুট যাই হোক না কেন -1 ছিল। বাম মার্বেলটি বোর্ডের }0
ডিভাইসে :I
এবং ডানদিকে একটিতে লাগানো হবে }1
। আপনি যদি এই বোর্ডটি কী করেছিল তা স্মরণ করে রাখেন, এর ফলাফল কী হয়েছে তা আপনি বলতে সক্ষম হবেন। এটি বাম আউটপুটে ডান ইনপুটটির বর্ধিত সংস্করণ আউটপুট করবে (এবং এটি একটি 9 কে 0 তে পরিণত করবে, 10 নয়) এবং ডানদিকে 1 বা -9 আউটপুট দেবে।
বর্ধিত মানটি একটি পোর্টাল দ্বারা ডান ইনপুট ঘরে ডানদিকে ফিরিয়ে নেওয়া হবে এবং ডান দিকের মান একটি সিঙ্ক্রোনাইজারে পড়ে। যদি কোনও সিঙ্ক্রোনাইজার ইতিমধ্যে একটি মার্বেল ধরে থাকে তবে দুটি মার্বেল সংঘর্ষিত হবে। কোলাইডিং মার্বেলগুলি মডিউল 256 একসাথে যুক্ত হয় So সুতরাং সিঙ্ক্রয়েজারগুলিতে মানগুলি অনুসরণ করবে: এগুলি খালি শুরু হয়, তারপরে 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 এবং তারপরে পরিণত হবে 1 আবার (যেহেতু 247 মডিউল 256 যোগ করে)।
আপনি এও মনে করতে পারেন যে কোনও মার্বেল ডানদিকে আউটপুট পায় যখন ইনপুট মানটি 0 এ ফিরে আসে তাই :I
বোর্ডগুলি একে অপরের পাশে থাকায়, thsi বোর্ডটিকে একবার ডানদিকে ট্রিগার করবে। এটি তিনটি সিঙ্ক্রোনাইজারকে ভ্যালু দিয়ে পূরণ করবে যেগুলি কমান্ড লাইন ইনপুটটির সংক্ষিপ্ত প্রতিনিধিত্ব হওয়া উচিত তার চেয়ে একের চেয়ে বেশি এবং এই সংখ্যাটি 0 এ নেমে যায়।
আপনি এটিও মনে রাখতে পারেন যে :O
ফাংশনটি একটি মানকে অঙ্কের ascii মানতে রূপান্তর করে যা মান -1 উপস্থাপন করে। OO
এরপরে এই কক্ষগুলির আউটপুট বোর্ডের বাইরে চলে যাবে, যা তাদের সংশ্লিষ্ট এসকি চরগুলি STDOUT এ মুদ্রণ করে।
00 00 00 @5
&0 &0 &0
&3
\/ &2
\/ &1 !!
@5
সুতরাং যখন কমান্ড লাইন ইনপুট মার্বেল 0 পৌঁছে এবং যে &0
সিঙ্ক্রোনাইজার পূরণ করে ? ভাল, কয়েকটি 0 মান মার্বেল পড়ে এবং বোর্ডের নীচে সংক্ষিপ্ত সংখ্যার অঙ্ক (+ 1) ধরে রাখা তিনটি সিঙ্ক্রোনাইজারকে ট্রিগার করে। &3
প্রথম সূত্রপাত পরার, যেহেতু এটি সবচেয়ে গুরুত্বপূর্ণ অঙ্ক থাকে, তারপর আসে &2
দ্বারা অনুসরণ &1
। এই মার্বেলটি পরে @5
অবশেষে !!
ঘরে আঘাত করার আগে অন্যান্য ডিভাইসে টেলিপোর্ট হয়ে যায় যা বোর্ডটি বন্ধ করে দেয়।
19, 20, 21, 22
দশমিক মানচিত্রে ক্রমটি সংক্ষিপ্তপুস্তকে নোট করা গুরুত্বপূর্ণ08, 09, 10, 11
। সে কারণেই আমি বিভ্রান্ত হয়েছি100 -> 89
!