Formule-uitdaging - converteer J / N naar dagen van de week - Puzzel

Een oude lezer stuurde me de afgelopen week een interessant probleem. Het doel is om te eindigen met een tekstreeks zoals "MWF" voor maandag, woensdag, vrijdag. Het probleem is dat de weekdagen worden ingevoerd als ja / nee-afkortingen zoals "NYNYNYN" voor "MWF".

Uitdaging

Welke formule vertaalt de "N" en "Y" naar afkortingen voor weekdagen, zoals weergegeven in de bovenstaande schermafbeelding?

Het werkboek is hieronder bijgevoegd. Plaats uw antwoord in de comments.

Extra punten voor stijl en elegantie, maar werkpaardoplossingen zijn ook prima :)

Veronderstellingen

  1. Alle invoer is 7 tekens lang en bevat alleen "Y" of "N"
  2. Dagen zijn van zondag tot en met zaterdag, SMTWTFS, in kaart gebracht.
Antwoord (klik om uit te vouwen)

Oplossingsopties - spoilers!

Optie # 1 - brute force aaneenschakeling met de MID-functie, regeleinden toegevoegd voor leesbaarheid:

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

Dit zou een typische oplossing zijn, en illustreert mooi hoe aaneenschakeling werkt. Opmerking: het staat u vrij om regeleinden in de formulebalk te gebruiken om formules gemakkelijker leesbaar te maken.

Optie # 2 - TEXTJOIN en MID-functie:

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

Deze oplossing gebruikt matrixconstanten om de formule aanzienlijk te vereenvoudigen.

Opmerking: Jon Wittwer heeft een meer geavanceerde versie van deze formule gepost in de opmerkingen hieronder, waarbij hij de matrixconstante laat draaien met ROW en INDIRECT.

Optie # 3 - TEXTJOIN, MID, en REPT:

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

Een * iets * compactere versie die REPT gebruikt, gebruikmakend van het feit dat MID TRUE of FALSE retourneert voor elke waarde, en TRUE evalueert naar 1 of nul binnen REPT.

Interessante artikelen...