Menor x tal que los x múltiplos de n contienen todos los dígitos

Definir la función

tal que (menorX n) es el menor x tal que entre los x primeros múltiplos de n (es decir, entre n, 2×n, 3×n, … y x×n) contienen todos los dígitos al menos una vez. Por ejemplo, (menorX 92) es 6 ya que

Otros ejemplos

Soluciones

14 Comentarios

    1. Me has servido de inspiración para poder hacerlo.
      Solo un comentario, probablemente lookup sea O(n) ya que es una lista y no un diccionario. length también es O(n) y ya que tiene que contener los 10 elementos distintos (por nub), podemos aprovecharnos de eso y ahorrarnos el sort.

    1. Buena definición, mejor si le quitas el sort que no lo necesitas y lo metes como función auxiliar de menorX para no cargar con la variable n en el argumento.

  1. Creo que es algo más eficiente que el resto.

    1. Buenas, puedes hacer tu función aún más eficiente si tomas ys como (y:ys) y así te ahorras el usar head y tail. También puedes usar la función (\\) de Data.List para hacer más eficiente el cálculo de m. Quedaría tal que así:

      Donde menorX2 es tu función.

      1. Muy buena!
        Estaba pensando que quizá se podría mejorar la eficiencia de esta manera:

        Dejando así la lista infinita [1..] fuera de la definición y en lugar de hacer el producto (n*y) cada vez que simplemente sumara n al anterior.
        Sin embargo esta mejora no resulta eficiente ya que solo se usa el producto hasta 72*n como mucho, y calcular tan pocos productos y tan pequeños no le resulta costoso al ordenador.

Leave a Reply to agumaragu1Cancel reply