This is a little smaller.
$p = ARGV.shift.split(//)
def s
h = Hash.new()
80.times do |j|
next if $p[j].to_i != 0
80.times {|k| h[k.to_i / 9 == j / 9 ||k.to_i%9 == j%9 || k.to_i /
27 == j / 27 && k.to_i%9/3 == j%9/3 ?$p[k.to_i]:0] = 1}
10.times {|v| next if v==0 || h.has_key?(v.to_s); $p[j] = v.to_s;
s}
return $p[j] = 0;
end
return (puts "\nSolution:#{$p}" )
end
s