পটভূমি
1870 সালে মাইল বাউডট বাউডট কোড আবিষ্কার করেছিলেন , টেলিগ্রাফির জন্য একটি নির্দিষ্ট দৈর্ঘ্যের অক্ষর এনকোডিং। তিনি কেবল পাঁচটি কী দিয়ে ম্যানুয়াল কীবোর্ড থেকে কোডটি প্রবেশের জন্য ডিজাইন করেছিলেন; দু'জন বাম হাতে এবং তিনটি ডানদিকে চালিত:
অধিকার সূচক, মধ্যম এবং রিং আঙ্গুলের চালনা আমি , দ্বিতীয় এবং
তৃতীয় , কি যথাক্রমে এবং বাম সূচক এবং মধ্যম আঙ্গুলের চালনা
চতুর্থ এবং Ⅴ । (এখন থেকে আমি তাদের পশ্চিমা আরবি সংখ্যাগুলি, অর্থাৎ 1 এর মধ্য দিয়ে 5 এর মধ্যে ব্যবহার করব
)) অক্ষরগুলি দুলা হিসাবে প্রবেশ করানো হয়। উদাহরণস্বরূপ, "সি" অক্ষরটি প্রবেশ করানোর জন্য অপারেটর 1 , 3 এবং 4 চাপবে presকীগুলি একই সাথে, তারপরে একটি ঘোরানো ব্রাশের বাহু প্রতিটি কী অনুক্রমের সাথে পড়ে এবং স্রোত প্রেরণ করে বা কীগুলি হতাশ নয়, কোনও বর্তমান নেই। ফলাফলটি, আধুনিক পরিভাষায়, একটি 5-বিট সর্বনিম্ন-তাত্পর্যপূর্ণ-বিট-প্রথম বাইনারি এনকোডিং, যাতে আমাদের উদাহরণ হিসাবে "সি," এনকোড করা হয় 10110
।
5 বিট ??
আপনি ভাবছেন যে 5 টি বিট, যা সর্বাধিক 32 টি অনন্য প্রতীক প্রকাশ করতে পারে, সমস্ত ইংরাজির অক্ষর এবং সংখ্যাগুলির পক্ষেও বিরামচিহ্নের কিছু বলতে পারে না। বাউডোটের হাতা আপ করার কৌশল ছিল, যদিও: তার চরিত্র সেটটি আসলে দুটি স্বতন্ত্র সেট: চিঠিপত্র এবং চিত্রসমূহ এবং
সেগুলির মধ্যে স্যুইচ করার জন্য তিনি দুটি বিশেষ কোড সংজ্ঞায়িত করেছেন।
লেটার শিফট , যা লেটার্স মোডে স্যুইচ করে, 5 টি একা ( 00001
) চাপ দিয়ে সক্রিয় করা হয় এবং চিত্র শিফটটি 4 কী ( 00010
) দিয়ে সক্রিয় করা হয়
।
চ্যালেঞ্জ
আপনার চ্যালেঞ্জটি এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা বাউডট কোড সংক্রমণকে ডিকোড করে।
একটি বাস্তব ট্রান্সমিশন কিছু সূচনা বিটের সাথে শুরু হবে, এবং প্রতিটি চরিত্রের আগে এবং পরে কিছুটা শুরু এবং স্টপ বিট, তবে আমরা সেগুলি এড়াতে যাচ্ছি এবং প্রতিটি চরিত্রের জন্য 5 টি স্বতন্ত্র বিট সম্পর্কে কেবল চিন্তা করব। ইনপুট এবং আউটপুট ফর্ম্যাটগুলি নীচে আলোচনা করা হয়েছে।
বাউডটের কোড
বাউডট কোডের দুটি ভিন্ন সংস্করণ রয়েছে: কন্টিনেন্টাল এবং ইউকে আমরা যুক্তরাজ্যের সংস্করণটি ব্যবহার করছি, যার মধ্যে বাউডোটের নেটিভ ফরাসী থেকে "É" এর মতো অক্ষর নেই । আমরা যুক্তরাজ্যের সংস্করণে সমস্ত চিহ্নগুলি ছাড়তে যাচ্ছি যা প্রিন্টযোগ্য এএসসিআইআই অক্ষরের মধ্যে নেই। আপনাকে কেবল নীচের টেবিলের অক্ষরগুলিই ডিকোড করতে হবে, এগুলি সমস্তই ছাপার যোগ্য ASCII অক্ষর যা চূড়ান্ত তিনটি নিয়ন্ত্রণ অক্ষর যা সারণীর নীচে ব্যাখ্যা করা হয়েছে except
"এলটিআর" কলাম লেটার মোডে অক্ষরগুলি দেখায় এবং "চিত্র" চিত্র চিত্র মোডের অক্ষরগুলি দেখায়:
Encoding Encoding
Ltr Fig 12345 Ltr Fig 12345
--- --- -------- --- --- --------
A 1 10000 P + 11111
B 8 00110 Q / 10111
C 9 10110 R - 00111
D 0 11110 S 00101
E 2 01000 T 10101
F 01110 U 4 10100
G 7 01010 V ' 11101
H 11010 W ? 01101
I 01100 X 01001
J 6 10010 Y 3 00100
K ( 10011 Z : 11001
L = 11011 - . 10001
M ) 01011 ER ER 00011
N 01111 FS SP 00010
O 5 11100 SP LS 00001
/ 11000
ডান কলামের শেষ তিনটি সারি হ'ল নিয়ন্ত্রণের অক্ষর:
ER
হয় ক্ষয় । বাউডোটের টেলিগ্রাফি মেশিনগুলি পাঠকের কাছে এই চরিত্রটির জন্য একটি নক্ষত্রের মতো প্রতীক প্রিন্ট করবে যে পূর্ববর্তী চরিত্রটি উপেক্ষা করা উচিত, তবে আমরা পাঠকের কাছে আরও সুন্দর হতে চলেছি এবং প্রকৃতপক্ষে পূর্ববর্তী অক্ষরটি বাদ দিয়ে (মুদ্রণ করব না) । এটি উভয় বর্ণ এবং চিত্র মোডে একই কাজ করে।FS
হয় চিত্র শিফট । এটি বর্ণগুলি থেকে চিত্রগুলিতে সেট করা অক্ষরটি স্যুইচ করে। যদি ডিকোডারটি ইতিমধ্যে চিত্র মোডে থাকে তবে এফএসকে একটি স্থান হিসাবে বিবেচনা করা হয় (SP
"Ltr" কলামের এর্গো)। যখন ডিকোডার চিত্র মোডে থাকে তখন এলএস অক্ষর না পাওয়া পর্যন্ত এটি চিত্র মোডে থাকে।LS
হ'ল লেটার শিফট । এটি ফিগার থেকে অক্ষরে অক্ষরের সেটটি স্যুইচ করে। ডিকোডারটি ইতিমধ্যে লেটার মোডে থাকলে, এলএসকে একটি স্থান হিসাবে বিবেচনা করা হবে । যখন লেটার মোডে ডিকোডার একটি এফএস অক্ষর না পাওয়া পর্যন্ত লেটার মোডে থাকে।
ডিকোডার সর্বদা লেটার মোডে শুরু হয়।
চিত্র চিত্র, শিফট শিফট এবং স্পেস সহ এখানে একটি উদাহরণ রয়েছে:
01011 10000 00100 00001 00010 10000 11100 00001 10101 11010
M A Y LS/SP FS/SP 1 5 LS/SP T H
এটি বার্তা দেয় MAY 15TH
। আপনি দেখতে পাচ্ছেন, প্রথম 00001
(লেটার শিফট / স্পেস) অক্ষরটি একটি স্থান হিসাবে কাজ করে, কারণ ডিকোডার ইতিমধ্যে লেটার মোডে রয়েছে। পরবর্তী অক্ষর, 00010
(চিত্র শিফট / স্পেস) ডিকোডারটি মুদ্রণের জন্য চিত্র মোডে স্যুইচ করে 15
। তারপরে 00001
আবার উপস্থিত হয় তবে এবার ডিকোডারটি লেটার মোডে ফিরিয়ে আনার জন্য এটি লেটার শিফট হিসাবে কাজ করে।
আপনার সুবিধার জন্য, এখানে এমন বিন্যাসে অক্ষর রয়েছে যা সম্ভবত সম্পাদকের হজম করা সহজ, কোড অনুসারে সাজানো:
A,1,10000|E,2,01000|/,,11000|Y,3,00100|U,4,10100|I,,01100|O,5,11100|FS,SP,00010|J,6,10010|G,7,01010|H,,11010|B,8,00110|C,9,10110|F,,01110|D,0,11110|SP,LS,00001|-,.,10001|X,,01001|Z,:,11001|S,,00101|T,,10101|W,?,01101|V,',11101|ER,ER,00011|K,(,10011|M,),01011|L,=,11011|R,-,00111|Q,/,10111|N,,01111|P,+,11111
ইনপুট
ইনপুটটি স্ট্রিং, অ্যারে বা বিটের তালিকা হবে কমপক্ষে-উল্লেখযোগ্য-বিট-প্রথম ক্রমে। প্রতিটি অক্ষর 5 বিট একটি পঞ্চক দ্বারা প্রতিনিধিত্ব করা হবে। বিটগুলি যে কোনও যুক্তিসঙ্গত বিন্যাসে হতে পারে, যেমন বাইনারি স্ট্রিং, 0
এস এবং 1
এসগুলির একটি অ্যারে , একটি স্ট্রিং "0"
এবং "1"
অক্ষর, একটি একক খুব বড় সংখ্যক, ইত্যাদি যতক্ষণ না এটি সরাসরি সংক্রমণের বিটগুলিতে ম্যাপ করে।
প্রতিটি সংক্রমণে কমপক্ষে একটি মুদ্রণযোগ্য পঞ্চক এবং সর্বাধিক 255 পঞ্চম (মুদ্রণযোগ্য বা অন্যথায়) থাকবে, অর্থাত্ 5-11,275 বিট অন্তর্ভুক্ত।
ইনপুট ধারণ করতে পারে শুধুমাত্র ট্রান্সমিশন বিট, দুই অনুমতি ব্যতিক্রমসহ: বিশিষ্ট বা লম্বা যেকোনো সংখ্যক 0
বিট এবং / অথবা, স্ট্রিং ইনপুট জন্য, একটি একক চিহ্ন সম্পর্কে newline সংক্রমণ যোগ করা যেতে পারে। নেতৃস্থানীয় বা পিছনের বিট বা অক্ষর প্রতিটি পঞ্চাঙ্কের আগে বা পরে যুক্ত করা যায় না , অর্থাত আপনি প্রতিটি পঞ্চককে আট বিটে প্যাড করতে পারবেন না (বা প্রতিটি পঞ্চককে একটি অ্যারেতে একক সংখ্যা হিসাবে নিতে পারবেন - যদি না আপনার ভাষায় 5-বিট পূর্ণসংখ্যার টাইপ থাকে) বা পৃথক কোন অতিরিক্ত বিট, যেমন সঙ্গে quintets "01111\n11100"
।
নোট এবং প্রান্তের কেস
সংক্রমণে উপরের সারণীতে "Ltr" এবং "চিত্র" কলামগুলির মধ্যে কেবল অক্ষর থাকবে। আপনি কখনই উদাহরণস্বরূপ
01110
মোডে পাবেন না কারণ এটি "চিত্র" কলাম থেকে অনুপস্থিত।ধারণা করা হয় যে সংক্রমণ শুরু হওয়ার সময় ডিকোডার সর্বদা লেটার মোডে থাকবে। তবে চিত্রের মোডে তত্ক্ষণাত পরিবর্তন করতে প্রথম অক্ষরটি কোনও এফএস অক্ষর হতে পারে।
ডিকোডারটি যখন লেটার মোডে থাকে তখন এটি একটি এলএস অক্ষর পেতে পারে এবং যখন এটি চিত্র মোডে থাকে এটি কোনও এফএস অক্ষর পেতে পারে। উভয় ইভেন্টে একটি স্পেস অক্ষর মুদ্রিত করতে হবে (আউটপুট দেখুন)।
ER অক্ষর কখনই সংক্রমণে প্রথম চরিত্র হতে পারে না বা এটি তাত্ক্ষণিকভাবে কোনও এলএস, এফএস বা অন্য কোনও ER অনুসরণ করবে না।
একটি এফএস অক্ষর অবিলম্বে একটি এলএস অক্ষর এবং তদ্বিপরীত অনুসরণ করতে পারে।
এলএস বা এফএস চরিত্র দুটিই কোনও সংক্রমণে শেষ চরিত্র হবে না।
/
এবং-
অক্ষর পারেন পত্র মোড (কোডগুলি গৃহীত হতে পারে11000
এবং10001
যথাক্রমে) অথবা চিত্র মোড (10111
এবং00111
)।
আউটপুট
আউটপুট যে কোনও যুক্তিসঙ্গত বিন্যাসে হতে পারে, সবচেয়ে যুক্তিসঙ্গত হচ্ছে ASCII (বা ইউটিএফ -8, যার জন্য উপস্থাপিত সমস্ত অক্ষর ASCII এর মতো)। আপনার আউটপুট অন্য কোনও এনকোডিং বা ফর্ম্যাটে থাকলে দয়া করে আপনার উত্তরে নির্দেশ করুন।
নোট
- স্পেস ক্যারেক্টার (উপরে 3. দেখুন) একটি ASCII স্পেস (0x20) বা আপনার এনকোডিং এর সমতুল্য হওয়া উচিত, অর্থাত্ স্পেস বারটি চাপলে আপনি কী পাবেন।
জয়লাভ
এটি কোড-গল্ফ । বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।
বিধিনিষেধ
স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
ট্রেলিং স্পেস এবং / অথবা একটি একক চলন্ত নতুন লাইন অনুমোদিত। শীর্ষস্থানীয় স্থান বা অন্যান্য অক্ষর (যা সংক্রমণের অংশ নয়) অনুমোদিত নয়।
আপনি কোনও বিল্ট-ইন বা লাইব্রেরি ফাংশন ব্যবহার করতে পারবেন না যা বাউডট কোডটি ডিকোড করে (বা এর বংশধরগুলির কোনও, যেমন মারে কোড, আইটিএ -১, ইত্যাদি)।
পরীক্ষার মামলা
Input: 001101000010100111101110010101
Output: BAUDOT
Input: 11010010001001100011110111101111100
Output: HELLO
Input: 01011100000010000001000101000011100000011010111010
Output: MAY 15TH
Input: 0001000100010000001000001011101110011100101010010110101010001111100101
Output: 32 FOOTSTEPS
Input: 10110000110101011100111100001111011010000001101110
Output: GOLF
Input: 000100011000001111100000100010110111001100010110010000111111
Output: 8D =( :P
Input: 0000100001000010000100010001111011111011000011100010001
Output (4 leading spaces): -/=/-
00010
তালিকাভুক্ত করা SP
হয় FS
। বিবরণ অনুসারে, যদি আমরা লেটার মোডে থাকি এবং আমরা কোড 00010
পাই তবে আমাদের ফিগার মোডে স্থানান্তরিত হওয়া উচিত, তবে টেবিলের মানগুলি অন্য উপায়ে মনে হয়। এছাড়াও, তদ্বিপরীত জন্য 00001
।