ম্যানচেস্টার কোডিং এমন একটি টেলিকম প্রোটোকল যা রেডিও যোগাযোগগুলিতে ব্যবহৃত হয় যা নিয়মিত বিরতিতে বিট ট্রানজিশনের গ্যারান্টি দেয় যাতে কোনও রিসিভার ডেটা থেকে ঘড়ির হার পুনরুদ্ধার করতে পারে। এটি বিটরেট দ্বিগুণ হয় তবে এটি কার্যকর এবং কার্যকর কার্যকর। এটি অপেশাদার রেডিও অপারেটরগুলি দ্বারা ব্যাপকভাবে ব্যবহৃত হয়।
ধারণাটি খুব সহজ: একটি হার্ডওয়্যার স্তরে, ঘড়ি এবং ডেটা লাইনগুলি কেবল একসাথে XORed হয়। সফ্টওয়্যারটিতে, এটি বিটগুলির ইনপুট প্রবাহকে ডাবল-রেট আউটপুট প্রবাহে রূপান্তর হিসাবে চিত্রিত করা হয়, প্রতিটি ইনপুট '1' কে '01' তে অনুবাদ করা হয় এবং প্রতিটি ইনপুট '0' '10' তে অনুবাদ করা হয়।
এটি একটি সহজ সমস্যা তবে এর বিটস্ট্রিম প্রকৃতির কারণে এটি প্রচুর বাস্তবায়নের জন্য উন্মুক্ত। অর্থাৎ এনকোডিংটি বাইট-বাই-বাইট প্রক্রিয়াটির পরিবর্তে ধারণাগতভাবে কিছুটা বাই-বিট প্রক্রিয়া। সুতরাং আমরা সকলেই এডিয়েননেসে একমত, ইনপুটটির কমপক্ষে উল্লেখযোগ্য বিটগুলি আউটপুটটির সর্বনিম্ন উল্লেখযোগ্য বাইট হয়ে যায়।
গল্ফিংয়ের সময়! একটি ফাংশন লিখুন যা বাইটগুলির একটি স্বেচ্ছাসেবী দৈর্ঘ্যের অ্যারে দেওয়া, ম্যানচেস্টার এনকোড করা সেই ডেটার একটি অ্যারে প্রদান করে।
ইনপুট এবং আউটপুটটিকে ছোট-এন্ডিয়ান হিসাবে বিবেচনা করা উচিত, প্রথমে কমপক্ষে উল্লেখযোগ্য বাইট এবং বিট স্ট্রিমের মধ্যে প্রথমে কমপক্ষে উল্লেখযোগ্য বিআইটি।
ASCII বিটস্ট্রিম অঙ্কন :
bit # 5 4 3 2 1 0 5 4 3 2 1 0
IN ------- 1 0 1 0 1 1 ---> [manchester encoder] --- 01 10 01 10 01 01 ----> OUT
উদাহরণ :
Example 1 (hex):
LSB MSB <-- least sig BYTE first
IN : [0x10, 0x02]
OUT: [0xAA, 0xA9, 0xA6, 0xAA]
Example 1 (binary):
msb lsb msb lsb <-- translated hex, so msb first
BIN: [00010000, 00000010] <-- least sig NIBBLE...
BIN: [10101010, 10101001, 10100110, 10101010] <-- becomes least sig BYTE
LSB MSB
Example 2
IN : [0xFF, 0x00, 0xAA, 0x55]
OUT: [0x55, 0x55, 0xAA, 0xAA, 0x66, 0x66, 0x99, 0x99]
Example 3
IN : [0x12, 0x34, 0x56, 0x78, 0x90]
OUT: [0xA6, 0xA9, 0x9A, 0xA5, 0x96, 0x99, 0x6A, 0x95, 0xAA, 0x69]
Example 4
IN : [0x01, 0x02, 0x03, 0xF1, 0xF2, 0xF3]
OUT: [0xA9, 0xAA, 0xA6, 0xAA, 0xA5, 0xAA, 0xA9, 0x55, 0xA6, 0x55, 0xA5, 0x55]
বিধি :
- সমাধানের জন্য আউটপুটকে ইনপুট রূপান্তর করতে শুধুমাত্র অ্যালগরিদম প্রয়োজন।
- ইনপুট এবং মুদ্রণ আউটপুট অর্জন সমাধানের প্রয়োজনীয় অংশ নয়, তবে এটি অন্তর্ভুক্ত থাকতে পারে। আপনার সমাধানটিতে অন্তর্ভুক্ত না করা থাকলে আপনি আপনার পরীক্ষা / প্রিন্ট কোড সরবরাহ করতে উত্সাহিত হন।
- ইনপুটটি 8-বিট বাইটের একটি অ্যারে (আপনার পছন্দের ভাষায় যা কিছু বোঝাতে পারে), কোনও পাঠ্য স্ট্রিং নয়। আপনার ভাষায় সুবিধাজনক হলে আপনি স্ট্রিং ফর্ম্যাট হিসাবে স্ট্রিং ব্যবহার করতে পারেন তবে মুদ্রণযোগ্য অক্ষরগুলি (অর্থাত্ 0xFF) সমর্থন করা আবশ্যক। প্রয়োজনে ইনপুটও একটি দৈর্ঘ্য নিতে পারে।
আউটপুট জন্য মেমরি আপনার রুটিন দ্বারা বরাদ্দ করা আবশ্যক, সরবরাহ করা হয় না।সম্পাদনা: অপ্রয়োজনীয় প্রয়োজন- আউটপুট 8-বিট বাইটের একটি অ্যারে এবং প্রয়োজনে দৈর্ঘ্যও।
- কমপক্ষে 16 কেবি ইনপুট সমর্থন করা উচিত
- পারফরম্যান্স খুব ভয়ঙ্কর হওয়া উচিত নয়: <16sB এর জন্য 10 গুলি
- সর্বনিম্ন-উল্লেখযোগ্য বাইট মেমরিতে প্রথম।
পার্শ্ব-চ্যানেল চ্যালেঞ্জ :
- আপনার কোডটি দ্রুত, আরও মেমরি দক্ষ, বা একটি ছোট বাইনারি উত্পাদন করে অন্য ব্যবহারকারীর জবাব চ্যালেঞ্জ করুন!