Anlatım dili

Açınca her bölüme “10 yaşındaki arkadaşına anlatır gibi” baloncuklar gelir.

Logo Phase Oracle

Classiq Quantum Circuit Challenge için adım adım eğitim notları

64×64 Classiq logosunu faz oracle’ına çevirdik. Güncel gönderilen skor: 18 kübit · derinlik 1991 · 1868 CX (30 Eylül 2026).

01 — Problem

Ne isteniyor?

Classiq’in yarışma görevi: 1.097 siyah pikseli olan 64×64 ikili logoyu bir faz oracle olarak gerçekleştirmek.

İki adet 6 kübitlik register, koordinatları kodlar: x ve y (little-endian). Oracle, işaretli bir piksele denk gelen her baz durumunda fazı −1 ile çarpar; diğer tüm durumları olduğu gibi bırakır. Ancilla’lar iş bitince |0⟩ ’a dönmeli; koordinat kübitleri değişmemeli.

|x⟩|y⟩ → (−1)logo(x,y) |x⟩|y⟩

Bu, Grover tipi aramalardaki klasik “işaretli durumu işaretle” bloğunun görsel bir örneği. Skor, oracle’ın u3 + cx bazında, all-to-all bağlantıda derinlik (öncelikli) ve CX sayısıyla ölçülür.


02 — Geometri

Logo tam olarak hangi pikseller?

Resmi baseline notebook’taki predicate dört parçanın birleşimi: iki dikdörtgen ve iki disk.

logo(x,y) = (2 ≤ x ≤ 26 ∧ 29 ≤ y ≤ 53) // A: dikey gövde ∨ (26 ≤ x ≤ 49 ∧ 39 ≤ y ≤ 43) // B: yatay kol ∨ (x−55)² + (y−41)² ≤ 42 // C: sağ disk ∨ (x−40)² + (y−19)² ≤ 72 // D: üst disk

Piksel sayıları: A = 625, B = 120, C = 137, D = 225. Çakışmalar az: yalnızca A∩B = 5 ve B∩C = 5. Toplam işaretli piksel 1.097.

Canlı çizim · logo_pixel(x,y) formülünden · siyah = işaretli


03 — Kısıtlar

Grader neyi kabul eder?

Genişlik 12–18 kübit; en fazla 6 temiz ancilla. Tek qreg q, OpenQASM 2.0, sadece u3 ve cx.

x register q[0] … q[5]

Little-endian. LSB = q[0].

y register q[6] … q[11]

Little-endian. LSB = q[6].

ancilla q[12] … q[17]

Temiz başlar, temiz biter.

Derinlik, grader’da basit bir katman sayacı: her kapı, operand kübitlerinin max derinliğini +1 artırır. Yani skor yeniden optimize edilmez; yazdığın (veya transpile ettiğin) katman düzeni doğrudan ölçülür. Ödül eşiği kapanışta ilk 5 (≤108); lider ~95 derinlik / 272 CX.


04 — Keşif

Neleri denedik, neden yetmedi?

Doğrudan “her siyah pikseli ayrı işaretle” yolu binlerce CX üretir. Daha akıllı kaplamalar da çoğu zaman derinlik duvarına çarptı.

Baseline: 18 dikdörtgen (~5329 derinlik)

Satır aralıklarını birleştirip Classiq control(range, phase(π)) ile sentezlemek doğru ama optimize edilmeden ~5000–5300 derinlik bandında kalıyor. Bu “geçer not”un tavanı değil, başlangıç çizgisi.

ANF / ESOP faz polinomu — işe yaramadı

12-bit fonksiyonun ANF’i 886 terimli. Greedy ESOP ~77 terim / ~3000 CX; Qiskit EsopGenerator 164 terim / ~7800 CX. Liderin 269 CX’ine yaklaşmıyor. Faz polinomu doğru ama CX yağmuru.

Dyadic küp çarpımları — işe yaramadı

Dikdörtgenleri x-küp × y-küp olarak açmak 133 küp ve ~7000 CX verdi. Yüksek ağırlıklı ürünler kritik yolu şişiriyor.

