免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3461 | 回复: 2
打印 上一主题 下一主题

RUBY小试题,高手们都来式下啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-10 15:26 |只看该作者 |倒序浏览
作者:rainchen
题目:
有52张扑克牌要随机发牌给四个玩家,并且四个玩家牌的数量是相同的?
用最精简的ruby语言写出来
结果示例:
=> [[43, 39, 47, 44, 46, 17, 38, 30, 16, 9, 25, 23, 51], [37, 11, 26, 45, 28, 27
, 35, 29, 41, 15, 5, 20, 21], [18, 7, 13, 42, 36, 31, 22, 2, 12, 3, 32, 8, 1], [
49, 48, 10, 4, 33, 14, 34, 40, 24, 50, 52, 19, 6]]

其实是一则看到 求职版的这篇 今天面试遇到了雷人面试题求解 所启发,再则是延续下"Ruby每周一测"这个系列,三是活跃下本版气氛。

以下是我的解答版本,欢迎PK :
      ruby代码:
  1. (1..52).sort_by{rand}.inject([1,[],[],[],[]]){|r,i|r[(r[0]+=1)%4+1]<<i;r}[1..5]  
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-11-10 16:10 |只看该作者
不是最短,但最清楚:

x=(1..52).sort_by{rand};y=[];0.step(51,13) do |c| y << x[c,13] end

论坛徽章:
0
3 [报告]
发表于 2010-11-11 18:15 |只看该作者
  1. x=(1..52).sort_by{rand};
  2. (0..3).map{|t| x[t*13,13]}
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP