Ordenar por número de chamadas

Crie uma função que recebe uma lista de funções e as ordena em ordem crescente com base em quantas chamadas são necessárias para que retornem algo que não seja uma função.

Exemplos

f1 = -> {"hello"}
# f1[] ➞ "hello"

f2 = -> {-> {"edabit"}}
# f2[][] ➞ "edabit"

f3 = -> {-> {-> {"user"}}}
# f3[][][] ➞ "user"

func_sort([f2, f3, f1]) ➞ [f1, f2, f3]
# [f2, f3, f1] ➞ [2, 3, 1] ➞ [1, 2, 3] ➞ [f1, f2, f3]

func_sort([f1, f2, f3]) ➞ [f1, f2, f3]
# [f1, f2, f3] ➞ [1, 2, 3] ➞ [1, 2, 3] ➞ [f1, f2, f3]

func_sort([f2, "func"]) ➞ ["func", f2]
# [f2, "func"] ➞ [2, 0] ➞ [0, 2] ➞ ["func", f2]

Observações

  • Trate os elementos que não sejam funções como se precisassem de zero chamadas.
  • Cada função será chamada sem parâmetros.
  • Cada função precisará ser chamada pelo menos uma vez.
  • Entre os possíveis valores retornados estão Integers, Floats e Arrays, entre outros.