Skip to content

About

Yilan modelli genellestirilmis Pascal ucgeni + karisik zar/kategori sayaci (C11, sifir bagimlilik)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

57 Commits

Folders and files

Repository files navigation

pascal_snake v3

"Yılan" modeliyle genelleştirilmiş Pascal üçgeni + sınırlı-kategorili sayım aracı. Tek çekirdek, sıfır bağımlılık (C11 + libc).

Fikir: sonsuz, sıfırlarla dolu bir şeritte uzunluğu a olan bir yılan soldan sağa kayar; kafasının altındaki hücreye kapsadığı a hücrenin toplamını yazar. a = 2 klasik Pascal üçgenidir; genel a için satırlar (1 + x + ... + x^(a-1))^n polinomunun katsayılarıdır, satır toplamı a^n. Farklı kapasiteli kategorilerde her kategoriye kendi pencere boyu uygulanır: (1+x+...+x^c1)(1+x+...+x^c2)...

Ajan tuketimi icin bkz. AGENTS.md (kurulumsuz kullanim + kendini-dogrula).

Mimari (v2 monolitten farkı)

src/num.h/.c    sayim guvenligi: num_add/num_mul, tasma -> err_t (exit YOK)
src/dist.h/.c   cekirdek: dist_t + dist_extend (kayan toplam, hucrede O(1))
src/print.h/.c  baski: liste/ortali x sayi/olasilik + histogram + -s tablosu
src/main.c      SADECE parse + validate + orkestrasyon (aritmetik YOK)
tests/golden.sh dondurulmus beklenen cikti (74 vaka: G-B3/G-B4 tie, G-B5/G-B6 B1, G-B7 B3, G-B8 B4, G-X8c B2a dahil)
tests/prop.py   tohumlu rastgele capraz dogrulama (200 vaka, bagimsiz Python)
tests/test_core.c  C birim testleri (23 vaka, assert)
tests/test_py_parity.sh  C<->Python esdegerlik kilidi (49 vaka, bayt-birebir: E23-E25 B2a, E26-E29 B2b, E30-E31 B1, E32 B4 dahil)
tools/pascal_snake.py  derlemesiz stdlib-only referans (pariteyle kilitli)
tools/_core_math.pyx  Cython tasiyici: Python matematigi AYNI C kaynagindan
  (src/print.c prob_q6 + src/num.c; uretilmis tools/_core_math.c commit'li,
  derlenmis tools/_core_math.so; kur/insa: sh tools/build_core_math.sh)
tests/fuzz.py  tohumlu diferansiyel fuzz (tek-kosuda 6354 vaka; shardli: valid 4046 + conly 1808 + hostile 512 = 6366; fark: shard kipinde rng akisi degisir, her shard kendi basina deterministiktir, SEED=20260907)

Kütüphane (num+dist) asla exit() çağırmaz; err_t döner, kararı main verir. Böylece taşma birim testte öldürmeden assert edilir.

Derleme ve test

Doğrudan gcc birincil yoldur (her makinede çalışır; bu kutuda make yok). make olan makinede Makefile aynı kapıları koşturur (make test: birim + golden + property + parite):

gcc -O2 -Wall -Wextra -Wpedantic -std=c11 -o pascal_snake src/main.c src/num.c src/dist.c src/print.c
gcc -O2 -Wall -Wextra -Wpedantic -std=c11 -o tests/test_core tests/test_core.c src/num.c src/dist.c
./tests/test_core && sh tests/golden.sh && python tests/prop.py ./pascal_snake

Kapılar tek seferde yeşil olmalı: CORE OK: 23 vaka + 74 PASS, 0 FAIL + PROP OK: 200 vaka + PARITY OK: 49 vaka + FUZZ OK (tek-kosu 6354; shardli 4046+1808+512).

Kullanım

