সমস্ত স্থানীয়করণ এবং স্ট্রিং ধরণের জন্য কাজ করে এমন একটি সাধারণ স্ট্রিং রিভার্স ফাংশন লিখতে কি সম্ভব?


16

আমি কেবল ডে-ডে থেকে জোন স্কিট (টনি দ্য টোনি) উপস্থাপনাটি দেখছিলাম

যদিও "স্ট্রিং রিভার্স ফাংশন লিখুন" ইন্টারভিউ 101 কোডিং করছে - আমি নিশ্চিত নই যে এটি একটি সাধারণ স্ট্রিং রিভার্স ফাংশন লিখতে আসলেই সম্ভব, এটি অবশ্যই সমস্ত স্থানীয়করণ এবং সমস্ত স্ট্রিংয়ের ধরণের কাজ করে না।

ইনপুট স্ট্রিংটি ascii, UTF8, UTF16 (স্থির এবং ভেরিয়েবল দৈর্ঘ্য) ইত্যাদি
রয়েছে কিনা তা সনাক্ত করা ছাড়াও সেখানে 'পরবর্তী অক্ষরটিতে উচ্চারণ প্রয়োগ করুন' (ইউ + 0301) কোডটি জন হাইলাইট করেছে। তারপরে এমন লিগাচার রয়েছে যা প্রদর্শিত বা নাও প্রদর্শিত হতে পারে বা ডাবল অক্ষর হিসাবে এনকোডেড রয়েছে।

দেখে মনে হচ্ছে যে "রিভার্স আং স্ট্রিং" আসলে কম্পিউটার কম্পিউটারের একটি শক্ত কাজ!


নাহ, অসুবিধাতে এক ধাপ উপরে হলেও লোকেদের কাছে সহজ ব্যাখ্যা করার জন্য কিছু থামার সমস্যাটি চেষ্টা করুন।
জেবি কিং

অযৌক্তিক, প্রযুক্তিগত প্রশ্ন হওয়ায় আমি স্ট্যাকওভারফ্লোতে এটি আরও ভাল ফিট করার কথা বলার উদ্যোগ নিয়েছিলাম (দয়া করে এটি পুনরায় পোস্ট করবেন না, যথেষ্ট লোকেরা যদি এটি বন্ধ করার জন্য ভোট দেয় তবে এটি স্বায়ত্তশাসিত হবে)।
প্যাটার তারেক

1
প্রোগ্রামিং ভাষার উপর নির্ভর করে। উদাহরণস্বরূপ রুবিতে এটি এতটা সহজ "stressed".reverse: পি
মার্সেলো

দুর্দান্ত দার্শনিক প্রশ্ন। এফডব্লিউআইডাব্লু, জাভার স্ট্রিং বিল্ডার সার্গেটস পেয়েছে ঠিকই তবে
কম্বিনার

2
"জাভা ব্যবহার করে এই স্ট্রিংটি বিপরীত করুন" একটি ভাল কৌশল is :)
স্কট সি উইলসন

উত্তর:


5

হ্যাঁ. যদি আমরা একটি স্ট্রিং পাই আমরা অবশ্যই প্রতিটি অক্ষর অবশ্যই বিপরীত করতে পারি।

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

আপনি যদি সি # তে যে কোনও ধরণের স্ট্রিং ম্যানিপুলেশন করে থাকেন লেখার সময় এবং পড়ার সময় ইনভেরিয়েন্ট সংস্কৃতি ব্যবহার করুন, সেইভাবে আপনি সেগুলি নিরাপদে ম্যানিপুলেট করতে পারেন। অন্যথায়, তুর্কি সমর্থন কল ব্যর্থতার জন্য প্রস্তুত।

টুপার () দেখতে এত নির্দোষ দেখাচ্ছে, তবে এটি ঘটার অপেক্ষায় এটি একটি মহাকাব্য fail


2
অন্য প্রশ্নটি হ'ল - কেউ কি কখনও স্ট্রিং রিভার্স (ইন্টারভিউ Q বাদে) জন্য ব্যবহার করে? আই / ও বন্দরগুলির নিম্ন স্তরের বাফার হেরফেরের জন্য আমার কেবল এটির প্রয়োজন ছিল - এবং তারপরেও প্রায় কখনও স্ট্রিং দিয়ে আসে না
মার্টিন বেকেট

@ মার্টিন - একমত কোনও ইংরেজি ভাষার প্রোগ্রামের জন্য প্যালিড্রোমগুলি খুঁজে পেতে পারে? আমি মনে করি না যে আমি এটি একটি কুইজ প্রশ্ন সমাধানের চেয়ে অন্যটি ব্যবহার করেছি।
জন রায়নার

@ মার্টিন সত্য আমি মনে করি এটি কেবল কৌতুকপূর্ণভাবে সম্পন্ন হয়েছে। :)
স্কট সি উইলসন

2

