একটা ফাংশন লিখতে হবে যার ইনপুট হিসাবে নন-এম্পটি লোয়ার কেস স্ট্রিং এবং একটা নন-নেগেটিভ ইন্টিজার দেয়া হবে। স্ট্রিং এর প্রতিটা অক্ষরকে বর্তমান পজিশন থেকে k পজিশনের অক্ষরে পরিবর্তন করে যে নতুন স্টিং পাওয়া যাবে তা রিটার্ন করতে হবে। এখানে k হচ্ছে ইনপুট হিসেবে নেয়া নন-নেগেটিভ ইন্টিজার।
মনে রাখা দরকার যে, এখানে অক্ষর এর পজিশন র্যাপ করতে হবে, মানে হচ্ছে z এর ১ ঘর শিফট হবে a
নমুনা Input<br/>
string = "xyz"
key = 2
নমুনা Output
"zab"
- ASCII Table: a (স্মল a) এর ASCII ভেলু 97 এবং z (স্মল z) এর ASCII ভেলু 122 - modulus (%): Divides the left hand operand by the right hand operand and returns remainder
@Slf4j
public class CaesarCipherEncryptor {
public static String caesarCypherEncryptor(String str, int key) {
int newKey = key % 26;
StringBuilder sb = new StringBuilder(str.length());
for(int i=0; i < str.length(); i++) {
int newChar = str.charAt(i) + newKey;
newChar = newChar > 122 ? 96 + (newChar % 122) : newChar;
sb.append((char) newChar);
}
return sb.toString();
}
@Test
public void TestCase1() {
Assertions.assertEquals("zab", caesarCypherEncryptor("xyz", 2));
}
}