16. juni 2013 - 10:00Der er
17 kommentarer og 1 løsning
Er der nogen der er friske på en (i praksis helt unyttig) udfordring?
A B C 1 123 123 1 2 1 0 0 3 Regneark Excel 0 4 x x 1,5
Udfordringen er at konstruere den kortest mulige formel der returnerer værdierne i kolonne C ud fra værdierne i kolonne A og B. Altså, hvis indholdet i A og B er identisk og er tal(som i A1 og B1), skal der returneres 1. Hvis indholdet i A og B er identisk, men er tekst (som A4 og B4), skal der returneres 1,5. I alle andre tilfælde skal der returneres 0.
Det er en forudsætning, at ikke begge celler i kolonne A og B er tomme. Endvidere er SAND/FALSK-værdier og fejlværdier ikke tilladt.
Det kan gøres på mange forskellige måder, og udfordringen er som sagt at konstruere den kortest mulige formel i C1 der kan kopieres ned til C4 og give de viste resultater (1, 0, 0 og 1,5).
Løst med og uden brug af matriksformel. Men jeg skal bestemt ikke udelukke, at de begge kan gøres kortere.
Hvordan opgøres "kortest mulige formel"? Antallet af karakterer i formlen vel. Tælles lighedstegnet med? Og hvad med matrikstegnene {}?
Der vil være forskel afhængigt af sprogversionen. Så en udvidelse af udfordringen kunne være, om den kortest mulige formel laves i engelsk eller dansk Excel. Ofte vil det i mere komplekse formler være i den engelske pga. Microsofts tendens til at gøre nogle danske formler meget lange. F.eks.:
ISNA = ER.IKKE.TILGÆNGELIG TRIM = FJERN.OVERFLØDIGE.BLANKE
Men det behøver jo ikke at være tilfældet her.
Synes godt om
Slettet bruger
16. juni 2013 - 11:14#2
Vi kan jo lade det være åbent og vurdere formlens "korthed" dels med engelsksproget version dels med dansk.
Altså minimum af =LÆNGDE(<formel på dansk>) hvis der sættes en ' foran lighedstegnet henholdsvis minimum af =LEN(<formel på engelsk>)
Hint: Hvis der blot skal testes for, om værdierne i A1 og B1 er identiske, og altså ikke skal skelnes mellem, om cellerne indeholder tal eller tekst, så kan denne formel benyttes:
=HVIS(A1=B1;1;0) =IF(A1=B1;1;0)
Dvs. her er den engelske formel to karakterer kortere.
Synes godt om
Slettet bruger
16. juni 2013 - 11:42#4
Jeg er helt med, og har muligvis ikke udtrykt mig tydeligt nok. Jeg mente at vi kunne vurdere det på korteste formel af forslag der måtte komme i:
Dansk sprogversion Engelsk sprogversion
Hvis et "dansk" og et "engelsk" forslag bruger samme funktioner (HVIS = IF osv.) stilles de lige.
Jeg har ingen facitliste til det her. Det hele er kun ment for sjov.
En mulighed er: =IF(A4=B4;IF(ISNUMBER(A4);1;1,5);0)
Men ikke synderlig overskueligt for en nybegynder? Jeg tænkte også på noget med at teste med A1 x 1 - og så bruge iferror, men tror den bliver længere.
Ja, det er jo netop hvad jeg skriver.... Jeg havde dog ikke spottet den anden fejl også. Jeg tænkte dog at nogle ville gribe bolden og tænke videre. Nu gider jeg i hvert fald ikke beskæftige mig mere med udfordringen.
Jeg burde dog have nævnt, at navngivning ikke er tilladt, ellers kan man let gøre en meget lang formel med mange funktionskald til en kort formel, og det var ikke lige tanken.
Det er dog muligt (for dem der stadig måtte gide), at lave en gyldig formel der er lidt kortere endnu (uden navngivning).
Du får et sidste forsøg fra mig: =(A2=B2)*1,5-0,5*(A2=N(A2))
Synes godt om
Slettet bruger
18. juni 2013 - 05:07#15
Jens48 - men din formel (indsat i C1 og kopieret ned) returnerer ved mig -0,5 i C2.
Min tanke har på intet tidspunkt været, at nogen skulle lave det her for min skyld, derimod kun hvis du selv syntes det var sjovt eller udfordrende.
Men da jeg nu har startet tråden (og da interessen synes at være uddøet) vil jeg vise en mulig løsning (indsat i C1 og kopieret ned til og med C4), uden at jeg tør garantere, at det er den ultimativt korteste:
=(A1=B1)*(1+(A1>"")/2)
hvor =LÆNGDE(A1)-1 viser 21 tegn (-1 pga. ' foran lighedstegnet).
Bemærk, at "" i Excel-forstand er tekst og, at det gælder, at:
tal < tekst < SAND/FALSK-værdier, jf. for eksempel:
=9,99999999999999E+307 < "A" der returnerer SAND.
Tak til jer der deltog. Jeg lover aldrig at gøre noget lignende igen :-)
Hans
NB En sidste måde, men det er lidt snyd, er følgende:
=(A1=B1)+(A1>"")/2
hvor =LÆNGDE(A1)-1 viser 17 tegn.
"Snydet" består i, at det er nødvendigt at anvende det brugerdefinerede talformat [>0,5]Standard;"0" da formlen returnerer 0,5 i C2 (i stedet for 0).
Synes godt om
Slettet bruger
18. juni 2013 - 06:40#16
Hvis nogen ønsker point, så send et svar. Ellers lukker jeg tråden.
Ja, jeg så umiddelbart efter at jeg havde sendt svaret at hvis man byttede om på indholdet af kolonnerne så passede min formel ikke. Jeg ved godt at du ikke samler på points, men jeg synes at du selv skal tage dem, så andre kan se hvem der har den rigtige løsning - og de i øvrigt interessante betragtninger - uden at skulle læse hele tråden igennem
Synes godt om
Slettet bruger
19. juni 2013 - 09:02#18
Lukker.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.