美文网首页
thoutworks的校招作业

thoutworks的校招作业

作者: 丨ouo丨 | 来源:发表于2018-01-21 20:07 被阅读56次

    题目:

    为了航空安全,某国无人机出厂时都被安装了一种芯片。当进入监控的区域时,芯片都会向服务器回传当前的准确位置信息(Signal)。

    系统会将无人机回传的信息记录在一个文本文件中,每一条信息占据一行,格式如下:

    规则一:当无人机第一次进入监控区域的时候,会记录如下的信息:{无人机ID} {X} {Y} {Z} 对于一架无人机来说,这一定是第一条消息。

    其中,

    • 无人机ID为无人机的唯一标识,由数字和英文字母组成。
    • X, Y, Z为无人机的位置坐标,可以为正整数,可以为负整数,也可以为0。
    • 如果消息的格式不符合上述要求,则说明无人机处于故障状态。

    规则二:当无人机已经发送过第一条消息,并持续在监控区域活动,则会记录如下的信息:{无人机ID} {X'} {Y'} {Z'} {offsetX} {offsetY} {offsetZ}

    其中,

    • X', Y', Z' 代表该无人机前一条消息的坐标。
    • offsetX, offsetY, offsetZ代表该无人机相比于X'、Y'、Z' 的移动量。可知该条消息发送时,无人机的坐标应当是(X'+offsetX, Y'+offsetY,
      Z'+offsetZ)
    • 如果消息的格式不符合上述要求,或者(X'、Y'、Z')和该无人机前一条消息的坐标计算值不匹配,则说明无人机处于故障状态。

    规则三:如果一旦判定一架无人机为故障状态,无论接受到什么后续信息,该架无人机都处于故障状态。

    • 故障状态下,无人机的坐标为(NA, NA, NA)

    例如:


    要求:

    假设每一个文本文件中仅仅记录一架无人机的信号。则请你书写一个程序(或函数),该程序的输入有两个:

    • 记录着无人机活动信号的文本文件(或者文本内容}。
    • —个消息序号(Signal Index),该序号代表了第几条消息(消息序号从0开始)。

    输出为(输出可以是函数的返回值,也可以是打印在console上):

    • 若指定的消息不存在,则输出Cannot find {消息序号}。
    • 若指定的消息存在,且无人机正常,则输出{无人机ID} {消息序号} {X} {Y} {Z}。
    • 若指定的消息存在,但无人机故障,则输出Error: {消息序号}。

    例如对于输入:

    plane1 1 1 1
    plane1 1 1 1 1 2 3
    plane1 2 3 4 1 1 1
    plane1 3 4 5
    plane1 1 1 1 1 2 3

    当指定消息ID 2时,应输出plane1 2 3 4 5
    当指定消息ID 4时,应输出Error: 4
    当指定消息ID 100时,应输出:Cannot find 100

    先说一下整体思路吧!题目就是要求输入无人机消息和消息序号,然后你处理一下数据,求得该条消息下无人机的情况,然后按要求输出。
    主要要做的就是求当前坐标判断有没有故障!这样你才能按题目要求输出

    现在思路有了,但是我第一次看见这个题目的感觉就是输入的限制特别多。要考虑很多情况。我们按顺序一个个来看这些坑。

    1. 当无人机第一次进入监控区域的时候,会记录如下的信息:{无人机ID} {X} {Y} {Z} 对于一架无人机来说,这一定是第一条消息。

    这个无疑是一个很重要的条件,第一行一定要满足{无人机ID} {X} {Y} {Z}这样的格式。

    1. 无人机ID为无人机的唯一标识,由数字和英文字母组成。

    id由数字和英文字母组成。说明还要用正则判断一下id

    1. X, Y, Z为无人机的位置坐标,可以为正整数,可以为负整数,也可以为0。

    坐标为整数,注意不能是别的字符

    1. 当无人机已经发送过第一条消息,并持续在监控区域活动,则会记录如下的信息:{无人机ID} {X'} {Y'} {Z'} {offsetX} {offsetY} {offsetZ}

    说明从第二条信息开始,必须严格满足{无人机ID} {X'} {Y'} {Z'} {offsetX} {offsetY} {offsetZ}这种格式

    1. X', Y', Z' 代表该无人机前一条消息的坐标。

    这个 X', Y', Z' 不是随随便便写的,必须和前一条消息的坐标相对应。这个应该是最最重要的点了

    1. offsetX, offsetY, offsetZ代表该无人机相比于X'、Y'、Z' 的移动量。可知该条消息发送时,无人机的坐标应当是(X'+offsetX, Y'+offsetY,
      Z'+offsetZ)

    这个规则是在教我们怎么计算无人机的当前坐标。和第5条对应起来,某条消息的当前坐标应该是下一条消息的X'、Y'、Z'

    1. 如果消息的格式不符合上述要求,或者(X'、Y'、Z')和该无人机前一条消息的坐标计算值不匹配,则说明无人机处于故障状态。

    一定要判断清楚,每个点都要判断到位

    1. 如果一旦判定一架无人机为故障状态,无论接受到什么后续信息,该架无人机都处于故障状态。

    这个也要注意一些,但是我觉得这个应该是最简单的。我们可以反向实现,也就是说初始状态都是故障,然后一个个判断是否故障。一有故障就可以break,后面的消息都不用再判断了。

    另外还有一些隐藏的点。比如题目里说

    假设每一个文本文件中仅仅记录一架无人机的信号

    那么一个文本文件里面就不能出现多个id。我把无人机id和前面不一样的那条消息判断为故障

    还有,

    —个消息序号(Signal Index),该序号代表了第几条消息(消息序号从0开始)。

    我自己实现的时候,是只要输入非数字,就提示请输入一个数字;输入负数的时候,输出Cannot find {序号}。负数的问题因为题目没怎么详细讲,所以应该只要考虑到了就行。

    还有,我考虑了空文本的问题,也就是说一行消息也没有。

    我实现的是永远输出Cannot find {序号}

    另外,就是有空行的问题,

    中间有空行的情况我是这么实现的:比如像下面的输入

    plane1 1 1 1
    plane1 1 1 1 1 2 3
    plane1 2 3 4 1 1 1
    plane1 3 4 5 2 3 4
    plane1 5 7 9 1 2 3

    plane1 6 9 12 0 0 0
    plane1 6 9 12 1 1 -2
    plane1 7 10 10 0 0 0

    消息ID 0-4:{无人机ID} {消息序号} {X} {Y} {Z}
    消息ID 5-8:Error: {消息序号}
    消息ID >=9或<0:Cannot find {消息序号}

    而末尾有空行的情况下,我是直接把末尾的空行去掉了。
    虽然题目好像并没有说明这些情况该如何处理,但是还是要考虑得全面一点的哦~

    然后输入输出一定要和题目要求严格一致的~这个做过题的都明白的。说了这么多,我把我用js实现的代码放在github上了:
    https://github.com/thelastto/UAV

    相关文章

      网友评论

          本文标题:thoutworks的校招作业

          本文链接:https://www.haomeiwen.com/subject/mmhaoxtx.html