İsimden Aşk Uyumu Hesaplama Nasıl Çalışır? Eğlenceli Algoritmanın Sırları
Eğlence amaçlı aşk ölçer testleri internetin ilk yıllarından beri popülerliğini koruyor. Sadece iki isim girerek ortaya çıkan yüzdelik uyum skoru, pek çok kişi için merak konusu olmuştur. Peki ama bu skor tamamen rastgele mi üretiliyor yoksa arka planda bir mantığı var mı? Aşk Ölçer Hesaplama aracımızın "Sabit" (stable) modunda, isimler üzerinden tamamen deterministik (belirlenimci) bir algoritma çalışır. Bu makalede, girdiğiniz isimlerin nasıl bir matematiksel dönüşümden (hash) geçerek eğlenceli bir uyum skoruna dönüştüğünü adım adım inceleyeceğiz.
Algoritmanın Temel Mantığı: Determinizm Nedir?
Aşk ölçer aracımızda sonuçların rastgele olmamasını sağlayan temel prensip determinizmdir. Determinizm, bilgisayar bilimlerinde aynı girdilerin her zaman aynı çıktıyı üretmesi anlamına gelir. Yani, "Ali" ve "Ayşe" isimlerini aşk ölçere bugün de girseniz, seneye de girseniz (eğer "Sabit" moddaysanız) alacağınız sonuç her zaman aynı olacaktır.
Bu sabitliği sağlamak için algoritma birkaç aşamadan geçer:
- İsimlerin standartlaştırılması (Normalizasyon).
- İsimlerin belirli bir sıraya dizilmesi.
- İsimlerin bir "Hash" (özet) değerine dönüştürülmesi.
- Çıkan Hash değerinin 0-100 arasında bir skora uyarlanması.
Şimdi bu aşamaların teknik olarak nasıl gerçekleştiğine yakından bakalım.
1. Adım: İsimlerin Standartlaştırılması (Normalizasyon)
Bilgisayar için "ALI", "ali" ve " Ali " tamamen farklı metinlerdir. Eğer bir kullanıcı "Ali" yazarken diğeri "ali" yazarsa aynı sonucu almaları gerekir. Bu yüzden hesaplama yapılmadan önce her iki isim de bir filtreleme işleminden geçirilir.
Koddaki normalizeName fonksiyonu bu işi yapar:
- Önce metnin başındaki ve sonundaki boşluklar temizlenir (
trim). - Tüm harfler küçük harfe dönüştürülür (Türkçe karakter kurallarına uygun olarak,
toLocaleLowerCase('tr-TR')). - Eğer isimlerin arasında birden fazla boşluk varsa (örneğin "Ali Can"), bu boşluklar tek bir boşluğa indirgenir.
Örnek: Girdi ALİ Can ise, normalizasyon sonrası bu metin ali can haline gelir.
2. Adım: İsimlerin Sıralanması
Aşk uyumunda tarafların sırası sonucu etkilememelidir. Ali'nin Ayşe'ye olan aşk uyumu ile Ayşe'nin Ali'ye olan aşk uyumu aynı olmalıdır. Bunu sağlamak için her iki isim alfabetik olarak sıralanır (sort()).
Örneğin, elimizde "ali" ve "ayşe" isimleri varsa:
- İsimler bir araya getirilir ve alfabetik sıraya sokulur.
- Ortaya
ali|ayşeşeklinde standart bir kombinasyon çıkar. - Kullanıcı isimleri "Ayşe" ve "Ali" olarak girse bile, sıralama işlemi sayesinde arka planda yine
ali|ayşedizilimi elde edilir.
3. Adım: Hash (Özet) Değeri Üretme
Bu aşama, algoritmanın kalbini oluşturur. Sözel isimler, matematiksel formüllerde kullanılamaz; bu yüzden bir sayıya dönüştürülmeleri gerekir. hashString isimli fonksiyon, ali|ayşe metnini alır ve harflerin karakter kodlarını kullanarak benzersiz (veya benzersize çok yakın) bir sayısal değer üretir.
Bu fonksiyon metin içindeki her bir harf için döngüye girer:
- Önceki hash değeri 31 ile çarpılır.
- Harfin Unicode karakter değeri (
charCodeAt) eklenir. - Sonuç 32-bit tam sayıya (
>>> 0) dönüştürülerek devam edilir.
Bu işlemin amacı, ali|ayşe gibi kısa bir metinden bile 345678912 gibi büyük ve karmaşık bir sayı elde etmektir. İşte bu sayı, o iki isme özel bir nevi parmak izi görevi görür.
4. Adım: Hash'i Uyum Skoruna Dönüştürmek
Elimizdeki devasa hash sayısını 0 ile 100 arasında bir uyum yüzdesine çevirmemiz gerekir. Aşk Ölçer Hesaplama aracımızın kullandığı formül şu şekildedir:
Uyum Skoru = 35 + (Hash Mod 64)
- Mod 64 (
% 64): Matematikte mod işlemi, bir sayının başka bir sayıya bölümünden kalanı verir. Bir sayının 64'e bölümünden kalan her zaman 0 ile 63 arasında bir sayıdır. Böylece hash sayımız ne kadar büyük olursa olsun, güvenli bir şekilde 0-63 aralığına sıkıştırılmış olur. - + 35 Eklemesi: Mod işleminden gelen sonucun üzerine 35 taban puanı eklenir.
- En kötü senaryoda mod işlemi 0 verirse:
35 + 0 = 35 - En iyi senaryoda mod işlemi 63 verirse:
35 + 63 = 98
- En kötü senaryoda mod işlemi 0 verirse:
Böylece algoritma, rastgelelik olmadan ama isimlere has olarak 35 ile 98 arasında bir baz skor üretmiş olur (Ek Puan etkisi bu skoru sonradan değiştirebilir, bunu başka bir makalede inceleyeceğiz).
Vaka Analizi: Ali ve Ayşe İçin Hash Hesaplaması
Gerçekçi bir vaka üzerinden ilerleyelim.
- Girdiler: Birinci isim "Ali", İkinci isim "Ayşe".
- Normalizasyon:
aliveayşe. - Sıralama ve Birleştirme:
ali|ayşe. - Hash İşlemi:
ali|ayşemetninin hashString fonksiyonundan geçen sonucu örneğin827364519olsun. - Matematiksel Hesap:
- 827364519 sayısının 64'e bölümünden kalanı bulalım. Farz edelim ki bu kalan (modülüs)
45olsun. - Taban puana ekleyelim:
35 + 45 = 80.
- 827364519 sayısının 64'e bölümünden kalanı bulalım. Farz edelim ki bu kalan (modülüs)
- Sonuç: Ali ve Ayşe'nin aşk uyumu skoru %80 olarak ekrana yansır. Üstelik bu işlem her seferinde aynı hash değerini ve aynı kalanı üreteceği için skor hiç değişmeyecektir.
Sonuç
Aşk Ölçer Hesaplama aracındaki "Sabit" modun sihri, isimleri metinden devasa sayılara (hash), ardından modüler aritmetik kullanarak tekrar sınırlandırılmış bir yüzdeye dönüştürmesinde yatar. Bu sayede sadece eğlenceli değil, aynı zamanda tutarlı ve akılcı bir matematiksel dönüşüm deneyimi sunar.
Elbette unutmamak gerekir ki; bu harf ve matematik dönüşümlerinin gerçek bir ilişki uyumu veya psikolojik değerlendirme ile uzaktan yakından ilgisi yoktur. Algoritma isimlere deterministik yaklaşırken, gerçek hayatın sürprizleri harflerin çok ötesindedir!