7
旋转相机;保存一名宇航员
注意:火星人的小破坏者正面临这一挑战。仔细阅读 《火星人》是一部科幻小说,讲述的是宇航员和植物学家马克·沃特尼(Mark Watney),他偶然被困在火星上。在书中的某一点上,马克尝试与NASA通讯,但他们拥有的唯一通讯方式是摄像头。马克通过在索引卡上书写来发送消息,并且由于NASA可以将摄像机旋转360度,因此NASA通过将摄像机指向标有“是”或“否”的卡来发送回复。 由于NASA只能发送的数据是相机所面对的方向,因此Mark提出了一个系统,可以指向卡片上带有字母字符的卡片来键入消息。但是使用字母“ az”将是不切实际的。引用这本书(从这个答案开始,在scifi.se上): 每半小时,我们需要比肯定/否定的问题说话更快。相机可以旋转360度,并且我有很多天线零件。是时候制作一个字母了。但是我不能只使用字母A到Z。二十六个字母加上我的问题卡将是着陆器周围的二十七张卡片。每个人只会得到13度的弧度。即使JPL完美地对准了相机,我也很可能不知道它们的意思。 因此,我将不得不使用ASCII。这就是计算机管理字符的方式。每个字符都有一个介于0和255之间的数字代码。介于0和255之间的值可以表示为2个十六进制数字。通过给我两对十六进制数字,他们可以发送喜欢的任何字符,包括数字,标点符号等。 ... 因此,我将制作0到9,A到F的卡片。这将在相机周围放置16张卡片,再加上问题卡片。十七张牌的意思是每张超过21度。更容易处理。 作为NASA的顶级软件工程师之一,您今天的目标是编写一个程序来对摄像机的各个角度进行编码。马克为您指出的十七张卡片是(按顺序排列): ?0123456789ABCDEF 并且这些卡中的每张相距21度,因此要将相机从旋转?到0,您应该将相机旋转21度,2到1则旋转-21度。(它不完全是 21,但我们将对其进行简化以使其更圆滑)此回绕,因此从F到3是105度(5圈,5 * 21 = 105)。这比使用-252更为有效,因为相机不必移动到最远。 这是您的程序或函数必须执行的操作。 以字符串作为输入。我们将其称为s。为简单起见,我们将说输入将只能是可打印的ASCII。对于我们的示例,假设输入为STATUS 将每个字符转换为其十六进制表示形式。这将转换STATUS为53 54 41 54 55 53。 打印或返回相机将需要指向的连续度,以便指向每张卡并返回到“问题卡”。对于我们的示例,这将是: 6 * 21 = 126 (?-5) -2 * 21 = -42 (5-3) 2 * 21 = 42 (3-5) -1 * 21 = -21 (5-4) …