Euler serisinin ikinci yazısında, Project Euler’in 2. sorusunu çözeceğiz;
Orijinal soru; Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Find the sum of all the even-valued terms in the sequence which do not exceed four million.
Türkçesi; Fibonacci serisinde her rakam, kendisinden önce gelen iki rakamın toplamıdır. 1 ve 2 ile başlayan serinin ilk 10 rakamı:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Bu serinin 4.000.000 (Dört Milyon) ‘dan küçük tüm çift rakamlarının toplamını bulunuz.
Önce siz çözmeyi deneyin, çözemezseniz Devamını oku…
C#, Programlama
euler, fibonacci, generic, IEnumerable, lambda, long, return, static, sum, where, while, yield
Yazdığımız uygulamalarda dosya sisteminde arama yapmaya ihtiyaç duyabiliriz. Bu durumda genelde döngüler yazarız. Peki LINQ kullanamaz mıyız? Üzerinde biraz çalıştıktan ve araştırma yaptıktan sonra, aşağıdaki kodu elde ettim;
private IEnumerable<FileInfo> DosyaListesi(DirectoryInfo KokDizin, string Uzanti, string DosyaAdiParcasi)
{
foreach (var f in KokDizin.GetFiles().Where(Dosya => Dosya.Extension == Uzanti && Dosya.Name.Contains(DosyaAdiParcasi)))
yield return f;
foreach (DirectoryInfo d in KokDizin.GetDirectories())
foreach (var f in DosyaListesi(d, Uzanti, DosyaAdiParcasi))
yield return f;
}
Gördüğünüz gibi fonksiyon, parametre olarak aramaya başlanacak kök dizini, arama yapılacak dosyanın uzantısını ve dosya isminde bir parçayı alıyor, geriye FileInfo sınıfında liste döndürüyor.
İlk foreach döngüsünde kök dizinde parametre ile alınmış kriterlere göre arama yapılıyor ve yield anahtar kelimesi ile, bulunan her sonuç dönüş kümesine ekleniyor.
İkinci (ve üçüncü) foreach döngülerinde ise, recursive (kendini tekrarlamalı) olarak DosyaListesi() fonksiyonu kendi kendisini çağırarak, arama işlemini alt klasörlerde de yapıyor.
C#, Programlama
csharp, directoryinfo, döngü, extension, fileinfo, foreach, getdirectories, getfiles, linq, method, recursive, return, yield