Viết chương trình hoặc hàm có hai đầu vào:
- Một tin nhắn văn bản
- Từ điển của ngôn ngữ tiếng Anh, như nó xuất hiện trong tệp Github này (chứa khoảng 60000 từ)
và đưa ra số lỗi chính tả trong thông báo (xem bên dưới để biết định nghĩa và trường hợp kiểm tra).
Bạn có thể nhận từ điển dưới dạng tham số cho chức năng của mình, dưới dạng tệp được xác định trước mà chương trình của bạn mong muốn tìm thấy, dưới dạng dữ liệu được mã hóa cứng trong mã của bạn hoặc theo bất kỳ cách thức hợp lý nào khác.
Mã của bạn sẽ trông giống như một tin nhắn văn bản, với một số lỗi chính tả tối thiểu. Vì vậy, bạn sẽ tính điểm của mã bằng cách đưa nó vào chính nó làm đầu vào.
Người chiến thắng là mã có điểm thấp nhất (điểm tối thiểu có thể là 0). Nếu có một vài câu trả lời có cùng số điểm, người chiến thắng được quyết định theo kích thước mã (tính theo ký tự). Nếu hai câu trả lời vẫn bị ràng buộc, người chiến thắng là câu trả lời trước đó.
Nếu được yêu cầu, bạn có thể giả sử thông báo đầu vào là ASCII (byte 32 ... 126) với các dòng mới được mã hóa theo cách thông thường (1 byte "10" hoặc 2 byte "13 10") và không trống. Tuy nhiên, nếu mã của bạn có các ký tự không phải ASCII, thì nó cũng nên hỗ trợ đầu vào không phải ASCII (để nó có thể tính điểm của chính nó).
Các ký tự được chia thành các lớp sau:
- Chữ a ... z và A ... Z
- Khoảng trắng (được định nghĩa ở đây là ký tự khoảng trắng hoặc ký tự dòng mới)
- Chấm câu
.
,
;
:
!
?
- Kết thúc câu
.
!
?
- Kết thúc câu
- Rác (tất cả phần còn lại)
Một từ được định nghĩa là một chuỗi các chữ cái, là tối đa (nghĩa là không đi trước cũng không theo sau bởi một chữ cái).
Một câu được định nghĩa là một chuỗi các ký tự tối đa không kết thúc câu.
Một ký tự là một lỗi chính tả nếu nó vi phạm bất kỳ quy tắc chính tả nào:
- Một chữ cái phải thuộc về một từ trong từ điển (hay nói cách khác: mỗi từ có độ dài N không xuất hiện trong từ điển được tính là lỗi chính tả N)
- Ký tự đầu tiên trong câu, bỏ qua mọi ký tự khoảng trắng ban đầu, phải là một chữ cái viết hoa
- Tất cả các chữ cái phải là chữ thường, ngoại trừ những chữ cái được quy định bởi quy tắc trước đó
- Một ký tự dấu chấm câu chỉ được phép sau một chữ cái hoặc rác
- Một ký tự dòng mới chỉ được phép sau một ký tự kết thúc câu
- Các ký tự khoảng trắng không được phép ở phần đầu của tin nhắn và sau các ký tự khoảng trắng
- Không nên có rác (hay nói cách khác: mỗi ký tự rác là một lỗi chính tả)
Ngoài ra, câu cuối cùng phải trống hoặc bao gồm chính xác một ký tự dòng mới (tức là tin nhắn sẽ kết thúc bằng một ký tự kết thúc câu và một dòng mới tùy chọn - hãy gọi nó là quy tắc 8).
Các trường hợp thử nghiệm (bên dưới mỗi ký tự là một quy tắc mà nó vi phạm; sau đó =>
là câu trả lời bắt buộc):
Here is my 1st test case!!
711 4 => 4
main(){puts("Hello World!");}
2 777 883 3 77 78 => 12
This message starts with two spaces
66 8 => 3
What ? No apostrophe's??
4 71 4 => 4
Extra whitespace is BAD!
66 661111111111 66 66333 => 21
Several
lines?
Must be used only to separate sentences.
=> 1 (first linebreak is en error: rule 5)
"Come here," he said.
73 7 => 3 (sentence starts with '"', not 'C')