require 'digest/md5' hash_md5 = "2592307b5c69260ea8bdac47da9bd22a" hash_sum = 899117 str = gets.chomp # Digest::MD5.hexdigest(str) diff = hash_sum - str.split('').map(&:to_i).reduce(:+) for i in 0...(str.length) do next if i == 1 aft = str[i].to_i + diff next unless (0 <= aft && aft < 10) changed = str.dup ; changed[i] = aft.to_s(10) if Digest::MD5.hexdigest(changed) == hash_md5 then puts "#{str[i]} #{aft}" break end end