30 Dakikada 6 Algoritma Problemini Çöz
Algoritma kasabasında kaybolan birisin. 6 kapıyı geçmen gerek. Her kapıda 2 sınav var: kolay + edge. İkisini de geçmeden sonraki kapı açılmaz. Toplam 30 dakika (~5 dk/seviye). Tarayıcıda Python yaz, anlık test et.
- 01Seviye 1: Filtrele Kapısı~5 dk
- 02Seviye 2: En Yüksek Kulenin Max'ı~5 dk
- 03Seviye 3: Aynalı Kapı~5 dk
- 04Seviye 4: Simetrik Labirent~5 dk
- 05Seviye 5: İki Kapı Anahtarı~5 dk
- 06Seviye 6: Şifreli Anagram~5 dk
Seviye 1: Filtrele Kapısı
Algoritma kasabasına hoş geldin. Kapıdaki yaşlı bilge seni durduruyor: 'Sadece çift sayıları geçirebilirim,' diyor. Listeni al, içinden sadece 2'ye tam bölünenleri süz.
İki sınav var: kolay olan klasik liste, zor olan boş liste. İkisini de geçersen kapı açılır.
Bir listeyi filtrelemek demek, her elemanı bir koşula göre seçmek demek. Python'da en kısa yol: list comprehension.
[x for x in liste if kosul] → liste içindeki her x'i gez, kosul doğruysa al, değilse atla.
İpucu: Koşul: x % 2 == 0. Yani 2'ye bölümünden kalan 0 olanlar.
Seviye 2: En Yüksek Kulenin Max'ı
Bir sonraki kapıda ejderha bekliyor. 'Sana üç kule veriyorum, en yükseğini söyle,' diye hırlıyor.
Ama dikkat: tüm kuleler yıkılmış (negatif yükseklik) olabilir. O zaman en az yıkılanı söylemelisin.
Listeyi gezip en büyüğü tutmak için akümülatör deseni kullanılır: ilk elemanı başlangıç al, sonra her elemanla karşılaştır, büyükse güncelle.
max(0, x) gibi kısa yollar var ama algoritma pratiği için elle yazmak daha öğretici.
Seviye 3: Aynalı Kapı
Kapıda bir ayna var. Aynaya bakınca yazın tersten görünüyor. Kapıyı açacak anahtar: yazıyı tersten söyleyebilmek.
Tek harf de terstir (yine kendisi). Boş yazı da terstir (yine boş).
Python'da string ters çevirmek için üç yaygın yol var: dilimleme ([::-1]), reversed() fonksiyonu, veya manuel döngü.
Dilimleme en kısa ve en Pythonic yoludur: string[::-1] → baştan sona, -1 adımla (ters yön).
Seviye 4: Simetrik Labirent
Labirentin 4. katında simetri testi var. 'Verdiğim kelime baştan ve sondan okunduğunda aynı mı?' diye soruyor. 'kayak' palindromdur, 'araba' değildir.
Boş string palindrom sayılır (simetrik). Tek harf de palindromdur.
Palindrom kontrolü için iki yaklaşım var: (1) String'i ters çevir, orijinaliyle karşılaştır. (2) İki uçtan başla, ortaya doğru karşılaştır (two pointer).
İkinci yöntem O(n/2) yerine O(n) — aynı karmaşıklık ama iki yarıda durur. Bellekten de tasarruf sağlar.
Seviye 5: İki Kapı Anahtarı
Kütüphaneci sana bir liste veriyor: [2, 7, 11, 15]. 'Toplamı 9 olan iki sayının index'lerini bul,' diyor.
Ama bir twist var: aynı sayıyı iki kez kullanabilirsin. [3, 3] listesi ve hedef 6 → [0, 1] (ilk ve son eleman, aynı değer farklı index).
Naif çözüm: her çift için topla, hedefe eşit mi bak. O(n²). Yavaş.
Akıllı çözüm: hash map (dict). Her sayıyı gezerken hedef - sayi'yı daha önce gördük mü diye bak. O(n).
Seviye 6: Şifreli Anagram
Son kapıda gizli bir mesaj var. 'Bu iki kelime aynı harflerden mi oluşuyor?' diye soruyor. 'listen' ve 'silent' anagramdır (aynı harfler, farklı sıra).
Ama farklı uzunlukta kelimeler anagram olamaz — kısa devre yap.
İki string anagram mı? Karakter sayıları aynı mı? Counter(s1) == Counter(s2).
Veya: sorted(s1) == sorted(s2). Sırala, karşılaştır. Basit ama O(n log n).
En hızlısı: önce uzunluk kontrolü, sonra her karakterin sayısını say.