在本题中,你需要编写一个程序来玩一个猜数字游戏,目标是猜出一个在指定进制(2–62)下最多 64 位的数字。数字的表示顺序为:0-9,A-Z,a-z。
这是一个交互式问题。你的程序发送的所有行都必须以换行符结尾并刷新缓冲区(你可能需要禁用缓冲)。你的程序接收到的所有响应也都是以换行符结尾的行。
你的程序将对该数字进行猜测,评测系统将返回一个字符串,提供关于你猜测中每一位数字的信息。
对于每个测试用例,你被允许的猜测次数有限制,如果超过该次数仍未猜出数字,你的程序将被终止并获得 WA(Wrong Answer)判决。允许的猜测次数为 $floor(log_2(base)) + 2$。为了增加趣味性,评测系统可能会尝试欺骗你,返回错误的信息。如果评测系统决定欺骗,它只会欺骗一次,且仅针对某一位数字。
如果你猜出的数字是正确的,评测系统将始终返回字符串 “correct”(不含引号)。
交互说明
当你的程序启动时,它应该读取两个以空格分隔的十进制整数:所有测试用例的进制 $B$ ($2 \le B \le 62$),以及测试用例的数量 $N$ ($1 \le N \le 100$)。
接着,你的程序将读取一个十进制值,即第一个测试用例的数字位数 $D$ ($1 \le D \le 64$)。然后,你的程序将输出一行,包含一个 $D$ 位、进制为 $B$ 的数值,作为你的第一次猜测。随后,你将从评测系统读取一行字符串。你的程序接下来的操作取决于从评测系统读取到的字符串。
- 情况 1:如果字符串的值为 “correct”,说明你已成功猜出数字。如果还有更多的测试用例,你的程序应返回并等待下一个测试用例的长度 $D$。如果没有更多的测试用例,你的程序应退出。
- 情况 2:字符串是一个长度为 $D$ 的字符串,由集合 $[+, -, =]$ 中的字符组成。每个字符表示你猜测中对应位置数字的准确性。$+$ 表示该位置的数字太小了。$-$ 表示该位置的数字太大了。$=$ 表示该位置的数字是正确的。然后,你将根据返回的信息进行下一次猜测。你的程序将重复此过程,直到收到 “correct” 响应,或者评测系统因猜测次数过多而终止你的程序。
如果在猜测对话过程中的任何时候,你检测到评测系统在作弊,你应该发送一行包含单词 “cheater” 的内容(不含引号)。如果评测系统确实在作弊,你将收到 “correct”(不含引号)的响应。如果评测系统没有作弊,你的程序将被终止并收到 WA 判决。作弊的一个例子是评测系统对同一个猜测做出不同的响应。另一个例子是信息自相矛盾:评测系统对较早猜测的响应与对较晚猜测的响应冲突。评测系统每个测试用例最多只能作弊一次。
样例
对于样例交互 1,正确值为 GNY23。对于样例交互 2,正确值为 555 和 9。
样例 1
36 1 5 00000 +++++ 55555 +++-- AAA33 +++-= GGG13 =+++= GNN23 ==+== GNT23 (no response - too many guesses - WA)
样例 2
10 2 3 543 =++ 554 ==+ 555 correct 1 2 + 5 + 7 + 8 (no response - too many guesses - WA)