Recursão: ordenar e encontrar

Neste desafio, vamos levar a recursão ao próximo nível, incorporando uma função recursiva dentro de outra função recursiva.

Escreva uma função que ordene as strings de um array (se a string for um palíndromo, ela passará a fazer parte do array ordenado) e encontre a string não palindrômica mais longa.

Embora essas tarefas possam ser realizadas com algumas funções integradas de Array, o propósito e a intenção deste desafio é que você as resolva recursivamente.

Estrutura da saída

{longest: longest_non_palindromic, length: longest_length, palindromes: [...palindromic_strings]}

Exemplos

qualify(["wow", "relevance", "radar", "soundly", "intelligence", "racecar", "gradually"]) ➞ {"longest": "intelligence", "length": 12, "palindromes": ["racecar", "radar", "wow"]}

qualify(["persistence", "anna", "civic", "perseverance", "kayak", "irrefutability"]) ➞ {"longest": "irrefutability", "length": 14, "palindromes": ["anna", "civic", "kayak"]}

qualify(["level", "resistance", "madam", "arrogance", "unconsiderably", "mom", "noon"]) ➞ {"longest": "unconsiderably", "length": 14, "palindromes": ["level", "madam", "mom", "noon"]}

Observações

  • Todos os itens do array estão em letras minúsculas.
  • Quando duas palavras mais longas forem encontradas, retorne a primeira.
  • O uso das funções reduce(), reduceRight(), map(), filter(), indexOf() e max() é restrito.
  • Você pode ler mais sobre recursão (consulte a aba Resources) se ainda não estiver familiarizado com ela ou se ainda não tiver entendido completamente o conceito antes de começar este desafio.
  • Se você acha que recursão é divertida, confira esta coleção.