Mục tiêu là viết mã java phát hiện phiên bản JVM dựa trên các thay đổi tương thích, tác dụng phụ, lỗi và / hoặc hành vi không xác định hoạt động theo cách trong một phiên bản và một cách khác trong phiên bản khác. Hơn nữa, mã phải có ít nhất một chút có thể đọc được, mà không phải hy sinh khoảng trắng và tên biến rõ ràng.
Để đảm bảo mục tiêu đó, các quy tắc chính thức chính xác là:
Mã phải được viết bằng java và sẽ xuất ra phiên bản JRE mà nó đang chạy.
Mã không được sử dụng bất kỳ API JDK hoặc JRE nào được cung cấp riêng để phát hiện phiên bản java hoặc cung cấp phiên bản JDK hoặc JRE miễn phí.
Mã không được sử dụng sự phản chiếu.
Mã chỉ được yêu cầu để hoạt động trong Hotspot Java SE 5, 6 và 7, nhưng có thể hoạt động trong các JVM khác.
Mã không được sử dụng bất kỳ thư viện của bên thứ ba nào trong đường dẫn lớp.
Mã không được bắt đầu bất kỳ quá trình khác, java hay không.
Mã không được sử dụng các biến môi trường.
Mã không được tìm kiếm hệ thống tệp tìm kiếm các tệp hoặc thư mục có sẵn.
Mã phải được chứa trong một tệp duy nhất và được gọi qua
public static void main(String[] args)
hoặcpublic static void main(String... args)
.Mã không được sử dụng bất kỳ API không công khai nào có trong JRE.
Mã không được tạo ra bất kỳ NoClassDefFoundError, NoSuchMethodError, ClassNotFoundException hoặc NoSuchMethodException trong quá trình thực thi.
Mã phải chạy trong một hệ thống bị ngắt kết nối từ internet hoặc từ bất kỳ mạng cục bộ nào.
Bạn nên cung cấp một lời giải thích tại sao nó hoạt động theo một cách trong một phiên bản và một cách khác trong một phiên bản khác.
Chấm điểm
Phương pháp được sử dụng để đo giải pháp tốt nhất là max (n / s), trong đó n là số phiên bản java khác nhau được phát hiện mà không vi phạm bất kỳ quy tắc nào (ít nhất là phiên bản 5, 6 và 7) và s là số lượng mã thông báo từ vựng trong giải pháp.