Aidez Duke à trouver une issue


Bonjour à tous! Pour chaque conférence Java, nous proposons un jeu pour que chacun puisse s'amuser sur notre stand. Lors de la conférence Joker 2018, nous avons invité les participants à sortir Duke du labyrinthe, un article détaillé sur le jeu de l'année dernière peut être trouvé ici . Cette année, nous avons poursuivi la tradition et créé un jeu où, répondant aux questions Java, vous devez aider Duke à trouver une issue cachée.

L'idée est de se promener sur un terrain de jeu privé avec des questions sur Java, pour chaque session de jeu, une grille unique de questions est générée. La tâche du joueur en répondant aux questions est de faire sortir Duke du labyrinthe par la porte, dont l'emplacement est nouveau à chaque fois, il est donc impossible d'élaborer une stratégie à l'avance et de s'y tenir, il y a toujours une grande chance d'aller dans la mauvaise direction et d'être loin de la sortie. En même temps, répondant à différentes catégories de questions, le joueur ouvre un nombre différent de cellules fermées autour de lui, lors de la réponse à une question simple, 1 cellule s'ouvre, en moyenne 2, et sur le complexe 3. Pour la bonne réponse à une question simple, 1 point est attribué, pour la moyenne - 2 , et pour les plus difficiles - 5, et si le joueur a réussi à sortir Duke du labyrinthe, il recevra 20 points supplémentaires. Mais pas si simple! Si un joueur ne répond pas correctement aux questions, les points brûlent proportionnellement au système de cumul, ont répondu incorrectement pour une réponse simple, ont perdu 1 point, en moyenne - 2, sur une difficulté - 5. Par conséquent, 0 point n'est pas le pire résultat, car vous pouvez aller profondément dans le moins. Celui qui obtient le plus de points en 180 secondes gagne.

La question la plus difficile pour les participants était cette question (qui, incidemment, appartient à la catégorie des simples):

Que va imprimer le code?

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

  • -2
  • 4294967294
  • 18446744073709551614
  • lève une ArithmeticException

Bonne réponse
Il est nécessaire de rappeler les bases de l'arithmétique des bits et de ne pas oublier que longValue() implémente la conversion primitive rétrécissante:

 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 


Quelques statistiques de jeu:

  • le nombre de sessions de jeu était de 1123;
  • score maximum de 252;
  • en moyenne, pour 1 session de jeu, un joueur a répondu correctement à 15 questions.

Paradoxalement, le fait est que cette année, des réponses à des questions simples ont été moins bonnes que des questions complexes.

Cette fois, nous avons décidé de ne pas publier les bonnes réponses aux questions, mais de vous donner l'opportunité de vous rapprocher le plus possible des conditions du stand Odnoklassniki lors de la conférence JPoint 2019 et de mettre le jeu dans le domaine public pour tout le monde.

Vous pouvez jouer au jeu et tester votre force ici: javagame.odkl.ru

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


All Articles