"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).
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.
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).
./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.
./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.
- 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 -lbasar (hücreler sığar);-r 64 -a 2 -l --jsonOVERFLOW 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); Cprob_q6, Pythonprob_q6eşdeğeri; pin-d 24,50,40: 3/48000→0.000063, 15/48000→0.000313). - Satır tavanı:
-n/-ren fazla 10000 satırdır; üzeriRANGEile 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 -lbasar);-a 2'de hücre taşması önce yakalar (örn.-r 67OVERFLOW,-r 10000RANGE). - 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_snakeve--only=valid|conly|hostileshardları; tohum SEED=20260907, deterministik. - Sanitizer:
gcc -fsanitize=address,undefined -O1 -std=c11ile derlenip tüm kapılar ASan/UBSan'lı ikiliyle de koşturuldu (kanıt: B7 notu).
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ı.
"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.
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.