সমস্যা বিবরণ
একটি স্ট্রিং এবং একটি শিফট নম্বর দেওয়া আছে। প্রতিটি অ্যালফাবেটকে শিফট만큼 আগে নেওয়া হবে (wraparound সহ)। নন-অ্যালফাবেট ক্যারেক্টার অপরিবর্তিত থাকবে।
সমাধান
const str = 'this is a str';
const encryptString = (str = '', num = 1) => {
const alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
str = str.toLowerCase();
let res = "";
for (let i = 0; i < str.length; i++) {
const letter = str[i];
if (alphabet.indexOf(letter) === -1) {
res += letter;
continue;
}
let index = alphabet.indexOf(letter) + num % 26;
if (index > 25) index -= 26;
if (index < 0) index += 26;
if (str[i] === str[i].toUpperCase()) {
res += alphabet[index].toUpperCase();
} else {
res += alphabet[index];
}
}
return res;
};
console.log(encryptString(str, 4)); // xlmw mw e wxv
আউটপুট
xlmw mw e wxv
ব্যাখ্যা
- সিজার সাইফার (Caesar Cipher) বেসিক এনক্রিপশন।
num % 26দিয়ে বড় শিফট হ্যান্ডেল করা হয়েছে।- কেস সংরক্ষণ করা হয়েছে (
toUpperCaseচেক করে)। - নন-অ্যালফাবেট (স্পেস, পাংচুয়েশন) অপরিবর্তিত থাকে।