fix(havuz): "ilk N" ölçütü yalnız ilk N satırı belirler; öncelikliye kırpmada N+pay kota
"İlk 5 İstanbul" isteğinde öncelikliler dilim içinde sınırsız öne alınınca havuz 60/60 İstanbul oluyor, 24 satırın hepsi İstanbul'a kayıyordu. Kırpma artık öncelikliye yalnız adet+2 yer ayırır (dilimlere sırayla), kalan kota sihirbaz süzgecine uyan adaylara gider. revizyon-denetim ilk5-istanbul senaryosu kalan 19'un çoğunluğunu sihirbaz illerinden bekliyor; 5/5 geçti. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -114,15 +114,24 @@ function eklenenEsit(r: Rapor, n: number): string[] {
|
||||
return r.tani?.ilkNEklenen === n ? [] : [`tani.ilkNEklenen ${r.tani?.ilkNEklenen} ≠ ${n}`];
|
||||
}
|
||||
|
||||
/** İlk N'den sonraki satırların çoğunluğu sihirbaz illerinden mi ("ilk N" listenin kalanını kaydırmaz). */
|
||||
function kalanSihirbazdan(r: Rapor, adet: number, iller: string[]): string[] {
|
||||
const kalan = r.rapor.tercihler.slice(adet);
|
||||
const sihirbaz = kalan.filter((t) => iller.map(tr).includes(tr(r.rapor.programlar[t.programId]?.il))).length;
|
||||
return sihirbaz * 2 > kalan.length ? [] : [`kalan ${kalan.length} satırın yalnız ${sihirbaz}'i sihirbaz illerinden (${iller.join("/")})`];
|
||||
}
|
||||
|
||||
const SENARYOLAR: Senaryo[] = [
|
||||
{
|
||||
// Bilal'in 7 Eki denemesi. Not: İstanbul her dilimde 20+ programla havuz
|
||||
// kırpmasının öncelikli kotasını tek başına doldurur → havuz 60/60 İstanbul
|
||||
// olur, sahte uç öncelikli olmayan satır bulamaz, takas gerekmez
|
||||
// (ilkNEklenen 0). Garantinin takas yolu "ilk5-takas" senaryosunda ölçülür.
|
||||
// Bilal'in 7 Eki denemesi. İstanbul her dilimde 20+ programla havuzu tek
|
||||
// başına doldurabilirdi (eskiden 60/60 İstanbul → 24/24 İstanbul); şimdi
|
||||
// kırpma öncelikliye yalnız N + pay yer ayırır (rapor-havuzu.ts
|
||||
// oncelikliyeKotaAyir), kalan havuz Ankara/İzmir'den kurulur. Sahte uç
|
||||
// İstanbul'u atlar, kod 5'ini takaslar; kalan 19'un çoğunluğu sihirbaz
|
||||
// illerinden olmalı ("ilk N yalnız ilk N'yi belirler" ürün kararı).
|
||||
ad: "ilk5-istanbul",
|
||||
params: taban({ ilkTercihler: { adet: 5, iller: ["İSTANBUL"] }, not: "ilk 5 İstanbul" }),
|
||||
dogrula: (r) => ilkNIl(r, 5, "İSTANBUL"),
|
||||
dogrula: (r) => [...ilkNIl(r, 5, "İSTANBUL"), ...eklenenEsit(r, 5), ...kalanSihirbazdan(r, 5, ["ANKARA", "İZMİR"])],
|
||||
},
|
||||
{
|
||||
// Takas yolu: Yalova 100.000 say'da havuza 0/3/8 (hayal/dengeli/güvenli)
|
||||
|
||||
Reference in New Issue
Block a user