রেটিনা , 293 + 15 = 308 314 385 বাইট
;`\s
_
;`\\
/
;`.+
o$0iio
;+`(o(?=/.*(i)|L.*(ii)|V.*(io)|_)|i(?=/.*(io)|L.*(o)|_.*(ii)|V.*(i))).
$1$2$3$4$5$6$7$8
;`o
<empty>
;`ii$
#:0123456789
;+`^(?=i)(i*)\1{9}(?=#.*(0)|i#.*(1)|ii#.*(2)|iii#.*(3)|iiii#.*(4)|iiiii#.*(5)|iiiiii#.*(6)|iiiiiii#.*(7)|iiiiiiii#.*(8)|iiiiiiiii#.*(9))
$1#$2$3$4$5$6$7$8$9$10$11
:.*|\D
<empty>
প্রতিটি লাইন একটি পৃথক ফাইলে যায় তাই আমি বাইট গণনায় 13 যোগ করেছি। বিকল্পভাবে, আপনি যেগুলি একক ফাইলে রাখতে পারেন এবং -s
পতাকাটি ব্যবহার করতে পারেন । <empty>
আসলে খালি ফাইল বা লাইনের জন্য স্ট্যান্ড।
দুর্ভাগ্যক্রমে, ফলাফলটি কেবল অ্যানারি থেকে দশমিক রূপান্তর করতে আমার 187 বাইট দরকার। আমার ধারণা আমার খুব শীঘ্রই এটি বাস্তবায়ন করা উচিত ।
ব্যাখ্যা
রেটিনা হ'ল একটি রেজেক্স-ভিত্তিক ভাষা (যা আমি রেজেক্সের মতো স্টাফগুলি করতে সক্ষম হবার জন্য ঠিক লিখেছিলাম)। ফাইল / লাইনগুলির প্রতিটি জোড়া একটি প্রতিস্থাপনের স্তরটি সংজ্ঞায়িত করে, প্রথম লাইনটি প্যাটার্ন এবং দ্বিতীয় লাইনটি প্রতিস্থাপনের স্ট্রিং থাকে। প্যাটার্নগুলি পূর্বে- `
বিহিত কনফিগারেশন স্ট্রিংয়ের সাহায্যে নেওয়া যেতে পারে, এতে সাধারণ রেজেেক্স সংশোধক পাশাপাশি কিছু রেটিনা-নির্দিষ্ট বিকল্প থাকতে পারে। উপরের প্রোগ্রামটির জন্য, প্রাসঙ্গিক বিকল্পগুলি ;
হ'ল এটি সেই পর্যায়ের আউটপুটকে দমন করে এবং +
ফল পরিবর্তন বন্ধ হওয়া অবধি লুপে প্রতিস্থাপন প্রয়োগ করে।
সমাধানের ধারণাটি প্রতিটি লাইনকে পৃথকভাবে গণনা করা, কারণ আমরা ইতিমধ্যে যে অক্ষরগুলি ইতিমধ্যে সম্মুখীন হয়েছিল সেগুলি দ্বারা সিদ্ধান্ত নিতে পারি আমরা বহুভুজের অভ্যন্তরে বা বাইরে থাকি কিনা। এর অর্থ হ'ল আমি পুরো জিনিসটিকে একটি একক লাইনে যুক্ত করতে পারি, কারণ কোনও লাইনের শুরু এবং শেষগুলি সর্বদা বহুভুজের বাইরে থাকে। আমরা নোট করতে পারে _
এবং স্থান একটি লাইন মিষ্টির অ্যালগরিদম জন্য সম্পূর্ণরূপে অভিন্ন, সেইসাথে \
এবং /
। সুতরাং একটি প্রথম পদক্ষেপ হিসেবে আমি সব নতুন লাইন এবং স্পেস প্রতিস্থাপন _
এবং সব \
দ্বারা /
পরে কিছু কোড প্রক্রিয়া সহজ করার জন্য।
আমি অক্ষরের সাথে i
এবং অভ্যন্তরীণ স্থিতিশীলতার জন্য এস o
ব্যবহার করার সময় অক্ষরগুলির সাথে বর্তমান অভ্যন্তরীণ / বাহ্যিক অবস্থার উপর নজর রাখছি i
। এটি করার জন্য আমি যোগভূক্ত o
লাইনে একটি প্রিপেন্ডিং দিয়ে শুরু করে চিহ্নিত করি যে আমরা বহুভুজের বাইরে। আমি ইনপুটটির iio
একেবারে প্রান্তে একটি যুক্তও করছি , যা আমি নতুন অক্ষর উত্পন্ন করতে একটি চেহারা হিসাবে ব্যবহার করব।
তারপরে, প্রথম বড় প্রতিস্থাপনটি কেবলমাত্র একটির পরিবর্তে i
বা তার পরের অক্ষরের একটি সেট o
দ্বারা প্রতিস্থাপন করে /V_L
, যার ফলে পুরো জিনিসটি বন্যা হয়ে যায় এবং তাল মিলিয়ে। প্রতিস্থাপন টেবিলটি নীচের মতো দেখায়, যেখানে কলামগুলি line লাইনের শেষ বর্ণের সাথে এবং পরবর্তী অক্ষরের সাথে সারিগুলি (যেখানে S
স্থানের <>
জন্য এবং খালি স্ট্রিংয়ের জন্য) মিল রয়েছে correspond আমি ইতোমধ্যে ইনপুটগুলির সমস্ত অক্ষরগুলি অন্তর্ভুক্ত করেছি যে সমতুল্যতা আমি ইতিমধ্যে ব্যবহার করেছি:
i o
/ io i
\ io i
L o ii
V i io
_ ii <>
S ii <>
নোট করুন যে চূড়ান্ত অক্ষরটি সর্বদা ইঙ্গিত দেয় যে অক্ষরটি পরে আমরা বহুভুজের অভ্যন্তরে বা বাইরে থাকি না কেন i
s এর সংখ্যাটি সেই ক্ষেত্রের সাথে সামঞ্জস্য করে যে বহুভুজের সাথে যুক্ত হওয়া দরকার। উদাহরণ হিসাবে এখানে সর্বশেষ উদাহরণ ইনপুটটিতে প্রথম চারটি পুনরাবৃত্তির ফলাফল রয়েছে (এটি একটি পুরানো সংস্করণ দ্বারা উত্পন্ন হয়েছিল যা প্রতিটি লাইনকে পৃথকভাবে প্লাবিত করেছিল, তবে নীতিটি এখনও একই):
o /V\
o / \___
o L _/
o/\/ /V
oL__ _/
o V
o /V\
o / \___
o L _/
oi\/ /V
oii__ _/
o V
o /V\
o/ \___
oL _/
oiio/ /V
oiiii_ _/
o V
o/V\
oi \___
oii _/
oiioi /V
oiiiiii _/
oV
oiV\
oiii \___
oiiii _/
oiioiii /V
oiiiiiiii_/
oio
শেষ অবধি, আমি o
মিলে যাওয়া সমস্ত কিছু মুছে ফেলে সমস্ত লাইন এবং লাইন ব্রেকগুলি থেকে মুক্তি পেয়েছি এবং [^i]
বাকীটি দশমিক-থেকে-অবিচ্ছিন্ন রূপান্তর যা বিরক্তিকর।