Palavras elásticas

Neste desafio, imagine que as palavras são elásticas. O que acontece quando você estica um elástico aplicando uma força de tração constante nas duas extremidades? Cada parte (ou letra, neste caso) se expandirá: a expansão será mínima nas extremidades e máxima no centro.

Se a palavra tiver um comprimento ímpar, o caractere central será o pivô que a divide em duas metades.

"ABC" -> Left = "A" | Center = "B" | Right = "C"

Se a palavra tiver um comprimento par, considere duas metades de mesmo comprimento. O último caractere da metade esquerda e o primeiro da metade direita formarão o centro.

"ABCD" -> Left = "AB" | Right = "CD"

Para representar a expansão de uma letra, repita-a tantas vezes quanto indicar sua posição numérica dentro da respectiva metade (ou seja, contando os índices de / até 1, e não a partir de 0 como de costume). As posições aumentam na metade esquerda e diminuem na metade direita.

Word = "ANNA" 

Left = "AN"
Right = "NA"

Left = "A" * 1 + "N" * 2 = "ANN"
Right = "N" * 2 + "A" * 1 = "NNA"

Word = Left + Right = "ANNNNA"

Se a palavra tiver um comprimento ímpar, o pivô (o caractere central) será o ponto máximo, ou seja, o maior valor que separa as duas metades da palavra.

Word = "KAYAK"

Left = "K" * 1 + "A" * 2 = "KAA"
Pivot = "Y" * 3 = "YYY"
Right = "A" * 2 + "K" * 1 = "AAK"

Word = Left + Pivot + Right = "KAAYYYAAK"

Dada uma word, implemente uma função que retorne a versão esticada da palavra como uma string.

Exemplos

elasticize("ANNA") // "ANNNNA"

elasticize("KAYAK") // "KAAYYYAAK"

elasticize("X") // "X"

Notas

  • Para palavras com menos de três caracteres, a função deve retornar a mesma palavra, pois não é possível aplicar tração.
  • Lembre-se: na metade esquerda, as posições dos caracteres aumentam a partir de 1; na metade direita, elas diminuem novamente até 1.