[Kata]- Cambio con monedas

Muy buenas! Puro divertimento 🙂

Os propongo un kata por si quereis entrenar las neuronas. Por supuesto no es un kata original mío (soy muy malo para eso), de hecho es un kata creo que bastante famosillo, pero es uno con el que me he enfrentado no hace mucho…

El enunciado es muy simple… Crear una función que reciba dos parámetros: Un entero que represente una cantidad de dinero, y una colección que represente los tipos de monedas de los que disponemos. Dicha función debe devolver de cuantas maneras diferentes podemos repartir las mondedas para conseguir el valor total de dinero (asumiendo que tenemos infinitas monedas de cada tipo).

P.ej. si el dinero es 4 y los tipos de monedas son 1 y 2, la función debe devolver “3”, ya que hay 3  maneras de sumar 4 usando 1 y 2:

  • 1+1+1+1
  • 2+2
  • 1+1+2

Si los tipos de monedas son 5,10,20,50,100,200 y 500 y la cantidad de dinero es 300 el valor devuelto debe ser 1022. Con las mismas monedas y dinero 500 el resultado asciende a 6149. Y finalmente con las mismas monedas y la cantidad de dinero 301 el valor es 0, ya que no hay combinación alguna.

El kata es sencillo, simplemente rellenar la función:

int TiposCambio(int money, IEnumerable<int> coins)

{

}

Como “pista” diré que usando C# 3.0 puede conseguirse una respuesta de 3 líneas de código y que no requiere ninguna variable local.

Podéis ir proponiendo soluciones, sugerencias, pistas… en los comentarios! 😉

Saludos!

PD: Si ya conoces la respuesta (como digo es un kata muy conocido) deja que los demás la busquen (aunque nada te impide dar sútiles pistas en los comentarios :p)

PD 2: No, no hay premio alguno… tan solo el placer de haber solucionado el acertijo… os parece poco? 😛 😛 😛

Un comentario sobre “[Kata]- Cambio con monedas”

  1. Interesante este kata. Me gusta.

    No lo he pensado con seriedad y estoy escribiendo esto recien leido el post pero lo primero que se me ocurre es encontrar el cambio con las monedas mas grandes y a partir de esta calcular los siguientes cambios que se componen de descomponer en monedas mas pequeñas(queda lioso) el cambio anterior. De hecho, mientras escribo se me esta ocurriento que esto podria ser recursivo…

    ¿Va bien encaminado?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *