দ্বিগুণ রান-দৈর্ঘ্যের এনকোডিং


9

রান-লেংথ এনকোডিং কী তা সবাই জানে। এটি ইতিমধ্যে অনেক কোড-গল্ফ চ্যালেঞ্জের বিষয় হয়ে দাঁড়িয়েছে। আমরা একটি নির্দিষ্ট প্রকরণের দিকে তাকিয়ে থাকব।

উদাহরণ

Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322

প্রথমত চিহ্নটি যে বার হয়েছে তার সংখ্যাটি বন্ধনীগুলির সংখ্যা উল্লেখ করে। উদাহরণস্বরূপ, কেবলমাত্র 5 বা ততোধিক অক্ষরের রানগুলি এনকোড করা হয়েছিল। এটি কারণ 4 বা ততোধিকের কম এনকোডিং করা অক্ষরের সংখ্যা বাড়ায় না।

চ্যালেঞ্জ

একটি ফাংশন / প্রোগ্রাম লিখুন যা রান-দৈর্ঘ্যের এনকোডিংয়ের এই প্রকরণটিকে কার্যকর করে, তবে দুটি চিহ্নের রানও এনকোড করতে পারে। দুটি চিহ্নের রানগুলিও প্রথম বন্ধনীতে আবদ্ধ থাকতে হবে। একটি গোষ্ঠী বন্ধনীতেও আবদ্ধ থাকবে। আপনার প্রোগ্রামটিকে অবশ্যই ইনপুট হিসাবে একটি স্ট্রিং গ্রহণ করতে হবে এবং স্ট্রিংকে সংক্ষিপ্ত করে এমন পরিবর্তনগুলির সাথে পরিবর্তিত স্ট্রিং আউটপুট করতে হবে।

উদাহরণ

Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123

মন্তব্য

  • 111এনকোড করা হয়নি কারণ এটি এনকোডিং ( 1(3)) ছোট নয়।
  • স্ট্রিংটি 4441113 বার ঘটে তাই এটি এনকোড করা হয়েছে।
  • 676767এনকোড করা হয়নি কারণ ((67)(4))আগের চেয়ে দীর্ঘ।
  • 222222277777222222277777হিসাবে এনকোড করা হয়নি ((222222277777)(2))। কেন? কারণ 222222277777নিজেই কমে যেতে পারে 2(7)7(5)
  • 123123123123 এনকোড করা হয়নি কারণ আপনার প্রোগ্রামটি তিনটি নয়, দুটি চিহ্নের রান পরিচালনা করার কথা।

এই তাই সংক্ষিপ্ততম কোড জয়ী। টাই-ব্রেকার তাড়াতাড়ি জমা দেওয়া।


যদি আমি কিছু মিস করি, বা আপনি যদি কিছু সম্পর্কে অনিশ্চিত হন তবে দয়া করে মন্তব্যে আমাকে জানান।


তবে 4 67টি আছে।
ফাঁস নুন

আমাদের কি হ্যান্ডেল করতে হবে 441444144414-> ((4414)(3))?
ফাঁস নুন

আমি এটি স্থির করেছি।
ericw31415

পছন্দ করেছেন 4414টেকনিক্যালি ৪ এর সিরিজ My আমার কথা বলা ঠিক খারাপ।
ericw31415

পারি 111111111যেমন এনকোড করা (1)(9)?
ক্যালকুলেটরলাইন

উত্তর:


2

রেটিনা, 162 বাইট

+{`((\d)\2*(?!\2)(\d)\3*|\d)(?<1>\1)+
<<$1><$#1>>
<<([^<>]{1,7})><2>>
$1$1
<<([^<>]{1,3})><3>>
$1$1$1
<<([^<>]{1,2})><4>>
$1$1$1$1
}`<<(.)><(\d+)>>
$1($2)
T`<>`()

এটি অনলাইন চেষ্টা করুন!


আপনি যদি ইনপুট করেন 10101010100100100100100তবে আউটপুটটি ((10)(5))0((100)(4))তবুও ((10)(4))((100)(5))একটি অক্ষর ছোট হবে।
মার্ভ

আপনার কি সত্যিই এই জাতীয় প্রান্তিক টেস্টকেসগুলি ব্যবহার করতে হবে ....
Leaky Nun

হ্যাঁ, সব মজা! : ^)
মার্ভ

মজার বিষয় এটি এখানে এখানে একমাত্র উত্তর।
ericw31415
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.