29. IOCCC 2025 kazananları açıklandı
(ioccc.org)- International Obfuscated C Code Contest (Uluslararası Obfuscated C Kod Yarışması), en yaratıcı, en sanatsal ve okunması en zor 'obfuscated' C kodunu yarıştıran bir bilgisayar programlama yarışmasıdır
- 2020~2024 arasındaki aradan sonra art arda ikinci kez düzenlenen yarışmada, başvuru sayısı geçen yılla benzer olsa da başvuruların ölçeği ve kalitesi tarihî düzeyini korudu
- Yusuke Endoh, Nick Craig-Wood ve Don Yang üçer ödüllü eser çıkararak birer hat-trick yaptı; ayrıca Taiwan çıkışlı yeni bir kazanan da ortaya çıktı
- Subleq bilgisayarı, GameBoy emülatörü, patch/diff quine gibi çeşitli kazanan eserler seçildi ve her ödüllü çalışmaya Fun challenge eklendi
- Kazananlar, Our Favorite Universe YouTube kanalı canlı yayınıyla duyuruldu; bir sonraki IOCCC30'un 2026 sonlarında yapılması planlanıyor
Başlangıç noktası
- 2025 ödüllü IOCCC girdilerine ait bağlantılar, sayfanın altındaki kazananlar listesinde görülebilir
- Her ödüllü girdinin
index.htmldosyası, ödüllü programı derlemek ve çalıştırmak için gereken bilgilerin büyük bölümünü sunar - Ödüllü kaynak kodu okuyarak nasıl çalıştığını anlayabilir, daha ayrıntılı bilgi için yazarın açıklamasına bakabilirsiniz
- Bu yılki yarışmanın tüm kazananları sıkıştırılmış tarball olarak indirilebilir
Bu yarışmaya dair genel notlar
- IOCCC29'daki başvuru hacmi ve başvuru kalitesi, tarihî zirveye yakın bir düzeydeydi
- IOCCC28, 4 yıllık aradan sonra düzenlendiği için katılımcıların çalışmalarını cilalamaya vakti olduğu ve bunun da rekor sayıda başvuru ile normalden yüksek kaliteyi getirdiği yönünde tahminlere konu olmuştu
- IOCCC29, 2020~2024 arasındaki boşluğun ardından üst üste yapılan ikinci yarışma olmasına rağmen, başvuru sayısı önceki yılla benzer kaldı ve genel kalite seviyesi de yüksekliğini korudu
- IOCCC28'in bitiminden itibaren yeni başvuru kapanışı, jüri süreci, kazanan seçimi, web sitesi güncellemesi ve Our Favorite Universe canlı yayınının hazırlanma süreci dikkatle belgelendi
- Bu belgeleme ek zaman ve emek gerektirdi, ancak sonuç olarak IOCCC'nin işleyişinin genelinde iyileştirme sağlandı
- IOCCC29 kazananlarının Our Favorite Universe YouTube kanalında duyurulmasından birkaç gün sonra, ana program kaydı ayrı bölümlere ayrılacak
- Her ödüllü girdinin
index.htmldosyasının üst tarafına yeni bir Award presentation bölümü ve ilgili YouTube bölüm bağlantısı eklenecek -
Eğlenceli meydan okuma bilgisi
- Bu yılın ödüllü çalışmalarına, “Judges’ remarks” bölümünün altında eğlenceli meydan okumalar eklendi
- Belirli bir ödüllü çalışmanın ne yaptığını anladıktan sonra ilgili meydan okumayı denemeniz önerilir
- Bazı görevler diğerlerinden daha kolaydır; kimi durumlarda
prog.cya da ilgili dosyaların alternatif sürümünü üretmeniz istenir - Bazı görevler ise belirli bir öğe hakkında açıklama yazmanızı ister
- Belirli bir kazananın “A fun challenge” bölümündeki görev hâlâ still open durumundaysa, GitHub pull request göndererek katkıda bulunabilirsiniz
- Meydan okuma kapanmış olsa bile daha iyi bir çözümünüz olduğunu düşünüyorsanız yine GitHub pull request gönderebilirsiniz
- IOCCC Judges bunun daha iyi bir çözüm olduğuna katılırsa değerlendirmeye alınır
- Ödüllü bir çalışmanın eğlenceli meydan okuması için daha iyi bir geliştirme öneriniz varsa, IOCCC Judges incelemesi için GitHub pull request gönderebilirsiniz
-
Bu yarışmanın kuralları ve yönergeleri
- Bu yarışmada uygulanan son kurallar, 2025 rules sürüm 29.15 2025-12-02 oldu
- Bu yarışmada uygulanan son yönergeler, 2025 guidelines sürüm 29.08 2025-12-02 oldu
- IOCCC29'un kuralları ve yönergeleri önceki yarışmaya kıyasla büyük ölçüde yeniden düzenlendi
- Birden fazla gönüllü, IOCCC Judges için faydalı düzenlemeler, ifade revizyonları, birleştirmeler ve genel yapı iyileştirmeleri sağladı
-
Bir sonraki yarışmaya doğru
- IOCCC30'un 2026 sonlarına doğru başlaması planlanıyor
- IOCCC30'un benzer bir süre boyunca devam edip 2027'nin ilk çeyreğinin sonlarına doğru bitmesi planlanıyor
- IOCCC30'un açılışı için gerekli işleri yürütürken, IOCCC29 kapanışında olduğu gibi iç süreçlerin yeniden belgelenmesi planlanıyor
- IOCCC29 kazananları yayımlandıktan yaklaşık 2~3 hafta sonra ve 2025 directory tree için ilk pull requests taleplerinden bazıları işlendiğinde, IOCCC Judges bir IOCCC vacation yapmayı planlıyor
- IOCCC28 kazananları açıklandıktan sonra da bir IOCCC vacation planlanmıştı; ancak mkiocccentry repo'sundaki hata düzeltmeleri ve iyileştirmeler çok zaman aldığı için depo istikrara kavuştuğunda IOCCC29'un açılış zamanı gelmişti
- Bu kez, post-IOCCC29 IOCCC vacation sona erdikten sonra mkiocccentry repo PRs üzerinde çalışılması planlanıyor
Bazı ödüllü çalışmalara dair notlar
- Jüri turlarının son setinin nihai turuna kalan başvurular için olası yazılar hazırlanırken, bazı başvurular son turun en son aşamasında elendi
- Geriye kalan çeşitli girdiler için ek hayranlık ve daha yüksek değerlendirme oluştu
- Kazanan yazarlar, önceki kazanan yazar bölgelerinden geldiği gibi, IOCCC29'da yeni bir bölge olan Taiwan çıkışlı jingp49 da yer aldı
- Üç yazarın da üçer girdiyle ödül alması, Hat trick) içinde Hat-tricks oluşturdu
- IOCCC29'un dikkat çeken bazı ödüllü çalışmaları şunlar oldu
- 2025/cable: Subleq bilgisayarı
- 2025/cesmoak: kara delik delikli kart Fortran
- 2025/endoh3: patch/diff quine
- 2025/jhshrvdp: yarı rogue-like oyun
- 2025/jingp49: Dr. WHO dizisi
- 2025/ncw1: GameBoy emülatörü
- 2025/tompng: deniz sesi üreticisi
- 2025/uellenberg: quine pong
- 2025/yang2: Zoltraak kodlaması
- Yukarıdaki liste, IOCCC29'daki çok sayıdaki olağanüstü ödüllü çalışmadan yalnızca bir kısmını içeriyor
-
Ödül alamayan bazı başvurulara dair notlar
- Son seçime çok yaklaşmasına rağmen ödül alamayan çok sayıda harika başvuru vardı
- Her yazarın girdisine kattığı emek takdir edilse de, ödüller yalnızca emeğe göre verilemez
- IOCCC29'a gönderilip ödül alamayan kodlar, gözden geçirilip iyileştirildikten sonra IOCCC30 için yeniden gönderilebilir
- IOCCC29 kazananlarından en az biri, önceki yarışmada ödül alamamış bir kodun geliştirilmiş sürümüdür
-
Bu yıl kazanamayan katılımcılara teşvik
- Bu yılki IOCCC başvurularına çok emek verildi, ancak her başvuruya ödül vermek mümkün değil
- Her başvuruya ödül verilmesi, en iyi kabul edilen ve ödülü gerçekten hak eden başvuruların anlamını azaltır
- Final turuna kalan bir başvuru kazanmaya yetecek kadar iyi olsa bile, benzer ama biraz daha iyi bir başvuruya yenilebilir
- Böyle olduğu düşünülen başvurular için bir sonraki IOCCC'ye geliştirilmiş sürüm göndermek önerilir
- Birkaç kez revize edilip yeniden gönderildikten sonra kazanan düzeyine ulaşan başvurular da vardır
- Bir sonraki IOCCC için tamamen farklı türde bir başvuru denemek de mümkündür
- Bir sonraki IOCCC'ye ödül alamayan bir girdiyi geliştirip yeniden göndermeyi planlamıyorsanız, onu yayımlayabilirsiniz
Ödüllü çalışmaları derleme ve çalıştırma
- Bazı C derleyicileri yeterince iyi sonuç vermeyebilir
- Kullandığınız derleyici iyi çalışmıyorsa, en güncel
clangveyagccile derlemeyi deneyebilirsiniz - Ödüllü çalışmaları derlerken ya da çalıştırırken sorun yaşarsanız şu SSS bölümlerine bakabilirsiniz
- Düzeltme gönderimleri hakkında ek bilgi için şu SSS bölümlerine bakabilirsiniz
- How to submit a fix: girdi düzeltmesi nasıl gönderilir
- Update author information: IOCCC yazar bilgileri nasıl düzeltilir veya güncellenir
2025 29. IOCCC kazananları
- Tüm kazananlar 2025 kazananlarını indir bağlantısıyla sunuluyor
- 2025/ayu: IMO Ödülü
- 2025/cable: En İyi Hayali Emülatör Ödülü
- 2025/cesmoak: Retro Uzay Ödülü
- 2025/diels-grabsch: En İyi One-liner Ödülü
- 2025/dogon: Tutarlı Şekilde Sabit Olan Ödülü
- 2025/endoh1: Göz Kamaştırma İhtimali En Yüksek Ödül
- 2025/endoh2: Şok Etme İhtimali En Yüksek Ödül
- 2025/endoh3: En İyi Dayanıklılık Ödülü
- 2025/ferguson: Karşıtlık Ödülü
- 2025/howe: İstila Etme İhtimali En Yüksek Ödül
- 2025/jhshrvdp: Işınlanma İhtimali En Yüksek Ödül
- 2025/jingp49: Who won Ödülü
- 2025/kurdyukov: Sayma İhtimali En Yüksek Ödül
- 2025/mattpep: En Obfuscated Seçenek Ödülü
- 2025/ncw1: En İyi Gerçek Emülatör Ödülü
- 2025/ncw2: En İyi Kesirli Emülatör Ödülü
- 2025/ncw3: Unicode'u En İyi Kullanım Ödülü
- 2025/tompng: En Rahatlatıcı Ödül
- 2025/uellenberg: Masa Tenisi Ödülü
- 2025/yang1: Bileşik Ödül
- 2025/yang2: En Büyülü Sözcük Ödülü
- 2025/yang3: INABIAF Ödülü
1 yorum
Hacker News yorumları
GameBoy emülatörü kodu, GameBoy şeklinde bile görünüyor. Yavaş alkışı hak edecek kadar çılgınca ve kişisel olarak bu yılki işler arasında en çok beğendiğim bu
https://github.com/ioccc-src/winner/blob/master/2025/ncw1/pr...
Yazarı Nick Craig-Wood, rclone'u yapan kişi
https://github.com/ncw/ioccc-gameboy
Orada kabaca obfuscate edilmemiş bir sürüm de var. Asıl üzerinde çalıştığım taraf oydu; sonrasında bir programla tüm değişken adlarını ezip GameBoy şekline uyacak şekilde sıkıştırdım
Yarışmadaki boyut sınırı en zor kısımdı. IOCCC başvurularında boşluk hariç 2503 karaktere izin veriliyor ve toplam kod boyutu 4KB, ama içine Z80 işlemcisiyle GameBoy donanım emülatörünü sığdırmak gerçekten çok küçük bir alan
Başta C ile tam bir GameBoy emülatörü yazdım ve boşluk hariç yaklaşık 6000 karakterden başladım. Sonra bunu 2503 karakter sınırına indirmek için yaklaşık 100 saat harcadım ve bir süre sığıp sığmayacağından emin değildim
Hedefi Tetris'i çalıştırmak olarak belirledim. Tetris nispeten basit bir oyun olduğu için Z80 emülatöründeki half carry bayrağı ya da GameBoy emülasyonundaki windowing sistemi gibi gereksiz özellikleri çıkardım. Ayrıca C kodunu korkunç derecede zorladım ve
implicit intile bir daha unutamayacağım şeyler yaptım. IOCCC kural denetleyicisi C programı olarak yazılmış olduğundan, bunu tersine mühendislikle inceleyip açıklarını bulmaya da zaman harcadım. Özellikle bazı operatörlerin yalnızca tek bir token olarak sayıldığını keşfetmem çok işe yaradıYeterince küçüldükten sonra içine çalıştıracak oyunlar da koymam gerekiyordu. Z80 assembly ile yazılmış bir test programı, assembly ile yapılmış bir pi hesaplayıcısı, gbdk-2020 ile C'de yapılmış 3D tic-tac-toe ve C ile yazılmış bir satranç programı olmak üzere dört tane hazırladım. Ayrıca epey açık kaynak oyunların da bu emülatörde çalıştığını fark ettim; mümkün olduğunda bir indirici de ekledim. Şaşırtıcı biçimde BCD aritmetiği kullanan oyun çok fazla değildi
Eğlenceli bir projeydi
https://github.com/ncw/ccforth/tree/master/examples/gameboy
En çok hoşuma giden şey, Linux ve Doom çalıştırabilen 366 baytlık bir C programı emülatörü oldu [0]
Bu sanal makine, OISC yani tek komutlu bilgisayar uyguluyor [1]
[0] https://github.com/ioccc-src/winner/blob/master/2025/cable/p...
[1] https://github.com/ioccc-src/winner/blob/master/2025/cable/R...
Dosya açma, shell komutları çalıştırma,
strstr,strcpygibi standart kütüphane rutinlerinden bir sürü yazabilirdim ve açıkçası öğrenme sürecinde gerekli olmayan şeyleri de uyguladım. Örneğinprint(getenv("HOME"))çalışıyor. Ama kısa süre sonra test ve gösteriş için örnek programlara ihtiyacım olduğunu fark ettimBu yüzden doğal olarak ilk uyguladığım gerçek program bir brainfuck yorumlayıcısı oldu. Böylece dilim artık dolaylı olarak Turing-complete
İlk sürüm, meşhur mandelbrot programının çıktısını üretmek için 9 dakika harcıyordu; ben de çeşitli optimizasyonlar yaptım ve sonra hız kazanmak için
switch/casedeyimi desteği ekledim. Artık aynı çıktıyı 2 dakikada üretebiliyor, yani hâlâ iyileştirme payı var ama epey ilerleme de kaydedildiKendi dilimin içinde başka bir dili uygulayan bu biraz hileli yöntem bana çok tatmin edici geldi. Tabii her şey eğlence ve öğrenme amaçlı; benim dâhil kimsenin bunu ciddi ciddi kullanması için yapılmış değil
https://github.com/skx/s-lang
Burada
m[b] = m[b] - m[a]olarak ayarla deniyorSonra GitHub'daki referans implementasyona [2] bağlanıyor; orada ise yalnızca peçete notunun [3] önemli olduğu söyleniyor. Bu sürümde okunan tüm değerler 4'e bölünüyor ve referans implementasyon [4] da bunu destekliyor. Ama neden 2 yerine 4 seçildiği net değil. Sanki bir bit boşa harcanıyormuş gibi görünüyor. Bu bitin gerekli olup olmadığını ya da gelecekteki genişletmeler için mi ayrıldığını merak ediyorum
Orijinal implementasyon 4'e bölmüyordu ve bu sonradan eklenmiş gibi görünüyor; ama LLVM kod üretimini biraz kolaylaştırması dışında neden gerektiğini anlayamadım. 4'e bölmeden anlatılan sistemin imkânsız olup olmadığını doğrulamak için herhalde epey örnek üzerinden gitmek gerekir. Muhtemelen sadece çift adreslere erişilebilmesi ve PC'nin her seferinde 3 artması yüzünden kod konumlarına referans vermek gerçekten zahmetli olurdu
Referans implementasyon, 64. konuma erişildiğinde sihirli biçimde davranıp 64-67 konumlarını geçerli saat ile üzerine yazıyor. Peçete açıklamasında var ama ana sayfa açıklamasında yok
Her iki açıklama da sihirli
-1adresinden söz ediyor; bu yüzden implementasyona bağlı UTC saatinin, serbestçe kullanılabilecek belleği bozmak yerine neden negatif bir adresle uygulanmadığı garip geliyorHer iki açıklama da periyodik zamanlayıcı kesmesi sürecinden söz ediyor ve bu da biraz talihsiz. Çünkü 0 adresi kesme işleyicisinin konumu, 1 adresi ise kaydedilmiş PC olarak yeniden kullanılıyor; dolayısıyla program başlar başlamaz başlangıç giriş noktası olan 0. konumun üzerine yazılması gerekiyor
[1] https://eternal-software.org/
[2] https://github.com/adriancable/eternal
[3] https://github.com/adriancable/eternal/blob/main/docs/napkin...
[4] https://github.com/adriancable/eternal/blob/main/vm/vm.c
https://www.youtube.com/live/MoWCwZx1Swc?si=eIOlRsKWNKRVRZeB...
Merak eden olur diye: IOCCC, yönergelerinde LLM kullanımına açıkça izin veriyor
"IOCCC has a rich history of remarkable winning entries created by authors who skillfully employed various techniques (often their own tools) to develop their code."
Tersi de ilginç. LLM, obfuscated edilmiş kodun ne yaptığını ne kadar iyi tahmin edebilir?
IOCCC'nin makine yardımıyla yapılmış olabilecek kodları kabul etmesini iyi buluyorum. Bu sayede tamamen el emeğiyle yapılmış kazananların değeri daha da artıyor gibi görünüyor
https://www.ioccc.org/2025/rules.html
Burada kastedilenin özel amaçlı kod üreticileri olduğunu düşünüyorum. Açıkça "zengin bir tarih" deniyor; AI'ın olmadığı dönemleri de kapsayan bir ifadeyse neden bunun AI anlamına geldiğini düşünelim, emin değilim
Web sitesinin kendisi de obfuscated olduğu için C kaynak kodunu bulmak hiç kolay değil
Underhanded C Contest'in geri dönmesini isterdim. Obfuscated C katılımcılarını küçümsemek için söylemiyorum ama öteki bana çok daha ilginç geliyordu
Burada bir Frieren [1] referansı var!
https://www.ioccc.org/2025/yang2/index.html
Ana karakterlerden birinin adı Fern ve neredeyse tamamen yaygın saldırı büyüsü Zoltraak'ı kullanıyor
[1] https://en.wikipedia.org/wiki/Frieren
Aman tanrım, benim yaptığım Game Boy Yaşam Oyunu uygulaması kazananlardan birinin içinde yer alıyor!
./try.shbetiğine bir seçenek ekledim2000 yılında ilk staj mülakatıma girmiştim; C programcılarından oluşan bir ekibe katılacaktım. Mülakatçılar bana eski kazananlardan birini gösterip kodu incelememi söyleyerek odadan çıktılar. Yaklaşık 5 dakika sonra geri dönüp sordular
– Eee?
– Üzgünüm, vaktinizi boşa harcadım. Hiçbir şey anlayamadım
Sonra hepsi kahkahaya boğuldu ve işe alım sürecini başlatmamız gerektiğini söylediler
Bugün hâlâ stajyerlerle böyle dalga geçiyorlar mı merak ediyorum. O zamanki afallamış hâlimi düşününce hâlâ gülüyorum
Ooo! IOCCC geri dönmüş!
Organizatörlere sevgiler <3 <3 <3 IOCCC'yi sürdürdüğünüz için teşekkürler, umarım bir daha asla kaybolmaz
Durun, bunu pek anlayamadım
Obfuscated C Code Contest olur da Capture the Flag olmaz mı yani? AI yüzünden mi?
https://twit.tv/posts/tech/ai-disrupts-capture-flag-what-mea...
Eğer soru "Akıllıca bir fikir bulup sonra AI'dan bunu IOCCC kısıtlarına uygun şekilde uygulamasını istemek mümkün değil mi?" ise, mevcut AI araçlarının bunu henüz insan jüri üyelerinin değerli bulacağı bir düzeyde yapabildiğini sanmıyorum