Code Golf:宇宙飞船的命运是什么?[浮点版本]
这个问题比ASCII艺术版本要难一些。没有艺术,现在您可以进行浮点运算了! 挑战 当船上发生天文爆炸时,USS StackExchange正在穿越cg-00DLEF行星的重力场。作为该船的首席程序设计官,您的工作是模拟船的轨迹,以预测您是否会被迫撞倒cg-00DELF的太阳系中的土地。在爆炸期间,您的船严重受损。由于飞船的免费DEEEPRAROM *有限,因此您必须以尽可能少的字符编写程序。 *动态可执行电子擦除可编程随机存取只读存储器 模拟 有点像ASCII艺术版本,会有时间步伐的想法。在另一个版本中,时间步长是相对较长的时间:船舶可以在单个时间步长中超越行星的重力行进。在此,由于所涉及的距离较大,因此时间步长要小得多。然而,一个主要的区别是不存在细胞。飞船的当前位置和速度将是浮点数,以及所涉及的重力。另一个变化是,行星现在的尺寸更大。 模拟中最多有三个行星。这三个都将具有特定的位置,半径和重力。每个行星的重力是一个向量,直接向行星中心施加力。查找该矢量强度的公式为(Gravity)/(Distance**2),其中距离是从船到行星中心的精确距离。这意味着重力可以到达的地方没有限制。 在任何特定时间,飞船都有一个速度,即它从最后一个时间步到现在的距离和角度。该船也有动力。它在当前时间步与下一时间步之间行进的距离是其当前速度加到该位置所有重力矢量的总和。这成为飞船的新速度。 每个模拟的时间限制为10000个时间步。如果太空飞船在行星内部移动(比行星的半径更靠近行星的中心),则它会撞入该行星。如果到模拟结束时飞船没有坠入任何行星,则可以认为它已脱离重力。这艘船不可能如此完美地对准,以至于它能够在10000个时间步长上坠毁而设法在轨道上停留10000个时间步长。 输入值 输入到STDIN的四行。每行由四个逗号分隔的数字组成。这是数字的格式: ShipLocX,ShipLocY,ShipVelX,ShipVelY Planet1LocX,Planet1LocY,Planet1Gravity,Planet1Radius Planet2LocX,Planet2LocY,Planet2Gravity,Planet2Radius Planet3LocX,Planet3LocY,Planet3Gravity,Planet3Radius 如果少于三个行星,则剩余线将对所有值填充零。这是一个示例输入: 60,0,0,10 0,0,4000,50 100,100,4000,50 0,0,0,0 这意味着太空飞船位于(60,0),并且以“ 10个单位/时间步长”的速度直线“向上/向北”行驶。有两颗行星,一颗位于(0,0),另一颗位于(100,100)。两者的重力为4000,半径为50。即使所有这些都是整数,它们也不总是整数。 输出量 输出将是一个字到STDOUT,以告诉飞船是否坠毁。如果船舶坠毁,请打印crash。否则,请打印escape。这是上述输入的预期输出: crash 您可能想知道发生了什么。这是一个Pastebin帖子,其中包含该飞船的详细飞行日志。数字并不能很好地帮助人们可视化事件,所以这是发生了什么:飞船设法借助第二个行星(向东北)的引力逃脱了第一个行星(向西)的引力。它向北移动,然后略微经过第二个行星的西面,几乎没有丢失它。然后,它绕行星的北侧弯曲并撞向第二颗行星的东侧。 其他一些案件进行检查 60,0,10,-10 0,0,2000,50 100,100,1357.9,47.5 0,0,0,0 逃逸(由于平方反比定律,如果您离60个单位远,则2000重力不大) 0,0,0,0 100,100,20000,140 -50,-50,50,50 -100,-100,50,50 坠毁(第一颗行星非常巨大且非常接近) 0,0,0,0 0,0,0,0 0,0,0,0 0,0,0,0 逃脱(这是一个极端的情况:没有行星,直接的解释将表明飞船直接在行星的顶部) 规则,限制和注释 这是代码高尔夫。适用标准代码高尔夫规则。您的程序只能用可打印的ASCII字符编写。您无法访问任何类型的外部数据库。您可以用任何语言(除了专门用于解决此挑战的语言)编写条目。 结束传输