İki canlı 6-bit karşılaştırıcı — sığmadı

6-bit comparator zirvede 5 carry + 1 sonuç ister. Bir x-flag tutulurken kalan 5 kübit, ikinci 6-bit compare için yetmiyor. Bu yüzden y tarafında comparator kullanamadık; y hep dyadic.

DiagonalGate / PhaseOracle — daha kötü

4096 diyagonal fazı Qiskit DiagonalGate ile vermek ~8170 derinlik / 4094 CX. Disk için 8-bit PhaseOracle tek başına ~3585 derinlik. “Her pikseli tabloya yaz” yolu kısa değil.

MCZ ile y-bayrağını kaldırmak — işe yaramadı

x-flag üzerine doğrudan H–MCX–H (MCZ) uygulamak, y-flag yaz-CZ-sil döngüsünden teoride ucuz görünüyor. Ama hedef süperpozisyondayken ucuz RCCX kullanılamıyor; exact Toffoli ile derinlik 4415’e çıktı. Geri alındı.

BQSKit yeniden sentez — işe yaramadı

Berkeley Quantum Synthesis Toolkit tek bir grupta bile ~27 sn sürdü ve Qiskit opt=3’ün 296 derinliğini 301’e kötüleştirdi. Tam oracle’a uygulanmadı.

Classiq auth — açıldı; kapalı form ~97 vermedi

classiq.authenticate() çalışıyor, bulut sentezi gidiyor. Kapalı form (x−55)²+(y−41)²≤42 ise max_width=18 ile reddediliyor: motor en az 39 kübit istiyor. 40 kübitte derinlik ~4100. Tek dikdörtgen S bile 416; sadece x aralığı [2,26] 194. İlk 5 (95–111) bu sentezleyicinin tek aralık kontrolünden daha kısa.

İşe yarayanlar: merge_S + supercube + paylaşımlı küp

S’yi tek dikdörtgen [2,26]×[29,53] yaptık; orta şerit [27,61]×[39,43] (B + sağ disk ekvatoru). Pahalı x-aralıklarını ([33,47], [34,46], [50,60]) büyük dyadic küp ⊕ delik tarifiyle kodladık; sol diskte [32,47] küpünü bir kez tutup bantlar arasında paylaştık. geq2 hibrit + pytket ile birlikte → 3229 derinlik / 2085 CX.

Auth açıkken kapalı formu DEPTH + max_width=18 ile sentezledik. Aritmetik disk 18 kübite sığmıyor (en az 39); sığan dikdörtgen S tek başına 416 derinlik. İlk 5 (95–111) bu motorun “formülü ver, kısalt” çıktısı değil. pytket / BQSKit mevcut el oracle’ında yalnızca küçük tıraş yapıyor.

05 — Çözüm

Çalışan mimari

Logoyu örtüşmeyen x-aralığı gruplarına ayırdık. Her grup için: x-flag yaz → y-flag’leri sırayla yaz → CZ → geri al.

  1. Örtüşmeyen gruplar

    Baseline satır birleşimini, aynı x-aralığını paylaşan y-dilimleri altında topladık. 10 grup; kapsama tam 1.097, çakışma yok. Örnek: x∈[38,42] ile y∈{11,27}.

  2. Kübit rolleri

    a0 = q[12] x-flag, a1 = q[13] y-flag, kalanlar scratch. X flag yazılırken 5 scratch serbest; y flag yazılırken x flag canlı olduğu için sadece 4 scratch var.

  3. Aralık bayrağı = XOR of dyadic cubes

    [lo, hi] hizasız bir aralık, üst üste binmeyen hizalı 2-kuvvet bloklarına ayrılır. Her küp için sabit bitlere X, sonra MCX-XOR ile hedefe XOR, sonra X geri. Küpler ayrık olduğu için bayrak tam doğru.

  4. MCX-XOR merdiveni

    Relative-phase Toffoli (RCCX) + son CCX: hedefe AND(controls) XOR’lanır, ancilla temiz kalır, faz +1. 6 kontrol için 4 ancilla yeter — y eşitliklerinin tamamı sığar.

  5. Geniş x aralıklarında comparator / geq2 hibrit

    [34,46] için iki iç içe ≥ comparator (aynı hedefe XOR) dyadic’ten ucuz. Kimlik: (v≥lo) ⊕ (v≥hi+1) = lo≤v≤hi. Non-result CCX’ler RCCX ile değiştirildi.

    [2,26] ve [2,61] için özel yol: v≥2 ⇔ OR(bits[1:5]) (ucuz XOR-OR), sonra v≥27 / v≥62 comparator. İki tam comparator (~155) yerine ~113 derinlik. Involutory olduğu için compute/uncompute aynı devre.

  6. Faz = CZ(a0, a1)

    x ve y bayrakları 1 iken CZ fazı çevirir. Sonra aynı XOR rutinleri tekrarlanarak bayraklar sıfırlanır (involutory).

