我想尝试递归来计算复合兴趣而不是循环.
在Ruby中:
def compound balance, percentage
balance + percentage / 100 * balance
end
def invest amount, years, rate
return amount if years == 0
invest compound(amount, rate), years - 1, rate
end
Run Code Online (Sandbox Code Playgroud)
这很好用.1年后5万美元的10,000美元是10,500美元; 10年后,16,288美元.
现在JavaScript(ES6)中的逻辑相同.
function compound(balance, percentage) {
return balance + percentage / 100 * balance;
}
function invest(amount, years, rate) {
if (years === 0) {
return amount;
} else {
invest(compound(amount, 5), years - 1, rate);
}
}
Run Code Online (Sandbox Code Playgroud)
这会回来undefined,但我无法弄清楚原因.它invest使用正确的参数调用正确的次数,逻辑是相同的.该compound功能的工作原理,我测试了一下分开.那么......可能出错了什么?
我正在检测非常大(30+ GB)的文件是否相同.而不是散列所有30 GB,我认为我将哈希第一兆字节,然后兆字节从10%开始进入文件,然后兆字节从20%开始进入文件,依此类推.检测1000万字节是否相同对于我的目的来说已经足够了.
在Ruby或JavaScript中,当我这样做时,我只需创建一个10 MB的缓冲区,读入1 MB,在文件中向前搜索,在缓冲区中再读取1 MB,向前搜索等,然后对缓冲区进行哈希处理.
在围棋,我有点困惑如何做到这一点,因为Read,ReadFull,ReadAtLeast等功能似乎都采取了缓存作为一个参数,然后读,直到填满它.所以我可以分配11个单独的缓冲区,用单独的1 MB块填充10个,然后将它们连接到最后一个哈希...但这似乎超级低效和浪费.我确定我错过了一些东西,但是搜索文档只会让我更加困惑.什么是Go中这个问题的合适解决方案?我可以简单地要求将n个字节读入预先存在的缓冲区吗?
我正在尝试在Phusion Passenger下创建一个Rails应用,并且遇到了missing secret_key_base错误。我已经用Google搜索了此错误,却找不到关于秘密令牌/密钥是什么,我如何设置它或用于什么目的的明确解释-仅在这里和那里全部都是假定我已经知道了其他内容,因此无法真正推测知道发生了什么事。我在Rails上购买的两本书也都没有对此进行讨论。
什么是秘密令牌?
这是为了什么
创建新应用后如何设置?
我知道"string"[/regex/],它返回匹配的字符串部分.但是,如果我只想返回字符串中捕获的部分,该怎么办?
我有字符串"1952-FEB-21_70_The_Case_of_the_Gold_Ring.mp3".我想在变量中存储title文本The_Case_of_the_Gold_Ring.
我可以用正则表达式捕获这部分/\d_(?!.*\d_)(.*).mp3$/i.但是编写Ruby "1952-FEB-21_70_The_Case_of_the_Gold_Ring.mp3"[/\d_(?!.*\d_)(.*).mp3$/i]返回0_The_Case_of_the_Gold_Ring.mp3并不是我想要的.
我可以通过写作得到我想要的东西
"1952-FEB-21_70_The_Case_of_the_Gold_Ring.mp3" =~ /\d_(?!.*\d_)(.*).mp3$/i
title = $~.captures[0]
Run Code Online (Sandbox Code Playgroud)
但这似乎很草率.当然有一个正确的方法来做到这一点?
(我知道有人可能会写一个更简单的正则表达式来定位我想要的文本,让"string"[/regex/]方法工作,但这只是一个例子来说明问题,具体的正则表达式不是问题.)
假设我想要一个people从数据库查询构建的数组.我通常会写
people = Array.new
db.execute("select name from people") {|person| people << person}
Run Code Online (Sandbox Code Playgroud)
工作正常,但我想知道是否有一种方法可以在一行中创建,如果它尚不存在则创建一个数组然后填充它.
我有三个字符串,从数据库中提取:
"2015-03-18" (事件发生的日期)"22:00" (事件发生的时间)"-05:00" (事件发生位置的UTC偏移).我想组合这三个字符串来生成Ruby Time对象.我正在做:
utc_offset = "-05:00"
airtime = "22:00"
airday = "2015-03-18"
year,month,day,hour,minutes = airday.split("-").map(&:to_i) + airtime.split(":").map(&:to_i)
Time.new(year,month,day,hour,minutes,0,utc_offset)
Run Code Online (Sandbox Code Playgroud)
这有效; 我只是想知道它是否是正确/标准/惯用/最清晰的方式.
我有一个数组names,包含12个名字.
我有另一个数组weights,包含12个数字.
我想创建一个散列,其中键是名称,值是权重.
权重数字是预先确定的(它们应该总是,例如,200,150和180),但每次运行程序时都应将它们分配给随机名称.
例如,如果我使用数组names = ['homer', 'marge', 'maggie']和weights = [265, 140, 10],我可以运行该程序,并得到{homer: 140, marge: 265, maggie: 10},然后重新运行它,并得到{homer: 10, marge: 140, maggie: 265}.
这样做的明智之举是什么?
标题不好,但我不知道如何在字符限制内描述它.
作为一个学习练习,我正在尝试编写一个模拟彩票抽奖的Go程序.它绘制六个随机数作为获胜集,然后不断绘制随机数组,随后再次获得该集合.
首先,我编写了一个函数,它接受一个通道并无限循环"向通道添加6个随机整数的数组":
func draw(ch chan<- [6]int) {
generator := rand.New(rand.NewSource(time.Now().UnixNano()))
for {
ch <- [6]int{
generator.Intn(100),
generator.Intn(100),
generator.Intn(100),
generator.Intn(100),
generator.Intn(100),
generator.Intn(100),
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在main()我指定两个OS线程,创建一个可以容纳250个6个整数的数组的通道,并draw()在goroutine中启动我的函数.
runtime.GOMAXPROCS(2)
ch := make(chan [6]int, 250)
go draw(ch)
Run Code Online (Sandbox Code Playgroud)
接下来我[4 8 15 16 23 42]从频道中获取一个获胜集(例如),然后是"当前"集合,这意味着最近的抽奖.我将game_played计数器设置为1:
winning := <- ch
current := <- ch
games_played := 1
Run Code Online (Sandbox Code Playgroud)
这是棘手的一点.
在无限循环中,我检查当前平局是否等于获胜平局.如果是,我打印播放的游戏数量,并从循环中断.
如果不是,我设置current为新的抽奖,并递增计数器.然后循环应该if winning == current...反复运行检查,直到匹配为止.
for {
if winning == current {
fmt.Println(games_played)
break
} else …Run Code Online (Sandbox Code Playgroud) 我知道浮子固有的不精确.我感到困惑的是为什么我会从我期望解决的问题返回"100"0.99999999等.0.33*3怎么可能产生100?
这是我的代码:如果我说
float x = 100.0/3.0;
printf("%f",x*3.0);
Run Code Online (Sandbox Code Playgroud)
输出为"99.999996".但如果我说
printf("%f",(100.0/3)*3);
Run Code Online (Sandbox Code Playgroud)
输出为"100".它们不应该相同吗?我希望x解决(100.0/3.0),正是用明文写的 - 然而它们会产生两种不同的结果.