5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【JS】スクリプト,バトルロワイヤル39【Perl,Ruby,PHP,Python】

73 :デフォルトの名無しさん:2013/09/17(火) 18:22:24.13
Rubyでeval
def solver(q)
; vars = q.scan(/[a-z]/i).uniq
; ind = Hash[vars.zip(vars.size.times)]
; qq = q.gsub(/([a-z]+)/i){ $1.chars.reverse.map.with_index{|e,i| "a[#{ind[e]}]*#{10**i}"}.join('+')}.sub(/=/,'==')
; chk1 = eval "->(a){#{qq}}"
; chk2 = eval "->(a){#{q.scan(/[a-z]+/i).map{|e| "!a[#{ind[e[0,1]]}].zero?" }.join(' and ')}}"
; (0..9).to_a.permutation(vars.size) do |a|
; ; yield q.gsub(/([a-z])/i){a[ind[$1]]} if chk1.call(a) and chk2.call(a)
; end
end

solver("send + more = money"){|a| puts a}
#solver("APPLE + GRAPE = CHERRY"){|a| puts a}

全パターン検索して 2.3秒
ループごとにevalさせてたら 57秒かかったので
判定関数をevalで作る方式に
"APPLE + GRAPE = CHERRY" だと4.7秒

一つ見つけたら打ち切りだと 両方あわせて 5.1秒
同環境で >>71 をPython3.3.0 で 2.8秒
ぐぬぬっPython速いな

229 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)