Kapalı form (Qmod)

Gönderdiğimiz submission.qmod, predicate’i tek control içinde tutar. Bu, Classiq bulut sentezi için hazır model; yerel QASM ise el yapımı oracle.

qperm logo_phase_oracle(const x: qnum, const y: qnum) {
  control ((A) | (B) | (C) | (D)) {
    phase(pi);
  }
}

05b — Yolculuk

Skor nasıl düştü? Ne denendi?

Kısa bir zaman çizelgesi: hangi fikir kaç derinlik bıraktı, hangisi çöpe gitti.

  1. Baseline Classiq notebook

    ~5329 derinlik / 3502 CX. Doğru ama kasıtlı olarak pahalı.

  2. Gruplu el oracle (logo_oracle.py)

    10 x-grubu, dyadic + comparator, RCCX merdiveni → ~4222 / 2671. Statevector yeşil.

  3. Açık kaynak derleyiciler

    pytket FullPeephole: 4222 → 4190 (küçük ama gerçek). BQSKit: tek grupta kötüleşme, bırakıldı.

  4. geq2 hibrit

    Geniş gövde aralıklarında v≥2 = OR(üst bitler) → ~4053, pytket sonrası ~4063 / 2565.

  5. merge_S + supercube + paylaşımlı küp

    S tek blok; pahalı x-aralıkları büyük küp ⊕ delik; sol diskte [32,47] bir kez tutuldu → 3317 / 2122.

  6. Auth + Classiq hibrit

    Hesap açıldı. Classiq S+B dikdörtgenleri (~708) + yerel diskler → doğrulanmış 3229 / 2085. Kapalı form ~97 vermedi; lab günlüğünde ayrıntı.

Özet kartı: işe yaradı = gruplama, RCCX, seçici comparator, geq2-OR hibrit, merge_S, supercube ⊕ delik, paylaşımlı dyadic küp, pytket, Classiq S+B hibriti. işe yaramadı = ANF/ESOP, BQSKit, Classiq disk aritmetiği (39 kübit / ~4100), ince satırların Classiq’de silinmesi, sığ ama yanlış kare predicate.

05c — Lab günlüğü

Auth açıldıktan sonra ne denedik?

29 Eylül 2026: classiq.authenticate() geçti. Aşağıdakiler o günden beri yapılan ölçümler — her biri “neden / nasıl / sonuç” üçlüsüyle.

1) Kapalı form: “tarif → kapı listesi” — 18’e sığmadı

synthesize_closed_form.py logoyu dört geometrik cümleyle yazar:

S ∪ B ∪ (x−55)²+(y−41)²≤42 ∪ (x−40)²+(y−19)²≤72

DEPTH + max_width=18 ile sentez: motor en az 39 kübit istiyor. Genişliği 40’a açınca sentez olur; derinlik ~4100 / CX binlerce — bizim 3229’dan kötü. Genişliği 48’de ~5552.

Ders: “formülü yaz, sentezleyici kısaltsın” yolu bu hesapta / bu SDK’da (1.29.1) lider bandına gitmiyor. Geniş Classiq çıktısını submission.qasm üzerine yazmadık.

