mbomb007 bizden kendini yaratan bir program yapmamızı istedi . Bu ilginç bir meydan okuma, ancak kişisel olarak programlarımın kendi kendine sakatlanmalarını teşvik etmekten hoşlanmıyorum. Her programın merkezinde, ayrılmayı bekleyen güzel bir kelebek olduğunu düşünüyorum.
Bu nedenle, ilk Code Golf mücadelem için Stack Exchange'i bir kelebeği metamorph haline getirmek için zorluyorum. Programınız kendi kodunu giriş ve çıkış olarak kabul etmeli ve I am a caterpillar!
ardından aynı dilde başka bir programın kodunu almalıdır (çıkışlar arasına bir bölücü koyabilirsiniz ya da değil ... ama biz kelebekler konuşuyoruz, bu yüzden saygınlık önemlidir!). Bu ikinci program çıktı vermeliI am a beautiful butterfly!
Metamorfoz: Bu program kendini değiştirmeli, bu yüzden kendisini girdi olarak geçiriyor. I am a caterpillar!
Baskı kodundan sonra basılan bir deyimden başka hiçbir şey olmayan sıkıcı iç içe geçmiş bir program istemiyorum . Kodun kendisini metamormelleştirmelisiniz, bu nedenle en sıkıcı kabul edilebilir cevap yazdıran I am a caterpillar
, ardından bir dizgeyi girişten (kod olan) kopyalayan ve basan cevaptır . Tabii ki, bu yazmak için çok zor küçük bir gerekliliktir, bu yüzden bir "meydan okuma ruhu" olarak düşünülmelidir. Resmi gereksinim, "Programınıza, programınızla aynı uzunlukta rastgele bir dize verilirse I am a butterfly
, ikinci program çalıştırıldığında % 5'ten daha az yazdırma şansı olmalıdır ."
Özet:
- Girdi olarak kendi kodunu sağladığında,
I am a caterpillar!
ardından bir kaynak kod bloğunun (aralarında sınırlayıcı olsun veya olmasın) yazdırdığı bir program yazın . - Bu ikinci kaynak kod bloğu, aynı dilde derlendiğinde / yorumlandığında yazdırılıyor
I am a beautiful butterfly!
- Programınıza girdi olarak kendi kaynak kodunu vermediyseniz ve bunun yerine kendi koduna uymayan rastgele bir karakter dizesi verilirse, sonuç ya
I am a butterfly!
rasgele% 95'ine derlenemez / yorumlanamaz ya da yazdırılmamalıdır . stringler (spirit: girişten kendi kaynak kodunuzu okumanız ve onu bir kelebeğin içine dikilmeniz beklenir).- Metamorfoz fikrinin ruhuna sadık kaldığınız sürece, kendi kodunuzu değiştirdiğiniz sürece, bunu ispatlamamanız konusunda rahatım, ancak girdilerinizi kullanarak etrafında çalışmak için boşluk oyunu oynamayı deniyorsanız, kanıtlamak için.
- Standart boşluklar uygulanır
Bunların güzelliği ile değerlendirilmelerini isterdim, ancak bu kesinlikle nicel olmayan bir yaklaşım, bu nedenle normal "bayt sayısı" rotası yargılamak için kullanılabilir
Bonus : -20% - programınızın ilk 3 harfiyle eşleşmeyen 3 harfli bir dize seçin. Tırtıl programını çalıştırıyorsam, ancak girdiyi ilk 3 karakter belirtilenlerle değiştirilecek şekilde değiştirin, I am Batman!
bunun yerine yazdırın . Daima Batman ol. ( Aynı rasgele dize kuralları bu ... metamorfoz için de geçerlidir! )
Önemsiz örnek (python):
"""
print "I am a beautiful butterfly!"
#print "I am Batman!"
"""
import sys
code = sys.stdin.read()
if code.startswith("YYZ"):
# swap the comments between the print statements
code = code.replace("#print", "_a").replace("print", "#print").replace("_a", "print")
code = [3:] # remove """ or XYZ
code = code.split('"""')[0]
print "I am a caterpillar!"
print code