Мета полягає в тому, щоб написати код Java, який виявляє версію JVM, покладаючись на зміни сумісності, побічні ефекти, помилки та / або невизначене поведінку, що працює таким чином в одній версії та іншим способом в іншій версії. Крім того, код повинен бути принаймні трохи читабельним, не жертвуючи пробілами та розбірливими назвами змінних.
Для досягнення цієї мети точними формальними правилами є:
Код повинен бути написаний на Java і повинен виводити версію JRE, в якій він працює.
Код не повинен використовувати жоден API JDK або JRE, передбачений спеціально для виявлення версії java або який надає версію JDK або JRE безкоштовно.
Код не повинен використовувати відображення.
Код необхідний лише для роботи в Hotspot Java SE 5, 6 і 7, але може працювати і в інших JVM.
Код не повинен використовувати жодних сторонніх бібліотек на класі.
Код не повинен починати будь-який інший процес, java чи ні.
Код не повинен використовувати змінні середовища.
Код не повинен шукати файлову систему, яка шукає вже наявні файли чи папки.
Код повинен міститися в одному файлі і викликатись через
public static void main(String[] args)
абоpublic static void main(String... args)
.Код не повинен використовувати жоден непублічний API, присутній у JRE.
Код не повинен створювати жодних NoClassDefFoundError, NoSuchMethodError, ClassNotFoundException або NoSuchMethodException під час його виконання.
Код повинен працювати в системі, відключеній від Інтернету або будь-якої локальної мережі.
Вам слід надати пояснення, чому він поводиться по-одному у версії, а іншим - в іншій версії.
Оцінка балів
Метод, який використовується для вимірювання найкращого рішення, - max (n / s), де n - кількість різних версій Java, виявлених без порушення жодного з цих правил (принаймні версії 5, 6 і 7), а s - кількість лексичних лексем у розчині.