Çocuk dili: pastayı tek tarifle fırına verdik, fırın “tepsim küçük, 39 kişilik olsun” dedi. Büyük tepside pişince pasta bin kat oldu — şampiyon pastası değil. Büyük tepsiyi çöpe attık.

2) Parça parça ölçüm: tek aralık bile ilk 5’ten derin

Liderboard (29 Eylül): 1. sıra 95 / 272, ilk 5 hepsi 95–111 derinlik, 18 kübit.

Aynı motora tek tek aralık verince (doğrulanan / ölçülen):

  • x ∈ [2,26] → derinlik 194, CX 105
  • y ∈ [29,53] → 217 / 119
  • S dikdörtgeni [2,26]×[29,53] → 416 / 246
  • orta şerit [27,61]×[39,43] → 264 / 221
  • Classiq S+B birlikte → ~708 / 470

194, “bir sayıyı aralığa koy, ancillayı temizle”nin bedeli. İlk 5’in bütün logosu bundan kısa. Kazananlar aralıkları uç uca dizmiyor; kritik yolları bir karşılaştırıcıdan kısa.

Çocuk dili: şampiyon bütün ödevi 95 satırda bitirmiş. Bizim makine tek soruya (“2 ile 26 arasında mı?”) 194 satır harcıyor. Demek ki şampiyon başka makine kullanıyor!

3) Hibrit: Classiq S+B + yerel diskler → 3229

Classiq kalın dikdörtgenlerde iyi (S+B ~708). Yerel OSS S+B tek başına ~840. Disk halkaları OSS’de paylaşımlı küp ile ~2524.

Birleşim (doğrulandı, statevector yeşil): 18 / 3229 / 2085. Bu, 3317’den ~88 katman kısa. Gönderi dosyası buna güncellendi.

Dikkat: Hadamard’lı sentez çıktısında u3(π/2,0,π) prep kapıları kalabiliyor; oracle ölçümünden önce onları çıkarmak / prep’siz model yazmak şart. Aksi halde faz kontrolü bozulur.

Çocuk dili: kalın işleri robota, ince yuvarlakları elimize verdik — 88 satır kısaldı, sınavdan geçtik. Yeni rekor: 3229!

4) İnce satırlar (yükseklik 1): Classiq siliyor

Disk halkalarındaki tek piksel yüksekliğinde bantlar (y=11, y=35…) Classiq’de yalnız başına veya hatta S ile birlikte sentezlenince faz çoğu zaman kayboluyor: derinlik 0 veya “doğru gibi görünen” ama 56 piksel eksik.

Yükseklik ≥2 bantlar tutuluyor. Çözüm: ince satırları OSS’de bırakmak; kalın parçaları Classiq’e vermek (hibrit).

İki yükseklik-2 bandını XOR’layınca ([11,12] ⊕ [12,13]) y=11 ve y=13 fazlanır, y=12 iptal olur — motor her iki h=2’yi de tutuyor. Komşu logo pikselleri yüzünden bu hileyi doğrudan uygulamak zor; yine de “motor neyi siler?” sorusuna cevap verdi.

Çocuk dili: robot incecik çizgileri görmüyor — silip geçiyor, 56 piksel kayboldu! O yüzden ince çizgileri biz boyadık, kalınları robota bıraktık.

5) Sığ ama yanlış: 4 bitlik a²+b²≤42

Classiq’e 4 bitlik unsigned a*a + b*b ≤ 42 verince derinlik 17 / CX 12 gibi “rüya” bir skor çıktı. Statevector: 256 noktanın 41’i yanlış. QASM’de çarpma / karşılaştırma kapıları fiilen boş; faz silinmiş.

Ders: skor tablosuna bakmadan önce statevector. “Sığ” Classiq aritmetiği bazen yanlış. Dikdörtgen karşılaştırmaları (S, B) bu motorla doğru çıktı; kareler güvenilmez.

Çocuk dili: robot “17 satırda bitirdim!” dedi, sevinçten zıpladık. Sonra cevap anahtarıyla karşılaştırdık: 41 soru yanlış! Meğer robot bazı soruları boş bırakmış.

