Giới thiệu
Trang web này đang nhanh chóng xây dựng một bộ dữ liệu khổng lồ về các đoạn mã, vì vậy hãy làm gì đó với nó!
Đây là một tệp dữ liệu . Nó chứa 9.066 cặp ngôn ngữ + đoạn trích duy nhất cho 113 ngôn ngữ, tất cả được lấy từ trang web này. Định dạng được phân tách bằng tab (ngôn ngữ-TAB-đoạn), với tất cả các dòng mới trong đoạn trích được thay thế <LF>
và tất cả các tab được thay thế bằng 4 khoảng trắng. Có ít nhất 5 đoạn cho mỗi ngôn ngữ.
[cập nhật: Tôi đã thực hiện một thay đổi nhỏ cho tệp dữ liệu để hợp nhất một số phiên bản Python & RegExp mà tôi đã bỏ lỡ trước đây - liên kết ở trên đã được cập nhật]
Thử thách
Viết chương trình hoặc hàm lấy đoạn mã và xuất ra ngôn ngữ được viết (xem bên dưới để biết chi tiết). Tổng kích thước của nguồn của bạn + mọi dữ liệu bạn yêu cầu phải từ 300 byte trở xuống và chương trình của bạn phải xuất ra ngôn ngữ chính xác khi được cung cấp mã nguồn riêng. Độ chính xác cao nhất (hầu hết các câu trả lời đúng trên tập dữ liệu ở trên) sẽ thắng.
Quy tắc
- Tổng kích thước của mã nguồn, tài nguyên của bạn và bất kỳ cờ biên dịch / thời gian chạy cần thiết nào không được vượt quá 300 byte.
- Câu trả lời của bạn sẽ được kiểm tra đối với tập dữ liệu ở trên; nó sẽ được cung cấp một trong các giá trị "Đoạn trích" làm đầu vào và đầu ra của nó sẽ được so sánh với đầu ra "chính xác" theo tập dữ liệu. Điều này sẽ được lặp lại cho tất cả các mục trong bộ dữ liệu và số câu trả lời đúng cuối cùng là điểm của bạn.
- Bạn có thể chọn mã hóa đầu vào - Tôi sẽ giả sử UTF-8, vì vậy nếu bạn cần mã hóa khác, hãy xác định nó trong câu trả lời của bạn.
- Bạn không cần phải sử dụng
<LF>
thay thế cho dòng mới; nếu mục nhập của bạn dự kiến sẽ nhận được dòng mới dưới dạng dòng mới theo nghĩa đen (char 10), hãy chỉ định nó trong câu trả lời của bạn. - Mục nhập của bạn phải xuất ra ngôn ngữ mà đoạn mã đầu vào được viết. Để tránh phải nén nhiều chuỗi ngôn ngữ, tôi sẽ cho phép ánh xạ (Nếu bạn muốn xuất 3 cho "Java", điều đó tốt); chỉ cần lưu ý các ánh xạ trong câu trả lời của bạn.
- Bạn chỉ có thể có 1 ánh xạ đầu ra cho mỗi ngôn ngữ (nghĩa là nếu 3 có nghĩa là "Java", bạn cũng không thể có 4 nghĩa là "Java").
- Khi được cung cấp mã nguồn riêng, chương trình của bạn phải đưa ra câu trả lời đúng (phải xuất ra ngôn ngữ được viết).
- Bạn không cần phải hỗ trợ tất cả các ngôn ngữ trong tập dữ liệu và bạn có thể hỗ trợ các ngôn ngữ bổ sung nếu bạn muốn (ví dụ: nếu mục nhập của bạn không thuộc một trong các ngôn ngữ trong tập dữ liệu).
- Chương trình của bạn phải có tính xác định (cung cấp cùng một đầu vào hai lần phải tạo ra cùng một đầu ra).
Cà vạt
- Các mối quan hệ sẽ được quyết định bằng cách giảm tập dữ liệu cho đến khi một mục thắng. Bộ dữ liệu sẽ được giảm bằng cách xóa tất cả các đoạn mã cho ngôn ngữ phổ biến nhất (nghĩa là các mối quan hệ bị phá vỡ bởi độ chính xác trên các ngôn ngữ hiếm hơn). Ví dụ: nếu A và B đạt 70% trên toàn bộ dữ liệu, tất cả các đoạn mã Python sẽ bị xóa. Nếu cả A và B bây giờ đều đạt 60%, thì CJam sẽ bị xóa. Nếu A bây giờ đạt 50% nhưng B đạt 55% thì B là người chiến thắng.
- Nếu đạt được độ chính xác 100%, các mối quan hệ sẽ được quyết định bằng cách sử dụng bộ dữ liệu thứ hai (mù) chứa nhiều mẫu hơn cho cùng một ngôn ngữ.
ví dụ 1
Kịch bản Python:
print("python")
Kịch bản lệnh này tạo thành công "python" khi được cung cấp mã nguồn riêng, vì vậy nó hợp lệ. Trên tập dữ liệu, nó đạt 1008/9066 = 11,1%
Ví dụ 2
Hàm JavaScript:
function f(s){return /function/.test(s)?1:2}
Với ánh xạ 1 → javascript, 2 → python. Một lần nữa, nó tạo thành công 1 ("javascript") cho nguồn riêng của mình và trên tập dữ liệu, nó đạt 1092/9066 = 12,0%
Dữ liệu đến từ đâu?
Tôi đã tạo một truy vấn SEDE để lấy các mẫu từ các thử thách [code-golf] trên trang web này. Từ 10.000 câu trả lời, tôi đã sử dụng tập lệnh python đã hack để tìm mã và tên ngôn ngữ cho từng ngôn ngữ, sau đó lọc ra bất kỳ ngôn ngữ nào có ít hơn 5 ví dụ. Dữ liệu không sạch 100% (tôi biết có một số đoạn mã không được mã hóa), nhưng phải đủ tốt.
Lấy cảm hứng từ thử thách này từ đầu năm: Ai nói vậy? Bầu cử tổng thống năm 2016
Cũng một phần liên quan đến Ngôn ngữ là gì?