সাধারণভাবে, যখন এই প্রশ্নটি জিজ্ঞাসা করা হয় এটি মার্কিন-এএসসিআইআই অনুমান করে। পয়েন্টটি ইউনিকোড সম্পর্কে ব্যক্তির জ্ঞান পরীক্ষা করার জন্য এতটা নয় (যদিও এটি একটি আকর্ষণীয় অনুসরণ হবে), পয়েন্টারগুলি কীভাবে কাজ করে তা তারা বুঝতে পারে কিনা তা দেখার জন্য। অবাক করা সংখ্যক লোক এই ধরণের পয়েন্টার গাণিতিক করতে পারে না।


2
"এটি কীভাবে ইউনিকোড দিয়ে ব্যর্থ হবে?" একটি ভাল ফলো-আপ প্রশ্ন
মার্টিন বেকেট

ভাল তবে সম্ভবত কিছুটা উন্নত - সর্বোপরি, "এই স্ট্রিংটি ঠিক জায়গায় রেখে দিন" এটি একটি এন্ট্রি স্তরের সাক্ষাত্কারের প্রশ্ন। আপনি সম্ভবত একটি পাকা ব্যক্তিকে এই সাধারণ কিছু জিজ্ঞাসা করবেন না, যদি না তারা খুব লাজুক হয় এবং আপনি তাদের উত্তপ্ত করার চেষ্টা না করতেন।
স্কট সি উইলসন

1

একটি সাক্ষাত্কারের প্রশ্ন হিসাবে, সাধারণত তাদের ক্রমটি বিপরীত করতে 8-বিট আইটেমগুলির ইন-প্লেস আইটেমের ইন-প্লেস সোয়াপ করার প্রযুক্তিগত বিট সম্পর্কে জিজ্ঞাসা করা হয় (সেগুলি আসলে কী চরিত্রগুলি উপস্থাপন করতে পারে তা নির্বিশেষে)।

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

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

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

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

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

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

আপনি আগের পদক্ষেপে তৈরি সূচকটি ব্যবহার করে those সম্পূর্ণ অক্ষরের ক্রমটি বিপরীত।

তারপরে আপনি (আবারও, বিকল্পভাবে) আরেকটি ইউনিকোড নরমালাইজেশন প্রক্রিয়া প্রয়োগ করুন, যেমন এনএফডি (ক্যানোনিকাল পচন)। এটি উল্লিখিত "তীব্র সহ ল্যাটিন এ" কে দুটি কোড পয়েন্টে ফিরিয়ে দেবে - একটি "লাতিন রাজধানী এ" এবং "সংশ্লেষ তীব্র"। আপনার ইনপুটটিতে যদি শুরু হয় যে কোনও U + 00C1 রয়েছে তবে এটি এটিকে দুটি কোড পয়েন্টেও রূপান্তর করতে পারে।

তারপরে আপনি ইউসিএস -4 কোড পয়েন্টগুলির ক্রমকে পছন্দসই এনকোডিংয়ের (এনটিএফ -8, ইউটিএফ -16 ইত্যাদি) এনকোড করুন

নোট করুন যে ইউনিকোডের নরমালাইজেশন পদক্ষেপগুলি স্ট্রিংটি সংরক্ষণ করার জন্য প্রয়োজনীয় কোড পয়েন্টগুলির সংখ্যা পরিবর্তন করতে পারে / করতে পারে, সুতরাং আপনি যদি সেগুলি অন্তর্ভুক্ত করেন তবে আপনি আর ফলস স্ট্রিংয়ের মূল স্টোরেজে ফিটিংয়ের পরিকল্পনা করতে পারবেন না। স্পষ্টতই যথেষ্ট, ফলাফল কোড পয়েন্টগুলি সরাসরি ইনপুট কোড পয়েন্টের সাথে সামঞ্জস্য করতে পারে না।


জোন এটির সামনে আনার আগে আমি ইউ + 301 পেরিয়ে আসিনি। সমস্ত উচ্চারণযুক্ত চরিত্রগুলির জন্য গ্লিফগুলি সহ ইউনিকোডে কেন এটি প্রয়োজন তা আমি দেখতে পাচ্ছি না - আমি ধারণা করি এটি পিছনের সামঞ্জস্যতা
মার্টিন বেকেট

@ মার্টিন: ডায়রিটিক্সের সম্মিলিত সংখ্যক সংখ্যক প্রকৃতপক্ষে রয়েছে (U + 0300 থেকে U + 036F পর্যন্ত পুরো পরিসীমা, যদিও U + 0363 থেকে U + 036F পর্যন্ত সর্বোপরি অপ্রচলিত)। প্রাক্পম্পোজ করা অক্ষরগুলি বেশ কয়েকটি সাধারণ সম্ভাবনার জন্য প্রদান করা হয় এবং প্রয়োজনীয় যে কোনও কিছুর জন্য ডায়াক্রিটিক্সকে একত্রিত করা হয়।
জেরি কফিন

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