Julia: 趣!,13579分别在一本168页书的页码中出现的次数

一、方法1

data =reduce(string,1:168)
map(y->map(n->data[n]==y,1:length(data))|>sum,'1':2:'9')

结果正确。但问题是,二行,并不简洁,不过,语义比较清晰。

二、方法2

这种方法是在方法1的基础上进行简化。

map(y->map(x->x==y,[c for c in reduce(string,1:168)])|>sum,'1':2:'9')

三、方法3

map(x->split(reduce(string,1:168),[x]))|>length,'1':2:'9') 

这种方法并不推荐。因为,结果要减1。还不是这么简单,有些存在不需要减1的可能性.

四、方法4

data =reduce(string,1:168)
map(i->filter(x->x==i,data)|>length ,'1':2:'9')

结果正确。且可以放一行,也不显挤。但需要对filter函数相当熟悉。

filter的函数经常可能用到。即过滤掉不符合条件的元素。

filter(x->(x>1), [0 1 5 3 2 1 0]) # =>[5 3 2]
filter((str)->length(str)==3, ["abcd", "efg", "hij", "klmn", "opq"]) #=> ["efg", "hij", "opq"]

注意:以下是表示,这些页码在这些页中是否出现过,并不符合原义。

map(y->map(x->in(y,x),map(string,1:168))|>sum,'1':2:'9')

但的确是蛮有意思的。

关于“|>”:Applies a function to the preceding argument. This allows for easy function chaining.

 [1:5] |> x->x.^2 |> sum |> inv
 =1/55=0.0182

 [1:5] |> x->x.^2 |> sum  #1^2+2^2+3^2+4^2+5^2 =55
 =55
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值