গল্ফিং স্ট্রিংস


22

আমি চ্যালেঞ্জগুলির জন্য একটি উত্তর দিতে সর্বদা ব্যর্থ যার জন্য স্ট্রিং সংকোচনের প্রয়োজন, যার মূল কারণটি আমি স্ট্রিং সংকোচনের সরঞ্জামগুলি যতটা কার্যকরভাবে ব্যবহার করা উচিত তা আমি জানি না ।

এই কারণে, আমি এই প্রশ্ন পোস্ট করেছি। আমার অন্যান্য টিপসের প্রশ্নের বিপরীতে, এটি ভাষা নির্দিষ্ট অর্থ নয় যে আপনি যদি নিজের ভাষায় কোনও টিপস সম্পর্কে ভাবতে পারেন তবে আপনি এটি পোস্ট করতে পারেন (আপনি যে ভাষা নির্দিষ্ট করেছেন তা সরবরাহ করে)। সাধারণ টিপস এছাড়াও প্রশংসা করা হয়।

সুতরাং, আমি তাদের সর্বোচ্চ কার্যকারিতাটিতে স্ট্রিং সংক্ষেপণ সরঞ্জামগুলি কীভাবে ব্যবহার করতে পারি?

উত্তর:


9

বেস রূপান্তর (সিজেএম)

নাল বাইট দিয়ে শুরু না হওয়া এএসসিআইআই স্ট্রিংগুলি এনকোড করার একটি সহজ উপায় হ'ল বেস 128 থেকে পূর্ণসংখ্যায় রূপান্তর করা, তারপরে ভিত্তি 256:

128b256b:c              e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.

এটি প্রতিটি ASCII অক্ষর এনকোড করতে 7 টি বিট ব্যবহার করে।

মূল পংক্তি শুধুমাত্র, যেমন, ছোট হাতের অক্ষর গঠিত, এবং একটি সাথে কোন কখন শুরু হবে তা যদি একটি , আমরা ম্যাপিং দ্বারা শুরু করতে পারেন "a...z"থেকে [0 ... 25], তারপর উপরে যেমন এগিয়ে:

'afm26b256b:c               e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.

শেষ অবধি, যদি মূল স্ট্রিংটিতে কয়েকটি কয়েকটি স্বতন্ত্র অক্ষর থাকে (ASCII শিল্পে প্রচলিত হয়) তবে বর্ণমালাটি স্পষ্টভাবে উল্লেখ করা ভাল।

উদাহরণ স্বরূপ:

" +-/\|"f#6b256b:c                       e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.

থাম্বের নিয়ম হিসাবে, আপনি মূল স্ট্রিংয়ের প্রথম অক্ষরটি বর্ণমালার দ্বিতীয় অক্ষর হতে চান, মূল স্ট্রিংয়ের পরবর্তী স্বতন্ত্র অক্ষর বর্ণমালার প্রথম অক্ষর হতে হবে, মূল স্ট্রিংয়ের পরবর্তী স্বতন্ত্র অক্ষর হতে হবে বর্ণমালার তৃতীয় অক্ষর, মূল স্ট্রিংয়ের পরবর্তী স্বতন্ত্র অক্ষর বর্ণমালার চতুর্থ চরিত্র ইত্যাদি হতে হবে etc.

সর্বশেষ উদাহরণের এনকোডারটি নিম্নরূপে কাজ করে:

" +-/\|"f# e# Replace each character by its index in that string.
6b256b     e# Convert from base 6 (length of the alphabet) to base 256.
:c         e# Cast each digit to character.

সর্বশেষ উদাহরণের ডিকোডারটি নিম্নলিখিত হিসাবে কাজ করে:

256b6b     e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.

2
আমি আরও নির্দিষ্ট করে বলব: থাম্বের নিয়ম হিসাবে আপনি চান মূল স্ট্রিংয়ের প্রথম অক্ষর বর্ণমালার দ্বিতীয় চরিত্র হতে হবে, মূল স্ট্রিংয়ের পরবর্তী স্বতন্ত্র অক্ষর বর্ণমালার প্রথম চরিত্র হতে হবে, ...
পিটার টেলর

পছন্দ করেছেন ধন্যবাদ!
ডেনিস

9

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

আমি আসলে একটি জাভা প্রোগ্রাম লিখেছি যা বিভিন্ন পদ্ধতির প্রয়োগ করে:

বেশিরভাগ পন্থা দুটি-পর্যায়ের প্রক্রিয়া অনুসরণ করে। প্রথম পর্যায়ে স্ট্রিংটি ব্যাকরণে রূপান্তরিত হয় যা এটি উত্পন্ন করে; দ্বিতীয় পর্যায়ে ব্যাকরণটি গল্ফস্ক্রিপ্ট প্রোগ্রামে রূপান্তরিত হয়। প্রথম পর্যায়ের বাস্তবায়নগুলি মূলত চরিকার, লেহমান, লিউ, প্যানগ্রাহী, প্রভাকরণ, সাহাই, এবং শেলট (2005) এর মধ্যে ক্ষুদ্রতম ব্যাকরণ সমস্যা , তথ্য তত্ত্ব, আইইইই লেনদেনের উপর, 51 (7), 2554-2576।

এটিতে একটি লেম্পেল-জিভ অ্যাপ্রোচ, একটি বেস এনকোডিং অ্যাপ্রোচ এবং একটি রানলেথ-এনকোডিং পদ্ধতির অন্তর্ভুক্ত রয়েছে এবং সংক্ষিপ্ততম প্রোগ্রামটি দেয় এমনটিকে চিহ্নিত করে।


0

Stax

ইন Stax কোড golfing ভাষা, সেখানে একটি সহায়ক সামান্য নামক হাতিয়ার স্ট্রিং আক্ষরিক সংকোচকারী । আমি জানি না এটি ঠিক কীভাবে কাজ করে তবে আমি জানি না এটি কীভাবে কাজ করে। এটি স্ট্রিংগুলিকে সংখ্যায় এবং পরে বেস 256 এ রূপান্তর করে It's এটি সিপি 437 , 0x00 এবং 0xFF অনুলিপি করার জন্য রূপান্তরিত। এটি প্যাকডস্ট্যাক্স। আপনি আপনার স্ট্রিংগুলিকে স্ট্রিং আক্ষরিক সংক্ষেপণে রূপান্তর করতে পারেন তারপরে এটি প্যাক করুন, কিছু ভাল সংক্ষেপণের জন্য।

এই প্রক্রিয়াটি ব্যবহার করে "এই স্ট্রিংটি বত্রিশটি বাইট" কে ভি * "এ] - | ডাব্লু 4]" 3 "% এ রূপান্তরিত করা যেতে পারে (স্ট্রাক্সের একটি সাধারণ স্ট্রিংয়ের মধ্যে পার্থক্য বলতে সংক্ষেপিত স্ট্রিংটি সাধারণত ব্যাকটিক্স দ্বারা বেষ্টিত থাকে) ) এবং অবশেষে tov to! [JqJu ← 18 একটি সংকোচনের জন্য / 18 বাইট হ্রাস, অর্ধেকেরও বেশি।

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