mbomb007 yêu cầu chúng tôi thực hiện một chương trình tự cắt xén . Đây là một thử thách thú vị, nhưng cá nhân tôi không muốn khuyến khích các chương trình của mình tự cắt xén. Tôi thích nghĩ rằng, tại trung tâm của mọi chương trình là một con bướm xinh đẹp đang chờ đợi để thoát ra.
Như vậy, đối với thử thách Code Golf đầu tiên của tôi, tôi thách thức Stack Exchange biến hình một con bướm. Chương trình của bạn nên chấp nhận mã của chính nó làm đầu vào và đầu ra, I am a caterpillar!
sau đó là mã cho một chương trình khác có cùng ngôn ngữ (bạn có thể đặt một dải phân cách giữa các đầu ra hoặc không ... nhưng chúng ta đang nói về những con bướm, vì vậy tính tốt đẹp!). Chương trình thứ hai này sẽ xuấtI am a beautiful butterfly!
Biến thái: Chương trình này nên tự sửa đổi, đó là lý do tại sao nó được truyền chính nó làm đầu vào. Tôi không muốn một chương trình lồng nhau nhàm chán mà không có gì ngoài một câu lệnh in I am a caterpillar!
theo sau là in mã nguồn. Bạn phải tự biến hình mã, vì vậy câu trả lời dễ chấp nhận nhất là câu in I am a caterpillar
, sau đó xé một chuỗi ra khỏi đầu vào (tình cờ là mã) và in ra. Tất nhiên, đây là một yêu cầu rất nhỏ để viết, vì vậy nó nên được coi là một "tinh thần của thách thức". Yêu cầu chính thức sẽ được đặt ở "Nếu chương trình của bạn được cung cấp một chuỗi ngẫu nhiên có cùng độ dài với chương trình của bạn, sẽ có ít hơn 5% cơ hội in I am a butterfly
khi chương trình thứ hai được chạy."
Tóm lược:
- Viết chương trình, khi được cung cấp mã riêng làm đầu vào, sẽ in
I am a caterpillar!
theo sau là một khối mã nguồn (có dấu phân cách giữa chúng hay không). - Khối mã nguồn thứ hai này, khi được biên dịch / giải thích là cùng một ngôn ngữ, sẽ in
I am a beautiful butterfly!
- Nếu chương trình của bạn không được cung cấp mã nguồn riêng làm đầu vào và thay vào đó được cung cấp một chuỗi ký tự ngẫu nhiên không khớp với mã của chính nó, kết quả phải không được biên dịch / giải thích hoặc không được in
I am a butterfly!
ít nhất 95% ngẫu nhiên chuỗi (tinh thần: bạn sẽ đọc mã nguồn của riêng bạn từ đầu vào và ghép nó lại với nhau thành một con bướm).- Tôi cảm thấy thoải mái với bạn khi không chứng minh điều này, miễn là bạn giữ vững tinh thần của ý tưởng biến thái, sửa đổi mã của riêng bạn, nhưng nếu bạn đang cố gắng chơi trò chơi kẽ hở để sử dụng đầu vào của mình, hãy mong đợi để chứng minh điều đó.
- Áp dụng sơ hở tiêu chuẩn
Tôi muốn những điều này được đánh giá bởi vẻ đẹp của chúng, nhưng đó là một cách tiếp cận không định lượng, do đó, tuyến đường "số byte" thông thường có thể được sử dụng để đánh giá
Phần thưởng : -20% - chọn bất kỳ chuỗi 3 chữ cái nào không khớp với 3 chữ cái đầu tiên của chương trình của bạn. Nếu tôi chạy chương trình sâu bướm, nhưng sửa đổi đầu vào để 3 ký tự đầu tiên được thay đổi thành ký tự được chỉ định, I am Batman!
thay vào đó hãy in . Luôn luôn là Người Dơi. ( Các quy tắc chuỗi ngẫu nhiên tương tự áp dụng cho ... biến thái này! )
Ví dụ tầm thường (trăn):
"""
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