Codewars – Dost mu Düşman mı? (Friend or Foe?)
Merhaba arkadaşlar, Fatih Soysal olarak bugün sizlerle Codewars platformundaki popüler bir algoritma problemini, “Friend or Foe?” (Dost mu Düşman mı?) problemine birlikte bakacağız. Bu problem, temel programlama becerilerinizi test etmenin yanı sıra, farklı yaklaşım stratejileri geliştirmeniz için harika bir fırsat sunuyor. İşte size bu challenge’ı çözmek için hem detaylı bir açıklama hem de farklı çözüm yöntemleri sunacağım.
Problemin Tanımı
Problem, iki dizi olarak verilen bir isim listesini alıyor. Birinci dizi, değerlendirilecek isimleri içeriyor. İkinci dizi ise, “dost” kabul edilecek isimleri içeriyor. Görevimiz, birinci dizideki isimlerden, ikinci dizide bulunan isimleri filtreleyerek yeni bir dizi oluşturmak. Başka bir deyişle, sadece “dost” isimleri yeni dizide tutmamız gerekiyor.
Çözüm Yöntemleri
Bu problemi çözmenin birkaç yolu var. En basit ve anlaşılır yol, bir döngü kullanarak her bir ismi kontrol etmektir. Örneğin, JavaScript ile bu çözüm şu şekilde olabilir:
function friendOrFoe(friends, names) {
let dostlar = [];
for (let i = 0; i < names.length; i++) {
if (friends.includes(names[i])) {
dostlar.push(names[i]);
}
}
return dostlar;
}
Bu kod, names dizisindeki her bir ismi kontrol eder ve eğer friends dizisinde bulunuyorsa, dostlar dizisine ekler. Sonrasında ise, dostlar dizisini döndürür. Ancak, bu yöntem, özellikle büyük diziler için performans açısından pek verimli değildir. Daha verimli bir çözüm, filter metodunu kullanmaktır.
function friendOrFoe(friends, names) {
return names.filter(name => friends.includes(name));
}
Bu yöntem, daha kısa ve okunabilir olmasının yanı sıra, filter metodunun optimizasyonlarından da faydalanır ve genellikle daha hızlı çalışır. Burada, filter metodu, names dizisindeki her bir ismi, friends dizisinde olup olmadığını kontrol ederek filtreler ve sadece bulunanları yeni bir diziye ekler. Bu yöntem, daha temiz ve daha özlü bir kod yazmamızı sağlar.
Performans Analizi ve Optimizasyon
Yukarıda bahsettiğimiz iki yöntemin performansını karşılaştırdığımızda, filter metodu kullanan ikinci yöntem, özellikle büyük veri setlerinde daha hızlı ve verimli olacaktır. Bunun sebebi, filter metodunun genellikle daha optimize edilmiş bir şekilde çalışmasıdır. Ancak, küçük veri setlerinde fark göz ardı edilebilir düzeydedir.
Sonuç olarak, “Friend or Foe?” problemi, temel programlama kavramlarını ve farklı çözüm stratejilerini anlamamız için güzel bir örnek oluşturuyor. Hangi yöntemi seçerseniz seçin, kodun okunabilirliği ve performansı önemlidir. Bu problemde, filter metodu, hem daha temiz bir kod, hem de daha iyi bir performans sunmaktadır. Daha fazla Codewars problemi ve çözümlerine göz atmak isterseniz, buraya tıklayabilirsiniz. Kendi web sitemde de daha fazla bilgi bulabilirsiniz: fatihsoysal.com
Sonuç
Umarım bu makale, “Friend or Foe?” problemine farklı bakış açıları kazandırmıştır. Unutmayın, problem çözme sürecinde farklı yaklaşımlar denemek ve en uygun olanı seçmek önemlidir. Kodlama yolculuğunuzda başarılar dilerim!
#Etiketler: Codewars, Friend or Foe, JavaScript, Algoritma, Programlama, Filtreleme, Dizi İşlemleri, Performans Optimizasyonu, Kodlama, Fatih Soysal