创建一个程序,生成具有随机数的随机长度数组,然后应用一系列更改数组的规则。应用规则后,除非另有规定,否则打印数组的和。
数组的随机长度必须在5和10之间,随机整数必须包含在1和20之间。每个数组长度应该具有相同的发生概率,而每个整数应该具有相同的每个元素被选择的概率。
这些规则的作用应像按顺序适用一样(例如:规则1先于规则2),只适用一次。为了证明规则应用程序,必须在每个规则应用程序之后和应用任何规则之前将数组打印到控制台。
这是一个初始数组,
[20, 2, 5, 7, 14, 8]第1条可适用于:
[19, 1, 4, 6, 13, 7]接下来适用第3条:
[19, 1, 4, 6]不需要其他规则,所以程序返回30作为和。
发布于 2017-04-13 10:19:37
发布于 2017-05-13 02:52:27
Ruby2.4是Enumerable#sum所必需的。
p a=(1..s=5+rand(5)).map{1+rand(19)}
a.map!{|i|i-1}if a.index 7
p a
a.map!{|i|i+1}if a.index 0
p a
a.pop s-(a.index(13)||s)
p a
a.reject! &:odd?if a.index 2
p a
a.index(20)?p(20*[1,s][(a[2]||1)%2]):((a.pop;p a)while a.sum>50
p m=a.sum;puts"%x"%m if a.index 16)在网上试试! ( repl.it和tio.run还不支持Ruby2.4,因此这个在线版本用具有相同行为的inject(:+)代替sum )。
发布于 2017-04-13 15:40:30
非常幼稚的实现;我想我可能可以使它更短一些。
s=sample(1:20,sample(5:10,1));print(s);if(7%in%s){s=s-1;print(s);if(0%in%s)s=s+1;print(s)};if(13%in%s){s=s[1:(which(s==13)-1)];print(s)};if(2%in%s){s=s[!(s%%2)];print(s)};if(20%in%s){if(s[3]%%2){20*length(s);print(s)}else{20;print(s)}};while(sum(s)>50){s=s[-length(s)];print(s)};if(16%in%s){print(as.hexmode(sum(s)))};sum(s)https://codegolf.stackexchange.com/questions/116318
复制相似问题