Mục tiêu của thử thách này là viết một chương trình có thể đoán một từ trong số lần thử nhỏ nhất có thể. Nó dựa trên khái niệm của chương trình truyền hình Lingo ( http://en.wikipedia.org/wiki/Lingo_(US_game_show) ).
Quy tắc
Với một độ dài từ được truyền làm đối số đầu tiên trên dòng lệnh của nó, chương trình người chơi sẽ xử lý năm lần thử đoán từ bằng cách viết một phỏng đoán trên đầu ra tiêu chuẩn của nó theo sau là một \n
ký tự.
Sau khi đoán, chương trình nhận được một chuỗi trên đầu vào tiêu chuẩn của nó, cũng theo sau là một \n
ký tự.
Chuỗi có cùng độ dài với từ để đoán và bao gồm một chuỗi các ký tự sau:
X
: có nghĩa là chữ cái đã cho không có trong từ để đoán?
: có nghĩa là chữ cái đã cho có mặt trong từ để đoán, nhưng tại một vị trí khácO
: có nghĩa là chữ cái ở vị trí này đã được đoán chính xác
Ví dụ: nếu từ để đoán là dents
và chương trình gửi từ đó dozes
, nó sẽ nhận được OXX?O
vì d
và s
là chính xác, e
bị đặt sai vị trí o
và z
không có mặt.
Hãy cẩn thận rằng nếu một bức thư là lần hiện diện ở những nỗ lực đoán hơn trong từ đoán, nó sẽ không được đánh dấu là ?
và O
lần nhiều hơn số lần xuất hiện của chữ trong từ để đoán. Ví dụ: nếu từ để đoán là cozies
và chương trình gửi tosses
, nó sẽ nhận được XOXXOO
vì chỉ có một từ s
để định vị.
Từ được chọn từ một danh sách từ tiếng Anh. Nếu từ được gửi bởi chương trình không phải là một từ hợp lệ có độ dài chính xác, thì lần thử đó được coi là một lỗi tự động và chỉ X
được trả về.
Chương trình trình phát nên giả sử rằng một tệp có tên wordlist.txt
và chứa một từ trên mỗi dòng có trong thư mục làm việc hiện tại và có thể được đọc khi cần thiết.
Đoán chỉ nên bao gồm các ký tự chữ thường ( [a-z]
).
Không có hoạt động mạng hoặc tập tin khác được phép cho chương trình.
Trò chơi kết thúc khi một chuỗi chỉ bao gồm O
được trả về hoặc sau khi chương trình đã thực hiện 5 lần thử và không thể đoán từ.
Chấm điểm
Điểm của trò chơi được tính theo công thức đã cho:
score = 100 * (6 - number_of_attempts)
Vì vậy, nếu từ được đoán chính xác trong lần thử đầu tiên, 500 điểm sẽ được đưa ra. Lần thử cuối cùng có giá trị 100 điểm.
Không đoán được từ cho điểm không.
Cái hố
Các chương trình người chơi sẽ được đánh giá bằng cách cố gắng để họ đoán 100 từ ngẫu nhiên cho mỗi độ dài từ 4 đến 13 ký tự.
Lựa chọn từ ngẫu nhiên sẽ được thực hiện trước vì vậy tất cả các mục sẽ phải đoán cùng một từ.
Chương trình chiến thắng, và câu trả lời được chấp nhận, sẽ là người đạt được điểm số cao nhất.
Các chương trình sẽ được chạy trong một máy ảo Ubuntu, sử dụng mã tại https://github.com/noirotm/lingo . Việc triển khai bằng bất kỳ ngôn ngữ nào cũng được chấp nhận miễn là các hướng dẫn hợp lý để biên dịch và / hoặc chạy chúng được cung cấp.
Tôi đang cung cấp một vài triển khai thử nghiệm trong ruby trong kho git, vui lòng lấy cảm hứng từ chúng.
Câu hỏi này sẽ được cập nhật định kỳ với bảng xếp hạng cho các câu trả lời được công bố để những người thách thức có thể cải thiện các mục của họ.
Đánh giá chính thức cuối cùng sẽ diễn ra vào ngày 1 tháng Bảy .
Cập nhật
Các mục nhập bây giờ có thể giả sử sự hiện diện của wordlistN.txt
các tệp để tăng tốc độ đọc danh sách từ cho độ dài từ hiện tại cho N trong khoảng từ 4 đến 13.
Ví dụ, có một wordlist4.txt
tệp chứa tất cả bốn từ chữ cái và wordlist10.txt
chứa tất cả mười từ chữ cái, v.v.
Kết quả vòng một
Vào ngày 2014 / 07-01, ba mục đã được gửi, với kết quả như sau:
4 5 6 7 8 9 10 11 12 13 Total
./chinese-perl-goth.pl 8100 12400 15700 19100 22100 25800 27900 30600 31300 33600 226600
java Lingo 10600 14600 19500 22200 25500 28100 29000 31600 32700 33500 247300
./edc65 10900 15800 22300 24300 27200 29600 31300 33900 33400 33900 262600
** Rankings **
1: ./edc65 (262600)
2: java Lingo (247300)
3: ./chinese-perl-goth.pl (226600)
Tất cả các mục được thực hiện một cách nhất quán, với một người chiến thắng rõ ràng, là mục của C ++ của @ edc65.
Tất cả các thí sinh đều khá tuyệt vời. Cho đến nay tôi đã không thể đánh bại @ Trung Quốc-perl-goth.
Nếu nhiều mục được gửi, đánh giá khác sẽ diễn ra. Các mục hiện tại cũng có thể được cải thiện nếu bạn cảm thấy mình có thể làm tốt hơn.