xmas.c kod analizi
- 1988'de yazılan
xmas.c adlı C kodu, Uluslararası Obfuscated C Kod Yarışması'nı kazandı.
- Bu kod, kendi çıktısından daha küçük boyutta olup metin sıkıştırma standartlarına yeni bir yön önerdi.
- Kod derlenip çalıştırıldığında parametre olmadan çalışır ve ilginç biçimde daktilo tuşlarına rastgele basılmış gibi görünür.
Kodun çıktısı
- Kod çalıştırıldığında "Noel'in On İki Günü" şarkısının sözleri yazdırılır.
- Çıktı, Noel'in birinci gününden on ikinci gününe kadar verilen hediyeleri sıralayan sözlerden oluşur.
Analiz
- Kodu anlamak için onu daha okunabilir bir biçimde yeniden yazmak gerekir.
- Yeniden yazım sürecinde, belirli dizgeler kullanılarak bir yerine koyma şifresinin çözüldüğü ortaya çıkar.
t değişkeni, özyinelemenin yönünü kontrol etmede önemli bir rol oynar.
- Kod, özyineleme yoluyla yerine koyma şifresini çözer ve Noel şarkısının sözlerini yazdırır.
Basitleştirme
- Program anlaşıldıktan sonra, bazı döngüler ve C string kütüphanesi işlevleri kullanılarak kod basitleştirilebilir.
- Sonunda kod öyle sadeleştirilebilir ki yalnızca şarkı sözlerini yazdıran bir hale indirgenir.
GN⁺ görüşü
- Yaratıcılığın zirvesi:
xmas.c kodu, yerine koyma şifresi ve özyineleme kullanarak obfuscated kod yazmanın mükemmel bir örneğidir. Bu, programlamada yaratıcılığın nasıl ifade edilebileceğini gösterir.
- Eğitsel değer: Kodu analiz etme ve anlama süreci, başlangıç seviyesindeki yazılım mühendisleri için programlama becerilerini geliştiren iyi bir alıştırma olabilir.
- Eğlence ve ilgi: Bu kod, programlamanın eğlenceli yönünü keşfetmek ve karmaşık problemleri çözmenin keyfini yaşamak için bir fırsat sunar.
1 yorum
Hacker News yorumları
TeX dünyasında benzer bir örnek olarak
xii.texvar:pdftexçalıştırdığınızda, beklediğinizden farklı bir sonuç elde edebiliyorsunuz. Buna shreevatsa.net üzerinden bakılabilir.Bu kod, Kolmogorov karmaşıklığını akla getiriyor:
İlk yayımlandığında bu kodu almıştım ama dosya adı farklıydı:
carol.cadıyla kaydedilmişti ve modern bir sistemde derleyip çalıştırınca derleyici uyarı mesajları verdi.IOCCC (International Obfuscated C Code Contest) 2023'te de hâlâ aktifti:
Uyarıları kapatırsanız modern kod deposunda (trunk) da çalışıyor:
Rosetta Code'da da benzer bir çalışma var:
Üniversitenin son döneminde hocamın bu kod parçasını dersin başında göstermesine dair güzel bir anım var:
Üniversite yıllarında C diliyle ilgili basılı ders materyallerinde bu kod vardı; bir kez kendim yazmıştım:
Bu kod, C dilinin çok eski bir sürümünü kullanıyor:
mainfonksiyonunun imzası eski K&R stilini kullanıyor; bu yüzden bugün artık derlenmeyeceğini söyleyen bir görüş var.IOCCC'de Larry Wall'un iki kez kazanmış olması ile onun Perl'ü tasarlamış olması arasındaki bağlantı, ilginç noktalardan biri: