Soru
Programcıdan 26 harfli ingiliz alfabesini ve büyük-küçük harfleri de baz alarak, normal bir metni ROT13 şifrelemesi ile şifreyen bir program yazması isteniyor.
ROT13 basit bir harf değiştirme şifrelemesidir. Sezar şifrelemesine benzeyen bu şifreme ile, mevcut kelimedeki harfler, kendilerinden sonraki 13 harf sonrası ile değiştirilir. Eğer şifrelenememiş metindeki harf(ler) sonlara doğru ise (Örn. Y) gene 13 harf ilerleme yapılarak listenin başından ilerleme yapılır (Örn. Z harfi 1 sayılır ve alfabenin başından 12 harf ilerlenir).
Örnek
Girdi | Çıktı |
---|---|
Mesaj: abcd | Sonuç: nopq |
Mesaj: Test Yazisi | Sonuç: arfg fnmvfv |
Çözüm - C#
using System;
class Program
{
static void Main(string[] args)
{
string mesaj = "abcd", sonuc = null;
char[] karakterler = mesaj.ToCharArray();
// Mesajdaki her bir değer için işlem yap
foreach (var karakter in karakterler)
{
// Eğer karakter bir harf değilse, mesajı iade et
char bitisKarakteri;
if (char.IsLetter(karakter) == false)
{
bitisKarakteri = karakter;
}
else
{
// Mevcut karakterin sırasından 13 sıra çıkart
bitisKarakteri = (char) (karakter - 13);
char altLimit;
char ustLimit;
// Karakter küçük ya da büyük ise alt-üst sınır belirle
if (char.IsLower(karakter))
{
altLimit = 'a';
ustLimit = 'z';
}
else
{
altLimit = 'A';
ustLimit = 'Z';
}
// Bitiş karakterine göre ingiliz alfabedesindeki toplam sayı kadar (26) ekleme çıkarma yap
if (bitisKarakteri > ustLimit)
bitisKarakteri = (char) (bitisKarakteri - 26);
else if (bitisKarakteri < altLimit)
bitisKarakteri = (char) (bitisKarakteri + 26);
}
sonuc += bitisKarakteri;
}
Console.WriteLine(sonuc);
Console.Read();
}
}
Çözüm - Java
public class Main {
public static void main(String[] args) {
String mesaj = "Test Yazisi", sonuc = "";
char[] karakterler = mesaj.toCharArray();
// Mesajdaki her bir değer için işlem yap
for (char karakter : karakterler)
{
// Eğer karakter bir harf değilse, mesajı iade et
char bitisKarakteri;
if (!Character.isLetter(karakter))
{
bitisKarakteri = karakter;
}
else
{
// Mevcut karakterin sırasından 13 sıra çıkart
bitisKarakteri = (char) (karakter - 13);
char altLimit;
char ustLimit;
// Karakter küçük ya da büyük ise alt-üst sınır belirle
if (Character.isLetter(karakter))
{
altLimit = 'a';
ustLimit = 'z';
}
else
{
altLimit = 'A';
ustLimit = 'Z';
}
// Bitiş karakterine göre ingiliz alfabedesindeki toplam sayı kadar (26) ekleme çıkarma yap
if (bitisKarakteri > ustLimit)
bitisKarakteri = (char) (bitisKarakteri - 26);
else if (bitisKarakteri < altLimit)
bitisKarakteri = (char) (bitisKarakteri + 26);
}
sonuc += bitisKarakteri;
}
System.out.println(sonuc);
}
}