হেক্সাগনি , 920 722 271 বাইট
ছয় বিভিন্ন ধরণের ফলের লুপ, আপনি বলছেন? হেক্সাগনিরজন্যএটিই তৈরি হয়েছিল।
){r''o{{y\p''b{{g''<.{</"&~"&~"&<_.>/{.\.....~..&.>}<.._...=.>\<=..}.|>'%<}|\.._\..>....\.}.><.|\{{*<.>,<.>/.\}/.>...\'/../==.|....|./".<_>){{<\....._>\'=.|.....>{>)<._\....<..\..=.._/}\~><.|.....>e''\.<.}\{{\|./<../e;*\.@=_.~><.>{}<><;.(~.__..>\._..>'"n{{<>{<...="<.>../
ঠিক আছে, এটা ছিল না। হায় খোদা, আমি আমার কি করলাম ...
এই কোডটি এখন পাশের দৈর্ঘ্যের 10 একটি ষড়ভুজ (এটি 19 এ শুরু হয়েছিল)। এটি সম্ভবত আরও কিছু গল্ফ করা যেতে পারে, এমনকি 9 মাপের হতে পারে, তবে আমি মনে করি আমার কাজটি এখানে সম্পন্ন হয়েছে ... রেফারেন্সের জন্য, উত্সটিতে 175 প্রকৃত কমান্ড রয়েছে, যার অনেকগুলি সম্ভাব্য অপ্রয়োজনীয় আয়না (বা বাতিল করার জন্য যুক্ত করা হয়েছিল) একটি ক্রসিং পথ থেকে একটি আদেশ আউট)।
আপাত লৈঙ্গিকতা সত্ত্বেও কোডটি আসলে দ্বিমাত্রিক: হেক্সাগনি এটিকে একটি নিয়মিত ষড়জাগুলিতে পুনরায় সাজিয়ে তুলবে (যা বৈধ কোডও, তবে সমস্ত সাদা স্থান হেক্সাগনীতে optionচ্ছিক)। এটির সমস্ত ক্ষেত্রেই এখানে প্রকাশিত কোডটি রয়েছে ... ভাল আমি "সৌন্দর্য" বলতে চাই না:
) { r ' ' o { { y \
p ' ' b { { g ' ' < .
{ < / " & ~ " & ~ " & <
_ . > / { . \ . . . . . ~
. . & . > } < . . _ . . . =
. > \ < = . . } . | > ' % < }
| \ . . _ \ . . > . . . . \ . }
. > < . | \ { { * < . > , < . > /
. \ } / . > . . . \ ' / . . / = = .
| . . . . | . / " . < _ > ) { { < \ .
. . . . _ > \ ' = . | . . . . . > {
> ) < . _ \ . . . . < . . \ . . =
. . _ / } \ ~ > < . | . . . . .
> e ' ' \ . < . } \ { { \ | .
/ < . . / e ; * \ . @ = _ .
~ > < . > { } < > < ; . (
~ . _ _ . . > \ . _ . .
> ' " n { { < > { < .
. . = " < . > . . /
ব্যাখ্যা
আমি এই গল্ফযুক্ত সংস্করণে সমস্ত সংশ্লেষিত মৃত্যুদণ্ডের পথগুলি ব্যাখ্যা করার চেষ্টাও করব না, তবে অ্যালগরিদম এবং সামগ্রিক নিয়ন্ত্রণ প্রবাহ এই অদৃশ্য সংস্করণের সাথে অভিন্ন যা আমি অ্যালগরিদম ব্যাখ্যা করার পরে সত্যই কৌতূহলের জন্য অধ্যয়ন করা সহজ হতে পারে:
) { r ' ' o { { \ / ' ' p { . . .
. . . . . . . . y . b . . . . . . .
. . . . . . . . ' . . { . . . . . . .
. . . . . . . . \ ' g { / . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . > . . . . < . . . . . . . . .
. . . . . . . . . . . . . . > . . ) < . . . . .
. . . . . . . . . . / = { { < . . . . ( . . . . .
. . . . . . . . . . . ; . . . > . . . . . . . . . <
. . . . . . . . . . . . > < . / e ; * \ . . . . . . .
. . . . . . . . . . . . @ . } . > { } < . . | . . . . .
. . . . . / } \ . . . . . . . > < . . . > { < . . . . . .
. . . . . . > < . . . . . . . . . . . . . . . | . . . . . .
. . . . . . . . _ . . > . . \ \ " ' / . . . . . . . . . . . .
. . . . . . \ { { \ . . . > < . . > . . . . \ . . . . . . . . .
. < . . . . . . . * . . . { . > { } n = { { < . . . / { . \ . . |
. > { { ) < . . ' . . . { . \ ' < . . . . . _ . . . > } < . . .
| . . . . > , < . . . e . . . . . . . . . . . . . = . . } . .
. . . . . . . > ' % < . . . . . . . . . . . . . & . . . | .
. . . . _ . . } . . > } } = ~ & " ~ & " ~ & " < . . . . .
. . . \ . . < . . . . . . . . . . . . . . . . } . . . .
. \ . . . . . . . . . . . . . . . . . . . . . . . < .
. . . . | . . . . . . . . . . . . . . . . . . = . .
. . . . . . \ . . . . . . . . . . . . . . . . / .
. . . . . . > . . . . . . . . . . . . . . . . <
. . . . . . . . . . . . . . . . . . . . . . .
_ . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
সত্যি বলতে, প্রথম অনুচ্ছেদে আমি কেবল অর্ধেক রসিকতা করছি। আমরা ছয়টি উপাদানের একটি চক্র নিয়ে কাজ করছি তা আসলে একটি দুর্দান্ত সহায়তা। হেক্সাগনির মেমোরি মডেলটি একটি অসীম ষড়ভুজ গ্রিড যেখানে গ্রিডের প্রতিটি প্রান্তে একটি স্বাক্ষরিত স্বেচ্ছাসেবী-নির্ভুলতা পূর্ণসংখ্যা থাকে, এটি শূন্য থেকে শুরু করে।
এই প্রোগ্রামটিতে আমি যে স্মৃতি ব্যবহার করেছি তার বিন্যাসের একটি চিত্র এখানে দেওয়া হয়েছে:
বামদিকে লম্বা সোজা বিটটি 0 টি a
স্বেচ্ছাসেবক আকারের টার্মিনেটেড স্ট্রিং হিসাবে ব্যবহৃত হয় যা অক্ষর আর এর সাথে যুক্ত । অন্যান্য বর্ণগুলিতে ড্যাশযুক্ত রেখাগুলি একই ধরণের কাঠামোকে উপস্থাপন করে, যার প্রত্যেকটি 60 ডিগ্রি দ্বারা আবর্তিত হয়। প্রারম্ভিক দিকে, উত্তর দিকে মুখ করে 1 টি লেবেল প্রান্তে মেমরি পয়েন্টারটি পয়েন্ট করে ।
কোডের প্রথম, রৈখিক বিট অক্ষরের প্রান্তের অভ্যন্তরীণ "তারা" সেট করে roygbp
পাশাপাশি প্রাথমিক প্রান্তটি সেট করে 1
, যেমন আমরা জানি যে চক্রটি কোথায় শেষ হয় / শুরু হয় (এর মধ্যে p
এবং r
):
){r''o{{y''g{{b''p{
এর পরে, আমরা 1 লেবেলযুক্ত প্রান্তে ফিরে এসেছি ।
এখন অ্যালগরিদমের সাধারণ ধারণাটি হ'ল:
- চক্রের প্রতিটি চিঠির জন্য, এসটিডিআইএন থেকে চিঠিগুলি পড়া চালিয়ে যান এবং যদি সেগুলি বর্তমান বর্ণের চেয়ে আলাদা হয় তবে সেগুলি চিঠির সাথে যুক্ত স্ট্রিংয়ের সাথে যুক্ত করুন।
- আমরা বর্তমানে যে চিঠিটি সন্ধান করছি তা যখন আমরা পড়ে থাকি তখন আমরা একটি
e
লেবেলযুক্ত প্রান্তে সঞ্চয় করি ? , কারণ যতক্ষণ চক্রটি সম্পূর্ণ না হয়, ততক্ষণ ধরে নিতে হবে যে আমাদের এই চরিত্রটিও খেতে হবে। এরপরে, আমরা রিংটির চারপাশে চক্রের পরবর্তী অক্ষরে চলে যাব।
- এই প্রক্রিয়াটি ব্যাহত হওয়ার দুটি উপায় রয়েছে:
- হয় আমরা চক্র সম্পন্ন করেছি। এই ক্ষেত্রে, আমরা চক্রটি দিয়ে আরও একটি দ্রুত রাউন্ড তৈরি করি, সমস্তগুলিকে
e
এর মধ্যে রেখে ? এর সাথে প্রান্তগুলি n
, কারণ এখন আমরা সেই চক্রটি নেকলেসের কাছেই থাকতে চাই। তারপরে আমরা প্রিন্টিং কোডে চলে যাই।
- অথবা আমরা ইওএফ (যা আমরা একটি নেতিবাচক চরিত্র কোড হিসাবে স্বীকৃত) হিট করেছি। এই ক্ষেত্রে, আমরা একটি নেতিবাচক মান লিখুন ? বর্তমান অক্ষরের প্রান্ত (যাতে আমরা সহজেই এটি উভয়
e
এবং পৃথক পৃথক করতে পারি n
)। তারপরে প্রিন্টিং কোডে যাওয়ার আগে আমরা 1 প্রান্তটি (একটি সম্ভাব্য অসম্পূর্ণ চক্রের অবশিষ্ট অংশটি এড়াতে) অনুসন্ধান করি।
- মুদ্রণ কোডটি আবার চক্রের মধ্য দিয়ে যায়: চক্রের প্রতিটি অক্ষরের জন্য এটি
e
প্রতিটি অক্ষরের জন্য একটি মুদ্রণের সময় সঞ্চিত স্ট্রিং সাফ করে । তারপরে কী চলে ? প্রান্তটি চরিত্রের সাথে সম্পর্কিত। যদি এটি নেতিবাচক হয় তবে আমরা কেবল প্রোগ্রামটি শেষ করি। যদি এটি ইতিবাচক হয় তবে আমরা সহজেই এটি মুদ্রণ করি এবং পরবর্তী অক্ষরে চলে যাই। একবার চক্রটি শেষ করার পরে আমরা দ্বিতীয় ধাপে ফিরে যাই।
আকর্ষণীয় হতে পারে অন্য একটি জিনিস আমি কীভাবে স্বেচ্ছাচারী আকারের স্ট্রিংগুলি প্রয়োগ করেছি (কারণ এটি হেক্সাগনীতে আমি প্রথমবারের মতো সীমাহীন স্মৃতি ব্যবহার করেছি)।
কল্পনা করুন যে আমরা এমন এক পর্যায়ে রয়েছি যেখানে আমরা এখনও আর এর জন্য অক্ষরগুলি পড়ছি (যাতে আমরা চিত্রটি যেমন আছে তেমন ব্যবহার করতে পারি) এবং একটি [0] এবং একটি 1 ইতিমধ্যে অক্ষর দ্বারা পূর্ণ হয়ে গেছে (এর উত্তর-পশ্চিমের সবকিছু এখনও শূন্য রয়েছে) )। যেমন আমরা just og
প্রান্তগুলিতে কেবল ইনপুটটির প্রথম দুটি অক্ষর পড়েছি এবং এখন একটি পড়ছি y
।
নতুন চরিত্রের প্রবেশ পড়া হয় মধ্যে প্রান্ত। আমরা ব্যবহার করি ? প্রান্তটি এই অক্ষরটির সমান কিনা তা পরীক্ষা করতে r
। (এখানে একটি নিফটি ট্রিকস রয়েছে: হেক্সাগনি কেবলমাত্র ইতিবাচক এবং অ-ধনাত্মক সহজেই পার্থক্য করতে পারে তাই বিয়োগের মাধ্যমে সমতা পরীক্ষা করা বিরক্তিকর এবং কমপক্ষে দুটি শাখা প্রয়োজন requires তবে সমস্ত অক্ষর একে অপরের থেকে 2 এর ফ্যাক্টরের চেয়ে কম হয়, তাই আমরা মডিউলগুলি গ্রহণ করে মানগুলি তুলনা করতে পারি, যা কেবল সমান হলে শূন্য দেবে))
কারণ y
থেকে ভিন্ন r
, আমরা (লেবেল বিহীন) প্রান্ত বাম সরাতে মধ্যে এবং কপি y
আছে। আমরা এখন ষড়ভূজ প্রায় আরও সরানো, আরও প্রতিটি সময় চরিত্র এক প্রান্ত অনুলিপি, যতক্ষণ না আমরা আছে y
প্রান্ত বিপরীত উপর মধ্যে । তবে এখন একটি [0] এর মধ্যে ইতিমধ্যে একটি চরিত্র রয়েছে যা আমরা ওভাররাইট করতে চাই না। পরিবর্তে, আমরা y
পরের ষড়্ভুজকের চারপাশে "টেনে আনি" এবং একটি 1 পরীক্ষা করি । তবে সেখানে একটি চরিত্রও রয়েছে, তাই আমরা আরও একটি ষড়ভুজ ঘুরে দেখি। এখন একটি [2] এখনও শূন্য, সুতরাং আমরা অনুলিপি করিy
এটার ভিতরে. মেমরি পয়েন্টারটি এখন স্ট্রিং দিয়ে অভ্যন্তরের রিংয়ের দিকে ফিরে যায়। আমরা জানি আমরা কখন স্ট্রিংয়ের শুরুতে পৌঁছেছি, কারণ a [i] এর মধ্যে (শিরোনামহীন) প্রান্তগুলি সমস্ত শূন্য যেখানে ? ইতিবাচক।
সাধারণভাবে হেক্সাগনীতে অ-তুচ্ছ কোড লেখার জন্য এটি সম্ভবত একটি কার্যকর কৌশল হবে।