- 用户被呼叫时的状态有4种:
idle
,busy
,no-response
,unreachable
- 用户可登记的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'
}
}