আমি আপনাকে একটি হেক্সাগনির স্ব-দোভাষী প্রথম 3% উপস্থিত করছি ...
|./...\..._..>}{<$}=<;>'<..../;<_'\{*46\..8._~;/;{{;<..|M..'{.>{{=.<.).|.."~....._.>(=</.\=\'$/}{<}.\../>../..._>../_....@/{$|....>...</..~\.>,<$/'";{}({/>-'(<\=&\><${~-"~<$)<....'.>=&'*){=&')&}\'\'2"'23}}_}&<_3.>.'*)'-<>{=/{\*={(&)'){\$<....={\>}}}\&32'-<=._.)}=)+'_+'&<
এটি অনলাইন চেষ্টা করুন! আপনি এটিকে নিজে চালাতে পারেন তবে এটি প্রায় 5-10 সেকেন্ড সময় নিতে পারে।
নীতিগতভাবে এটি পার্শ্ব-দৈর্ঘ্য 9 (217 বা তার কম স্কোরের জন্য) মাপসই হতে পারে, কারণ এটি কেবল 201 কমান্ড ব্যবহার করে এবং আমি প্রথমে লিখেছি ng যাইহোক, আমি পুরোপুরি নিশ্চিত যে সব কিছুকে বাস্তবে উপযুক্ত করতে চিরকালের জন্য লাগবে, তাই আমি আসলে এটি চেষ্টা করব কিনা তা নিশ্চিত নয়।
শেষ এক বা দুটি সারি ব্যবহার এড়িয়ে এইটিকে 10 মাপের কিছুটা গল্ফ করাও সম্ভব উচিত, যেমন অনুমানযোগ্য অপসগুলি বাদ দেওয়া যেতে পারে তবে এর জন্য প্রথম পথ হিসাবে একটি হিসাবে যথেষ্ট পুনর্লিখনের প্রয়োজন হবে যোগ দেয় নীচের বাম কোণে ব্যবহার করে।
ব্যাখ্যা
কোডটি উন্মুক্ত করে এবং নিয়ন্ত্রণ প্রবাহের পাথগুলি টীকা দিয়ে শুরু করা যাক:
এটি এখনও বেশ অগোছালো, তাই এখানে আমি প্রথমে যে "অগল্ফড" কোডটি লিখেছিলাম তার জন্য একই চিত্রটি দেওয়া হয়েছে (আসলে, এটি পাশের দৈর্ঘ্যের 20 এবং মূলত আমি পাশের দৈর্ঘ্যের 30 এ কোডটি লিখেছিলাম তবে এটি এতটা স্পর্শকাতর ছিল যে এটি হবে না 'পাঠযোগ্যতার মোটেও উন্নতি করতে পারবেন না, তাই আকারটিকে কিছুটা যুক্তিসঙ্গত করতে আমি কিছুটা কমপ্যাক্ট করেছি):
আরও বড় সংস্করণের জন্য ক্লিক করুন।
কয়েকটি খুব ছোটখাট বিবরণ বাদে রঙগুলি হুবহু একই, অ-নিয়ন্ত্রণ-প্রবাহ কমান্ডগুলিও ঠিক একই। সুতরাং আমি ব্যাখ্যা করব যে এটি কীভাবে অসম্পূর্ণ সংস্করণের উপর ভিত্তি করে কাজ করে, এবং যদি আপনি সত্যিই জানতে চান যে গল্ফড কীভাবে কাজ করে তবে আপনি পরীক্ষা করতে পারেন যে কোন অংশটি বৃহত ষড়্ভুজের সাথে সামঞ্জস্যপূর্ণ। (একমাত্র ক্যাচটি হ'ল যে গল্ফড কোডটি একটি আয়না দিয়ে শুরু হয় যাতে ডান কোণে বাম দিকে যেতে আসল কোড শুরু হয়))
বেসিক অ্যালগরিদম আমার সিজেএম উত্তরের সাথে প্রায় একই রকম । দুটি পার্থক্য রয়েছে:
- কেন্দ্রিক ষড়্ভুজাকৃতির সংখ্যা সমীকরণটি সমাধান করার পরিবর্তে, আমি কেবল একটানা কেন্দ্রিক ষড়ভুজ সংখ্যাগুলি গণনা করি যতক্ষণ না কোনও ইনপুটটির দৈর্ঘ্যের চেয়ে সমান বা বড় হয়। এটি কারণ হেক্সাগনির কোনও বর্গমূলের গণনা করার সহজ উপায় নেই।
- এখনই নো-অপ্সের সাহায্যে ইনপুটটি প্যাডিংয়ের পরিবর্তে, আমি পরে যাচাই করে নিই আমি ইতিমধ্যে ইনপুটটিতে কমান্ডগুলি শেষ করে দিয়েছি এবং
.
যদি আমার কাছে থাকে তবে তার পরিবর্তে মুদ্রণ করি।
এর অর্থ মূল ধারণাটি এটিকে ফুটিয়ে তোলে:
- ইনপুট স্ট্রিংটির দৈর্ঘ্য গণনা করার সময় পড়ুন এবং সঞ্চয় করুন।
- ক্ষুদ্রতম পার্শ্ব-দৈর্ঘ্য
N
(এবং সংশ্লিষ্ট কেন্দ্রিক ষড়ভুজ সংখ্যা hex(N)
) সন্ধান করুন যা পুরো ইনপুটটি ধরে রাখতে পারে।
- ব্যাস গণনা করুন
2N-1
।
- প্রতিটি লাইনের জন্য, ইনডেন্ট এবং ঘরগুলির সংখ্যার (যা যোগফল
2N-1
) গণনা করুন । ইন্ডেন্টটি প্রিন্ট করুন, ঘরগুলি মুদ্রণ করুন ( .
ইনপুটটি ইতিমধ্যে শেষ হয়ে গেছে তা ব্যবহার করে ), একটি লাইনফিড মুদ্রণ করুন।
উল্লেখ্য তাই প্রকৃত কোড (বাঁদিকের কোণায় মধ্যে শুরু হয় শুধুমাত্র নো অপস আছে $
, যা উপর অনেক উঁচুতে লাফাতে >
, তাই আমরা সত্যিই শুরু ,
গাঢ় ধূসর পথে)।
এখানে প্রাথমিক মেমরি গ্রিড রয়েছে:
সুতরাং মেমরি পয়েন্টারটি উত্তরের দিকে নির্দেশ করে প্রান্তের লেবেল ইনপুট থেকে শুরু হয় । ,
STDIN বা একটি থেকে বাইট পড়ে -1
যদি আমরা সেই প্রান্তে EOF টি আঘাত করে থাকি। অতএব, <
ডান এর পরে শর্তযুক্ত যে আমরা সমস্ত ইনপুট পড়েছি কিনা। আপাতত ইনপুট লুপে থাকি। পরবর্তী কোডটি আমরা কার্যকর করি
{&32'-
এটি প্রান্ত লেবেলযুক্ত স্পেসে একটি 32 লিখেছেন এবং তারপরে এটি প্রান্তের লেবেলযুক্ত ডিফারের ইনপুট মান থেকে বিয়োগ করে । মনে রাখবেন এটি কখনই নেতিবাচক হতে পারে না কারণ আমরা গ্যারান্টেড যে ইনপুটটিতে কেবল প্রিন্টযোগ্য এএসসিআইআই রয়েছে। এটি শূন্য হবে যখন ইনপুটটি একটি স্থান ছিল। (টিমভি যেমন উল্লেখ করেছেন, ইনপুটটিতে লাইনফিড বা ট্যাব থাকতে পারে তবে এটি এখনও কাজ করতে পারে তবে এটি 32 অক্ষরের চেয়ে কম অক্ষরযুক্ত কোড সহ সমস্ত অপ্রিন্টযোগ্য অক্ষরও সরিয়ে ফেলতে পারে)) <
সেক্ষেত্রে নির্দেশ পয়েন্টারটি (আইপি) বামে প্রতিফলিত করে এবং হালকা ধূসর পথ নেওয়া হয়েছে। এই পথটি এমপির অবস্থানটি সহজেই পুনরায় সেট করে {=
এবং তারপরে পরবর্তী অক্ষরটি পড়বে - সুতরাং, স্পেসগুলি এড়িয়ে যায়। অন্যথায়, চরিত্রটি যদি স্থান না থাকে তবে আমরা কার্যকর করি
=}}})&'+'+)=}
এটি প্রথমে দৈর্ঘ্যের প্রান্ত দিয়ে ষড়ভুজের চারপাশে তার বিপরীত প্রান্তের বিপরীতমুখী হওয়া অবধি চলবে=}}}
। তারপর এটি কপি বিপরীত থেকে মান দৈর্ঘ্য মধ্যে প্রান্ত দৈর্ঘ্য সঙ্গে প্রান্ত, এবং এটি বাড়তি )&'+'+)
। আমরা এটি একটি সেকেন্ডে দেখব কেন এটি বোধগম্য। শেষ পর্যন্ত, আমরা এর সাথে একটি নতুন প্রান্তটি সরিয়ে নিয়েছি =}
:
(নির্দিষ্ট প্রান্তের মানগুলি চ্যালেঞ্জে প্রদত্ত সর্বশেষ পরীক্ষার ক্ষেত্রে থেকে। সুতরাং অন্য একটি চরিত্র পড়ার পরে, আমরা এটি পেয়েছি:
এখন আপনি দেখতে পাচ্ছেন যে আমরা ধীরে ধীরে উত্তর-পূর্ব তির্যকটি বরাবর প্রতিটি অন্যান্য প্রান্তের অক্ষরগুলি সহ ইনপুট (বিয়োগ স্পেস) লিখছি এবং সেই চরিত্রের দৈর্ঘ্যটি প্রান্তের লেবেলযুক্ত দৈর্ঘ্যের সমান্তরালভাবে সংরক্ষণ করা হচ্ছে ।
আমরা যখন ইনপুট লুপটি সম্পন্ন করি তখন মেমরিটি দেখতে দেখতে (যেখানে আমি ইতিমধ্যে পরবর্তী অংশের জন্য কয়েকটি নতুন প্রান্ত লেবেল করেছি):
%
শেষ অক্ষর আমরা পড়েছি হয়, 29
আমরা পড়েছি অ স্থান অক্ষর সংখ্যা। এখন আমরা ষড়ভুজটির পাশের দৈর্ঘ্য সন্ধান করতে চাই। প্রথমত, গা green় সবুজ / ধূসর পথটিতে কিছু রৈখিক সূচনা কোড রয়েছে:
=&''3{
এখানে, =&
প্রান্তের লেবেল দৈর্ঘ্যে দৈর্ঘ্য (আমাদের উদাহরণে 29 টি) অনুলিপি করুন । তারপরে 3''3
লেবেলযুক্ত প্রান্তে চলে যায় এবং এর মান সেট করে (যা আমাদের কেবল গণনার ক্ষেত্রে ধ্রুবক হিসাবে প্রয়োজন)। শেষ পর্যন্ত এন (এন -1) লেবেলযুক্ত প্রান্তে চলে যায় ।3
{
এখন আমরা নীল লুপ প্রবেশ করি। এই লুপের ইনক্রিমেন্টগুলি N
( এন লেবেলযুক্ত কক্ষে সংরক্ষিত ) এরপরে এর কেন্দ্রিক ষড়্ভুজাকার সংখ্যাটি গণনা করে এবং ইনপুট দৈর্ঘ্য থেকে বিয়োগ করে। লিনিয়ার কোড যা এটি করে তা হল:
{)')&({=*'*)'-
এখানে, {)
সরানো এবং এনক্রিমেন্ট এন । এন -1')&(
লেবেলযুক্ত প্রান্তে চলে যায় , সেখানে অনুলিপিগুলি হ্রাস করে। N (N-1) এ তাদের পণ্য গণনা করে । ধ্রুবক দ্বারা বৃদ্ধি করে এবং প্রান্তের লেবেলযুক্ত হেক্স (এন) এর ফলাফল বৃদ্ধি করে । যেমনটি প্রত্যাশিত, এটি হ'ল নবম কেন্দ্রিক ষড়ভুজ সংখ্যা। অবশেষে এটি এবং ইনপুট দৈর্ঘ্যের মধ্যে পার্থক্য গণনা করে। যদি ফলাফলটি ইতিবাচক হয় তবে পার্শ্ব-দৈর্ঘ্য এখনও যথেষ্ট বড় নয় এবং লুপটি পুনরাবৃত্তি করে (যেখানে এমপিটিকে N (N-1) লেবেলযুক্ত প্রান্তে ফিরে যান )।N
{=*
'*)
3
'-
}}
পাশের দৈর্ঘ্য একবারে যথেষ্ট বড় হয়ে গেলে পার্থক্যটি শূন্য বা নেতিবাচক হবে এবং আমরা এটি পেতে পারি:
প্রথম বন্ধ, এখন সত্যিই দীর্ঘ লিনিয়ার সবুজ পথ রয়েছে যা আউটপুট লুপের জন্য কিছু প্রয়োজনীয় সূচনা করে:
{=&}}}32'"2'=&'*){=&')&}}
{=&
মধ্যে ফলাফলের অনুলিপি করে শুরু পরিবর্তন মধ্যে প্রান্ত দৈর্ঘ্য প্রান্ত, কারণ আমরা পরে কিছু অ ইতিবাচক সেখানে প্রয়োজন। }}}32
প্রান্তের লেবেলযুক্ত স্পেসে একটি 32 লিখেছেন । '"2
উপরে লেবেল বিহীন প্রান্ত মধ্যে একটি ধ্রুবক 2 লিখেছেন পরিবর্তন । একই লেবেল সহ দ্বিতীয় প্রান্তে '=&
অনুলিপি করুন N-1
। '*)
এটি 2 দ্বারা গুণিত করে এবং এটি বৃদ্ধি করে যাতে শীর্ষে 2N-1 লেবেলযুক্ত প্রান্তে আমরা সঠিক মান পাই । এটি হেক্সাগনের ব্যাস। 2N-1{=&')&
লেবেলযুক্ত অন্য প্রান্তে ব্যাসটি অনুলিপি করে । অবশেষে শীর্ষে 2N-1 লেবেলযুক্ত প্রান্তে ফিরে যায় ।}}
প্রান্তগুলি পুনরায় বিদ্রোহ করা যাক:
আমরা বর্তমানে যে প্রান্তে রয়েছি (যা এখনও ষড়্ভুজটির ব্যাস ধারণ করে) আউটপুটটির লাইনগুলিতে পুনরাবৃত্তি করতে ব্যবহৃত হবে। প্রান্তের লেবেলযুক্ত ইন্ডেন্টটি বর্তমান লাইনে কত স্পেসের প্রয়োজন তা গণনা করবে। প্রান্তের লেবেলযুক্ত কক্ষগুলি বর্তমান লাইনের কক্ষের সংখ্যার উপর পুনরাবৃত্তি করতে ব্যবহৃত হবে।
আমরা এখন গোলাপী পথে যা ইনডেন্ট গণনা করে । ('-
decrements লাইন পুনরুক্তিকারীর এবং এ থেকেই subtracts এন -1 (মধ্যে ইন্ডেন্ট প্রান্ত)। কোডে সংক্ষিপ্ত নীল / ধূসর শাখা ফলাফলের মডুলাসটি সহজেই গণনা করে ( ~
মানটি নেতিবাচক বা শূন্য হলে অবহেলা করে এবং ইতিবাচক হলে কিছুই হয় না)। বাকী গোলাপী পথ "-~{
যা ব্যাস থেকে ইনডেন্টটি কোষের প্রান্তে বিয়োগ করে এবং তারপরে ইনডেন্ট প্রান্তে ফিরে যায় ।
নোংরা হলুদ পথ এখন ইন্ডেন্টেশন মুদ্রণ করে। লুপ বিষয়বস্তু সত্যিই ঠিক
'";{}(
কোথায় '"
থেকে প্যাচসমূহ স্থান প্রান্ত, ;
এটা ছাপে, {}
চলে আসে ফিরে ইন্ডেন্ট এবং (
এটা decrements।
যখন আমরা এটি দিয়ে শেষ করি (দ্বিতীয়) গা dark় ধূসর পথটি পরবর্তী অক্ষরটি মুদ্রণের জন্য অনুসন্ধান করে। =}
অবস্থানে প্যাচসমূহ (যার মানে, সম্মুখের কোষ প্রান্ত, সাউথ প্রতি নির্দেশ)। তারপরে আমাদের একটি খুব টান লুপ রয়েছে {}
যার একটি কেবল দক্ষিণ-পশ্চিম দিকের দুটি প্রান্তটি নীচে সরানো হয়, যতক্ষণ না আমরা সঞ্চিত স্ট্রিংয়ের শেষটিকে আঘাত করি:
লক্ষ্য করুন যে আমি সেখানে EOS এর একটি প্রান্তটি পুনর্বিবেচনা করেছি ? । একবার আমরা এই চরিত্রটি প্রক্রিয়া করার পরে, আমরা সেই প্রান্তটিকে নেতিবাচক করব, যাতে {}
পরবর্তী পুনরাবৃত্তির পরিবর্তে লুপটি এখানে শেষ হয়ে যায়:
কোডটিতে, আমরা অন্ধকার ধূসর পথের শেষে, যেখানে '
ইনপুট চরিত্রের এক ধাপ পিছনে যায়। যদি পরিস্থিতি শেষ দুটি ডায়াগ্রামগুলির মধ্যে একটি হয় (যেমন আমরা এখনও ইনপুট থেকে প্রিন্ট করি নি এমন একটি চরিত্র রয়েছে), তবে আমরা সবুজ পথটি নিচ্ছি (নীচের অংশটি, এমন সব লোকের জন্য যা সবুজ এবং ভাল নয়) নীল)। এটি মোটামুটি সহজ: ;
চরিত্রটি নিজেই মুদ্রণ করে। '
সংশ্লিষ্ট চলে আসে স্থান প্রান্ত যা এখনও আগের থেকে 32 ঝুলিতে ;
কপি করে প্রিন্ট যে স্থান। তাহলে {~
আমাদের ইওএফ তৈরি করে? পরবর্তী পুনরাবৃত্তির জন্য নেতিবাচক, '
একটি পদক্ষেপ পিছনে সরিয়ে দেয় যাতে আমরা স্ট্রিংয়ের উত্তর-পশ্চিম প্রান্তে ফিরে যেতে পারি অন্য শক্ত }{
লুপের সাহায্যে। যা দৈর্ঘ্যে শেষ হয়কোষ ( হেক্স (এন) এর নীচে অ-ধনাত্মক Finally অবশেষে কোষের প্রান্তে }
ফিরে যায় ।
যদি আমরা ইতিমধ্যে যদিও ইনপুটটি শেষ করে ফেলেছি, তবে লুপটি ইওএফের জন্য অনুসন্ধান করবে? আসলে এখানেই শেষ হবে:
যে ক্ষেত্রে '
সম্মুখের চলে আসে দৈর্ঘ্য সেল, এবং আমরা যা নো অপ ছাপে হালকা নীল (শীর্ষ) পথ পরিবর্তে, গ্রহণ করছেন। এই শাখার কোডটি লিনিয়ার:
{*46;{{;{{=
{*46;
লিখেছেন প্রান্ত মধ্যে একটি 46 লেবেল নো অপ এবং এটি (অর্থাত একটি নির্দিষ্ট সময়ের) ছাপে। তারপরে স্পেস প্রান্তে {{;
চলে যায় এবং এটি মুদ্রণ করে। থেকে প্যাচসমূহ ফিরে কোষ পরবর্তী পুনরাবৃত্তিতে জন্য প্রান্ত।{{=
এই মুহুর্তে পাথগুলি আবার একসাথে যোগদান করে এবং কক্ষগুলির প্রান্ত (
হ্রাস করে । যদি পুনরুক্তিকারকটি এখনও শূন্য না হয়, আমরা হালকা ধূসর পথটি গ্রহণ করব, যা এমপির দিকনির্দেশকে সহজভাবে বিপরীত করে এবং তারপরে পরবর্তী অক্ষরটি মুদ্রণের জন্য সন্ধান করবে।=
অন্যথায়, আমরা বর্তমান লাইনের শেষ প্রান্তে পৌঁছেছি এবং এর পরিবর্তে আইপি বেগুনি পথ নেবে। মেমরি গ্রিডটি এই মুহূর্তে দেখতে দেখতে এটি:
বেগুনি পথে এটি রয়েছে:
=M8;~'"=
=
আবার এমপি দিক reverses। M8
তার মান সেট করে সেট 778
(কারণ চরিত্র কোড M
হল 77
ও স w খ্যা বর্তমান মান নিজেরাই যোগ হবে)। এটি হ'ল 10 (mod 256)
তাই আমরা যখন এটি মুদ্রণ করি তখন আমরা ;
একটি লাইনফিড পাই get তারপরে ~
প্রান্তটিকে আবার নেতিবাচক করে তোলে, লাইনের প্রান্তে '"
ফিরে যায় এবং এমপিটিকে আরও একবার বিপরীত করে দেয়।=
এখন যদি লাইন প্রান্তটি শূন্য হয়, আমরা সম্পন্ন করেছি। আইপিটি (খুব সংক্ষিপ্ত) লাল পথ নেবে, যেখানে @
প্রোগ্রামটি শেষ হয়। অন্যথায়, আমরা বেগুনি পথে চলতে থাকি যা অন্য লাইনটি মুদ্রণের জন্য গোলাপী রঙের দিকে ফিরে আসে।
টিমভির হেক্সাগনি কলরারের সাহায্যে তৈরি প্রবাহের চিত্রগুলি নিয়ন্ত্রণ করুন । তাঁর এসোটেরিক আইডিইতে ভিজ্যুয়াল ডিবাগারের সাহায্যে মেমরি ডায়াগ্রাম তৈরি করা হয়েছে ।
abc`defg
বাস্তবে পেস্টবিন.com