Ajude o Duke a encontrar uma saída


Olá pessoal! Para cada conferência Java, criamos um jogo para que qualquer pessoa possa se divertir em nosso estande. Na conferência Joker 2018, convidamos os participantes a tirar Duke do labirinto, um artigo detalhado sobre o jogo do ano passado pode ser encontrado aqui . Este ano, continuamos a tradição e fizemos um jogo em que, respondendo a perguntas sobre Java, você precisa ajudar a Duke a encontrar uma saída oculta.

O objetivo é passear por um campo de jogo particular com perguntas sobre Java, para cada sessão de jogo é gerada uma grade exclusiva de perguntas. A tarefa do jogador em responder perguntas é tirar Duke do labirinto pela porta, cuja localização é nova a cada vez, por isso é impossível elaborar uma estratégia com antecedência e cumpri-la, sempre há uma grande chance de seguir na direção errada e estar longe da saída. Ao mesmo tempo, respondendo a diferentes categorias de perguntas, o jogador abre um número diferente de células fechadas ao seu redor, ao responder a uma pergunta simples, uma célula é aberta, em média 2 e na difícil 3. Para a resposta correta a uma pergunta simples, um ponto é concedido, para a média - 2 , e para o mais difícil - 5, e se o jogador conseguiu tirar Duke do labirinto, ele receberá 20 pontos adicionais. Mas não é tão simples! Se um jogador responde a perguntas incorretamente, os pontos queimam proporcionalmente ao sistema de competência, respondidos incorretamente por uma resposta simples, perdendo 1 ponto em média - 2, em um difícil - 5. Portanto, 0 pontos não são o pior resultado, porque você pode se aprofundar menos. Quem conseguir mais pontos em 180 segundos vence.

A questão mais difícil para os participantes foi esta (que, aliás, é da categoria de simples):

O que o código imprimirá?

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

  • -2
  • 4294967294
  • 18446744073709551614
  • lança uma ArithmeticException

Resposta correta
É necessário recordar o básico da aritmética de bits e não esquecer que longValue() implementa uma conversão primitiva longValue() :

 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 


Algumas estatísticas do jogo:

  • o número de sessões de jogos foi 1123;
  • pontuação máxima 252;
  • em média, para uma sessão de jogo, um jogador respondeu corretamente 15 perguntas.

Paradoxalmente, o fato é que, neste ano, perguntas simples foram respondidas pior que as complexas.

Desta vez, decidimos não publicar as respostas corretas para as perguntas, mas dar a você a oportunidade de ficar o mais próximo possível das condições do estande do Odnoklassniki na conferência JPoint 2019 e colocar o jogo em domínio público para todos.

Você pode jogar e testar sua força aqui: javagame.odkl.ru

Source: https://habr.com/ru/post/pt447252/


All Articles