def samecase(padrao, alvo)
    alvo.split("").zip(padrao.split(""))
		.map { |a, p| p.upcase == p ? a.upcase : a.downcase }
		.join("")
end
puts "Testando samecase"
puts samecase("abcd", "XYZW")
puts samecase("aBcD", "XYZW")
puts samecase("aBcD", "xyzw")
puts samecase("ABCD", "xyzw")

def replace_with_case(str, padrao, novo_valor) 
	str.gsub(/#{padrao}/i) { |matched| samecase(matched, novo_valor) }
end
puts "Testando replace_with_case"
puts replace_with_case("dado", "da", "la")
puts replace_with_case("DaDo", "da", "la")
puts replace_with_case("dAdO", "da", "la")
puts replace_with_case("dado", "DA", "LA")
puts replace_with_case("daDO", "DA", "LA")
