问题:来自Facebook Hacker Cup 2011 Round 1B的老虎机黑客
目标:使用stdin / stdout用您喜欢的语言编写的最短代码。你不能假设getRandomNumber
已定义,即您的解决方案必须包含潜在的高尔夫球版本,以作为功能或其他方式。
参考解决方案:关于SO [我选择我的,因为它使用stdin / stdout,但我不确定dave的解决方案。]
问题文本如下:
您最近与一个为老虎机编写软件的人成为了朋友。与他闲逛了一会之后,您会发现他很喜欢炫耀自己对老虎机工作原理的了解。最终,您让他为您详细描述了特定品牌机器上使用的算法。算法如下:
int getRandomNumber() {
secret = (secret * 5402147 + 54321) % 10000001;
return secret % 1000;
}
此函数返回[0,999]中的整数;每个数字代表在特定机器状态下出现在车轮上的十个符号之一。最初将secret设置为您不知道的一些非负值。
通过长时间观察机器的运行,您可以确定机密值,从而预测未来的结果。了解未来的结果,您将能够以明智的方式下注并赢得很多钱。
输入值
输入的第一行包含正数T,即测试用例的数量。接下来是T测试用例。每个测试用例均包含一个正整数N,即您进行观察的次数。接下来的N个标记是0到999之间的整数,用于描述您的观察结果。
输出量
对于每个测试用例,输出将由机器显示的接下来的10个值,用空格隔开。如果您观察到的顺序不能由您的朋友向您介绍的机器产生,请打印"Wrong machine"
。如果您不能唯一确定接下来的10个值,请打印"Not enough observations"
。
约束条件
- T = 20
- 1≤N≤100
- 输入中的令牌长度不超过3个字符,并且仅包含数字0-9。
输入示例
5
1 968
3 767 308 284
5 78 880 53 698 235
7 23 786 292 615 259 635 540
9 862 452 303 558 767 105 911 846 462
输出示例
Not enough observations
577 428 402 291 252 544 735 545 771 34
762 18 98 703 456 676 621 291 488 332
38 802 434 531 725 594 86 921 607 35
Wrong machine