Algoritmo 'Fizz Buzz'

Explicación del típico ejercicio de algoritmia 'Fizz Buzz'

28.09.2019 a las 11:19

Algoritmo 'Fizz Buzz'

Algoritmo 'Fizz Buzz'

La verdad, es que este algoritmo es muy fácil, no obstante, lo suelen pedir mucho en las pruebas técnicas.

Es un algoritmo que dado un número, tiene que imprimir:

  • En el caso de que el número sea divible por 3 fizz
  • En el caso de que el número sea divisible por 5 buzz
  • En el caso de que sea divisible por 3 y por 5 fizzbuzz
  • Y si no es divisible ni por 3 ni por 5 escribirá el mismo número

Para obtener puntos extras, haría el código auto-explicativo, es uno de los principios SOLID, así que mi propuesta para la solución al ejercicio sería:

  export function fizzbuzz(num:number): number | string{
      if(num===0) return 0;
      if(isDivisible(num,3) && isDivisible(num,5)) return 'fizzbuzz';
      if(isDivisible(num,3)) return 'fizz';
      if(isDivisible(num,5)) return 'buzz';
      return num;
  }

  function isDivisible(num:number, divisor:number):boolean {
      if (num % divisor === 0) return true;
      return false;
  }
  

Para obtener más puntos aún, crearía un fichero de pruebas, esto, aunque no cambie la solución, yo lo veo como demostrar que tu nivel ya es de senior

  import { fizzbuzz } from './fizzbuzz';

  describe('fizzbuzz', () => {

    test('should print 0 if it receive 0', ()=>{
        let expected:number = 0;
        let result:number | string = fizzbuzz(0);
        expect(expected).toBe(result);
    });
    
    test('should print 1 if it receive 1', ()=>{
        const expected:number = 1;
        const result:number | string = fizzbuzz(1);
        expect(expected).toBe(result);
    });
    
    test('should print fizz if it receive a multiple of 3',()=>{
        const expected:string='fizz';
        const result:string | number = fizzbuzz(6);
        expect(expected).toBe(result);
    });

    test('should print buzz if it receive a multiple of 5',()=>{
        const expected:string='buzz';
        const result:string | number = fizzbuzz(10);
        expect(expected).toBe(result);
    });

    test('should print fizzbuzz if it receive a multiple of 3 andd 5',()=>{
        const expected:string='fizzbuzz';
        const result:string | number = fizzbuzz(15);
        expect(expected).toBe(result);
    });
});
  

Puedes acceder a mi repositorio para descargarte el algoritmo con pruebas unitarias

Hasta luego 🖖

Servicios

Software

IoT

Digitalización

Aplicaciones móviles

Consultoría

fjmduran.com v0.1.2