Umut D.

Umut D.

Powered by Jekyll & Github

  • Coding-Challenges

  • 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);
        }
    }