Đây là một thử thách chơi gôn mã, theo đó bạn cần phải nghĩ ra một chương trình hoạt động như một câu đố hoặc một câu đố tự sửa đổi để minh họa cho việc học máy.
Lý lịch
Có một chương trình trí tuệ nhân tạo cơ bản gọi là 'trò chơi tê tê' được mô tả ở đây . Các ý tưởng cơ bản là chương trình khi chạy lần đầu tiên hỏi:
OK, hãy nghĩ về một cái gì đó
Có phải là một con tê tê?
Sau đó, bạn có thể trả lời:
Vâng
Trong trường hợp đó, nó nói:
Tốt Điều đó thật dễ dàng.
Hoặc nếu không, nó nói:
Oh. Vậy thì bạn thắng rồi - Bạn đang nghĩ gì vậy?
Mà bạn có thể nói:
con chó
Nó sẽ nói
Xin vui lòng cho tôi một câu hỏi về một con chó, để tôi có thể nói sự khác biệt giữa một con chó và một con tê tê
bạn có thể trả lời
Nó có ăn kiến không?
Sau đó nó sẽ hỏi:
Câu trả lời cho một con chó là gì?
Mà bạn sẽ nói
Không
Và nó sẽ nói
Cảm ơn
Lần tới khi nó chạy, nó sẽ đặt câu hỏi ở trên và sẽ xây dựng một cây nhị phân của những câu hỏi như vậy.
Các thách thức
Đủ nền. Thách thức này là để viết một chương trình tê tê tự sửa đổi. Luật như sau:
Đầu ra chương trình (như được mô tả ở trên) nên được
STDERR
. Câu trả lời cuối cùng sẽ luôn là "Tốt. Điều đó thật dễ dàng." hoặc "Cảm ơn". Sau này, nó sẽ xuất ra phiên bản hiện tại của chương trình hoặc phiên bản mới của chương trình kết hợp câu hỏi vớiSTDOUT
. Không có câu trả lời được viết bằng ngôn ngữ không hỗ trợ viếtSTDOUT
vàSTDERR
đọc từSTDIN
sẽ có hiệu lực.Nói cách khác, trong UNIX, bạn có thể gọi chương trình như thế này:
thí dụ:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- Chương trình phải sử dụng chính xác các lời nhắc được chỉ định (vì rút ngắn lời nhắc cho thấy không có kỹ năng). Các lời nhắc là (không có dấu ngoặc kép và trong đó% s được thay thế) như sau:
danh sách:
"OK, please think of something"
"Is it %s?"
"Good. That was soooo easy."
"Oh. Well you win then -- What were you thinking of?"
"Please give me a question about %s, so I can tell the difference between %s and %s"
"What is the answer for %s?"
"Thanks"
Khi hy vọng có / không trả lời, chương trình của bạn nên chấp nhận
y
hoặcyes
trong bất kỳ trường hợp cho 'yes', vàn
hoặcno
trong bất kỳ trường hợp cho 'không'. Những gì bạn làm với đầu vào không phù hợp là tùy thuộc vào bạn. Chẳng hạn, bạn có thể quyết định lấy bất kỳ câu trả lời nào bắt đầu bằngy
hoặcY
là "có", và bất cứ điều gì khác là không.Bạn có thể giả sử rằng tên của những thứ được cung cấp và các câu hỏi chỉ bao gồm các chữ cái ASCII, số, dấu cách, dấu gạch nối, dấu hỏi, dấu phẩy, dấu chấm hết, dấu hai chấm và dấu chấm phẩy, tức là chúng khớp với regex
^[-?,.;: a-zA-Z]+$
. Nếu bạn có thể đối phó với nhiều hơn thế (đặc biệt là các ký tự trích dẫn trong ngôn ngữ bạn đã chọn), bạn sẽ có được tự mãn, nhưng không được thêm bất kỳ điểm nào.Chương trình của bạn có thể không đọc hoặc viết bất kỳ tập tin (không bao gồm
STDIN
,STDOUT
vàSTDERR
), hoặc từ mạng; cụ thể là nó không thể đọc hay viết mã riêng từ đĩa. Trạng thái của nó phải được lưu trong mã chương trình.Khi chương trình được chạy và đoán câu trả lời chính xác, nó phải thực hiện chính xác như một câu hỏi, tức là nó phải ghi vào
STDOUT
chính xác mã của chính nó, không thay đổi.Khi chương trình được chạy và đoán câu trả lời không chính xác, nó phải mã hóa câu hỏi và câu trả lời mới được cung cấp trong mã của chính nó và viết nó
STDOUT
vào mã riêng của nó, để nó có khả năng phân biệt giữa dự đoán ban đầu và đối tượng mới được cung cấp, trong ngoài ra để phân biệt giữa tất cả các đối tượng trước đây.Bạn phải có khả năng đối phó với nhiều lần chạy phần mềm để nó tìm hiểu về nhiều đối tượng. Xem ở đây để biết ví dụ về nhiều lần chạy.
Chạy thử được đưa ra tại liên kết trong đầu (rõ ràng chỉ bao gồm hộp thoại
STDIN
vàSTDERR
hộp thoại).Lỗ hổng tiêu chuẩn được loại trừ.