(Dil) yılanın ne kadar sürüyor?


14

İtibaren ardından üçüncü dereceden quine meydan, görev bir yazmaktır Ouroboros programı mümkün olduğunca çok sayıda diller olarak kullanır.

Yani, A dilinde, B dilinde pB programı çıkaran bir program pA yazın. Program pB, C dilinde program pC çıktısını vermelidir ve sonunda bir program sonunda A dilinde orijinal program pA çıkana kadar devam eder.

Döngünüzdeki hiçbir dil aynı veya birbirinin alt kümeleri veya üst kümeleri olamaz. Döngüdeki programların hiçbiri aynı olmayabilir.

En uzun dil zinciri kazanır. Kaynak kodun uzunluğu tie-breaker olacaktır.

Ventero tarafından verilen uzunluk 3'e ait örnek bir çözüm.

s='print q<puts %%q{s=%r;print s%%s}>';print s%s

Python ile bu Perl snippet'ini üretir

print q<puts %q{s='print q<puts %%q{s=%r;print s%%s}>';print s%s}>

Aşağıdaki Ruby kodunu oluşturur

puts %q{s='print q<puts %%q{s=%r;print s%%s}>';print s%s}

daha sonra orijinal Python snippet'ini yazdırır:

s='print q<puts %%q{s=%r;print s%%s}>';print s%s



@Ypnypn Bunun bir kopyası değil mi? Bu, kaynak kod uzunluğunun bir kravat kırıcısıyla döngüyü mümkün olduğunca uzun yapmaktır. Daha önce hiç kimse 4 Ouroborous uzunluğunu gönderme şansı bulamadı :) Ayrıca bir döngü bir zincirden farklıdır.

Aslında buna çok benziyor , ancak dizinin dönmesi gerekmiyordu, bu yüzden quine bileşeni yoktu.
Martin Ender

4
50 dil canavarı, biz başlamadan önce kazanan gibi görünüyor.

Yanıtlar:


8

İşte 4 dilden oluşan bir döngü:

C -> Bash -> Parti -> Python -> C

C

main(){char *c="echo %cecho print %cmain(){char *c=%c%c%s%c%c;printf(c,34,39,92,34,c,92,34,39,34);}%c%c";printf(c,34,39,92,34,c,92,34,39,34);}

darbe

echo "echo print 'main(){char *c=\"echo %cecho print %cmain(){char *c=%c%c%s%c%c;printf(c,34,39,92,34,c,92,34,39,34);}%c%c\";printf(c,34,39,92,34,c,92,34,39,34);}'"

yığın

echo print 'main(){char *c="echo %cecho print %cmain(){char *c=%c%c%s%c%c;printf(c,34,39,92,34,c,92,34,39,34);}%c%c";printf(c,34,39,92,34,c,92,34,39,34);}'

piton

print 'main(){char *c="echo %cecho print %cmain(){char *c=%c%c%s%c%c;printf(c,34,39,92,34,c,92,34,39,34);}%c%c";printf(c,34,39,92,34,c,92,34,39,34);}'

Çok etkileyici!
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.