এই প্রশ্নটি আমি অন্য প্রশ্নের উত্তর দিতে কী নিয়ে এসেছি তার উপর ভিত্তি করে ।
কখনও কখনও এখানে প্রশ্নগুলি কিছু ASCII শিল্প আঁকতে জিজ্ঞাসা করে। আর্টের জন্য ডেটা সঞ্চয় করার একটি সহজ উপায় হ'ল আরএলই (রান-লেংথ এনকোডিং) । তাই:
qqqwwwwweeerrrrrtttyyyy
হয়ে:
3q5w3e5r3t4y
এখন একটি বড় এএসসিআইআই আর্ট আঁকতে আপনি সম্ভবত এটির মতো ডেটা পাচ্ছেন (নতুন লাইনের অক্ষরগুলি উপেক্ষা করে):
19,20 3(4)11@1$20 11@19,15"4:20 4)19,4:20 11@
^^^
Note that this is "20 whitespaces"
(Character count: 45)
ASCII শিল্পের জন্য ব্যবহৃত অক্ষরগুলি কখনই ছোট হাতের বা বড় হাতের অক্ষর বা সংখ্যা, কেবল লক্ষণ, চিহ্ন এবং চিহ্ন নয় তবে সর্বদা মুদ্রণযোগ্য ASCII অক্ষর সেট থাকে set
আপনি সেই স্ট্রিংয়ের কিছু জায়গা বাঁচাতে চান, সুতরাং আপনি সংখ্যাগুলি বড় হাতের অক্ষর সেট দিয়ে প্রতিস্থাপন করুন ('A' সমান 1 এর সাথে সমান হবে, 'B' 2 এর সমান হবে 'জেড' 26 এর সমান হবে), কারণ আপনি কখনই যাচ্ছেন না একটি চরিত্রের 26 টিরও বেশি পুনরাবৃত্তি পান। সুতরাং আপনি পাবেন:
S,T C(D)K@A$T K@S,O"D:T D)S,D:T K@
(Character count: 34)
এবং পরিশেষে আপনি লক্ষ্য করেছেন যে (অক্ষর + চিহ্ন) এর কয়েকটি গ্রুপ পুনরাবৃত্তি করছে, সুতরাং আপনি স্ট্রিংয়ে স্ট্রিংয়ের সাথে তিন বার বা তার বেশি উপস্থিত গ্রুপগুলি প্রতিস্থাপন করুন বা স্ট্রিংয়ের সাথে উপস্থিত থাকবেন, তবে একটি বাফারে সংরক্ষণ করুন প্রতিস্থাপন তৈরি করা হয়েছে (প্রতিটি প্রতিস্থাপকের জন্য "গ্রুপ + সাবস্টিটিউশন চর" ফর্ম্যাটে) এবং বাকী স্ট্রিংটি যেমন রয়েছে তেমন রেখে দেওয়া। সুতরাং নিম্নলিখিত গ্রুপগুলি:
S, (3 times)
T (4 times)
K@ (3 times)
যথাক্রমে 'ক', 'বি' এবং 'সি' দ্বারা প্রতিস্থাপিত হয়, কারণ 26 টিরও বেশি গ্রুপ পুনরাবৃত্তি করতে পারে না। সুতরাং অবশেষে আপনি পাবেন:
S,aT bK@c
abC(D)cA$bcaO"D:bD)aD:bc
(Character count: 9+24=33)
[শেষ পদক্ষেপটি কেবলমাত্র 1 টি বাইট সংরক্ষণ করে কারণ প্রতিস্থাপনের পরে যে গোষ্ঠীগুলি অক্ষরগুলি সংরক্ষণ করে তারা প্রকৃতপক্ষে 4 বার বা তার বেশি উপস্থিত হয়]]
চ্যালেঞ্জ
একটি ASCII আর্ট আঁকার জন্য RLE ডেটাযুক্ত স্ট্রিং দেওয়া (প্রস্তাবিত বিধিনিষেধ সহ), সংক্ষিপ্ততম প্রোগ্রাম / ফাংশন / পদ্ধতিটি লিখুন যা এটি বর্ণিত হিসাবে সংকুচিত করতে পারেন write অ্যালগরিদম অবশ্যই দুটি স্ট্রিং মুদ্রণ / ফিরিয়ে দিতে হবে: প্রথমটি সংক্ষেপণের জন্য ব্যবহৃত অভিধানযুক্ত এবং দ্বিতীয়টি ফলাফল সংকুচিত স্ট্রিং। আপনি প্রদত্ত ক্রমে একটি টিপল, একটি অ্যারে, তালিকা বা যা কিছু, হিসাবে স্ট্রিংগুলি ফিরিয়ে দিতে পারেন।
মনে রাখবেন যে স্ট্রিংটি দ্বিতীয় ধাপে সংকুচিত করা যায় না, অ্যালগরিদমকে অবশ্যই প্রথম রিটার্ন মান হিসাবে একটি খালি স্ট্রিং এবং দ্বিতীয় ফিরতি মান হিসাবে ধাপ 1 এর ফলাফল অবশ্যই প্রদান করতে হবে।
আউটপুট মানগুলিতে আপনাকে প্রথম ধাপের ফলাফল অন্তর্ভুক্ত করার দরকার নেই, আমি কেবল তাদের ব্যাখ্যাগুলির জন্য উদাহরণগুলিতে অন্তর্ভুক্ত করি।
এটি কোড-গল্ফ , তাই প্রতিটি ভাষার জন্য সংক্ষিপ্ত উত্তরটি জিততে পারে!
আরেকটি পরীক্ষার মামলা
Input: 15,15/10$15,15/10"10$10"10$10"10$10"15,15/
Output of step 1: O,O/J$O,O/J"J$J"J$J"J$J"O,O/
Final algorithm output: O,aO/bJ$cJ"d
abcabdcdcdcdab
---
Input: 15,15/10$15,15/10"
Output of step 1: O,O/J$O,O/J"
Final algorithm output: <empty string>
O,O/J$O,O/J"
S,aT bK@c
সম্ভবত S,T K@
প্রতিস্থাপনের অক্ষরগুলির স্পষ্টভাবে নামকরণ না করে কেবলমাত্র সংরক্ষণ করা হবে যা এ থেকে তুচ্ছভাবে বাদ দেওয়া যেতে পারে।