mbomb007 meminta kami untuk membuat program pemotongan diri . Ini tantangan yang menarik, tetapi saya pribadi tidak suka mendorong program saya untuk melukai diri sendiri. Saya suka berpikir bahwa, di jantung setiap program ada kupu-kupu yang indah menunggu untuk keluar.
Karena itu, untuk tantangan Code Golf pertama saya, saya menantang Stack Exchange untuk bermetamorfosis menjadi kupu-kupu. Program Anda harus menerima kode sendiri sebagai input dan output I am a caterpillar!
diikuti oleh kode untuk program lain dalam bahasa yang sama (Anda dapat meletakkan pembagi antara output atau tidak ... tapi kami berbicara tentang kupu-kupu, jadi sangat bagus!). Program kedua ini harus di-outputI am a beautiful butterfly!
Metamorfosis: Program ini harus memodifikasi dirinya sendiri, itulah sebabnya ia diberikan sebagai input. Saya tidak ingin program bersarang membosankan yang tidak lain adalah pernyataan cetak I am a caterpillar!
diikuti dengan mencetak kode sumber. Anda harus mengubah kode itu sendiri, jadi jawaban yang paling membosankan yang dapat diterima adalah yang mencetak I am a caterpillar
, kemudian merobek string dari input (yang kebetulan berupa kode) dan mencetaknya. Tentu saja, ini adalah persyaratan kecil yang sangat sulit untuk ditulis, sehingga harus dianggap sebagai "semangat tantangan." Persyaratan formal akan ditetapkan pada "Jika program Anda diberikan string acak dengan panjang yang sama dengan program Anda, harus ada kemungkinan kurang dari 5% untuk mencetak I am a butterfly
ketika program kedua dijalankan."
Ringkasan:
- Tulis program yang, ketika diberikan kode sendiri sebagai input, dicetak
I am a caterpillar!
diikuti dengan blok kode sumber (dengan pembatas di antara mereka atau tidak). - Blok kode sumber kedua ini, ketika dikompilasi / ditafsirkan sebagai bahasa yang sama, dicetak
I am a beautiful butterfly!
- Jika program Anda tidak memasukkan kode sumbernya sendiri sebagai input, dan sebaliknya diberikan string acak karakter yang tidak cocok dengan kode sendiri, hasilnya harus gagal dikompilasi / diinterpretasikan, atau tidak mencetak
I am a butterfly!
setidaknya 95% dari acak string (spirit: Anda diharapkan membaca kode sumber Anda sendiri dari input, dan menjahitnya menjadi kupu-kupu).- Saya nyaman dengan Anda tidak membuktikan ini, selama Anda memegang semangat ide metamorfosis, memodifikasi kode Anda sendiri, tetapi jika Anda mencoba untuk bermain game celah untuk bekerja menggunakan input Anda, berharap untuk memiliki untuk membuktikannya.
- Celah standar berlaku
Saya ingin ini dinilai berdasarkan kecantikan mereka, tetapi itu jelas merupakan pendekatan non-kuantitatif, sehingga rute "jumlah byte" yang biasa dapat digunakan untuk menilai
Bonus : -20% - pilih string 3 huruf apa pun yang tidak cocok dengan 3 huruf pertama dari program Anda. Jika saya menjalankan program ulat, tetapi memodifikasi input sehingga 3 karakter pertama diubah ke yang ditentukan, cetak I am Batman!
saja. Selalu menjadi Batman. ( Aturan string acak yang sama berlaku untuk ini ... metamorfosis! )
Contoh sepele (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