🎲 random - Rastgele Sayı Üretimi
RNG, Distributions, Sampling, Shuffle
44
Fonksiyon
598
Satır
19 KB
Boyut
🚀 Hızlı Başlangıç
içe_aktar random
// Random integer [0, 100)
değişken x = random.aralık(0, 100)
// Random float [0.0, 1.0)
değişken f = random.kesir()
// Random boolean
değişken b = random.bool()
// Random choice
değişken renkler = ["kırmızı", "yeşil", "mavi"]
değişken seçilen = random.seç(renkler)
// Shuffle
değişken deste = [1, 2, 3, 4, 5]
random.karıştır(deste)
// Seed (reproducible)
random.seed(42)
yazdır(random.aralık(0, 100)) // Her zaman aynı sonuç
// Distributions
değişken normal = random.normal(0.0, 1.0) // μ=0, σ=1
değişken uniform = random.uniform(10.0, 20.0)
değişken exponential = random.exponential(1.5)
📚 RNG Algoritmaları
- PCG: Default RNG (fast, good quality)
- Xorshift: Very fast
- Mersenne Twister: High quality
- ChaCha: Cryptographically secure
💡 Örnekler
Monte Carlo Simülasyonu (Pi Tahmini)
içe_aktar random, math
fonksiyon pi_tahmini(numune_sayısı: tamsayı) -> kesir yap
değişken daire_içi = 0
her i içinde aralık(0, numune_sayısı) için yap
değişken x = random.kesir()
değişken y = random.kesir()
// Nokta birim daire içinde mi?
eğer (x*x + y*y) < 1.0 ise yap
daire_içi = daire_içi + 1
son
son
// Pi ≈ 4 * (daire içi nokta sayısı / toplam nokta sayısı)
dön 4.0 * daire_içi.kesir() / numune_sayısı.kesir()
son
değişken tahmin = pi_tahmini(1000000)
yazdır("Pi tahmini: " + tahmin.yazıya())
yazdır("Gerçek Pi: " + math.PI.yazıya())
yazdır("Hata: " + math.abs(tahmin - math.PI).yazıya())
Weighted Random Selection
içe_aktar random
fonksiyon weighted_choice(items: Dizi, weights: Dizi) -> herhangi yap
// Kümülatif ağırlıklar
değişken total = 0.0
değişken cumulative = []
her w içinde weights için yap
total = total + w
cumulative.ekle(total)
son
// Random seçim
değişken r = random.kesir() * total
her i içinde aralık(0, cumulative.uzunluk()) için yap
eğer r < cumulative[i] ise yap
dön items[i]
son
son
dön items[items.uzunluk() - 1]
son
// Örnek: Loot sistemi (oyun)
değişken loot = ["Common", "Uncommon", "Rare", "Epic", "Legendary"]
değişken chances = [50.0, 30.0, 15.0, 4.0, 1.0] // %
değişken bulunan = yap son
her i içinde aralık(0, 100) için yap
değişken item = weighted_choice(loot, chances)
eğer bulunan.içerir_mi(item) ise yap
bulunan[item] = bulunan[item] + 1
son değilse yap
bulunan[item] = 1
son
son
her (item, count) içinde bulunan için yap
yazdır(item + ": " + count.yazıya() + " (" + (count.kesir()).yazıya() + "%)")
son