免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

ChinaUnix技术实践之三——Perl编程大赛 [复制链接]

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
1 [报告]
发表于 2011-02-25 10:48 |显示全部楼层
唉。没看到。马上参加。对了C++的还没有平出来啊。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2011-02-25 12:18 |显示全部楼层
都是高手啊。看来“破”语言我镇的不太会啊。周末在家查查资料正正。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
3 [报告]
发表于 2011-02-25 17:22 |显示全部楼层
本帖最后由 renxiao2003 于 2011-02-25 17:26 编辑

回复 24# wb112200


    是啊。大家都直接把答案贴在帖子里(就像PHP大赛)。这样怎么能不雷同啊(一个题的答案就那么几种)。还是C/C++比较规范。把答案发EMAIL比较好。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
4 [报告]
发表于 2011-02-25 21:07 |显示全部楼层
本帖最后由 renxiao2003 于 2011-02-28 10:50 编辑

大赛试题:

1.
请正确的精简如下代码。

sub myfunc {
    # $x = ...;

    if ( $x ) {
        return 1;
    } else {
        return;
    }
}
答案:
  1. sub myfunc{
  2.     # $x=...;
  3.     $x?1:return;
  4. }
复制代码
2. $x=()结果是什么?列表位于标量上下文是什么情况?()是不是用来创建空的list?请解释原因。
答案:
  1. $x=()结果是空列表,0个元素的列表;列表位于标量上下文是反转。()用来创建空的list。
复制代码
3. 1,2,3,5,6,7,8 如何合并成1-3,5-8?
没办法,你们已经正则了。我只能用这种老古董的办法。要不我就是抄袭了啊。
答案:
  1. #!/usr/bin/perl
  2. $str="1,2,3,5,6,7,8";
  3. @array=split(/,/,$str);
  4. $len = @array;
  5. $start=0;
  6. $end=0;
  7. $pos=0;
  8. $startpos=0;
  9. $outstr="";
  10. if ($len>1){
  11.         for($i=0;$i<$len-1;$i++){
  12.             if ($array[$i] + 1 == $array[$i+1]){
  13.                $pos=$i+1;
  14.             }else{
  15.                if ($outstr eq ""){
  16.                    $outstr=$array[$startpos] . "-" . $array[$pos];
  17.                }else{
  18.                    $outstr=$outstr . "," . $array[$startpos] . "-" . $array[$pos];
  19.                }
  20.                $startpos=$i+1;
  21.             }
  22.             if ($pos==$len-1){   
  23.                $outstr=$outstr ."," . $array[$startpos] . "-" . $array[$pos];
  24.             }
  25.         }
  26. }
  27. print $outstr . "\n";
复制代码
4.@x=(5,7,9); $x[1]与@x[1]的区别是什么?
答案:
$是一般变量,而@是数组变量。但因为@x指向的是一个列表,所以在这里$x[1]与@x[1]输出是一样的。

5. 用最短和优的perl代码对当前目录下的文件和子目录按修改时间进行排序。
答案:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. print for ( system "ls -lt");
复制代码
6.传入一串数字并返回所有大于平均值的数字。
答案:
  1. #!/usr/bin/perl
  2. print "please input number,user ',' split:\n";
  3. $x=<STDIN>;
  4. @arr=split(/,/,$x);
  5. sub average{
  6.   $len=@arr;
  7.   $sum=0;
  8.   for($i=0;$i<$len;$i++){
  9.     $sum = $sum + @arr[$i];
  10.   }
  11.   return $sum/$len;
  12. }
  13. sub getratheravg{
  14.   $avg=average;
  15.   @arr1;
  16.   for($i=0;$i<@arr;$i++){
  17.     if (@arr[$i]>$avg){
  18.       push(@arr1,@arr[$i]);
  19.     }
  20.   }
  21.   return @arr1;
  22. }
  23. #test
  24. @arrx=getratheravg;
  25. for($i=0;$i<@arrx;$i++){
  26.    print @arrx[$i];print " ";
  27. }
复制代码
7.让用户不断猜测范围从1到100的秘密数字,直到猜中为止。程序应该以魔术公式lnt(1+rand 100)来随机产生秘密数字。当用户猜错时,程序应相应“too high”或者“too low”。如果用户quit或者exit或者键入一个空白行程序就中止。当然如果用户猜到了,程序也应该中止。
答案:
  1. #!/usr/bin/perl
  2. $key=int(1+rand 100);
  3. print "please input a number (1~100):\n";
  4. while($guess = <STDIN>)
  5. {
  6.     chomp($guess);
  7.     if ($guess eq "quite" || $guess eq "exit" || $guess =~/\s*/)
  8.     {
  9.          exit(1);
  10.     }
  11.     elsif($guess > $key)
  12.     {
  13.          print "to high\n";
  14.     }
  15.     elsif($guess < $key)
  16.     {
  17.          print "to low\n";
  18.     }
  19.     elsif($guess == $key)
  20.     {
  21.          print "you guess right\n";
  22.          exit;
  23.     }
  24. }
复制代码
8. 写一个简单的TCP Echo Server,在linux/unix环境运行,侦听在特定端口,接受用户的网络输入,并返回同样的数据给对方,能接受quit命令。
基本要求:
(1)无阻塞IO。
(2)daemon方式运行。
(3)能接受kill -HUP重启信号。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
5 [报告]
发表于 2011-02-28 11:06 |显示全部楼层
回复 43# yifangyou


    不愧是Perl强人啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP