帮助杜克找到出路


大家好! 对于每个Java会议,我们都会提供一个游戏,以便任何人都可以在我们的展位上玩耍。 在Joker 2018大会上,我们邀请参与者将Duke从迷宫中带走,有关此游戏的详细信息可以在此处找到 。 今年,我们继续了这一传统,并制作了一款游戏,在其中回答Java问题,您需要帮助Duke找到隐藏的出路。

这个想法是在一个关于Java的问题的私人游戏场上徘徊,对于每个游戏环节,都会生成一个独特的问题网格。 玩家回答问题的任务是让杜克大学穿过迷宫,而迷宫的位置每次都是新的,因此不可能事先制定策略并坚持下去,总是有很大的机会朝错误的方向前进并远离出口。 同时,在回答不同类别的问题时,玩家在他周围打开了不同数量的封闭单元,当回答一个简单问题时,平均2个和复数3个单元打开了1个单元。对于一个简单问题的正确答案,平均得分为1分-2 ,最困难的是-5,如果玩家能够使Duke走出迷宫,那么他将获得额外的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()实现了变窄的原始转换:

 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个问题。

矛盾的是,事实是,今年,简单问题的回答比复杂问题差。

这次我们决定不发布问题的正确答案,而是给您机会尽可能接近Odnoklassniki在JPoint 2019大会上的立场,并将游戏发布给所有人。

您可以在此处玩游戏并测试您的力量: javagame.odkl.ru

Source: https://habr.com/ru/post/zh-CN447252/


All Articles