Помоги Дюку найти выход

в 15:18, , рубрики: java, jpoint2019, Блог компании Одноклассники, одноклассники
Помоги Дюку найти выход - 1

Всем привет! Для каждой конференции по Java мы придумываем игру, чтобы любой желающий мог весело провести время на нашем стенде. На конференции Joker 2018 мы предлагали участникам вывести Дюка из лабиринта, подробную статью про игру прошлого года можно прочитать тут. В этом году мы продолжили традицию и сделали игру, где отвечая на вопросы по Java, нужно помочь Дюку найти спрятанный выход.

Смысл заключается в блуждании по закрытому игровому полю с вопросами про Java, для каждой игровой сессии генерируется уникальная сетка вопросов. Задача игрока отвечая на вопросы вывести Дюка из лабиринта через дверь, местоположение которой каждый раз новое, поэтому заранее проработать стратегию и её придерживаться невозможно, всегда велик шанс пойти не в том направлении и оказаться далек от выхода. При этом, отвечая на разные категории вопросов, игрок открывает разное количество закрытых клеток вокруг себя, при ответе на простой вопрос открывается 1 клетка, на средний 2, а на сложный 3. За правильный ответ на простой вопросы начисляется 1 очко, за средний — 2, а за самый сложный — 5, а если игрок смог вывести Дюка из лабиринта, то ему начисляются дополнительные 20 очков. Но не всё так просто! Если игрок неправильно отвечает на вопросы, очки сгорают пропорционально системе начисления, ответил неправильно на простой ответ потерял 1 очко, на средний — 2, на сложный — 5. Поэтому 0 очков не самый худший результат, ведь можно зайти глубоко в минус. Побеждает тот, кто за 180 секунд наберет наибольшее количество очков.

Самым сложным, для участников, оказался вот этот вопрос (он, кстати, из категории простых):

Что напечатает код?

BigInteger big = BigInteger.valueOf(Long.MAX_VALUE);
System.out.println(big.add(big).longValue());

  • -2
  • 4294967294
  • 18446744073709551614
  • кинет ArithmeticException

Правильный ответ

Необходимо вспомнить азы битовой арифметики и не забыть, что longValue() реализует narrowing primitive conversion:

jshell> BigInteger big = BigInteger.valueOf(Long.MAX_VALUE)
big ==> 9223372036854775807

jshell> big.toString(16)
$2 ==> "7fffffffffffffff"

jshell> big.add(big).toString(16)
$3 ==> "fffffffffffffffe"

jshell> big.add(big).longValue()
$4 ==> -2

Немного игровой статистики:

  • количество игровых сессий составило 1123;
  • максимальный счет 252;
  • в среднем за 1 игровую сессию игрок отвечал правильно на 15 вопросов.

Парадоксально, но факт, в этом году на простые вопросы отвечали хуже, чем на сложные.

В этот раз мы решили не публиковать правильные ответы на вопросы, а дать вам возможность максимально приблизиться к условиям стенда Одноклассников на конференции JPoint 2019 и выложили игру в открытый доступ для всех желающих.

Сыграть в игру и проверить свои силы можно вот тут: javagame.odkl.ru

Автор: Александр Анисимов

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js