Celem jest napisanie kodu Java, który wykrywa wersję JVM polegającą na zmianach kompatybilności, skutkach ubocznych, błędach i / lub niezdefiniowanym zachowaniu, które działa w pewien sposób w jednej wersji i w inny sposób w innej wersji. Ponadto kod powinien być co najmniej nieco czytelny, bez poświęcania białych znaków i czytelnych nazw zmiennych.
Aby zapewnić ten cel, dokładne zasady formalne są następujące:
Kod musi być napisany w Javie i powinien wypisywać wersję JRE, w której jest uruchomiony.
Kod nie może używać żadnego interfejsu JDK lub JRE API specjalnie do wykrywania wersji Java lub który udostępnia wersję JDK lub JRE za darmo.
Kod nie może używać refleksji.
Kod jest wymagany tylko do pracy w Hotspot Java SE 5, 6 i 7, ale może działać w innych maszynach JVM.
Kod nie może używać bibliotek stron trzecich w ścieżce klasy.
Kod nie może uruchamiać żadnego innego procesu, Java lub nie.
Kod nie może używać zmiennych środowiskowych.
Kod nie może przeszukiwać systemu plików w poszukiwaniu wcześniej istniejących plików lub folderów.
Kod musi być zawarty w jednym pliku i wywoływany przez
public static void main(String[] args)
lubpublic static void main(String... args)
.Kod nie może wykorzystywać żadnych niepublicznych interfejsów API obecnych w środowisku JRE.
Kod nie może generować żadnego NoClassDefFoundError, NoSuchMethodError, ClassNotFoundException lub NoSuchMethodException podczas jego wykonywania.
Kod powinien działać w systemie odłączonym od Internetu lub od dowolnej sieci lokalnej.
Powinieneś wyjaśnić, dlaczego zachowuje się w jeden sposób w jednej wersji, a inny w innej wersji.
Punktacja
Metodą stosowaną do pomiaru najlepszego rozwiązania jest max (n / s), gdzie n oznacza liczbę wykrytych różnych wersji Java bez naruszenia którejkolwiek z tych zasad (co najmniej wersje 5, 6 i 7), a s jest liczbą tokenów leksykalnych w roztworze.