重新发现科迪
最近,我花了更多的时间在MATLAB Central上,我鼓励你尝试一下那里的一些资源,如果你还没有的话。
你听说过科迪?这是一个令人上瘾的MATLAB解谜活动。通过尝试其中的问题,特别是通过查看其他人的解决方案,您可以学到很多关于MATLAB和算法编码方法的知识。金宝搏官方网站这也是一个竞争方面,因为你的解谜解决方案会与其他解决方案进行评分和排名。金宝搏官方网站(在Cody的世界里,较小的程序得分更高。)
例如,今天早上,科迪问题引起了我的注意:
给你一个逻辑矩阵BW任意维度,一个维度昏暗的.的最后一个非零元素的位置BW在给定的维度中。如果元素位置不存在非0,则在该位置返回0。
例如,给定:
Bw = [0 0 0 0;1 1 1 1;0 1 10 0]
当Dim = 1,你应该回来Ans = [2 3 3 2],因为这些是每列中最后一个非零的行号。
当Dim = 2,你应该回来Ans = [0;4;3],因为这些是每行中最后一个非零的列号。
不要忘记输入并不局限于二维矩阵。
这个问题引起了我的注意,因为每次我看到BW用作变量名,特别是对于0和1的数组,它表示图像处理给我。我也喜欢思考不同维度的多维数组操作。
经过一番思考,我使用这些函数组合了一个三行解决方案翻转,马克斯,大小,任何.(我不会在这里说得更具体。试着自己解决吧!)
在我创建了自己的解决方案后,我花了几分钟时间看看其他人是如何解决的。我特别关注那些代码尺寸比我的小的解决方案。金宝搏官方网站在这个练习中,我几乎总是能学到一些有趣的东西,比如应用熟悉的MATLAB函数的新方法。
使用新的模式特性解决一个Cody问题
几天前,我在研究这个问题:
给定字符串s1,返回字符串s2移除目标字符。
例如,给定
S1 = '主事件'
你的代码会返回
S2 = '事件'
注意“main”和“event”之间的两个空格,只有单词“main”中的四个字母被删除了。
当这个问题最初被写出来的时候,我希望看到很多的解决方案金宝搏官方网站正则表达式还有正则表达式。但是MATLAB R2020b版本有新的模式特性,旨在使文本处理代码更容易编写和理解。我想试试我的科迪解决方案。(看一下多克二郎2020年10月15日的帖子关于模式)。
这是我想到的:
p = letterBoundary + asManyOfPattern(letterpattern) +“是”+ letterBoundary
p =模式匹配:letterBoundary + asManyOfPattern(letterpattern) + "ain" + letterBoundary
s =西班牙的雨主要落在平原上;替换(s, p,"")
ans = " in主要落在The上"
给科迪试一试——但不是在你有其他事情要做的时候!你想从与形象相关的东西开始吗?试一试181题。更改图像中的特定颜色。或者搜索Cody问题被标记为“图像处理”。
如果你遇到了你觉得特别有趣的科迪问题(或解决方案),请在评论中告诉我们。
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。