মেটা রেডিয়েশন শক্ত


19

পটভূমি

এই সাইটে, আমাদের মাঝে মাঝে প্রোগ্রামগুলি "রেডিয়েশন শক্ত হয়ে উঠতে" প্রয়োজন হয়; এর অর্থ হ'ল প্রোগ্রামটি এক বা একাধিক বাইট মুছে ফেলার পক্ষে বাঁচতে সক্ষম হবে, কোনও বাইট মুছে ফেলা যায় না।

প্রোগ্রামগুলির চ্যালেঞ্জগুলিতে ঘন ঘন কাজ করার জন্য সাধারণ হিসাবে, এই চ্যালেঞ্জগুলির ক্ষেত্রে বিশেষত ভাল এমন একটি ভাষা তৈরি করা স্বাভাবিক want প্রদত্ত যে প্রাকৃতিক উপায় হ'ল এমন কিছু মেটাডেটা যুক্ত করা যা দুর্নীতির বিপরীত হওয়া সম্ভব করে তোলে, এটি আসলে কোনও ভাষা নয় যা ডিজাইনের প্রয়োজন, তবে একটি এনকোডিং প্রয়োজন; ধারণাটি হ'ল প্রতিটি ইনপুটকে বাইটের ক্রমে রূপান্তর করা, এমনভাবে যাতে ক্রমটি সামান্য বিড়ম্বিত হয়ে গেলেও মূল ইনপুটটি বের করা সম্ভব।

কাজটি

দুটি প্রোগ্রাম বা ফাংশন লিখুন, ই (একটি এনকোডার) এবং ডি (একটি ডিকোডার), যেমন:

  • ই দুটি আর্গুমেন্ট গ্রহণ করে, অক্টেটের একটি ক্রম (যা আমরা এই স্পেসিফিকেশনে " ইনপুট " বলব ) এবং একটি ননজিগেটভ ইন্টিজার " রেডিয়েশন ", এবং অক্টেটস " এনকোডিং " এর ক্রমকে আউটপুট করে ;
  • ডি একটি যুক্তি গ্রহণ করে, অক্টেটের ক্রম (" এনকিডএনজি ") নেয় এবং অক্টেটস " পুনর্গঠন " এর অনুক্রমকে আউটপুট দেয় ;
  • আপনি উভয় ই ও D চালানো থাকেন (সঙ্গে encdng , ডি ইনপুট, বেশী মুছে ফেলার মাধ্যমে মনোনীত বিকিরণ থেকে উপাদানগুলি এনকোডিং (অগত্যা contiguously)), তারপর পুনর্গঠন সমান হবে ইনপুট কোন ব্যাপার যা অক্ষর ফর্মে মোছা হয়েছে encdng

ব্যাখ্যা

  • আপনি যদি ফাংশন জমা দেন, আপনাকে তাদের কল করতে হবে না Eএবং D; আপনার ভাষার জন্য যে নামটি সবচেয়ে উপযুক্ত তা আপনি চয়ন করতে পারেন।
  • একটি "অক্টেট" মূলত 0 থেকে 255 ইনক্লুসিভের একটি পূর্ণসংখ্যা, যা আপনি একটি পূর্ণসংখ্যা, একটি চরিত্র বা আপনার ভাষার জন্য উপযুক্ত যা কিছু হিসাবে এনকোড করতে পারেন।
  • E এবং D অবশ্যই সম্পূর্ণ নির্দ্বিধাকর হতে হবে (অর্থাত্ তাদের একই ইনপুট দেওয়া সর্বদা একই আউটপুট তৈরি করে, যেখানে " ইনপুটস" ই এর জন্য ইনপুট এবং রেডিয়েশন হিসাবে সংজ্ঞায়িত করা হয় , বা ডি এর জন্য এনডিএনডিএন )। বিশেষত, ই পার্শ্ব চ্যানেলের মাধ্যমে ডি তে তথ্য যোগাযোগ করতে পারে না।
  • মুছে ফেলা ক্রমের একটি উপাদান মুছে ফেলা হয়; কোনও সম্পাদককে দ্বিখণ্ডিত খোলার কথা ভাবুন, কার্সারটিকে একটি নির্বিচারে বিন্দুতে রেখে ব্যাকস্পেস টিপুন। যদি কোনও উপাদান একাধিকবার উপস্থিত হয়, তবে এটি সম্ভব যে উপাদানটির কেবলমাত্র একটি অনুলিপি মুছে ফেলা হবে (অর্থাত্ একই octet এর অন্যান্য উদাহরণগুলি প্রভাবিত হবে না)।
  • যদিও স্কোরটি কেবল মোটামুটি সংক্ষিপ্ত ইনপুটের ভিত্তিতে গণনা করা হয় , আপনার প্রোগ্রামটি অবশ্যই কোনও ইনপুট এবং বিকিরণের জন্য তত্ত্বের সাথে কাজ করতে হবে । বিশেষ করে, এটা কোন ব্যাপার যা অক্টেট প্রদর্শিত কাজ করতে হবে ইনপুট । (দুঃখিত, যে লোকেদের তারা জেনে থাকে এমন ছাপ ছাপানো অক্ষর ব্যবহারের দক্ষতা চাইবে তা ইনপুটটিতে উপস্থিত হবে না, তবে আমার নিশ্চিত করতে হবে যে ইনপুটটি সংকোচনীয় যাতে চ্যালেঞ্জটি সংকোচন না করে রেডিয়েশন শক্ত হওয়ার বিষয়ে))
  • আপনি দুটি ফাংশন সংজ্ঞায়িত করে এমন একটি ফাইল জমা দিতে পারেন; দুটি ফাইল যা প্রতিটি একটি ফাংশন সংজ্ঞায়িত করে বা যা উভয়ই সম্পূর্ণ প্রোগ্রাম; বা তিনটি ফাইল, যার মধ্যে দুটি যথাক্রমে ডি এবং ই প্রয়োগ করে (হয় পুরো প্রোগ্রামের মাধ্যমে বা কোনও ফাংশন সংজ্ঞায়নের মাধ্যমে), এবং তৃতীয়টি কোন হেডার ফাইল বা লাইব্রেরি যা ডি এবং ই উভয়ের মধ্যেই সাধারণ you , আপনার প্রোগ্রামিং ভাষার প্রয়োগটি অবশ্যই ফাইলের অবস্থানের মতো কোনও তর্ক ছাড়াই উভয় প্রোগ্রামকে বুঝতে সক্ষম হবে (অথবা আমাদের মানক বিধি অনুযায়ী আপনার প্রয়োগটি অস্বাভাবিক উপায়ে অনুরোধ করার জন্য আপনাকে বাইট জরিমানা দিতে হবে)।

বিজয় শর্ত

প্রতিটি দৈর্ঘ্য এবং বিকিরণের জন্য , ( দৈর্ঘ্য , বিকিরণ ) এনকোডিংগুলির মোট দৈর্ঘ্য হোক যা দৈর্ঘ্যের দৈর্ঘ্যের সাথে সমস্ত ইনপুট এবং তার প্রদত্ত বিকিরণের সাথে সামঞ্জস্য হয় । (যেমন, ( দৈর্ঘ্য , বিকিরণ ) = সমষ্টি ইনপুট দৈর্ঘ্য দৈর্ঘ্য দৈর্ঘ্য (ই ( ইনপুট , বিকিরণ ))।) তারপর দিন গ্রাম ( দৈর্ঘ্য , বিকিরণ ) সমান ( দৈর্ঘ্য ,বিকিরণ ) ÷ 256 দৈর্ঘ্য । অন্য কথায়, জি হ'ল এনকোডড আউটপুটটির গড় দৈর্ঘ্য, প্রদত্ত দৈর্ঘ্যের ইনপুট এবং প্রদত্ত বিকিরণ শক্ত করার প্রয়োজনের জন্য। (তত্ত্বের ভিত্তিতে আপনি এটি নিষ্ঠুর বলের দ্বারা গণনা করতে পারেন, তবে সম্ভবত আপনার স্কোরটি কার্যকর করতে এটি সম্ভবত প্রশংসনীয়ভাবে দীর্ঘ সময় নিতে পারে I'm আমি আশা করছি বেশিরভাগ জমাগুলি তাদের স্কোরটি কী তা নিয়ে গাণিতিক যুক্তি তৈরি করতে সক্ষম হবে If আপনি যদি ' নিশ্চিত নন, একটি আনুমানিক স্কোর পোস্ট করুন এবং অন্য কোনও এন্ট্রি যদি অনুরূপ স্কোর পোস্ট করে তবে আপনি বা অন্য কেউ এটিকে আরও গভীরতার সাথে গণনা করতে পারেন))

আপনার স্কোর 0 থেকে 9 সমেতের সমস্ত রেডিয়েশনের জন্য জি ( দৈর্ঘ্য , রেডিয়েশন ) এর সমান এবং 0 থেকে 99 সমেতের সমস্ত দৈর্ঘ্যের সমষ্টি, প্লাস (বেশিরভাগ হার্ডকোডিং এড়ানোর জন্য, বা প্রতিযোগিতাটি চালিয়ে যেতে যদি কেউ গাণিতিকভাবে নিখুঁত এনকোডিং আবিষ্কার করেছেন; এটি সম্ভবত ন্যূনতম ফ্যাক্টর হতে পারে) আপনার চ্যালেঞ্জের কাছে জমা দেওয়ার মোট বাইটের সংখ্যা (প্লাসে অস্বাভাবিক দোভাষীর পতাকা বা নির্দিষ্ট ফাইলের নামের প্রয়োজনের জন্য স্ট্যান্ডার্ড জরিমানা)। বিজয়ী হ'ল সর্বনিম্ন স্কোর সহ প্রবেশিকা (জমা দেওয়ার জন্য প্রথম প্রবেশের মাধ্যমে টাইব্রোকন)।


ডিকোডারটি কি তেজস্ক্রিয়তার প্যারামিটারটিও জানতে পারে?
orlp

(বা দৈর্ঘ্য , তবে আমি বিশ্বাস করি যে জেনে রাখার ফলে আপনাকে বেশিরভাগ স্কিমের জন্য অন্যটি দেওয়া উচিত)
orlp

1
@ অরলপ: না, এর কেবল স্ট্রিং রয়েছে। একটি বিকিরণ-শক্তকরণ সমস্যার ক্ষেত্রে, ডিকোডারটি (যেমন ভাষা) ব্যবহৃত তেজস্ক্রিয়তার বিধিগুলি জানে না, সুতরাং আপনার ডিকোডারটি সেগুলিও জানে না; এটি এর ইনপুট থেকে তাদের অনুমিত করতে হবে।

এই কম্পিউটারফিলি ভিডিওটির উপর ভিত্তি করে আমি এমন একটি ভাষা তৈরি করব যা 3 বাইট ট্রাইপ্লেটে কোডেল নিয়ে থাকে: সেগুলি যদি সব মিল না করে তবে কিছু ভুল হয়ে গেছে এবং সঠিক মানটি কী তা নির্ধারণ করার জন্য আমাদের কাছে পর্যাপ্ত তথ্য রয়েছে। কম বিট দিয়ে সম্ভবত এটি করার একটি উপায় আছে তবে এই মুহুর্তে কীভাবে কাজ করার আমার কাছে মস্তিষ্ক নেই।
ড্রাকো 18s

আপনি কীভাবে শিরোনাম এবং প্রোগ্রামগুলিকে একত্রিত করবেন?
ক্যালকুলেটরফলাইন

উত্তর:


8

সিজেম, স্কোর ≤ 286,516 + 54 + 36 = 286,606

এনকোডার

{_{1\+_:e>)_0a+@@b0\{{)_256b_,\e`,-}g}*256b+\)e*}{*}?}

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

সঙ্কেতমোচক

{_{e`1f=(\256b{256b_,\e`,=},,\b1>}&}

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

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

একটি বিকিরণ-কঠোর এনকোডিং তৈরির প্রাথমিক ধারণাটিতে দুটি পদক্ষেপ জড়িত:

  1. এমন একটি এনকোডিং সন্ধান করুন যা কখনই পরপর দু'টি অভিন্ন আকট থাকে না।
  2. এনকোডযুক্ত স্ট্রিং আর-তে প্রতিটি অক্টেট পুনরাবৃত্তি করুন , যেখানে আর বিকিরণ স্তর।

এইভাবে, বিকিরণ পুরোপুরি অভিন্ন অক্ষরগুলির একটি রান মুছতে পারে না, যাতে আমরা প্রতিটি রান থেকে একটি অক্ষর নিয়ে তারপরে স্টেপটি ডিকোড করতে পারি এবং তারপরে পদক্ষেপ 1 od

সুতরাং একমাত্র আকর্ষণীয় অংশটি এমন একটি এনকোডিং সন্ধান করছে যা কখনই পুনরাবৃত্ত অক্টেটের ফল দেয় না। বেসিক ধারণাটি A043096 এর মতো কিছুকে একটি সিস্টেম সিস্টেম হিসাবে ব্যবহার করা । অর্থাৎ পূর্ণসংখ্যা একটি সঙ্কেতাক্ষরে লিখা এন , কেবলমাত্র আমরা কিছু বেস আপ গণনা , পুনরাবৃত্তি অক্টেট সঙ্গে সব সংখ্যার কুঁদন। আমি বিশ্বাস করি যে ডি সংখ্যা পর্যন্ত এই উপায়ে প্রতিনিধিত্ব করা যায় সেই সংখ্যাটি দ্বিখণ্ডিত বেস বি -১ তে উপস্থাপিত হতে পারে এমন সংখ্যার সমান (যেহেতু, আপনি যখন এই জাতীয় সংখ্যা লিখতে চান, আপনি করতে পারেন) সীমাবদ্ধতা লঙ্ঘন না করে প্রতিটি পদের জন্য খ -১ অঙ্কের মধ্যে চয়ন করুন )।

অবশ্যই, সর্বাধিক সংকোচনের জন্য আমরা b = 256 ব্যবহার করব । ইনপুটটিকে পূর্ণসংখ্যায় রূপান্তর করতে আমরা বেস বেস রূপান্তরটিও ব্যবহার করতে পারি। আমি যদি অলস না হয়ে থাকি, তবে আমি ইনপুটটির জন্য একটি বাইজিক বেস ব্যবহার করতাম, তবে আপাতত আমি একটি প্রস্তুতি নিচ্ছি 1(কোনও অগ্রণী জিরো নেই তা নিশ্চিত করার জন্য) এবং তারপরে ক্ষুদ্রতম বেসটি ব্যবহার করব যা সমস্ত অষ্টেটগুলিতে থাকে ইনপুট বেস চেয়ে কম হয়।

এর পরে এই বেসটি এনকোডিংয়ে প্রম্পেন্ড করা হয় (যাতে ডিকোডারটি কোন বেসটি ব্যবহার করতে হয় তা জানতে পারে) এবং 0-অক্টেট দ্বারা অবশিষ্ট নম্বর থেকে পৃথক করা হয় (এটি কাজ করে কারণ বাকী সংখ্যাটি কখনই শূন্যের সাথে শুরু হবে না)। একটি ছোট অপ্টিমাইজেশন হিসাবে, খালি স্ট্রিং একটি খালি স্ট্রিং থেকে যায়।

আমি উপরে একটি সঠিক স্কোর গণনা না করার কারণটি হ'ল প্রতিটি ইনপুট তার দৈর্ঘ্য এবং তার সর্বাধিক অক্টেটের ভিত্তিতে কতদিন চলবে তার জন্য আমি কেবলমাত্র একটি উচ্চতর বাউন্ড গণনা করছি। যাইহোক, এই দুটি পরামিতিগুলির জন্য, প্রায়শই দুটি পৃথক আউটপুট দৈর্ঘ্য হবে এবং আমি তাদের মধ্যে টিপিং পয়েন্টটি কোথায় ঘটে তা এখনও খুঁজে বের করতে বিরক্ত করিনি। আমি সেই দৈর্ঘ্যটি অনুমান করার জন্য বাইজিক বেস 255 এর পরিবর্তে সাধারণ বেসের দৈর্ঘ্য 255 ব্যবহার করেছি, যা এটি হওয়া দরকারের চেয়ে আবার কিছুটা বড়। গণনার জন্য আমি সঠিক গণিত কোডটি ব্যবহার করেছি:

num[l_, 1] = 0;
num[l_, base_] := num[l, base] = base^l - Sum[num[l, b], {b, base - 1}]
Sum[
  num[l, b]*(r + 1)*(2 + IntegerLength[2*b^l - 1, 255])/256^l, 
  {r, 0, 9}, {l, 1, 99}, {b, 2, 256}
]
N@%

num[l, b]lসর্বাধিক অক্টেটের সাথে দৈর্ঘ্যের স্ট্রিংয়ের সংখ্যাটি দেওয়া উচিত b-1(ব্যতীত b == 1, যেখানে আমি এটি হার্ডকোড করেছি 0কারণ আমি সর্বদা কমপক্ষে বেস ব্যবহার করি 2)।


"ধরে নিচ্ছি যে রেডিয়েশন স্তরের আর-তে দৈর্ঘ্য N এর একটি স্ট্রিং কম (এন + 1) এর চেয়ে কম এনকোড করা যাবে না N আমি এর সত্য হওয়ার কোনও কারণ দেখছি না। ও (এন + আর) যে এনকোডিং স্কিম বিদ্যমান তা দেখে আমি অবাক হব না।
orlp

1
@ অরલ્પ আমি কীভাবে এটি সম্ভব হবে তা দেখছি না তবে আমি ভুল প্রমাণিত হওয়ার অপেক্ষায় রয়েছি। :)
মার্টিন এন্ডার

ভাল যুক্তি. আমি সিজেমকে চিনি না, তবে আপনার বিবরণ থেকে মনে হচ্ছে আপনি এনকোডড ডেটাতে বেসটি প্রস্তুত করছেন। যদি এটির ক্ষেত্রে থাকে তবে প্রেন্টেন্ড করা ডেটা থেকে অক্ষর মুছে ফেলা থাকলে কোনও সমস্যা আছে? (আমি এই ভুলটিই করেছি যে @ লিও বলেছিলেন যে আমার সমাধানটি আমাকে ঠিক করতে হয়েছিল।)
মিচেল স্পেক্টর

@ মিচেলস্পেক্টর প্রতিটি অক্ষর r + 1 বার পুনরাবৃত্তি করার আগে বেসটি চাপ দেওয়া হয়। সুতরাং বেস এছাড়াও বিকিরণ নিরাপদ।
মার্টিন ইন্ডার

এটি বেশ ভাল - এটিই আমি আমার সমাধানটিতেও শেষ করেছি। আপনার কেবল নিশ্চিত হওয়া দরকার যে বেসটি কী তা জানার আগে ডিকোডার প্রিপেন্ড করা ডেটা ডিকোড করতে পারে।
মিচেল স্পেক্টর

6

বাশ + জিএনইউ ইউটিলিটিস, স্কোর 294506 283468

সম্পাদনা 1: @ লিও লক্ষ্য করেছেন এমন একটি সমস্যার সমাধান করে - আপনাকে ধন্যবাদ!

2 সম্পাদনা করুন: আরও ভাল স্কোরের জন্য বিকিরণ প্যারামিটারের জন্য এনকোডিং পদ্ধতিটি উন্নত।

এনকোডার (97 বাইট):

for((j=0;j<$1;j++)){ p+=p\;;}
(sed 's/\(.\)\1/\1a\1a/g'<<<$1;cat)|xxd -p -c1|sed ${p-;}|xxd -r -p

ডিকোডার (121 বাইট):

read n
n=`sed 's/\(.\)\1*/\1/g'<<<$n`
sed -r "s/( ..)\1{0,${n//a}}/\1/g"<<<' 0a '`xxd -p -c1`|sed 's/^ [^ ]*//'|xxd -r -p

এনকোডারটির জন্য: অস্টেট ক্রম স্টিডিনের অক্ষর হিসাবে পাস হয়েছে, রেডিয়েশন প্যারামিটার একটি আর্গুমেন্ট হিসাবে পাস করেছে।

ডিকোডারের জন্য: ইনপুট স্টিডিনের অক্ষর হিসাবে পাস করেছে।

উভয়ের জন্য: স্টটআউট আউটপুট

এনকোডারটি প্রতিটি অঙ্কের পরপর অভিন্ন অঙ্কের মধ্যে একটি অক্ষর 'একটি' সন্নিবেশ করে তার পরে একক নিউলাইন অনুসরণ করে আর এর অঙ্কগুলি ইনপুট ডেটাগুলিতে প্রিন্ড করে। এরপরে এটি সমস্ত ইনপুট অনুলিপি করে (পূর্ববর্তিত অক্ষরগুলি দিয়ে শুরু করে) প্রতিটি অক্ষরকে সেই অক্ষরের আর + 1 কপি দ্বারা প্রতিস্থাপন করে।

ডিকোডারটি এটিকে পূর্বাবস্থায় ফেলে রেখেছে, এক্স এর প্রতিটি ইনপুটটিতে অক্ষর রেখে চলেছে, এক্স অনুসারে এক্সের পরপর অভিন্ন অনুলিপিগুলি অবধি ছেড়ে যায় এবং কী বাকী থাকে তা মুদ্রণ করে। প্রিপেন্ড করা ডেটাতে কোনও পুনরাবৃত্তি অক্ষর নেই, সুতরাং r জানা হওয়ার আগে এটি ডিকোড করা যায়। এই মুহুর্তে, r জানা যায় এবং বাকী ডেটা সঠিকভাবে ডিকোড করার জন্য সেই মানটি প্রয়োজন।

মূল ইনপুটটিতে অভিন্ন চরিত্রগুলি পুনরাবৃত্তি করা হলেও আপনি এটি পরীক্ষা করতে পারেন।


স্কোর গণনা:

ধরুন ইনপুটটির দৈর্ঘ্য এল এবং বিকিরণের প্যারামিটারটি r (যা স্কোরিং গণনার ক্ষেত্রে সর্বাধিক 9, সুতরাং এটি একটি ডিজিটে ফিট করে এবং তাই কোনও ক্রমাগত পুনরাবৃত্তি অক্ষর নেই)। প্রেন্টেন্ড করা ডেটা 2 বাইট (অঙ্ক, নিউলাইন), সুতরাং আউটপুটটি এনকোডড স্ট্রিমের জন্য (আর + 1) (এল + 2) বাইট।

সুতরাং g (L, r) = (আর + 1) (এল + 2)।

এটি অনুসরণ করে যে মোট স্কোর হিসাবে গণনা করা যেতে পারে

এখানে চিত্র বর্ণনা লিখুন


বাদ পড়া অক্টেট যদি প্রথম হয় তবে কী হবে? ডিকোডারের rপড়তে হবে না
লিও

@ লিও আপনার ঠিক আছে আমি আগামীকাল সেটি ঠিক করে দেখব - আজ রাতের অনেক দেরি হয়ে গেছে। এটি সন্ধানের জন্য ধন্যবাদ।
মিচেল স্পেক্টর

@ লীও আমি মনে করি যে এটির প্রতিটি অঙ্কের r + 1 টি অনুলিপি, তার পরে r + 1 নিউলাইন যুক্ত করে এটি স্থিরযোগ্য। যদি এটি সঠিক হয় তবে স্কোর খুব বেশি বাড়বে না।
মিচেল স্পেক্টর

এরকম কিছু কাজ করা উচিত। আমি মনে করি যে এটি উচ্চতর বিকিরণের (যেমন একটি রেডিয়েশনের 222) সাথে সঠিকভাবে কাজ করে তা নিশ্চিত করার জন্য আপনাকে কিছু অতিরিক্ত ব্যবস্থা গ্রহণ করা উচিত তবে ভাগ্যক্রমে 0-9 এর রেডিয়েশনের চেয়ে স্কোরটি গণনা করা হয়, সুতরাং এটি খুব বেশি প্রভাবিত হবে না। পিএস আমি এই একই এনকোডিংটি প্রয়োগ করার কথা ভাবছিলাম, সে কারণেই আমি এখনই ত্রুটিটি চিহ্নিত করেছি;)
লিও

@ লিও হ্যাঁ, রেডিয়েশনের জন্য সমস্ত মানগুলির জন্য স্থিরতা কাজ করে, যদিও স্কোরটি সর্বাধিক of এর রেডিয়েশনের মান বিবেচনা করে
মিচেল স্পেক্টর

3

পার্ল + ম্যাথ :: {মোডআইন্ট, বহুপদী, প্রধানমন্ত্রী :: ইউটিলি}, স্কোর ≤ 92819

$m=Math::Polynomial;sub l{($n,$b,$d)=@_;$n||$d||return;$n%$b,l($n/$b,$b,$d&&$d-1)}sub g{$p=$m->interpolate([grep ref$_[$_],0..$map{$p->evaluate($_)}0..$}sub p{prev_prime(128**$s)}sub e{($_,$r)=@_;length||return'';$s=$r+1;s/^[␀␁]/␁$&/;@l=map{mod($_,p$s)}l(Math::BigInt->from_bytes($_),p$s);$@l+$r>p($s)&&return e($_,$s);$a=0;join'',map{map{chr$_+$a}l($_->residue,128,$s,($a^=128))}g(@l)}sub d{@l=split/([␀-␡]+)/,$_[0];@l||return'';$s=vecmax map length,@l;@l=g map{length==$s&&mod($m->new(map{ord()%128}split//)->evaluate(128),p$s)}@l;$$_=$m->new(map{$_->residue}@l)->evaluate(p$s)->to_bytes;s/^␁//;$_}

নিয়ন্ত্রণের চিত্রগুলি সংশ্লিষ্ট নিয়ন্ত্রণ চরিত্রের প্রতিনিধিত্ব করতে ব্যবহৃত হয় (উদাঃ আক্ষরিক NUL অক্ষর)। কোডটি পড়ার চেষ্টা করার বিষয়ে খুব বেশি চিন্তা করবেন না; নীচে আরও পাঠযোগ্য সংস্করণ রয়েছে।

সাথে চালাও -Mbigint -MMath::ModInt=mod -MMath::Polynomial -MNtheory=:all-MMath::Bigint=lib,GMPপ্রয়োজনীয় নয় (এবং এভাবে স্কোরের অন্তর্ভুক্ত নয়) তবে আপনি অন্যান্য লাইব্রেরির আগে এটি যুক্ত করলে এটি প্রোগ্রামটিকে কিছুটা দ্রুত চালিত করে তুলবে।

স্কোর গণনা

এখানে অ্যালগোরিদম কিছুটা অসম্পূর্ণ, তবে এটি লিখতে বরং আরও শক্ত হবে (পার্লের উপযুক্ত লাইব্রেরি না থাকার কারণে)। এ কারণে, কোডে আমি কয়েকটি আকার / দক্ষতা ট্রেড অফ করেছি, এই ভিত্তিতে যে বকেটগুলি এনকোডিংয়ে সংরক্ষণ করা যায়, গল্ফিং থেকে প্রতিটি পয়েন্ট ছাঁটাই করার চেষ্টা করার কোনও মানে নেই।

প্রোগ্রামটিতে 600০০ বাইট কোড, এবং কমান্ড-লাইন বিকল্পের জন্য penalties বাইটের জরিমানা, একটি 678 পয়েন্ট জরিমানা রয়েছে। বাকি স্কোরটি সেরা-কেস এবং নিকৃষ্টতম ক্ষেত্রে (আউটপুট দৈর্ঘ্যের দিক থেকে) প্রতিটি দৈর্ঘ্যের 0 থেকে 99 এবং প্রতিটি বিকিরণ স্তর 0 থেকে 9 পর্যন্ত স্ট্রিং দ্বারা গণনা করা হয়েছিল; গড় কেস মাঝখানে কোথাও হয় এবং এটি স্কোরকে সীমা দেয়। (অনুরূপ স্কোর সহ অন্য কোনও এন্ট্রি না এলে সঠিক মান গণনা করার চেষ্টা করা উপযুক্ত নয়)

এর অর্থ হ'ল এনকোডিং দক্ষতা থেকে প্রাপ্ত স্কোর 91100 থেকে 92141 সমেত অন্তর্ভুক্ত, সুতরাং চূড়ান্ত স্কোরটি হ'ল:

91100 + 600 + 78 = 91778 ≤ স্কোর ≤ 92819 = 92141 + 600 + 78

কম গল্ফ করা সংস্করণ, মন্তব্য এবং পরীক্ষার কোড সহ

এটি হ'ল আসল প্রোগ্রামটি + নিউলাইনস, ইনডেন্টেশন এবং মন্তব্য। (প্রকৃতপক্ষে, গল্ফযুক্ত সংস্করণটি এই সংস্করণ থেকে নতুন লাইন / ইনডেন্টেশন / মন্তব্যগুলি সরিয়ে দিয়ে তৈরি করা হয়েছিল))

use 5.010;                    # -M5.010; free
use Math::BigInt lib=>'GMP';  # not necessary, but makes things much faster
use bigint;                   # -Mbigint
use Math::ModInt 'mod';       # -MMath::ModInt=mod
use Math::Polynomial;         # -MMath::Polynomial
use ntheory ':all';           # -Mntheory=:all
use warnings;                 # for testing; clearly not necessary

### Start of program

$m=Math::Polynomial;          # store the module in a variable for golfiness

sub l{ # express a number $n in base $b with at least $d digits, LSdigit first
    # Note: we can't use a builtin for this because the builtins I'm aware of
    # assume that $b fits into an integer, which is not necessarily the case.
    ($n,$b,$d)=@_;
    $n||$d||return;
    $n%$b,l($n/$b,$b,$d&&$d-1)
}

sub g{ # replaces garbled blocks in the input with their actual values
    # The basic idea here is to interpolate a polynomial through all the blocks,
    # of the lowest possible degree. Unknown blocks then get the value that the
    # polynomial evaluates to. (This is a special case of Reed-Solomon coding.)
    # Clearly, if we have at least as many ungarbled blocks as we did original
    # elements, we'll get the same polynomial, thus we can always reconstruct
    # the input.
    # Note (because it's confusing): @_ is the input, $_ is the current element
    # in a loop, but @_ is written as $_ when using the [ or # operator (e.g.
    # $_[0] is the first element of @_.
    # We waste a few bytes of source for efficiency, storing the polynomial
    # in a variable rather than recalculating it each time.
    $p=$m->interpolate([grep ref$_[$_],0..$#_],[grep ref,@_]);
    # Then we just evaluate the polynomial for each element of the input.
    map{$p->evaluate($_)}0..$#_
}

sub p{ # determines maximum value of a block, given (radiation+1)
    # We split the input up into blocks. Each block has a prime number of
    # possibilities, and is stored using the top 7 bits of (radiation+1)
    # consecutive bytes of the output. Work out the largest possible prime that
    # satisfies this property.
    prev_prime(128**$s)
}

sub e{ # encoder; arguments: input (bytestring), radiation (integer)
    ($_,$r)=@_; # Read the arguments into variables, $_ and $r respectively
    length||return''; # special case for empty string
    $s=$r+1; # Also store radiation+1; we use it a lot
    # Ensure that the input doesn't start with NUL, via prepending SOH to it if
    # it starts with NUL or SOH. This means that it can be converted to a number
    # and back, roundtripping correctly.
    s/^[␀␁]/␁$&/; #/# <- unconfuse Stack Exchange's syntax highlighting
    # Convert the input to a bignum, then to digits in base p$s, to split it
    # into blocks.
    @l=map{mod($_,p$s)}l(Math::BigInt->from_bytes($_),p$s);
    # Encoding can reuse code from decoding; we append $r "garbled blocks" to
    # the blocks representing the input, and run the decoder, to figure out what
    # values they should have.
    $#l+=$r;
    # Our degarbling algorithm can only handle at most p$s blocks in total. If
    # that isn't the case, try a higher $r (which will cause a huge increase in
    # $b and a reduction in @l).
    @l+$r>p($s)&&return e($_,$s);
    # Convert each block to a sequence of $s digits in base 128, adding 128 to
    # alternating blocks; this way, deleting up to $r (i.e. less than $s) bytes
    # will preserve the boundaries between each block; then convert that to a
    # string
    $a=0; # we must initialize $a to make this function deterministic
    join'',map{map{chr$_+$a}l($_->residue,128,$s,($a^=128))}g(@l)
}

sub d{ # decoder: arguments; encdng (bytestring)
    # Reconstruct the original blocks by looking at their top bits
    @l=split/([␀-␡]+)/,$_[0];
    @l||return''; # special case for empty string
    # The length of the longest block is the radiation parameter plus 1 (i.e.
    # $s). Use that to reconstruct the value of $s.
    $s=vecmax map length,@l;
    # Convert each block to a number, or to undef if it has the wrong length.
    # Then work out the values for the undefs.
    @l=g map{
        # Convert blocks with the wrong length to undef.
        length==$s&&
            # Convert other blocks to numbers, via removing any +128 and then
            # using Math::Polynomial to convert the digit list to a number.
            mod($m->new(map{ord()%128}split// #/# <- fix syntax highlighting
            )->evaluate(128),p$s)
    }@l;
    # Remove the redundant elements at the end; now that they've reconstructed
    # the garbled elements they have no further use.
    $#l-=$s-1;
    # Convert @l to a single number (reversing the conversion into blocks.)
    $_=$m->new(map{$_->residue}@l)->evaluate(p$s)
        # Convert that number into a string.
        ->to_bytes;
    # Delete a leading SOH.
    s/^␁//;  #/# <- unconfuse Stack Exchange's syntax highlighting
    # Finally, return the string.
    $_
}


### Testing code
use Encode qw/encode decode/;

# Express a string using control pictures + IBM437, to make binary strings
# easier for a human to parse
sub format_string {
    ($_)=@_;
    $_ = decode("Latin-1", $_);
    s/[\0-\x1f]/chr (0x2400 + ord $&)/eag;
    s/\x7f/chr 0x2421/eag;
    s/[ -~\x80-\xff]/decode("IBM437",$&)/eag;
    encode("UTF-8","\x{ff62}$_\x{ff63}")
}

sub test {
    my ($string, $radiation, $samples) = @_;
    say "Input: ", format_string($string);
    my $encoding = e($string, $radiation);
    say "Encoding: ", format_string($encoding);
    say "Input length ", length($string), ", encoding length ", length($encoding), ", radiation $radiation";
    my $decoding = d($encoding);
    $decoding eq $string or die "Mistake in output!";
    say "Decoding: ", format_string($decoding), " from ",
        format_string($encoding);

    # Pseudo-randomly generate $samples radiation-damaged versions.
    srand 1;
    for my $i (1..$samples) {
        my $encdng = $encoding;
        for my $r (1..$radiation) {
            substr $encdng, int(rand(length $encdng)), 1, "";
        }
        my $newdecoding = d($encdng);
        say "Decoding: ", format_string($newdecoding), " from ",
            format_string($encdng);
        $newdecoding eq $string or die "Mistake in output!";
    }

    say "";
    length $encoding;
}

test "abcdefghijklm", 1, 10;
test "abcdefghijklm", 2, 10;
test "abcdefghijklm", 5, 10;
test "abcdefghijklm", 10, 10;
test "\0\0\0\0\0", 1, 10;
test "\5\4\3\2\1", 2, 10;
test "a", 10, 10;

my %minlength = ();
my %maxlength = ();

for my $length (0..99) {
    my ($min, $max) = ("", "");
    $length and ($min, $max) =
        ("\2" . "\0" x ($length - 1), "\1" . "\377" x ($length - 1));
    for my $radiation (0..9) {
        $minlength{"$length-$radiation"} = test $min, $radiation, 1;
        $maxlength{"$length-$radiation"} = test $max, $radiation, 1;
    }
}

say "Minimum score: ", vecsum values %minlength;
say "Maximum score: ", vecsum values %maxlength;

অ্যালগরিদম

সমস্যার সরলকরণ

মূল ধারণাটি হ'ল এই "ডিলিটেশন কোডিং" সমস্যাটি (যা কোনও বহুলাংশে অন্বেষণকৃত নয়) একটি ক্ষয় কোডিং সমস্যা (গণিতের একটি বিস্তৃত ক্ষেত্র) into ইরেজর কোডিংয়ের পিছনে ধারণাটি হ'ল আপনি কোনও "ইরেজর চ্যানেল" এর মাধ্যমে প্রেরণ করার জন্য ডেটা তৈরি করছেন, এমন একটি চ্যানেল যা মাঝে মাঝে এটি "গারবেল" অক্ষর দ্বারা প্রেরিত অক্ষরগুলিকে প্রতিস্থাপন করে যা ত্রুটির পরিচিত অবস্থান নির্দেশ করে। (অন্য কথায়, দুর্নীতিটি কোথায় ঘটেছে তা সর্বদা স্পষ্ট, যদিও মূল চরিত্রটি এখনও অজানা)) এর পিছনের ধারণাটি খুব সহজ: আমরা ইনপুটটিকে দৈর্ঘ্যের ব্লকে বিভক্ত করি ( বিকিরণ+ 1), এবং প্রতিটি ব্লকের আটটি বিটের মধ্যে সাতটি ডাটা ব্যবহারের জন্য ব্যবহার করুন, যখন বাকি একটি বিট (এই নির্মাণে, এমএসবি) পুরো ব্লকের জন্য সেট হওয়ার পরে, পুরো পরবর্তী ব্লকের জন্য পরিষ্কার হয়ে যাবে, ব্লকের জন্য সেট করা হবে তার পরে, এবং আরও। যেহেতু ব্লকগুলি বিকিরণ প্যারামিটারের চেয়ে দীর্ঘ হয়, প্রতিটি ব্লক থেকে কমপক্ষে একটি অক্ষর আউটপুটে টিকে থাকে; সুতরাং একই এমএসবি দিয়ে অক্ষরগুলি রানের মাধ্যমে আমরা প্রতিটি অক্ষর কোন ব্লকের অন্তর্ভুক্ত তা কার্যকর করতে পারি। ব্লকগুলির সংখ্যাও রেডিয়েশন প্যারামিটারের তুলনায় সর্বদা বেশি থাকে, সুতরাং আমাদের কাছে সর্বদা কমপক্ষে একটি এনডএনজেডে কমপক্ষে একটি অবিচ্ছিন্ন ব্লক থাকে; আমরা এইভাবে জানি যে সমস্ত ব্লক যেগুলি সবচেয়ে দীর্ঘ বা দীর্ঘায়িত জন্য আবদ্ধ, সেগুলি অকেজো করা হয়েছে, যাতে কোনও সংক্ষিপ্ত ব্লককে ক্ষতিগ্রস্থ হিসাবে গণ্য করতে দেওয়া হয় (সুতরাং গার্বল)। আমরা এটির মতো বিকিরণ প্যারামিটারও কমিয়ে আনতে পারি (এটি '

মুছে ফেলা কোডিং

সমস্যার ক্ষয়ের কোডিং অংশ হিসাবে, এটি রিড-সলোমন নির্মাণের একটি সাধারণ বিশেষ কেস ব্যবহার করে। এটি একটি নিয়মতান্ত্রিক নির্মাণ: আউটপুট (ইরেজর কোডিং অ্যালগরিদম এর) ইনপুট সমেত বেশ কয়েকটি অতিরিক্ত ব্লক, রেডিয়েশন প্যারামিটারের সমান। আমরা এই ব্লকগুলির জন্য প্রয়োজনীয় (এবং গল্ফ!) উপায়ে তাদেরকে গারবেল হিসাবে বিবেচনা করে, তারপরে ডিকোডিং অ্যালগরিদমকে তাদের মানটিকে "পুনর্গঠন" করার মাধ্যমে প্রয়োজনীয় মানগুলি গণনা করতে পারি।

নির্মাণের পিছনে আসল ধারণাটিও খুব সহজ: আমরা এনকোডিংয়ের সমস্ত ব্লকের (অন্যান্য উপাদানগুলির সাথে গলিত গার্বল সহ) ন্যূনতম সম্ভাব্য ডিগ্রির একটি বহুবচন ফিট করি; যদি বহুপদীটি চ হয় , প্রথম ব্লকটি (0), দ্বিতীয়টি (1), ইত্যাদি। এটি স্পষ্ট যে বহুবর্ষের ডিগ্রি ইনপুট বিয়োগ 1 এর ব্লকের সংখ্যার সমান হবে (কারণ আমরা প্রথম যেগুলির কাছে একটি বহুপদী ফিট করি, তারপরে এটি অতিরিক্ত "চেক" ব্লকগুলি তৈরি করতে ব্যবহার করি); এবং কারণ ডি +1 পয়েন্ট ডিগ্রি ডি এর একটি বহুবর্ষকে স্বতন্ত্রভাবে সংজ্ঞায়িত করে, কোনও সংখ্যক ব্লক (রেডিয়েশন প্যারামিটার অবধি) গার্বলিংয়ের ফলে মূল ইনপুটটির সমান অনেকগুলি অবিবাহিত ব্লক চলে যাবে, যা একই বহুপদী পুনর্গঠনের জন্য যথেষ্ট তথ্য। (তারপরে আমাদের কোনও ব্লকের প্রকোপটি বহন করার জন্য বহুপদী মূল্যায়ন করতে হবে))

বেস রূপান্তর

এখানে চূড়ান্ত বিবেচনাটি হ'ল ব্লকগুলির দ্বারা নেওয়া প্রকৃত মানগুলি নিয়ে কাজ করা; যদি আমরা পূর্ণসংখ্যার উপর বহুবর্ষীয় অন্তরঙ্গকরণ করি, ফলাফলগুলি ইনপুট মানগুলির চেয়ে অনেক বড়, বা অন্যথায় অনাকাঙ্ক্ষিত হতে পারে যুক্তি সংখ্যার (পূর্ণসংখ্যার চেয়ে বরং)। যেমন, পূর্ণসংখ্যা ব্যবহার না করে আমরা একটি সীমাবদ্ধ ক্ষেত্র ব্যবহার করি; এই প্রোগ্রামে, সীমাবদ্ধ ক্ষেত্রটি ব্যবহৃত হয় পূর্ণসংখ্যা মডুলো পি এর ক্ষেত্র , যেখানে পি 128 রেডিয়েশন +1 এর চেয়ে কম বড় প্রাইম(অর্থাৎ বৃহত্তম প্রাইম যার জন্য আমরা কোনও ব্লকের ডেটা অংশে সেই প্রধানের সমান বিভিন্ন স্বতন্ত্র মানগুলি ফিট করতে পারি)। সীমাবদ্ধ ক্ষেত্রগুলির বৃহত সুবিধা হ'ল বিভাগটি (0 বাদে) স্বতন্ত্রভাবে সংজ্ঞায়িত হয় এবং সর্বদা সেই ক্ষেত্রের মধ্যে একটি মান উত্পাদন করে; সুতরাং, বহুভুজগুলির আন্তঃবিবাহিত মানগুলি ইনপুট মানগুলির ঠিক একইভাবে একটি ব্লকের সাথে খাপ খায়।

অর্ডার ব্লক ডেটার একটি সিরিজের মধ্যে ইনপুট রুপান্তরিত করার আগে, তারপর, আমরা বেস রূপান্তর করতে হবে: বেস 256 থেকে ইনপুট রূপান্তর একটি সংখ্যা মধ্যে, তারপর ভিত্তিতে রূপান্তর পি (ক জন্য যেমন বিকিরণ 1 পরামিতি, আমরা পি= 16381)। এটি বেশিরভাগই পার্লের বেস রূপান্তর রুটিনের অভাব দ্বারা ধরা হয়েছিল (ম্যাথ :: প্রাইম :: ইউটিলে কিছু রয়েছে, তবে তারা বিগনাম বেসগুলির জন্য কাজ করে না, এবং আমরা এখানে যে প্রাইমগুলির সাথে কাজ করি তা অবিশ্বাস্যভাবে বড়)। যেহেতু আমরা ইতিমধ্যে ম্যাথ :: বহুবর্ষীয় অন্তরঙ্গকরণের জন্য বহুপদী ব্যবহার করছি, আমি এটিকে "ডিজিট সিকোয়েন্স থেকে রূপান্তর" ফাংশন হিসাবে ব্যবহার করতে সক্ষম হয়েছি (অঙ্কগুলি বহুবর্ষের সহগ হিসাবে এবং এটির মূল্যায়নের মাধ্যমে), এবং এটি বিগনামের জন্য কাজ করে শুধুই সুন্দর. অন্য দিকে যেতে, যদিও, আমাকে নিজেই ফাংশনটি লিখতে হয়েছিল। ভাগ্যক্রমে, এটি লেখার পক্ষে খুব কঠিন (বা ভার্বোস) নয়। দুর্ভাগ্যক্রমে, এই বেস রূপান্তরটির অর্থ হ'ল ইনপুটটি সাধারণত অপঠনযোগ্য রেন্ডার হয়। শীর্ষস্থানীয় জিরোগুলির সাথে একটি সমস্যাও রয়েছে;

এটি লক্ষ করা উচিত যে আমরা আউটপুটে পি ব্লকগুলির বেশি থাকতে পারি না (অন্যথায় দুটি ব্লকের সূচকগুলি সমান হয়ে যায় এবং তবুও সম্ভবত বিভিন্ন বহির্মুখগুলি বহুবচন গঠনের প্রয়োজন হয়)। এটি কেবল তখন ঘটে যখন ইনপুটটি অত্যন্ত বড় হয়। এই প্রোগ্রামটি সমস্যাটিকে খুব সহজ উপায়ে সমাধান করে: বর্ধমান রেডিয়েশন (যা ব্লকগুলি আরও বড় এবং পি আরও বৃহত্তর করে তোলে , যার অর্থ আমরা আরও অনেক বেশি ডেটা মাপতে পারি এবং এটি পরিষ্কারভাবে সঠিক ফলাফলের দিকে নিয়ে যায়)।

আর একটি বিষয় তৈরি করার মতো বিষয় হ'ল আমরা নাল স্ট্রিংটিকে নিজের মধ্যে এনকোড করি, কারণ লিখিত হিসাবে প্রোগ্রামটি এটি অন্যথায় ক্র্যাশ করবে। এটি স্পষ্টতই সেরা সম্ভাব্য এনকোডিং এবং এটি বিকিরণের পরামিতি কী তা বিবেচনা করে না।

সম্ভাব্য উন্নতি

এই প্রোগ্রামের মূল অ্যাসিম্পোটিক অদক্ষতা হ'ল প্রশ্নের মধ্যে সীমাবদ্ধ ক্ষেত্র হিসাবে মডুলো-প্রাইম ব্যবহার করা। আকার 2 এন এর সীমাবদ্ধ ক্ষেত্রগুলি বিদ্যমান (যা আমরা এখানে যা চাই ঠিক তাই, কারণ ব্লকের পেডলোডের আকারগুলি স্বাভাবিকভাবেই 128 এর শক্তি)। দুর্ভাগ্যক্রমে, তারা একটি সাধারণ মডুলো নির্মাণের চেয়ে আরও জটিল, যার অর্থ ম্যাথ :: ModInt এটি কাটবে না (এবং অ-প্রাইম আকারের সীমাবদ্ধ ক্ষেত্রগুলি পরিচালনা করার জন্য আমি সিপিএএন-তে কোনও গ্রন্থাগার খুঁজে পাইনি); গণিত :: বহুত্ববৈজ্ঞানিকভাবে এটি পরিচালনা করতে সক্ষম হবার জন্য আমাকে একটি সম্পূর্ণ শ্রেণি লিখতে হবে এবং সেই সময়ে বাইট ব্যয়টি 16384 এর পরিবর্তে 16381 এর পরিবর্তে ব্যবহারের ফলে (খুব ছোট) ক্ষয়কে পরাস্ত করতে পারে।

পাওয়ার-অফ -2 মাপ ব্যবহার করার আরেকটি সুবিধা হ'ল বেস রূপান্তরটি আরও সহজ হয়ে উঠবে। তবে, উভয় ক্ষেত্রেই ইনপুটটির দৈর্ঘ্যের প্রতিনিধিত্ব করার একটি আরও ভাল পদ্ধতি কার্যকর হবে; "অস্পষ্ট ক্ষেত্রে 1 টি প্রিপেন্ড করুন" পদ্ধতিটি সহজ তবে অপচয়যোগ্য। বাইজিক বেস রূপান্তরটি এখানে একটি প্রশংসনীয় পদ্ধতির ধারণা (ধারণাটি হ'ল আপনার একটি সংখ্যা হিসাবে বেস রয়েছে, এবং 0 হিসাবে একটি সংখ্যা হিসাবে নয়, যাতে প্রতিটি সংখ্যা একক স্ট্রিংয়ের সাথে মিলে যায়)।

যদিও এই এনকোডিংয়ের অ্যাসিম্পটোটিক পারফরম্যান্স খুব ভাল (উদাহরণস্বরূপ 99 দৈর্ঘ্যের ইনপুট এবং 3 এর রেডিয়েশন প্যারামিটারের জন্য, এনকোডিংটি সর্বদা 128 বাইট দীর্ঘ হয়, 400 ডলার বাইট যা পুনরাবৃত্তিভিত্তিক পদ্ধতিগুলি পেতে পারে তার চেয়ে বেশি) সংক্ষিপ্ত ইনপুটগুলিতে কম ভাল; এনকোডিংয়ের দৈর্ঘ্য সর্বদা কমপক্ষে (বিকিরণ প্যারামিটার + 1) এর বর্গ হয়। 9 খুব রেডিয়েশনে খুব সংক্ষিপ্ত ইনপুটগুলির জন্য (দৈর্ঘ্য 1 থেকে 8) তবে আউটপুটটির দৈর্ঘ্য তবে 100 হয় (দৈর্ঘ্যে, আউটপুটটির দৈর্ঘ্য কখনও কখনও 100 এবং কখনও কখনও 110 হয়) পুনরাবৃত্তি-ভিত্তিক পদ্ধতিগুলি পরিষ্কারভাবে এই ক্ষয়কে পরাজিত করে খুব ছোট ইনপুটগুলিতে কোডিং-ভিত্তিক পদ্ধতি; এটি ইনপুট আকারের উপর ভিত্তি করে একাধিক অ্যালগরিদমের মধ্যে পরিবর্তনযোগ্য হতে পারে।

পরিশেষে, এটি আসলে স্কোরিংয়ে আসে না, তবে খুব উচ্চ বিকিরণ পরামিতিগুলির সাথে, প্রতিটি বাইট (আউটপুট আকারের)) কিছুটা ব্যবহার করে ব্লকগুলি সীমিত করতে ব্যর্থ হয়; পরিবর্তে ব্লকের মধ্যে ডিলিমিটারগুলি ব্যবহার করা সস্তা হবে। বিকল্প-এমএসবি পদ্ধতির চেয়ে বিস্ময়করদের থেকে ব্লকগুলি পুনর্গঠন করা আরও শক্ত, তবে আমি বিশ্বাস করি এটি সম্ভব হবে, কমপক্ষে যদি ডেটা যথেষ্ট দীর্ঘ হয় (সংক্ষিপ্ত ডেটা সহ, আউটপুট থেকে বিকিরণ প্যারামিটারটি নির্ধারণ করা কঠিন) । প্যারামিটার নির্বিশেষে কোনও asympotically আদর্শ দৃষ্টিভঙ্গির লক্ষ্যে লক্ষ্য করা যায় তবে এটি দেখার মতো কিছু হবে।

(এবং অবশ্যই, একটি সম্পূর্ণ আলাদা অ্যালগরিদম হতে পারে যা এর চেয়ে ভাল ফলাফল দেয়!)

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