পার্ল 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 সহ" বহু বারের অক্ষর তৈরি করবে।1
z
কোনও ধরণের 1
(খালি স্ট্রিং, একটি বিচ্ছিন্ন প্রান্তি) না থাকলে বা 1 টিরও বেশি বাহিনী (2 টির বেশি) থাকে তবে গোলকধাঁটি সংযোগ বিচ্ছিন্ন হয়ে যায় 1
। এটি রেজেক্স ব্যবহার করে পরীক্ষা করা যায় /\B/
( এটি পুরানো পার্ল সংস্করণের 0
পরিবর্তে দেয় 1
It's এটি কোনটি ভুল তা তর্কযোগ্য able দুর্ভাগ্যক্রমে এটি যদি এটি মেলে না তবে এটির পরিবর্তে একটি খালি স্ট্রিং দেবে 0
। তবে s:|.: code :seg
সবসময় করছেন একটি দ্বারা তা একটি বিজোড় সংখ্যা ফিরতে পরিকল্পনা করা হয়েছিল &
সঙ্গে /\B/
এই দেব 0
বা 1
।
যা অবশিষ্ট রয়েছে তা পুরো ইনপুট অ্যারে এবং প্রতিটি হাঁটার যোগ্য অবস্থানের বীজে z
সংযুক্ত অস্ত্রগুলির সাথে এবং গণনা করছে। এটি সহজেই এর সাথে সম্পন্ন হয়:
s%b%$_="$`z$'"; code %eg
একমাত্র সমস্যাটি হ'ল হাঁটা-চালনযোগ্য অবস্থানগুলিতে পুরানো মান বজায় থাকে। যেহেতু আমাদের 0
সেখানে দরকার আছে তার অর্থ আসল ইনপুট অ্যারে অবশ্যই 0
অরিয়া চলনযোগ্য অবস্থান এবং মূল প্রতিস্থাপনার 0
ম্যাচগুলিতে \w
থাকতে হবে এবং বন্যা ভরাটকে ট্রিগার করবে। এজন্য আমি \pL
পরিবর্তে ব্যবহার করি (কেবলমাত্র অক্ষরের সাথে মেলে)।