作业:http://www.cs.rit.edu/~waw/networks/prob1.082.html
好吧,我仍然很困惑为什么这个问题被要求我的数据通信和网络课程,但这是我的作业中的问题:
编写一个计算机程序,读取电子邮件中的标题并删除除开头之外的所有行
从:,到:,主题:和抄送:
竞赛 - 谁可以编写最短的程序来做到这一点.
在思考了一下后,我决定以下Perl代码尽可能小.
#!/usr/bin/perl while (<>) { print "$_" if ($_ =~ m/^(To:|From:|Subject:|Cc:)/); }
所有这一切都像一个过滤器,唯一的输出是以From:,To:,Subject:和Cc:开头的行,如问题中所指定的那样.由于没有任何具体细节,我认为上述代码至少可以正确回答问题.
现在,我想知道一个程序可能为此写得多么小?我可以理解,如果没有人想发布代码,因为他们认为我会将它用于作业,但我或多或少地寻找可以帮助我编写最短程序的建议和技巧.
另外,我确信最短的是指实际的代码长度.他确实提到脚本语言是要走的路,所以我怀疑他正在考虑解释器涉及的开销.这也意味着他不关心使用哪种语言.
谢谢你的期待!
编辑:谢谢你的建议!我在这里读了很长一段时间的问题,希望将来我能做出更多贡献.另外,我将Perl代码减少到55个字节的一些建议.我认为我们不需要处理像多行标题这样的东西.
奖励:谁能找到一个很好的理由,为什么在我们讨论分组交换和客户端/服务器架构等问题的课程中提出这个问题?
编辑2:为了记录,我的教授说有人用55字节这样做了.我认为可能的唯一方法是,他只是要求像上面这样的简单实现.
一些提示:
print "$_"
等于 print
while(<>){...}可以通过#!
在行上的选项中添加-n来替换/
$ _ = ~m //等于//
你输入四个:
就足够好了.
就像是
#!/usr/bin/perl -n print if /^(To|From|Subject|Cc):/;
好的,这是一个多线匹配程序:
$/="";$_=<>;print$&while/^(To|From|Subject|Cc):.*\n( .*\n)*/mg
你想短,不漂亮,对;-)