Morse-Latin Alfabe Dönüştürücü

Lütfen dönüştürülecek yazıyı giriniz.

Latin -> Morse
Morse -> Latin

Girdi:
Çıktı:

📚 Algoritma Nasıl Çalışıyor?

Morse Kodu Nedir?

Morse kodu, metni nokta (.) ve tire (-) kombinasyonlarıyla temsil eden bir kodlama sistemidir. Her harf ve rakamın kendine özgü bir Morse kodu vardır.

1. Dictionary (Sözlük) Yapısı

Karakterleri Morse koduna çevirmek için bir sözlük (object) kullanılır:

const dict = {
  'A': '.-',    'B': '-...',  'C': '-.-.',
  'D': '-..',   'E': '.',     'F': '..-.',
  'G': '--.',   'H': '....',  'I': '..',
  // ... diğer karakterler
  ' ': '/'      // Boşluk karakteri
};

// Kullanım:
dict['A']  // '.-'
dict['E']  // '.' (en kısa kod)
dict[' ']  // '/' (boşluk)

2. Latin → Morse Dönüşümü

Algoritma: Her karakteri tek tek oku, sözlükte ara, Morse koduna çevir

function latinToMorse(text) {
  let morseText = '';
  
  // Her karakteri büyük harfe çevir (büyük/küçük harf duyarsız)
  text = text.toUpperCase();
  
  // Her karakteri işle
  for (let i = 0; i < text.length; i++) {
    const char = text[i];
    const morseCode = dict[char];
    
    // Eğer sözlükte yoksa, 'X' kullan
    if (morseCode === undefined) {
      morseCode = 'X';
    }
    
    morseText += morseCode;
    morseText += ' ';  // Karakterler arası boşluk
  }
  
  return morseText.trim();
}

Örnek:

// "HELLO" → Morse
// H → '....'
// E → '.'
// L → '.-..'
// L → '.-..'
// O → '---'

// Sonuç: ".... . .-.. .-.. ---"

3. Morse → Latin Dönüşümü

Algoritma: Morse kodlarını boşluklara göre ayır, ters sözlük araması yap

function morseToLatin(morseText) {
  let latinText = '';
  
  // Morse kodlarını boşluklara göre ayır
  const morseCodes = morseText.split(' ');
  
  // Her Morse kodunu işle
  for (let i = 0; i < morseCodes.length; i++) {
    const morseCode = morseCodes[i];
    
    // Özel durum: '/' boşluk karakterini temsil eder
    if (morseCode === '/') {
      latinText += ' ';
      continue;
    }
    
    // Ters arama: Morse kodundan karakteri bul
    const char = getKeyByValue(dict, morseCode);
    
    // Bulunamazsa 'X' kullan
    if (char === undefined) {
      latinText += 'X';
    } else {
      latinText += char;
    }
  }
  
  return latinText;
}

4. Ters Sözlük Araması

Morse kodundan karakteri bulmak için sözlükte ters arama yapılır:

function getKeyByValue(object, value) {
  // Object.keys() ile tüm anahtarları al
  // find() ile değeri eşleşen anahtarı bul
  return Object.keys(object).find(key => object[key] === value);
}

// Örnek:
getKeyByValue(dict, '.-')   // 'A'
getKeyByValue(dict, '...')  // 'S'
getKeyByValue(dict, '/')    // ' '

5. String İşlemleri

toUpperCase(): Tüm karakterleri büyük harfe çevir

"hello".toUpperCase()  // "HELLO"
"WORLD".toUpperCase()  // "WORLD"

split(): String'i belirli bir karaktere göre böl

".... . .-..".split(' ')
// ['....', '.', '.-..']

"/".split(' ')
// ['/']

6. Yön Değiştirme (Toggle)

Kullanıcı yön değiştirdiğinde, giriş ve çıkış alanları yer değiştirir:

function alphabetChanged() {
  // Radio button durumunu kontrol et
  isLatinChecked = latin.checked;
  
  // Giriş ve çıkışı yer değiştir
  const temp = inputText.value;
  inputText.value = outputText.value;
  outputText.value = temp;
}

Önemli Noktalar

  • Büyük/Küçük Harf: Morse kodu büyük/küçük harf duyarsızdır
  • Boşluklar: Karakterler arası boşluk, kelimeler arası '/' kullanılır
  • Bilinmeyen Karakterler: Sözlükte olmayan karakterler 'X' ile gösterilir
  • Türkçe Karakterler: Ğ, İ, Ö, Ü karakterleri desteklenir

Performans İpuçları

// Ters sözlük oluşturma (daha hızlı arama için)
const reverseDict = {};
Object.keys(dict).forEach(key => {
  reverseDict[dict[key]] = key;
});

// Artık O(1) arama:
reverseDict['.-']  // 'A' (çok hızlı!)
reverseDict['...'] // 'S'