`
异步获取爱
  • 浏览: 79998 次
  • 性别: Icon_minigender_1
  • 来自: 大男子主义世界
社区版块
存档分类
最新评论

编程:呼叫转移系统[erlang]

阅读更多
呼叫转移服务是一个把呼叫号码A转移到号码B的服务。举个例子:当你正在度假时,这样的系统非常有帮助。A君度假去了,那么,A君的工作电话可以通过呼叫转移至B君。更进一步讲,当B君也正好在度假,还可以继续通过呼叫转移到C君,依次类推。也就是说,当一个客户打电话到A君,通过呼叫转移系统,最后转接到了C君。

本期的编程挑战是要实现一个和呼叫转移系统相关的逻辑。根据个人的度假时间安排和呼叫转移设置,返回呼叫转移的个数和“深度”。


输入

第一行给出一个整数N,代表从第二行开始有多少个度假安排。

每个度假安排为单独一行,其中包括4个数字:第一个数字是被叫人的4位数电话号码,第二个数字是呼叫转移至的4位数电话号码, 第三个数字是起始时间 ( 用天数计算),最后一个数字是度假时间的有效期(用天数计算)。

最后一行是开始日期。

请注意:
1) 这里的时间日期是基于天数顺序。1代表第一天,2代表第二天,依次类推。这里没有月份和年这样的时间单位,统一用天数来作为度假的日期安排。(天数最高是32位无符号整数的最大值)

2) 输入的呼叫转移不会出现环路。如描述中所举例, A君转到B君,B君再转到C君。但C君不会转到A君。对于有环路的输入,检测并提示输入环路错误,这点不作要求。当然,如果你的程序可以检测这种环路,并提示错误, 当然更好。

3)不能同时从一个号码转移到多个号码。如描述中所举例, A君转到B君,A君不能同时又转移到C君。


输出

基于开始度假的日期 (输入数据的最后一行), 你的程序必须打印输出2行信息。

1)当天设置了多少个呼叫转移
2)当天最长的呼叫转移是多长次 ( A君转到B君,B君再转到C君。这个是2次呼叫转移)


示例

(请注意:这个仅仅是示例数据,它们是为了方便大家理解题目而添加的,你的代码不能仅解析这5行示例数据)


1. 输入示例
3
0000 0001 1 3
0001 4964 2 1
4964 0005 2 3
2


2. 输出示例

第 2 天共有 3 个呼叫转移设置
第 2 天最长的呼叫转移是 3 次



//第 2 天为什么有 3 个呼叫转移?
如果你没有看懂,这里解释一下: “ 0000 0001 1 3 ” 这个是3天有效,所以,第二天这个呼叫转移还有效。“0001 4964 2 1” 和 “4964 0005 2 3“ 都是第二天设置的,有效期分别是1和3天。所以,第 2 天共有 3 个呼叫转移设置。


------------------------------------------------------------------------
今天暂时先做到能输出基本结果,回路的情况明天再加!



-module(call_sys).
-author('NoDurex<nodurex.zhang@gmail.com>').

-compile(export_all).

init() ->
    {ok, IODevice} = file:open('b.dat', [read]),
    {ok, Content} = io:read(IODevice, ''),
    Content.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%            Main method                %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
extract_data() ->
    [Inters, Changes, AfterTime] = init(),
    NotBus = case erlang:length(Changes) == Inters of
        true ->
             [{Key, TurnKey} ||
                {Key, TurnKey, FromDay, Days} <- Changes,
                    FromDay + Days - AfterTime >= 0];
        false ->
            error
    end,
    loop(NotBus, NotBus, 0).

%%  get Name from List
get(Name, NotBus) ->
    %% not very good
    A = [{K, T} || {K, T}  <- NotBus, Name =:= K],
    case erlang:length(A) > 0 of
        true ->
            [{X, Y}] = A,
            {X, Y};
        false  ->
            {}
    end.


%% iterator
loop(LinkNotBus, NotBus, Numbers) ->
    Lis = [Res || {_, T} <- LinkNotBus,(Res = get(T, NotBus)) /= {}],
    ResultNumber = Numbers + 1,
    case erlang:length(Lis) > 0 of
         true ->
            loop(Lis, NotBus,  ResultNumber);
         false ->
            io:format('most times of change call is ~p ~n', [ResultNumber])
    end.
   
分享到:
评论

相关推荐

    erlang-23.2.1-1.el7.x86-64.rpm

    Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ ...

    通信网理论基础:第三章 Erlang拒绝和等待系统.pdf

    此外,章节还讨论了具体的应用实例,如按顺序使用的中继线系统和主备线系统,通过状态转移图和生灭过程来进一步理解Erlang模型。这些概念和公式在设计和优化通信网络性能中起着至关重要的作用。

    图书:Erlang和OTP实战

    Erlang是一种函数式编程语言,最初由爱立信公司为电话交换系统设计,因其在处理大量并发连接和实时通信方面的优秀性能而受到广泛关注。它的主要特点包括轻量级进程、消息传递模型以及热代码升级机制。这些特性使得...

    Erlang编程

    - **容错性**:Erlang的容错机制包括无共享内存、无锁编程和热代码升级等,使得在部分系统故障时,整个系统可以继续运行。 4. **基本语法和概念**: - **安装Erlang**:要开始Erlang编程,首先需要在计算机上安装...

    Erlang and OTP in Action MEAP May 2010

    Erlang and OTP in Action Martin Logan, Eric Merritt, and Richard Carlsson MEAP Began: August 2008 Softbound print: May 2010 (est.) | 500 pages ISBN: 1933988789 Part One: Getting Past Pure Erlang; ...

    logger:Erlang日志系统 Erlang Logger

    Erlang日志系统启动日志应用:logger_app:start()可动态控制日志等级:loglevel:set(Level)获取当前日志等级:loglevel:get/0每次调用后都会重新编译logger,加载module添加了buffer缓存,每500ms或连续收到100条日志后...

    Centos7安装RabbitMQ的文档和安装包(包含erlang安装包).rar

    RabbitMQ基于Erlang编程语言,因此在安装RabbitMQ之前,我们需要先安装Erlang环境。本文将涵盖以下几个关键知识点: 1. **Erlang安装**: Erlang是RabbitMQ的基础,因为RabbitMQ是用Erlang编写的。首先,我们需要...

    Erlang编程指南

    “即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。不同层次的Erlang程序员都会发现本书是有价值的学习和参考资料。”, ——Steve Vinoski,《IEEE Internet Computing》专栏作家, 《Erlang...

    图书:Erlang编程

    《Erlang编程》是一本深入探讨Erlang语言的图书,主要面向对并发处理、分布式系统和高可用性有需求的开发者。Erlang是一种为构建大规模并发系统而设计的函数式编程语言,它源自爱立信,以其在电信行业的成功应用而...

    并行编程语言Erlang:Erlang OTP框架及其应用开发指南

    内容概要:本文档详细介绍了Erlang编程语言及其并行编程模型,并重点阐述了Erlang OTP框架的特性和应用场景。首先,文档简述了Erlang语言的特点,包括轻量级进程、模式匹配和热代码升级等特性,以及它在构建高可用、...

    win64_erlang24.2.2

    win64位系统 。 erlang24.2.2。

    erlang编程 Introducing Erlang

    Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    erlang19安装包

    Erlang/OTP 19.1 is a service release containing mostly bug fixes, as well as a number of new features and characteristics improvements. Some highlights of the release are: erts: Improved dirty ...

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...

    Erlang游戏程序学习完整PDF手册

    Erlang是一种面向并发的、函数式编程语言,特别适合于构建高可靠性、分布式系统,尤其是在游戏开发领域中表现出色。这份"Erlang游戏程序学习完整PDF手册"是一份全面介绍Erlang在游戏开发中应用的学习资料,包含了...

    erlang资源

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入...

    使用erlang连接ES的客户端

    在IT领域,Erlang是一种面向并发的、函数式编程语言,常用于构建高可用性和分布式系统,如电信、银行和互联网服务等。Elasticsearch(简称ES)则是一款流行的开源全文搜索引擎,广泛应用于大数据分析和实时搜索。...

    fastglobal:为Elixir和Erlang快速无副本全局

    - “erlang”:Erlang是一种用于构建高可用性、容错性强的分布式系统的函数式编程语言,fastglobal是为Erlang生态系统设计的。 - “elixir”:Elixir是在Erlang虚拟机上运行的现代编程语言,它保持了Erlang的并发和...

Global site tag (gtag.js) - Google Analytics