// Funcion recursiva de cuenta regresiva del anio nuevo.
function cuentaRegresiva(numero) {
  if (numero < 0) numero *= -1
  if (numero != 0 ) {
    setTimeout(() => {
      console.log(numero)
      cuentaRegresiva(--numero)
    }, 1000);
  }
  else console.log('Feliz anio nuevo')
cuentaRegresiva(-5)
// Escribe una función recursiva para un timer que cada 5 minutos se agregue 10 minutos más a su cuenta total.
function timerRecursivo(minutos = 0) {
  setTimeout(() => {
    if(minutos%5===0 && minutos!==0 && minutos%10!==0) {
      console.log(minutos+=5)
    } else console.log(++minutos)
    timerRecursivo(minutos)
  }, 1000);
} 
timerRecursivo()
// Escribe una función recursiva para encontrar el número mayor de un array.
function mayorRecursivo(array){
  if (array.length !== 1) {
    array[0] > array[array.length - 1] 
    ? array.pop()
    : array.shift()
    mayorRecursivo(array)
  } 
  if (array.length === 1) return array*1
}
console.log(mayorRecursivo([1,2,4,3]))
// Escribe una función recursiva para escribir la serie Fibonacci hasta su décima iteración.
function fibonacciRecursivo(veces = 10) {
  let counter = 0
  let last = 0
  function calculateFibo(current = 1) {
    if(counter != veces) {
      ++counter
      const result = current + last
      last = current
      return `, ${result}${calculateFibo(result)}`
    } else return ''
  }
  return `0, 1${calculateFibo()}`
}
console.log(fibonacciRecursivo(10))
// Escribe una función recursiva para generar un password aleatorio con 20 caracteres combinando letras-números-símbolos-números-letras-día-new-año.
function contraseniaRecursiva(stringLength) {
  let newPassword = new Date().toLocaleDateString('en-GB').replace(/\\//ig, '')
  function addRandomUnicode() {
    const random = String.fromCharCode(Math.floor(Math.random() * (122 - 33)) + 33);
    newPassword = `${random}${newPassword}`
    if (newPassword.length !== stringLength) return `${addRandomUnicode()}`
    else return newPassword
  }
  return addRandomUnicode() 
}
console.log(contraseniaRecursiva(20))
// Escribe una función recursiva para convertir de minúscula a mayúscula el primer y último carácter de un string.
function capitalizeRecursivo(str) {
  let current = 0
  function checkToCapitalize() {
    if (current !== str.length - 1) {
      const currentValue = current !== 0 ? str[current++] : str[current++].toUpperCase()
      return `${currentValue}${checkToCapitalize()}` 
    } 
    else return `${str[current++].toUpperCase()}`
  }
  return checkToCapitalize()
}

console.log(capitalizeRecursivo('holaquehace'))
// Muestra los likes

const likes = (names) => ({
    0: "no one likes this",
    1: `${names[0]} likes this`,
    2: `${names[0]} and ${names[1]} like this`,
    3: `${names[0]}, ${names[1]} and ${names[2]} like this`,
    4: `${names[0]}, ${names[1]} and ${names.length - 2} like this`,
  }[names.length]);

const opciones = {
    0: "no one likes this",
    1: `${names[0]} likes this`,
    2: `${names[0]} and ${names[1]} like this`,
    3: `${names[0]}, ${names[1]} and ${names[2]} like this`,
    4: `${names[0]}, ${names[1]} and ${names.length - 2} others like this`,
  }
const likes = (names) => opciones[names.length];

const likes = (names) => ([
  "no one likes this",
  `${names[0]} likes this`,
  `${names[0]} and ${names[1]} like this`,
  `${names[0]}, ${names[1]} and ${names[2]} like this`,
  `${names[0]}, ${names[1]} and ${names.length - 2} others like this`
][names.length]);