@hanluner 上面的公司基本圈子里面朋友都踩过坑,愿意可以加个联系方式,帮你内推哦!:)
支持!
@shawncui 口语伤心,但是,正在努力自学,上培训班的收吗?
成都办公室在哪?主要业务是国外的吗?如果是的话有英语要求吗?
外包公司产品转型的采用 Ruby 技术项目?
@ywencn 失礼,之前一直在家办公习惯了,都自由安排时间, :)
@gamever 现在还招吗?简历已发,请查收!如果合适,周末能面谈吗?
@xranthoar @sqrh @luikore @blacktulip 算法效率确实都是 O(log(n)), 不错! 这个两个算法应该都是对大数据计算来说的吧,浮点计算不精确这个说法应该就忽略了吧。而且,在现代计算机的浮点计算不是 x86 的两条指令 FYL2X 和 F2XM1 可以概括的吧!从下面这个结果可以看出,我们的 Two-Term CRT 和 The Lucas Numbers 在现在的计算机的表现是相近的吧(虽然这个结果 The Lucas Numbers 更胜一筹),就是不知道更多的大型机上的那个表现更加的完美。
@blackanger @xranthoar 前面人用了 Greedy approach 解,后面大家又用 Dynamic Programming . 我也在来个 dp,Greedy approach 太短了确实精简了,还是挺喜欢 Greedy approach
def make_change(amount, coins = [25, 10, 5, 1])
coins.sort! { |a, b| b <=> a }
optimal_change = Hash.new do |hash, key|
hash[key] = if key < coins.min
[]
elsif coins.include?(key)
[key]
else
coins.
reject { |coin| coin > key }.
inject([]) {|mem, var| mem.any? {|c| c%var == 0} ? mem : mem+[var]}.
map { |coin| [coin] + hash[key - coin] }.
reject { |change| change.inject(&:+) != key }.
min { |a, b| a.size <=> b.size } || []
end
puts hash
hash[key]
end
optimal_change[amount]
end
@xranthoar @blackanger @nickelchen @shooter 请看 26 楼,效率高?一看明了!
@doitian 喜欢?如果还是个 schemer 的话,看这里 http://docs.racket-lang.org/racklog/
@bhuztez 学习 ing, -_-
@luikore @bhuztez @doitian 玩 Constraint 这种 Logic,用不好玩了,写个或者扩展个才 hacking. 看这里,看这里,http://minikanren.org/
class Lisp
def initialize
@env = {
:label => lambda { |(name,val), _| @env[name] = val },
:quote => lambda { |sexpr, _| sexpr[0] },
:car => lambda { |(list), _| list[0] },
:cdr => lambda { |(list), _| list.drop 1 },
:cons => lambda { |(e,cell), _| [e] + cell },
:eq => lambda { |(l,r), _| l == r },
:if => lambda { |(cond, thn, els), ctx| eval(cond, ctx) ? eval(thn, ctx) : eval(els, ctx) },
:atom => lambda { |(sexpr), _| (sexpr.is_a? Symbol) or (sexpr.is_a? Numeric) }
}
end
def apply fn, args, ctx=@env
return @env[fn].call(args, ctx) if @env[fn].respond_to? :call
self.eval @env[fn][2], Hash[*(@env[fn][1].zip args).flatten(1)]
end
def eval sexpr, ctx=@env
if @env[:atom].call [sexpr], ctx
return ctx[sexpr] if ctx[sexpr]
return sexpr
end
fn = sexpr[0]
args = (sexpr.drop 1)
args = args.map { |a| self.eval(a, ctx) } if not [:quote, :if].member? fn
apply(fn, args, ctx)
end
end
@bhuztez Prolog 是挺好玩的,再来一个解法总数的例子。我来个 ruby 的:
def make_change2(amount, coins)
n, m = amount, coins.size
table = Array.new(n+1){|i| Array.new(m, i.zero? ? 1 : nil)}
for i in 1..n
for j in 0...m
table[i][j] = (i<coins[j] ? 0 : table[i-coins[j]][j]) +
(j<1 ? 0 : table[i][j-1])
end
end
table[-1][-1]
end
@gihnius 粗鄙改造 luikore 的解法,不一定是最优结果,但是满足要求。
def make_change r, coins = {50 =>1, 20=>2, 10=>3, 5=>4, 1=>5}, result=[]
coins.each do |c, amount|
try = r.divmod(c)
if try.first <= amount
coins.delete(c)
result << try.first
result << make_change(try.last, coins)
else
r = r-c*amount
coins.delete(c)
result << amount
result << make_change(r, coins)
end
end
result.flatten
end
还有个我喜欢的
def fib
a, b = 1, 1
lambda {ret, a, b = a, b, a+b; ret}
end
fib_gen = fib
10.times { p fib_gen.call }
=> 1
=> 1
=> 2
=> 3
=> 5
=> 8
=> 13
=> 21
这里还有个适用男,哈哈
def fib
phi = (1 + Math.sqrt(5)) / 2
((phi**self - (-1 / phi)**self) / Math.sqrt(5)).to_i
end
@zj0713001 再来个经济适用型男的,嘿嘿
fib = Hash.new do |f, n|
f[n] = if n <= -2
(-1)**(n+1) * f[n.abs]
elsif n <= 1
n.abs
else
f[n-1] + f[n-2]
end
end
@zj0713001 要效率那个那么写哦,玩 ruby 语法糖和 lambda 去了,完全只图好看哈!下面来个效率的
def fib(len)
arr, a, b = [], 0, 1
len.times do
arr << a
a,b = b, a+b
end
arr
end
@luikore 二题优解,我来个第一题。
def p_fib(len)
(0..len).map { |pos| (f = ->(x) { x < 2 ? x : f[x-1] + f[x-2] })[pos] }
end
哈哈,强烈要求开个《福利》专栏...
@simlegate @ginchenorlee Good luck!
@simlegate @ginchenorlee 刚刚给 Mats 打了个电话,他说“I will arrange a promising position for you, Do you wish to accept?", 哈哈
@hisea Laptop Pro 这一批还有名额没嘛?
@hisea Tactile Pro Mini 5.30 还有名额嘛?