呼叫转移

  • 用户被呼叫时的状态有4种:idlebusyno-responseunreachable
  • 用户可登记的5种呼叫转移,格式为type number,type代表转移种类, number代表转移号码:
    type为 0:无条件转移,优先级最高,用户处于任何状态都触发此转移
    type为 1:用户状态busy时触发此转移
    type为 2:用户状态no-response时触发此转移
    type为 3:用户状态unreachable时触发此转移
    type为 4:默认转移,优先级最低,用户不是idle状态时,且无法触发上述四种转移,触发此转移

注:同一个状态可登记多次,以最后一次登记为准。

现给出某一用户当前的用户状态,以及其登记的若干个呼叫转移号码,请输出最终的呼叫结果:

  • 若发生转移,则输出转移号码
  • 若用户状态为idle,且未发生转移时,则呼叫本机成功,输出success
  • 若呼叫失败:既没有发生转移,也没有呼叫本机成功,则输出failure。例如,用户状态为 busy,但用户既未登记 type 为 0 或 1 或 4 的呼叫转移,则呼叫失败。

解答要求

时间限制:1000ms, 内存限制:256MB

输入

第一行是数字 num 和 字符串 status:num代表呼叫转移登记的次数( 0 < N <= 20),status表示用户被呼叫时的状态。
接下来 num 行是用户的呼叫转移登记操作,转移号码长度 6-15位,用例保证输入合法。

输出

一个字符串,代表最终的呼叫结果

样例

输入样例 1:

3 busy
2 18912345678
4 18912345678
4 13312345567

输出样例 1:

13312345567

输入样例 2:

1 no-response
3 075587678100

输出样例 2:

failure

输入样例 3:

1 idle
3 075587678100

输出样例 3:

success

提示

答题要求:结果可信和过程可信同样重要,您编写的代码需要符合可信的要求(包括通用编码规范、安全编码规范和圈复杂度)。

function calling(status, regCallForwardNums) {
let statusList = new Map([['busy','1'],['no-response','2'],['unreachable','3']])
let mapList = new Map(regCallForwardNums);
let curNum = statusList.get(status);
//用户状态为idle,且没有登记无条件转移,呼叫成功
if(status === 'idle' && !mapList.has('0')) {
return 'success'
}
if(mapList.has('0')) {//优先处理无条件转移
return mapList.get('0')
}else if(mapList.has(curNum)) {//再处理busy、no-response、unreachable状态转移
return mapList.get(curNum)
}else if(mapList.has('4')){//如果以上4种状态转移都不存在,采用默认转移
return mapList.get('4')
}else {
return 'failure'
}
}

posted @ 2022-03-28 19:44  易先讯  阅读(664)  评论(0编辑  收藏  举报