domingo, 25 de febrero de 2018

Programación Funcional en LINQ No. 2-18.1: Teoría de Números - Generar Números de Armstrong

1. Problema

Generar números de Armstrong utilizando los elementos de programación funcional que dispone LINQ.

2. Solución

Un número de Armstrong es número que se obtiene a partir de la suma de los dígitos elevados al cubo (Mukherjee, 2014); es decir:
Número de Armstrong

3. Código C#

Archivo C# numeros-armstrong.cs [enlace alternativo]:



El método de extensión Digitos() (líneas 4-16) es el que permite descomponer un número dado en sus dígitos.


En el método Main() (líneas 19-24) se realizan las siguientes operaciones:
  • Se genera el rango 0-1000: Enumerable.Range(0, 1000)
  • Se utiliza la función filtro Where para comprobar que la suma de los dígitos (cada uno elevado al cubo) es igual al número actual k.
    • Por cada número k del rango (0-1000) se realiza la proyección de elevar al cubo cada dígito (obtenidos con la método de extensión Digitos()); y finalmente aplicar la función estadística de Sum() para sumar todos los cubos.
Prueba de ejecución:
Números de Armstrong entre 0 y 1000.
Figura 1. Números de Armstrong entre 0 y 1000.

4. Literatura & Enlaces

Mukherjee, S (2014). Thinking in LINQ Harnessing the Power of Functional Programming in .NET Applications. United States: Apress.

O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.