6) 4 bit ofset: +9 doğrulandı (derinlik 25)

Sağ disk merkezi 55. Alt 4 bit için (x−55) ≡ (x_low + 9) (mod 16) ve x ∈ [49,61] iken bu, gerçek x−55 ile birebir.

Elle yazılan +9 mod 16 (2 CCX + CX’ler): derinlik 25, CX 16; 16 girdi için doğrulandı. Benzer ofset y için de mümkün.

Sonraki adım kare + toplam + ≤42. 6 ancilla ile sıkışıyor: kare bit 1 hep 0 → sonuç 5 bit; ikinci kareyi toplarken AND hedefi + carry aynı anda yetmiyor. Ancillasız MCX merdiveni (4 kontrollü ~65 derinlik) birkaç kez dizilince tek disk, liderin bütün bütçesini aşıyor.

Çocuk dili: “55’e ne kadar uzağız?” Son 4 rakama 9 ekleyince cevap çıkıyor — üstelik sadece 25 satır! Ama bu sadece ilk adım; kareler derken masalar doluyor.

7) Neden ilk 5 “parça birleştir” ile gelmiyor?

Kabaca lider bütçesi: ~95 derinlik ≈ birkaç Toffoli derinliği; ~272 CX ≈ ~45 Toffoli. Bizim doğru parçalar:

  • tek x-aralığı Classiq: 194 (zaten bütçenin 2×’i)
  • ofset: 25 (ucuz, ama sadece giriş)
  • hibrit bütün logo: 3229

İlk 5’e girmek için logonun en uzun kapı zinciri bir aralık kontrolünden kısa olmalı. Bu, ya tamamen farklı bir Boolean / BDD paylaşımı ya da 6 ancillayı yeniden kullanan çok sıkı bir aritmetik makine demek — Classiq’in varsayılan “geniş aritmetik + uncompute” şablonu değil.

Çocuk dili: şampiyonun çantası küçük: 95 satır, ~45 zımba. Bizim tek cetvelimiz bile 95 satırdan uzun. Çantaya sığmak için cetveli değil, bütün çantayı değiştirmek lazım.

8) qmod uyumu: tarif defteriyle pişen yemek eşleşti

Neden: yarışmaya iki dosya veriliyor: submission.qasm (pişen yemek — puanı bu alır) ve submission.qmod (tarif defteri — yaklaşımı anlatır). Bizim tabakta 18 kübitlik hibrit vardı ama defterde hâlâ “39 kübit isteyen kapalı form” yazıyordu. Garson (grader = otomatik puanlayan robot) tabağa bakar, ama defterle tabak çelişmemeli.

Nasıl: qmod, GROUPS’un 17 dikdörtgen cümlesiyle yeniden yazıldı (“x şu aralıktaysa VE y bu aralıktaysa faz ver”, 17 kez). Classiq’in model kurucusu (create_model = “tarifi makineye okut”) max_width=18 ile OK verdi — yani bu tarif 18 kişilik tepsiye sığıyor.

Sonuç: qasm değişmedi (3229 / 2085), paket tutarlı. Eski defter yedekte duruyor.

Çocuk dili: yemeğimiz doğruydu ama üstündeki etiket başka yemek yazıyordu. Etiketi düzeltip tabağın üstüne yapıştırdık — yemek aynı, etiket artık doğru.

9) QROM blokları: doğru Lego’lar, ama kule kısa kalmadı — park

Neden: sağ diski “kare al, topla, 42 ile karşılaştır” diye yapmak istiyoruz. Sayıları 4 bite indirgemiştik (madde 6’daki +9 numarası). Bu turda üç Lego parçası tek tek dökülüp ölçüldü:

  • +9 ofseti: derinlik 25, CX 16. 16 girdinin 16’sında doğru. Sadece 2 CCX (CCX = Toffoli = “iki anahtar da açıksa üçüncüyü çevir”).
  • +7 ofseti (y ekseni için): 63 derinlik, 16/16 doğru. Biraz hedef üstü ama sağlam.
  • Füzed kare (ofset+kare tek parça, x’e dokunmadan): 432 derinlik / 305 CX, 16/16 doğru. “Füzed” = iki işi tek hamlede yapmak; kare bit 1 hep 0 çıktığı için 6 yerine 5 bit yetti.

