2009-06-19 16 views
13

Tôi đã tham gia một vài cuộc thi lập trình trực tuyến và thấy rằng các thẩm phán trực tuyến đã sử dụng khá đáng kể trong chức năng.Tạo một thẩm phán trực tuyến từ đầu

Đến với chủ đề, trường đại học của tôi sắp tổ chức cuộc thi lập trình trực tuyến và tôi chịu trách nhiệm về sự kiện này. Tôi đã đánh giá các lựa chọn của mình để thực hiện một thẩm phán trực tuyến. Chắc chắn tôi có thể sử dụng một số thẩm phán đã có sẵn như một tại SPOJ nhưng nó đánh tôi rằng tôi và một vài người bạn của tôi cũng có thể thử xây dựng một. Nếu chúng ta thất bại, chúng ta luôn có thể quay trở lại những điều này.

Vì vậy, bất kỳ ai cũng có thể vui lòng cho tôi một số phác thảo hoặc tài nguyên về cách tôi hiểu về nó? Nó cũng sẽ hữu ích nếu tôi có một số ý tưởng về cách các thẩm phán đạt được 'sandboxing'. Chúng tôi đã có khoảng một vài tháng trong tay.

CẬP NHẬT Đây là kết quả của nỗ lực của tôi cho đến nay trong 2 tuần sau khi hỏi một vài câu hỏi thêm về SO tự http://github.com/anomit/loki

Trả lời

1

Tôi thực sự không chắc chắn câu hỏi của bạn là gì. Nó không khó để viết một thông số thiết kế cho một thẩm phán từ đầu.

Bạn chạy một thứ với dữ liệu đầu vào đã cho và cấp dữ liệu đầu ra cho chương trình thử nghiệm được viết bởi tác giả của câu hỏi (vì không có câu trả lời luôn là duy nhất). Mọi người làm sandboxing bằng cách chạy nó từ xa trên một máy sạch.

Thêm: và vui lòng, không phân tích mã. Bạn có hai lựa chọn, hoặc bạn thực hiện phân tích mã này cho các thí sinh trong cuộc thi, hay không.

  • Nếu bạn làm: họ dành 5 phút cuối cùng để đảm bảo không có điểm xuống. Mã này phát triển tồi tệ hơn nhiều trong quá trình này.

  • Nếu bạn không: bạn phá vỡ "quy tắc của pháp luật": mọi người biết cơ chế cho điểm (ngoài ra, đó là lý do tại sao bạn luôn cung cấp cho họ bài kiểm tra đầu tiên trong nội dung của vấn đề).

Cập nhật: Xin lỗi, tôi không để ý lúc đầu tiên mà bạn hỏi một số câu hỏi cụ thể. Sandboxing có thể ít quan trọng hơn bạn nghĩ - trong một cuộc cạnh tranh tốt mã trở nên công khai, do đó, "tin tặc" sẽ thực sự xấu hổ. Tuy nhiên, tôi nghĩ rằng tôi đã thấy một thực hành mà bạn không thể thực hiện i/o, hệ thống tệp hoặc bất kỳ tương tác nào khác với hệ thống một cách trực tiếp (họ viết main() cho bạn và nó luôn giống nhau, bạn chỉ viết phần thuật toán với đầu vào đã cho/luồng đầu ra). Thẩm phán của bạn chỉ nên chạy những gì nó tự biên dịch từ nguồn.

1
+0

Cảm ơn bạn đã trả lời nhanh. Nhưng tôi thấy hai vấn đề ở đó: 1. Các svn cho mã nguồn là xuống 2. Nó dường như không được phát triển hoạt động anyway – user108127

+0

Chỉ cần cho hồ sơ, tôi đã không downvote nó. Xem xét bí quyết hiện tại của tôi, bất kỳ đề nghị là một gợi ý tốt :) – user108127

+0

Tại sao downvotes o này? – chakrit

3

Tôi không chắc chắn những gì một thẩm phán trực tuyến là, nhưng tôi cho rằng đó là một phần của phần mềm để đánh giá chương trình cho đúng đắn.

Tôi sẽ sử dụng một số thư viện xây dựng, kiểm tra và phân tích cho việc này. Ví dụ: Ant, JUnitCheckstyle.

Bạn sẽ lấy mã do người tham gia cung cấp và thả mã đó vào một tệp. Sử dụng công cụ xây dựng để biên dịch nó.

  • xây dựng không: 0 điểm
  • xây dựng thành công với những cảnh báo 1 điểm
  • xây dựng thành công mà không cần cảnh báo 2 điểm

Sau đó chạy một số xét nghiệm, mà xác minh tính đúng đắn của giải pháp.

  • Đối với mỗi bài kiểm tra thông qua: 1 điểm

Cuối cùng chạy một số tiện ích phân tích mã để đánh giá chất lượng của mã này.

  • trừ 1 điểm cho mỗi khiếu nại của tiện ích

Tất nhiên bạn có thể muốn thay đổi các giá trị điểm yêu cầu của bạn.

Các vấn đề liên quan