找回密码
 注册
Simdroid-非首页
查看: 132|回复: 4

[讨论]cody练习题关于自然序列复制的问题

[复制链接]
发表于 2013-5-21 11:13:45 | 显示全部楼层 |阅读模式 来自 北京
题目来自cody:
http://www.mathworks.cn/matlabcentral/cody/problems/1035-generate-a-vector-like-1-2-2-3-3-3-4-4-4-4/solutions/246022
祁斑竹发起的,问题为产生一个序列,可用自然序列来描述:
如  给一个3
产生1 2 2 3 3 3
给一个4
产生     1     2     2     3     3     3     4     4     4     4
祁斑竹用正则表达式的函数size为11,我只能望洋兴叹,

正好借此机会祁斑竹和大家分享一下regexp的精髓

让我想起上次arrayfun和cellfun等向量化运算的大讨论

第一次看完后只能用电光火石荡气回肠来形容,然后又重温了多次

希望这次能正则表达式也能有上次场面



发表于 2013-5-21 13:59:40 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
这个题目是roc在sky论坛上发的,我回复了几个帖子,除了我们俩没有人搭理,后来为了看到更多的漂亮的结果,我将其发到cody上面,你可以先看看roc和我做的几个答案,等大家都来回答回答,再说正则表达式的事情
http://www.matlabsky.com/thread-31372-1-1.html
回复 不支持

使用道具 举报

发表于 2013-5-21 18:59:56 | 显示全部楼层 来自 新疆乌鲁木齐
不至于吧?你俩货一捣鼓,老薛都被震出来了,还叫没人搭理?还想怎样?:lol
正则我们后面出个专题好好整一整,容一段时间构思构思。

点评

薛老师是拍砖,祁老弟是指没有人像你这样一唱一和。  发表于 2013-5-22 09:40
要不先构思一段时间?  发表于 2013-5-21 23:09
回复 不支持

使用道具 举报

发表于 2013-5-22 00:07:53 | 显示全部楼层 来自 英国
这个问题算是run-length decoding的一个特例吧,和之前encoding那题相映成趣。
RLD的解法:
  1. function ans = your_fcn_name(n)
  2. 1:n;
  3. x = cumsum([1 ans]);
  4. y = zeros(1, x(end)-1);
  5. y(x(1:end-1))=1;
  6. ans(cumsum(y))
  7. end
复制代码
用arrayfun的简单粗暴法:
  1. function ans = your_fcn_name(n)
  2. cell2mat(arrayfun(@(x) repmat(x, 1, x), 1:n, 'uni', 0));
  3. end
复制代码

点评

厉害!刚仔细看了看sky上祁工和吴工的讨论,感觉这个主题已没啥可写,可行方案让你们三人写光了。再加上另一个用“凑解形式”给出的答案。  发表于 2013-5-22 11:51

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2013-5-22 13:04:23 | 显示全部楼层 来自 新疆乌鲁木齐
再补一个递归的,不考虑效率,但容易理解,其实道理跟各种方式循环的都相同意思。
  1. function ans = your_fcn_name(n)
  2. if n==1
  3.     1;
  4. else
  5.     for i=2:n
  6.         [your_fcn_name(i-1),i*ones(1,i)];
  7.     end
  8. end
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-22 16:22 , Processed in 0.038182 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表