Ders (v=7→8 böceği): ilk denemede çarpımlar yanlış sırayla yazılmıştı: 7 girince 8 çıkıyordu. Sebep basit bir mutfak hatası — malzemeyi doğrarken aynı bıçakla tabağı düzeltmek: bitleri değiştirince sonraki çarpımlar kirli bitleri okudu. Kural: önce bütün çarpımları temiz girdiden hesapla, girdi bitlerini en sona bırak. Düzeltilen parçalar qrom_disk.py bankasında duruyor.

Neden park: tek eksenin karesi bile 432. Öbür eksen + toplama + karşılaştırma eklenince tek disk ~1200+ olur; iki disk + dikdörtgenler 3229’u geçemez. Doğru Lego’lar, yanlış kule.

Çocuk dili: disk pastasını kesmek için üç bıçak yaptık. Bıçaklar keskin çıktı, tek tek denedik, hepsi kesti! Ama bütün pastayı kesmek yine de çok uzun sürdü. Bıçakları kutuya kaldırdık — belki başka pastada kullanırız.

10) ROBDD: 83 düğümlü akıllı harita 6 masaya sığmadı — park

Neden: 886 terimli ANF (madde 5’in kuzeni) ölmüştü. Ama aynı sorunun ROBDD haritası (Reduced Ordered Binary Decision Diagram = “aynı alt yolları paylaşan karar ağacı”) sadece 83 düğüm: aynı soru iki yerde soruluyorsa harita tek düğümde birleştiriyor. Katman genişlikleri [1,2,4,6,10,9,10,11,14,10,4,2] — en kalabalık katmanda 14 düğüm aynı anda açık.

Nasıl denendi: her düğüm “alt yol XOR (soru VE fark)” formülüyle tek bayrağa işlenecekti. Pebbling (çakıl taşı oyunu = “hangi ara sonucu hangi masada tutayım, hangisini silip gerekirse yeniden hesaplayayım” planı) simülasyonu gösterdi: aynı anda ~17 masa lazım, bizde 6 ancilla (ancilla = yardımcı kâğıt) var. Sığmıyor.

Geri dönüş ve sonuç: harita 139 ayrık yola açılıp her yol ayrı ayrı hesaplandı → doğruluk OK ama 29348 / 19442, 9 kat kötü. Yeniden-hesaplama (recompute = “masan yoksa sil, lazım olunca baştan yap”) ödünü de 3229’u geçemez. Park edildi; harita ve üreteç build_bdd_oracle.py’de duruyor. Sıradaki deneme: 111 dyadic çifti parite-gadget’lara çevirip TODD ile sıkıştırmak (GraySynth).

Çocuk dili: bütün soruları tek akıllı haritada birleştirdik — sadece 83 durak! Ama haritayı okumak için 17 masa lazım, bizde 6 masa var. Herkes ayrı yoldan gidince de yol 9 kat uzadı. Haritayı çekmeceye kaldırdık.

11) Parite ütücüsü: yanlış soru sorulmuş — park

Neden: 111 küçük bloğu “parite listesi”ne çevirip TODD akıllı ütücüsüyle sıkıştırmak istedik. Parite = “bu kübitlerin toplamı tek mi çift mi?” sorusu. Plan: her bloğu tek parite cümlesi yap, ütücü listeyi kısaltsın.

Nasıl: her dyadic çifti tek ParityPhase(π) olarak kuruldu. S alt kümesi 464 two-qubit, tam merdiven 1966. Transpile sonrası 625 / 509 gibi rüya bir skor göründü — ama sınavdan kaldı.

Neden öldü: “hepsi 1 mi?” (çok-kontrollü kapı) ile “toplam tek mi?” (parite) farklı sorular. 12 kontrollü bir kapı, tek parite cümlesine değil 4096 parite cümlesine eşit. Tek-kontrollü bloklar şans eseri doğruydu (Z kapısı = tek parite), kalabalık bloklar fazı bozdu. Üstüne TODD, π-fazlı (Clifford) devrede ütülenecek T bulamayıp devreyi boşalttı. 625/509, yanlış devrenin skoruydu. Dosya yazılmadı, submission.qasm el değmeden duruyor.

Çocuk dili: “herkes el kaldırsın mı?” ile “tek sayıda el mi kalktı?” farklı sorular! Biz ikinci soruyu sorup birinci sorunun cevabını bekledik. Küçük sınıfta şans eseri tuttu, büyük sınıfta yakalandık.

12) Çok-kontrollü kapı kıyaslaması: ağaç 6 kontrolü 42’ye indirdi

Neden: her aralık bayrağı “şu bitlerin hepsi 1 mi?” diye soruyor. Bu kapının katman sayısı, her grubun tabanı. Aynı işi linear RCCX merdiven, dengeli ağaç ve Qiskit’in Khattar–Gidney sentezleriyle ölçtük (mcxlib.py).

Sonuç (doğrulandı): CCX = 11, RCCX = 7 katman. 5 kontrol + 3 boş ancilla: ağaç 34 (eski merdiven 38). 6 kontrol + 4 boş: ağaç 42 (eski 46). Ancilla yokken 6 kontrol 191 katman — yani yardımcı kâğıt olmadan bu Lego çok pahalı.

Çocuk dili: “beş kişi aynı anda onay versin” diye sormak. Eski yol: sırayla sor, herkes “evet” desin. Yeni yol: ikişer kişilik grup, sonra grupların grupları — merdiven yerine ağaç. 6 kişilik onay 46 basamaktan 42’ye indi. Küçük kazanç, ama her grupta iki kez kullanıyoruz.

13) Paralel bayrak motoru: 3229 → 1991 — gönderildi

Neden: eski oracle x-bayrağını yazıyor, sonra y-bayrağını yazıyor; ikisi sırayla duruyor. Ancilla’ları iki havuza bölüp x ve y’yi aynı anda hesaplayınca katmanlar üst üste biner. Üstüne her küme için 0–2 CX’lik “affine ön-dönüşüm” arandı: küme, ucuz bir dyadic küp olsun diye bitler birbirine XOR’lanıyor, iş bitince geri alınıyor.

Üç gruplama (hepsi statevector yeşil):

  • A satır: GROUPS — 1991 / 1868. Kazanan.
  • C hibrit: S + orta şerit + disk dilimleri — 2063 / 2421.
  • B sütun: geniş y-birleşimleri küp sayısını şişirdi — 2844 / 3033.

Bağımsız kontrol: qasm_metrics 1991/1868; 3 rastgele çarpım-faz girişinde hata ~5×10−16; ancilla temiz. Dosya: flag_engine_full.qasm. 30 Eylül’de submission.qasm bu dosyayla yollandı (HubSpot accepted).

Neden 113 değil: 10 grup, her biri ~164–278 katman. En pahalı üçü: S bar 278, [33,47] 250, orta şerit 236. x-bayrağı y ile gizlendi; kalan fatura tek satırlık y-bantları (her biri 6-kontrollü küp, yaz+CZ+sil).

Çocuk dili: eskiden önce “x bu aralıkta mı?” diye soruyorduk, cevap gelince “y bu dilimde mi?”. Şimdi iki soruyu aynı anda soruyoruz — pasta katmanı kısalıyor. 3229’dan 1991’e indik. Ama 10 ayrı pasta dilimi hâlâ sırayla pişiyor; şampiyon pasta 108 katman, biz dilim başı ~200’deyiz.

14) Birleşik y-bantları: 3582 — daha kötü, park

Plan: her grubun y-dilimlerini tek kümeye birleştirmek. Örnek: {11, 27} yalnız 4. bitte farklı → tek 5-kontrollü küp. Tahmin 1100–1400’dü.

