Wyzwanie formuły - zamień T / N na dni tygodnia - Puzzle

Wieloletni czytelnik przesłał mi ciekawy problem w zeszłym tygodniu. Celem jest utworzenie ciągu tekstowego, takiego jak „MWF”, na poniedziałek, środę i piątek. Problem polega na tym, że dni tygodnia są wprowadzane jako skróty tak / nie, jak „NYNYNYN” dla „MWF”.

Wyzwanie

Jaka formuła przetłumaczy „N” i „Y” na skróty dni tygodnia, jak pokazano na powyższym zrzucie ekranu?

Skoroszyt jest załączony poniżej. Opublikuj swoją odpowiedź w komentarzach.

Dodatkowe punkty za styl i elegancję, ale rozwiązania dla koni roboczych też są w porządku :)

Założenia

  1. Wszystkie dane wejściowe mają 7 znaków i zawierają tylko „T” lub „N”
  2. Dni są mapowane od niedzieli do soboty, SMTWTFS.
Odpowiedź (kliknij, aby rozwinąć)

Opcje rozwiązania - spojlery!

Opcja nr 1 - brutalna konkatenacja z funkcją MID, dodane podziały wierszy dla czytelności:

=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","")

Byłoby to typowe rozwiązanie i ładnie ilustruje, jak działa konkatenacja. Uwaga: możesz swobodnie używać podziałów wierszy na pasku formuły, aby ułatwić czytanie formuł.

Opcja nr 2 - funkcja TEXTJOIN i MID:

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

To rozwiązanie wykorzystuje stałe tablicowe do uproszczenia formuły.

Uwaga: Jon Wittwer opublikował bardziej wyrafinowaną wersję tej formuły w komentarzach poniżej, obracając stałą tablicową za pomocą ROW i INDIRECT.

Opcja nr 3 - TEXTJOIN, MID i REPT:

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

* Nieco * bardziej zwarta wersja używająca REPT, wykorzystująca fakt, że MID zwróci TRUE lub FALSE dla każdej wartości, a TRUE da 1 lub zero wewnątrz REPT.

Interesujące artykuły...