Programmeeruitdaging

  • Programmeeropdracht


    Beste ICTScripters,


    Programmeren is vaak voornamelijk zoeken naar oplossingen. En dat is nu ook net wat de meeste mensen er zo leuk aan vinden! Om jullie programmeerkunsten te stimuleren heb ik voor jullie een leuke opdracht:


    Schrijf van een gegeven getal alle mogelijke manieren om het getal te vormen uit de som van positieve naar het scherm. Als voorbeeld voor het getal 4:
    4
    3 + 1
    2 + 2
    2 + 1 + 1
    1 + 1 + 1 + 1


    En voor het getal 6:
    6
    5 + 1
    4 + 2
    4 + 1 + 1
    3 + 3
    3 + 2 + 1
    3 + 1 + 1 + 1
    2 + 2 + 2
    2 + 2 + 1 + 1
    2 + 1 + 1 + 1 + 1
    1 + 1 + 1 + 1 + 1 + 1


    Het doel is uiteraard een programma te schrijven wat gegeven een getal het getal zoals hierboven uitschrijft op het scherm. In PHP zou dat er als volgt uit kunnen zien:



    De oplossingen mogen jullie naar mij toe sturen en die zal ik dan over ongeveer een week publiceren! En let op: Hoe minder code, hoe beter! Houd het script echter wel netjes. Creatieve oplossingen worden gewaardeerd. Oplossingen mogen in alle mogelijke programmeertalen geschreven zijn.


    Veel succes en plezier! En denk eraan, je antwoord naar mij opsturen via PB, niet in dit topic posten! Meld het daarnaast even in dit topic als je meedoet!

  • Ik heb even wat geprobeerd, maar ben er niet in geslaagd om tot een goede oplossing te komen :p
    Ik kan wel een nummer splitsen in een aantal cijfers, waarvan de som terug 6 is, maar dan toont hij niet alle mogelijke oplossingen.
    Tenzij ik die misschien in een array steek en duizenden keren hetzelfde laat uitvoeren tot ik alle mogelijke oplossingen statistisch gezien zou moeten hebben berekend :p

  • Het lijkt mij sowieso moeilijk om het werkend te krijgen voor grote getallen. De mogelijkheden zijn natuurlijk eindeloos. Dan is het volgensmij onmogelijk om te doen.


    Hallo,


    Daarvoor is de recursie, die kan de grote getallen juist goed opvangen.
    Echter, rekentijd neet natuurlijk wel toe. Bij een te groot getal zal of het geheugen op zijn of de executie tijd te lang zijn.


    Leuke opdracht Stefan!


    Mvg,
    Tim

  • Ik niet, het is een onmogelijk opdracht omdat er ontelbaar veel getallen zijn. Zelfs met recursie lukt dit niet.


    Hallo,


    Tuurlijk lukt dit wel.


    Stefan heeft het al opgelost zegt ie. Dit is niet zo'n hele moeilijke opdracht. Heb wel wat moeilijkere voor je als je wilt.


    Zal kijken of ik het antwoord in Java of C kan krijgen of C++. (C# geen zin in om alles weer op orde voor te krijgen), moet ik wel tijd hebben.
    Reden is simpel: toch allemaal ongeveer zelfde syntax.


    Mvg,
    Tim

  • Ik niet, het is een onmogelijk opdracht omdat er ontelbaar veel getallen zijn. Zelfs met recursie lukt dit niet.


    Dat is zeker niet het geval. Als ik het afdrukken van de oplossing (wat verreweg het meeste tijd kost) achterwege laat, dan is het voor het getal 50 bijvoorbeeld in ongeveer een seconde uitgerekend. En dat is dan in PHP, een taal als Java of zelfs C is nog vele malen sneller.


    Daarbij gaat het ook niet zozeer om de performance. Het is eigenlijk helemaal geen moeilijke opdracht!

  • Het is gelukt! Ik heb de eerste werkende oplossing ontvangen van EternalFlamez. Hoewel zijn oplossing lang niet de meest efficiënte is (in regels code), ben ik wel positief verrast. Het ziet er netjes uit, en er is duidelijk tijd aan besteed, mijn complimenten!


    Dus, iedereen die niet met een valide oplossing kan komen is wat mij betreft een mindere programmeur dan EternalFlamez. :rolleyes:


    Wie gaan het nog meer proberen?

  • @Fils: Het stukje sarcasme leek me wel duidelijk, maar goed.


    Ik heb inmiddels ook een mooie oplossing van victor gekregen. Met veel gepruts heb ik op de macbook van een vriend van me de code kunnen uitvoeren :P. De hoeveelheid code is lekker compact, maar de oplossing geeft helaas wel dubbele oplossingen (ook 1 + 1 + 3 bijvoorbeeld terwijl alleen 3 + 1 + 1 erin hoort te staan). Ik zal morgen nog eens iets beter naar de oplossing kijken, want hij ziet er wel interessant uit. In ieder geval ook voor deze oplossing mijn complimenten!

  • Het is tijd op de oplossing prijs te geven. Ik zal beginnen met de oplossing van EternalFlamez. Deze oplossing geeft het juiste resultaat, en er is geen gebruik gemaakt van recursie.



    De oplossing van victor geeft op dit moment nog niet exact het juiste resultaat. Hij is er nog mee bezig en wil dat nog oplossen. Zijn oplossing geeft wel alle oplossingen maar enkele dubbele (2 + 1 + 1 en 1 + 2 + 1 bijvoorbeeld). Zijn oplossing is (tot nu toe) als volgt:



    Dan als laatste nog mijn eigen oplossing, die wel gebruik maakt van recursie:



    Wat vinden jullie van de oplossingen? En wat vinden jullie van de uitdaging? Is dit voor herhaling vatbaar? Zou je wel meedoen als de opdracht makkelijker is (mocht je nu niet hebben meegedaan)? Ik hoor graag feedback!

  • Hallo,


    Hier een Java versie van Victor zijn oplossing:


    Naar mijn mening zeer goed dat dit er is. Helaas heb ik hier niet echt tijd voor. Namaken kan altijd in een andere taal.


    Overigens, vind jouw oplossing een beetje gemeen Stefan :p Dit kan niet zomaar in bijv Java tenzij je aan method overloading gaat doen.


    Mvg,
    Tim

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!