Ölçüm (doğrulandı, ~19 dk): A2 3582 / 2358, A3 3586 / 2362. Satır gruplarını birleştirmek paralel gizli y-bayraklarını tek, daha şişman kümeye yığdı; kritik yol uzadı. QASM’a yazıp yeniden yükleyince kirli ancilla (q[12] uyarımı) — o kopya geçersiz; bellek içi 3582 yeşildi. 1991’lik gönderim duruyor.

Çocuk dili: iki kısa yoklamayı tek uzun yoklamada birleştirdik. Soru sayısı azaldı ama soru zorlaştı, merdiven 1991’den 3582’ye çıktı. Bu tarifi çekmeceye kaldırdık.

Lab kuralı: her Classiq çıktısı için (1) genişlik ≤18, (2) qasm_metrics, (3) statevector. Üçü yeşil değilse dosyaya yazma. Gönderilen (30 Eylül): 1991 / 1868 (submission.qasm). Önceki zarf: 3229 / 2085. Park: QROM (432 tavan), BDD (peak 17>6), GraySynth (yanlış parite varsayımı).

06 — Doğrulama

Nasıl emin olduk?

Klasik kapsama testi + tam statevector faz kontrolü.

Önce grupların birleşiminin tam 1.097 piksel ve sıfır çakışma verdiğini saydık. Sonra 12 kübite Hadamard, oracle, statevector: norm 1, ancilla uyarımı yok, her (x,y) genliğinin büyüklüğü 2−6, beyaz piksele göre bağıl faz logo_pixel ise −1, değilse +1 (tolerans 10−6).

Transpile: Qiskit optimization_level=3, baz u3,cx; ardından isteğe bağlı optimize_pytket.py (FullPeephole + U3/CX rebase). Grader ile aynı katman sayacı qasm_metrics ile ölçüldü.


07 — Sonuç

Gönderilen skor

30 Eylül 2026’da paralel bayrak motoru HubSpot’a gitti: 1991 / 1868. Tabloda en son görünen satır “Halil I.” 3317 / 2122 (~72/91). 1991 public tabloda görünmedi; kapanıştan sonra sayfa kilitlendi.

Genişlik
18
Derinlik
1991
CX
1868
İlk 5 (30 Eyl)
≤108

Zincir: baseline ~5329 → el oracle ~4222 → geq2 4063 → merge_S 3317 → hibrit 3229 → paralel bayrak 1991 / 1868 (gönderildi, 30 Eylül). Son açık tablo: 1. 95, 2. 107, 3. 108, 4–5. 109. 1991 işlenseydi ~65/91 olurdu; tabloda teyit yok. Bu mimarinin tavanı ~1000–1400; ilk 5 (≤108) değil.


08 — Kapanış

Yarışma bitti; notlar duruyor

30 Eylül 2026 kapanış. 1991 gönderildi. İlk 5 (≤108) bu mimariden çıkmadı. Aşağıdaki maddeler “sırada ne var” değil, “neden yetmedi” özeti.

  1. Lab günlüğünü oku

    05c — Lab günlüğü: hangi Classiq tarifi doğru, hangisi sığ ama yanlış, neden 39 kübit.

  2. Paylaşımlı harita denendi — 6 masaya sığmadı

    83 düğümlü karar haritası (ROBDD) doğru çıktı ama aynı anda ~17 ara sonuç istiyor; 6 yardımcı kübit yetmedi, geri dönüş 29348 derinlik oldu. Ayrıntı lab günlüğü madde 10’da. Parite-gadget + TODD denemesi de madde 11’de öldü (yanlış soru sorulmuş).

  3. Lego blokları doğrulandı — ama kule kısa kalmadı

    +9 (25 derinlik), +7 (63), füzed kare (432) — üçü de sınavdan geçti, fakat tek disk bile ~1200+ tutuyor. Ayrıntı lab günlüğü madde 9’da. Bloklar qrom_disk.py kutusunda saklanıyor; ileride parça lazım olursa geri döneceğiz.

  4. 1991 gönderildi; tablo kilitlendi

    HubSpot accepted dedi. submission.qasm = 1991/1868. Public liderboard kapanıştan sonra şifrelendi; 1991 satırı teyit edilemedi. Son açık sıra: 72 (3317).