Pfeh

‘t Schijnt is dit een test om te zien of iemand kan programmeren of niet:

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

Serieus, gasten.

for(x=1;x<=100;x++) {
    t='';
    if(!(x%3))t+='Fizz';if(!(x%5))t+='Buzz';
    document.write((t.length?t:x)+' ');
}

Dat doet proper

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz

Ik dacht dat het een strikvraag was.

23 Comments

  • Facho codeerpurist of wat? Het doet toch wat het moet doen, maakt dat echt uit of het is wat het hierboven is, of iets in deze zin?

    for( x = 1 ; x < = 100 ; x++ ) {
    t = '';
    if ( x % 3 == 0 ) t = t + 'Fizz';
    if ( x % 5 == 0 ) t = t + 'Buzz';
    if ( t.length == 0 ) t = x;
    document.write(t+' ');
    }

  • Pff. Globale variabelen en string(buffer)operaties om meteen te schrijven, niet zo performant volgens mij. Liever iets als

    for (var i = 1; i <= 100; i++) {
    var t3 = (i % 3 == 0), t5 = (i % 5 == 0);
    if (t3) document.write("Fizz");
    if (t5) document.write("Buzz");
    if (!t3 && !t5) document.write(i);
    document.write(" ");
    }

    Maar er zou dat eigenlijk eens iemand moeten benchmarken.

  • Blijkbaar dat zoiets eenvoudigs toch kan gelden als een eenvoudige ruwe filter.

    Anderzijds zie je er ook iets mee over de manier van nadenken over een algoritme, de taal die iemand spontaan kiest, of hij/zij wilt stoefen met zijn kunsten.

    Zo vind je op tinternet
    print ( ((($_ % 3) ? "" : "Fizz") . (($_ % 5) ? "" : "Buzz")) || $_, " ") for (1..100);

    Maar het kan natuurlijk een urban myth zijn, dat het een echte test is.

  • @Maarten: “is dat erg”? Euh, zou het niet schaamtelijk zijn als dat niet het geval was? :)

    Voor mij is wat ik eerst schreef gewoon hetgeen ik spontaan zou schrijven in de rapte voor mezelf in Javascript als het niet naar iemand anders moet en zonder dat het optimaal snel of watdanook moet draaien. En terwijl ik het ook nog leesbaar houd.

    Iets in de zin van

    for(x=1;x<=100;x++) {document.write(x%15?x%3?x%5?x+' ':'Buzz ':'Fizz ':'FizzBuzz ');}

    vind ik persoonlijk eigenlijk ook nog helemaal leesbaar, maar dat vind ik wat lastig doen om lastig te doen.

    En verder vind ik dat “het doet wat het moet doen” één van de belangrijkste toetsstenen voor om het even welke oplossing is.

    En dat die “het moet doen” uiteraard helemaal anders is afhankelijk van of het voor een ruimtesonde of een operatierobot is dan wel voor een quick & dirty rap geef mij eens een lijstje.

  • Ik had eigenlijk gedacht dat er iemand de flauwe plezante oplossing ging posten:
    document.write('1 2 Fizz 4 ... 97 98 Fizz Buzz');
    Van mezelf vond ik deze goed gevonden

    for ($i=1;$i<=100;$i++){
    $MV{$i*5}.="Buzz";
    $MV{$i*3}.="Fizz";
    print (($MV{$i} ? $MV{$i} : $i)." ");
    };
    maar er zit spijtig genoeg een denkfoutje in.

  • De test lijkt me zeker nuttig om te zien of iemand een omschrijving in een algoritme kan omvormen (trust me, een deel van onze studenten zitten tijdens hun eerste labosessies al snel in hun haar te krabben, ook al moeten ze zo iets simpel als hierboven beschreven doen).

    Eens ze die stap door zijn kan je beginnen letten op de complexiteit van de code: gebruik je een switch, één grote if-elseif-elseif-else, twee ifs, etc.

    En dan nog verder kan je beginnen letten op de optimalisatie van de code (vb. ternaire operator, concateneren van output op een variabele, enkele tussen variabelen elimineren, etc.).

    Simpele vraagstelling, maar je kan er wel meteen drie soorten “programmateurs” uithalen.

  • En op welke manier ze het ook oplossen, kunnen ze achteraf ook uitlegen waarom, m.a.w. zijn het autisten of kunnen ze in een team werken met testers, product marketing volk, systeemarchitecten en andere IT-diersoorten… Krijgen ze uitgelegd wat ‘modulo’ is, en hoe hun logica werkt en waarom ze die en die optimalisatie (niet) gedaan hebben?

  • Bramus!: optimaliseren van code is voor mij niet het ene statement ‘vervangen’ door een ander statement dat hetzelfde doet.
    Optimaliseren (refactoren) is sneller maken en leesbaarder maken. (Bv een grote if-elseif constructie vervangen door een strategy pattern => leesbaarder, onderhoudbaarder, uitbreidbaarder).

Zeg uw gedacht

Navigatie

Vorige entry:

Volgende entry:

» homepagina, archief

Vriendjes

<insert standard disclaimer>

Alles wat hier staat is mijn eigen opinie. Het wordt niet nagelezen of goedgekeurd door mijn werkgever voor het on-line komt, en ik bied geen enkele garantie voor kwaliteit of correctheid.

Mijn werkgever is het niet noodzakelijk eens met wat ik schrijf, en het spreekt vanzelf dat hij dan ook op geen enkele wijze aansprakelijk kan zijn voor wat ik hier publiceer.