./pascal_snake [SEÇENEKLER]
  -n, --height N       Satır sayısı (varsayılan: 5)
  -a, --snake N        Yılan uzunluğu (varsayılan: 2)
  -l, --list           Liste çıktısı   -r, --row N  Yalnızca N. satır
  -s, --sums           a^n özdeşlik tablosu (yalnız tek-tip)
  -c, --categories L   Kapasiteler ("10,3,2")       -d, --dice F  Yüzler ("4,6,8")
  -t, --total N        -c/-d ile tek sonuç (-d'de GERÇEK toplam)
  -p, --probs          Sayı yerine olasılık
  --ge N / --at-least N   N ve üstü toplamların sayımı (tek dağılım)
  --le N / --at-most N    N ve altı toplamların sayımı (tek dağılım)
  --hist               ASCII histogram
  -j, --json           Makine kipi: stdout'ta JSON zarf (hata da zarflanır)

--ge/--le/--hist tek dağılım ister: -r/-c/-d ile. Çelişkili bayraklar (-c+-n, --ge+--le, -t+--hist…) sessizce yok sayılmaz, reddedilir.

Örnekler (çıktılar dondurulmuş testlerle korunur)

./pascal_snake -r 15 -l            # 15. satırın 3. elemanı 455 = C(15,3)
./pascal_snake -r 3 -a 6 -l        # 3d6: [1, 3, ..., 27, 27, ..., 1], toplam 216
./pascal_snake -d 4,6 -l           # d4+d6: [1, 2, 3, 4, 4, 4, 3, 2, 1] (toplam 2..10)
./pascal_snake -d 4,6 -t 7         # 4   →  olasılık 4/24
./pascal_snake -d 4,6 -t 7 -p      # 0.166667
./pascal_snake -d 4,6 --ge 7       # 10  →  P(7+) = 10/24
./pascal_snake -d 4,6 --hist       # terminal histogramı
./pascal_snake -c 10,3,2 -t 3      # 9   →  renk-içi ayırt etmeden 3 top, 9 bileşim

Olasılık kuralı: sayı / toplam-sonuç (tek-tipte a^n, -c'de (kap+1) çarpımı, -d'de yüzler çarpımı). -p bunu otomatik yapar.

Davranış ilkeleri

  • Taşmada sessiz sarma yok: Hata: deger long long sinirini asti (tasma). Örn. C(67,33) ~ 1.4e19 hücrede, 10^19 satır toplamında yakalanır.
  • Çelişki reddedilir, yok sayılmaz.
  • Total-penceresi (kip-başına): total basan kip total taşmasında reddeder, basmayan kip basar. Örn. -r 64 -a 2 -l basar (hücreler sığar); -r 64 -a 2 -l --json OVERFLOW verir (total=2^64). C ve Python kip-başına bayt-birebirdir (pin: G-X8a/G-X8b/G-X8c, E23–E25).
  • Histogram çubukları yaklaşıktır (ölçek long double); sayımlar her zaman tamdır. Olasılıklar 6 ondalıklı KESİNDİR: kural half-up tamsayı aritmetiğidir (q = (2·sayı·10⁶+toplam)/(2·toplam); C prob_q6, Python prob_q6 eşdeğeri; pin -d 24,50,40: 3/48000→0.000063, 15/48000→0.000313).
  • Satır tavanı: -n/-r en fazla 10000 satırdır; üzeri RANGE ile reddedilir (asılmaya karşı fail-closed). Pratikte tavan yalnız -a 1'de bağlayıcıdır (hücreler hep 1, örn. -n 10000 -a 1 -l basar); -a 2'de hücre taşması önce yakalar (örn. -r 67 OVERFLOW, -r 10000 RANGE).
  • Fuzz sayısı koşuma göre değişir: tek-koşu 6354, shardlı toplam 6366 (shard kipinde rng akışı değişir); tekrar: python3 tests/fuzz.py ./pascal_snake ve --only=valid|conly|hostile shardları; tohum SEED=20260907, deterministik.
  • Sanitizer: gcc -fsanitize=address,undefined -O1 -std=c11 ile derlenip tüm kapılar ASan/UBSan'lı ikiliyle de koşturuldu (kanıt: B7 notu).

Güvenlik notu (tehdit modeli özeti)

Yerel CLI, ağ yok, dosya yazımı yok, secret yok. Düşmanca girdi (dev argümanlar, dev kapasiteler) MAX_ROW_ELEMENTS + taşma bekçileriyle reddedilir; dev -n bellek tahsisinde temiz çıkış verir. Kalan riskler: olasılıkların son basamağı yaklaşıktır, 5M hücre ~40MB RSS tutar, MSVC desteklenmez. Total ve olasılıklar long double üzerinden hesaplanır: x86-64'te 64-bit mantis LLONG_MAX'e kadar tamdır, long double == double olan platformlarda (ARM64, MSVC) 2^53 üstü total'ler yaklaşıktır. "Güvenli" iddiası yok — sınırlar yukarıda yazılı.

Sınırlar (dürüstçe)

"Eşit şanslı, birim adımlı, bağımsız parçaların toplamı kaç yoldan olur?" bunun makinesidir: zar, seçim, paylaştırma, karışık havuzlar, kuyruklar. Çözemedikleri: eşit-olmayan ağırlıklı ortalamalar, keep/drop ve patlayan zar, adımı 1'den büyük bozuk-para problemleri, koşullu zincirler. Bunlar tam zar-dili işidir; bu araç bilerek o alana girmez.

Tarihçe (kaynak iadesi)

Yenilik iddiası yoktur. Tek-tip hali (1+x+...+x^(a-1))^n katsayıları ~1711'de de Moivre'in zar-toplamı problemi, a=3 hali 1760'larda Euler'in trinom çalışmasıdır; Freund (1956), Hoggatt–Bicknell (1969), derleme: arXiv:1202.0228. Buradaki katkı: yılan anlatımı, tek çekirdekli sıfır-bağımlılıklı CLI paketi ve test ağıdır.

About

Yilan modelli genellestirilmis Pascal ucgeni + karisik zar/kategori sayaci (C11, sifir bagimlilik)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages