পার্ল 5 , -p0 105 101 96 93 90 89 89 বাইট
ইনপুট bপরিবর্তে ব্যবহার করে 1।
নিশ্চিত করুন যে STDIN- এ ম্যাট্রিক্স একটি নতুন লাইন দিয়ে শেষ হয়েছে
#!/usr/bin/perl -p0
s%b%$_="$`z$'";s:|.:/
/>s#(\pL)(.{@{-}}|)(?!\1)(\pL)#$&|a.$2.a#se&&y/{c/z />0:seg&/\B/%eg
এটি অনলাইন চেষ্টা করুন!
প্রতিস্থাপনের 3 স্তরের ব্যবহার!
এই 87 বাইট সংস্করণটি ইনপুট এবং আউটপুট ফর্ম্যাট উভয়ই ব্যাখ্যা করা সহজ, তবে এটি প্রতিযোগিতা করছে না কারণ এটি আউটপুটে 3 টি আলাদা অক্ষর ব্যবহার করে:
#!/usr/bin/perl -0p
s%b%$_="$`z$'";s:|.:/
/>s#(\w)(.{@{-}}|)(?!\1)(\w)#$&|a.$2.a#se&&y/{c/z />0:seg&/\B/%eg
এটি অনলাইন চেষ্টা করুন!
sউভয় সংস্করণে সারি টার্মিনেটর (নিউলাইনের পরিবর্তে) হিসাবে আলাদা (নন-আলফানিউমারিক) অক্ষর ব্যবহার করে অন্য বাইট (রেজেক্স মডিফায়ার) সংরক্ষণ করা সহজ , তবে এটি ইনপুটটিকে আবার বেশ অপঠনযোগ্য করে তোলে।
কিভাবে এটা কাজ করে
বিকল্প বিবেচনা করুন
s#(\w)(.{columns}|)(?!1)(\w)#c$2c#s
এটি দুটি অক্ষর খুঁজে পাবে যা একে অপরের পাশে অনুভূমিকভাবে বা উল্লম্বভাবে পৃথক এবং সেগুলি প্রতিস্থাপন করে c। একটি গোলকধাঁধায় যার পথগুলি সম্পূর্ণরূপে চিঠিটি bদিয়ে থাকে কারণ অক্ষরগুলি একই হওয়ায় কিছুই ঘটবে না, তবে যত তাড়াতাড়ি অক্ষরগুলির একটি অন্য একটি দ্বারা প্রতিস্থাপন করা হবে (উদাহরণস্বরূপ z) সেই চিঠিটি এবং প্রতিবেশী প্রতিস্থাপন করবে cএবং পুনরাবৃত্তি প্রয়োগ হ'ল cবীজ থেকে সংযুক্ত উপাদান বন্যা পূরণ z।
এক্ষেত্রে আমি সম্পূর্ণ বন্যা পূরণ করতে চাই না। আমি প্রতিবেশী কেবল একটি অস্ত্র পূরণ করতে চাই z, তাই প্রথম পদক্ষেপের পরে আমি zচলে যেতে চাই । এটি ইতিমধ্যে c$2cপ্রতিস্থাপনের সাথে কাজ করে , তবে পরে আমি একই বিন্দু থেকে শুরু করে অন্য বাহু বরাবর একটি বন্যা-পূরণ পুনরায় আরম্ভ করতে চাই এবং জানি না যে এর মধ্যে আর কোনটি আর cছিল z। সুতরাং পরিবর্তে আমি ব্যবহার
s#(\w)(.{columns}|)(?!\1)(\w)#$&|a.$2.a#se
b | aহয় c, b | cহয় cএবং z | aহয় {। সুতরাং একটি ধাঁধাতে তৈরি পাথ bএবং zপ্রথম ধাপে একটি বীজ bপ্রতিস্থাপিত হবে cএবং zএটি প্রতিস্থাপন করবে {যা কোনও চিঠি নয় এবং মিলছে না \wএবং তাই আরও ভরাট কারণ ঘটবে না। cতবে যাচ্ছে আরও বন্যা ভরাট রাখা হবে এবং বীজ এক প্রতিবেশী বাহু ভরা হয়। যেমন থেকে শুরু
b c
b c
bbzbb becomes bb{bb
b b
b b
তারপরে আমি সমস্ত সি কে কিছু অ চিঠির (উদাহরণস্বরূপ -) {দ্বারা প্রতিস্থাপন zকরতে পারি এবং বন্যা-পূরণ পুনরায় চালু করতে আবার স্থান করে নিতে পারি:
- -
- -
bbzbb becomes cc{bb
b b
b b
এবং এই প্রক্রিয়াটির পুনরাবৃত্তি করুন যতক্ষণ না বীজের সমস্ত প্রতিবেশী রূপান্তরিত হয়। যদি আমি তারপর আরো একবার প্রতিস্থাপন {দ্বারা zএবং বন্যা ভরাট:
- -
- -
--z-- stays --z--
- -
- -
zশেষে পিছনে দেহাবশেষ কারণ সঙ্গে একটি রূপান্তর করার কোন প্রতিবেশী নেই। এটি নীচের কোড খণ্ডে কী ঘটে তা স্পষ্ট করে তোলে:
/\n/ >
প্রথম নিউলাইন সন্ধান করুন। আরম্ভের অফসেটটি এখন@-
s#(\w)(.{@{-}}|)(?!\1)(\w)#$&|a.$2.a#se
রেজেক্স উপরে @{-}কলামের সংখ্যা হিসাবে আলোচিত হয়েছে (যেহেতু সরল @-পার্ল পার্সারকে বিভ্রান্ত করে এবং সঠিকভাবে প্রতিস্থাপন করে না)
&&
/\n/সবসময় সফল এবং প্রতিকল্পন যতদিন আমরা এখনও বন্যা ভরাট পারেন হিসাবে সত্য। সুতরাং একটি অংশের &&বন্যা পূরণের পরে যদি অংশটি কার্যকর করা হয়। যদি না হয় তবে বাম দিকটি একটি খালি স্ট্রিংয়ের মূল্যায়ন করে
y/{c/z / > 0
বন্যা-পূরণ পুনরায় আরম্ভ করুন এবং পূর্ববর্তী বন্যা-পূরণে কিছু করেছে তবে 1 ফিরে আসুন। অন্যথায় খালি স্ট্রিং ফিরে। এই পুরো কোডের টুকরোটি ভিতরে ppedেকে দেওয়া হয়েছে
s:|.: code :seg
সুতরাং যদি এটি একটি বীজ অবস্থানের $_সাথে একটি প্রারম্ভিক স্ট্রিং এ কার্যকর করা zহয় তবে কোডটির টুকরোটি বেশিরভাগ সময় কার্যকর করা হবে যা বেশিরভাগ সময়ই 1প্রতিবেশী বাহু বন্যায় পূর্ণ হয়। কার্যকরভাবে সংযুক্ত উপাদানগুলি সংযুক্ত উপাদানগুলি হিসাবে $_যতগুলি দ্বারা ধ্বংস হয়ে যায় এবং প্রতিস্থাপিত হয় । লক্ষ্য করুন যে লুপটি উপাদান আকারের সংখ্যার সমষ্টি + অস্ত্রের সংখ্যা সংখ্যা পর্যন্ত চালানো দরকার তবে এটি ঠিক আছে কারণ এটি "নিউলাইন * 2 + 1 সহ" বহু বারের অক্ষর তৈরি করবে।1z
কোনও ধরণের 1(খালি স্ট্রিং, একটি বিচ্ছিন্ন প্রান্তি) না থাকলে বা 1 টিরও বেশি বাহিনী (2 টির বেশি) থাকে তবে গোলকধাঁটি সংযোগ বিচ্ছিন্ন হয়ে যায় 1। এটি রেজেক্স ব্যবহার করে পরীক্ষা করা যায় /\B/( এটি পুরানো পার্ল সংস্করণের 0পরিবর্তে দেয় 1It's এটি কোনটি ভুল তা তর্কযোগ্য able দুর্ভাগ্যক্রমে এটি যদি এটি মেলে না তবে এটির পরিবর্তে একটি খালি স্ট্রিং দেবে 0। তবে s:|.: code :segসবসময় করছেন একটি দ্বারা তা একটি বিজোড় সংখ্যা ফিরতে পরিকল্পনা করা হয়েছিল &সঙ্গে /\B/এই দেব 0বা 1।
যা অবশিষ্ট রয়েছে তা পুরো ইনপুট অ্যারে এবং প্রতিটি হাঁটার যোগ্য অবস্থানের বীজে zসংযুক্ত অস্ত্রগুলির সাথে এবং গণনা করছে। এটি সহজেই এর সাথে সম্পন্ন হয়:
s%b%$_="$`z$'"; code %eg
একমাত্র সমস্যাটি হ'ল হাঁটা-চালনযোগ্য অবস্থানগুলিতে পুরানো মান বজায় থাকে। যেহেতু আমাদের 0সেখানে দরকার আছে তার অর্থ আসল ইনপুট অ্যারে অবশ্যই 0অরিয়া চলনযোগ্য অবস্থান এবং মূল প্রতিস্থাপনার 0ম্যাচগুলিতে \wথাকতে হবে এবং বন্যা ভরাটকে ট্রিগার করবে। এজন্য আমি \pLপরিবর্তে ব্যবহার করি (কেবলমাত্র অক্ষরের সাথে মেলে)।