Polyglotlar, aynı anda birden fazla programlama dilinde geçerli olan programlardır. Bu tür poliglotların çoğu, bir dilin belirli yapılarının başka bir dilin yorumları olarak yorumlanacağı şekilde yazılır (örneğin #define
, C'de çeşitli kodlama dillerinde bir yorum olarak yorumlanır).
Yorum içermeyen önemsiz olmayan bir çok dilli yapmanın mümkün olup olmadığını merak ediyorum, ancak herhangi bir boşluk olmayan karakteri kaldırdığınızda hemen değişiyor, bu nedenle böyle bir program bulmanıza meydan okuyorum.
Somut kurallar aşağıdaki gibidir:
- (Çıktı). Programınız, her bir dilinizin altında konsolda bazı çıktılar üretmelidir. Yani, programınızın hiçbir şey yazdırmadan çıkmasına izin verilmez.
- (Varyans). Standart çoklu dil tanımının gevşemesi olarak, programın çıktısı diller arasında değişiklik gösterebilir.
- (Hatalar). Programınız, dillerinizin hiçbirinde hata (geniş tanımlanmış) oluşturmamalıdır. Çoğu dil için bu, derleyiciden ve / veya yorumlayıcıdan sıfırdan farklı bir çıkış kodu döndürmek olarak tanımlanır.
- (Restriksiyon). Kodunuzdan boşluk olmayan herhangi bir karakterin kaldırılması, programınızın dilinizin her biri altındaki davranışını değiştirmesine neden olmalıdır . Program, o dil için geçersiz hale gelerek veya üretilen çıktıyı değiştirerek "değişebilir".
- Bu bir kod mücadelesi . Kazanan, en çok programlama dilinde geçerli olan programdır. Bağlar daha kısa program uzunluğu lehine kırılacaktır.
Kısıtlama kuralı, birkaç karakterin kaldırılması için geçerli değildir. Yani, birden fazla karakteri aynı anda kaldırmanız dillerinizden birinde değişiklik yapmamanız iyi olur.
Sınırlama kuralının Whitespace'i dillerinizden biri olarak kullanamayacağınızı ima ettiğine dikkat edin, çünkü boşluk olmayan herhangi bir karakteri kaldırmak Whitespace programının davranışını değiştirmez.
Python 2 ve Python 3 dilleri için yukarıdaki tüm kısıtlamaları karşılayan basit bir program örneği:
print("Hello World!")
Herhangi bir karakter Çıkarma print
hem diller atımına neden olur NameError
; herhangi bir köşeli parantez veya tırnak işareti SyntaxError
kaldırılırsa, dize karakterlerinden herhangi biri kaldırıldığında çıktı her iki dilde de değişir. ( print("hello", "world")
Yukarıdaki kurallara göre daha ince, ancak yine de geçerli bir program olduğunu unutmayın).
Bu örnek biraz uyuşuk çünkü Python 2 ve Python 3 çok benzer, bu yüzden sadece aynı dilin farklı versiyonlarını (özellikle Python 2 ve Python 3) kullanan başka çözümleri kabul etmeyeceğim.
print("Hello World!")
da geçerli Ruby kodu