Desafio de fórmula - converter S / N em dias da semana - Enigma

Um leitor de longa data me enviou um problema interessante na semana passada. O objetivo é terminar com uma string de texto como "MWF" para segunda, quarta e sexta-feira. O problema é que os dias da semana são inseridos como abreviações sim / não, como "NYNYNYN" para "MWF".

Desafio

Qual fórmula irá traduzir o "N" e "Y" para as abreviações dos dias da semana, conforme mostrado na captura de tela acima?

A apostila está anexada abaixo. Poste sua resposta nos comentários.

Pontos extras para estilo e elegância, mas soluções robustas também são boas :)

Suposições

  1. Todas as entradas têm 7 caracteres e contêm apenas "Y" ou "N"
  2. Os dias são mapeados de domingo a sábado, SMTWTFS.
Resposta (clique para expandir)

Opções de solução - spoilers!

Opção nº 1 - concatenação de força bruta com a função MID, quebras de linha adicionadas para facilitar a leitura:

=IF(MID(B5,1,1)="Y","S","")& IF(MID(B5,2,1)="Y","M","")& IF(MID(B5,3,1)="Y","T","")& IF(MID(B5,4,1)="Y","W","")& IF(MID(B5,5,1)="Y","T","")& IF(MID(B5,6,1)="Y","F","")& IF(MID(B5,7,1)="Y","S","")

Esta seria uma solução típica e ilustra bem como funciona a concatenação. Observação: você pode usar quebras de linha dentro da barra de fórmulas para tornar as fórmulas mais fáceis de ler.

Opção # 2 - TEXTJOIN e função MID:

=TEXTJOIN("",TRUE,IF(MID(B5,(1,2,3,4,5,6,7),1)="N","",("S","M","T","W","T","F","S")))

Esta solução usa constantes de matriz para simplificar consideravelmente a fórmula.

Nota: Jon Wittwer postou uma versão mais sofisticada desta fórmula nos comentários abaixo, girando a constante do array usando ROW e INDIRECT.

Opção # 3 - TEXTJOIN, MID e REPT:

=TEXTJOIN("",1,REPT(("S","M","T","W","T","F","S"),MID(B5,(1,2,3,4,5,6,7),1)="Y"))

Uma versão * ligeiramente * mais compacta usando REPT, aproveitando o fato de que MID retornará TRUE ou FALSE para cada valor, e TRUE será avaliado como 1 ou zero dentro de REPT.

Artigos interessantes...