0
http://www.poboke.com/study/python-solve-alphametics.html
简单换成Ruby,还可以工作。
其实内容和Python一样的,只是换成ruby而已。刚好Ruby里面也有permutation这样的方法,直接就可以用了。但是性能不是很好,虽然代码行数比较少。
题外话:说Python比Ruby简洁的,你们试试把Ruby的end抹掉以后再对比行数吧。
Posted on
Thursday, August 24, 2017
by
醉·醉·鱼
and labeled under
ruby
最近在http://exercism.io/上面刷题玩,遇到字母算术题。这个应该是目前最难的一道题了。实在不知道如何解,于是在网上搜了一下。找到一个算法,其实就是穷举法。http://www.poboke.com/study/python-solve-alphametics.html
简单换成Ruby,还可以工作。
其实内容和Python一样的,只是换成ruby而已。刚好Ruby里面也有permutation这样的方法,直接就可以用了。但是性能不是很好,虽然代码行数比较少。
题外话:说Python比Ruby简洁的,你们试试把Ruby的end抹掉以后再对比行数吧。
module Alphametics
def self.solve(input)
words = input.scan(/\w+/)
uniq_characters = words.join.chars.uniq
answer_list = []
(0..9).to_a.permutation(uniq_characters.size).each do |e|
next if words.any? { |word| word.tr(uniq_characters.join, e.join(''))[0] == '0' }
if instance_eval(input.tr(uniq_characters.join, e.join('')))
answer_list = e
break
end
end
return {} if answer_list.empty?
Hash[Hash[uniq_characters.zip answer_list].sort]
end
end
Post a Comment