• Inloggen
  • Registreer
  • Zoeken
Dit topic
  • Overal
  • Dit topic
  • Dit forum
  • Artikelen
  • Pagina's
  • Forum
  • Downloads
  • Meer opties

ICTscripters

Dé plek voor IT

Dé plek voor IT

Aanmelden

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. Overige

Forum

  • Port Father: beta van een browsergame in Antwerpen 1931, feedback welkom

    Jeroen.G 26 oktober 2026 om 10:33
  • Maffia Hotel: een browsergame waarin je van lobbygast naar spil van het hotel groeit

    eeyk 22 oktober 2026 om 18:43
  • Crime Club volledig herschreven vanaf nul

    frio 19 oktober 2026 om 23:57
  • Malavita (nieuwe maffia game, van 0)

    jos 19 oktober 2026 om 23:18
  • Herkent deze Notion-structuurscan echte problemen?

    Jeroen.G 19 oktober 2026 om 15:09
  • 🚀 WE ZOEKEN TESTERS! 🚀

    Servertjee 3 oktober 2026 om 10:56
  • Luchtvaartsoftware: Hoe technologie de moderne luchtvaart verandert

    saggy2829 30 september 2026 om 19:31
  • Hoe gebruiken jullie WhatsApp voor marketing en klantopvolging?

    aiqanobzfsej5 29 september 2026 om 12:55

Marktplaats

  • [TE KOOP] Malavita.be [Maffiaspel, gebaseerd op omicidio.nl, unieke code]

    Dpm_x 26 oktober 2026 om 00:22
  • TK: Kraai.eu

    frio 25 oktober 2026 om 11:39
  • [TE KOOP] Likeboost24.nl: complete SMM-webshop met eigen merk, volautomatische levering en betalen op de eigen pagina

    Jeroen.G 16 oktober 2026 om 14:27

Programmeeruitdaging

  • Stefan.J
  • 24 maart 2013 om 17:06
  • Stefan.J
    Meester
    Berichten
    2.358
    • 24 maart 2013 om 17:06
    • #1

    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:

    PHP
    <?php
    
    
    function get_numbers($number) {
    	//hier de logica
    }
    
    
    get_numbers(4);
    get_numbers(6);
    
    
    ?>
    Meer tonen


    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!

  • Gast, wil je besparen op je domeinnamen? (ad)
  • Victor
    Meester
    Berichten
    1.680
    • 24 maart 2013 om 19:50
    • #2

    Ik ben ermee bezig, maar ik moet zeggen dat het behoorlijk lastig is.

    Met vriendelijke groet,

    Victor
    Beheerder ICTscripters

  • K.Rens
    Eigenaar
    Berichten
    4.479
    Filebase Entries
    2
    • 25 maart 2013 om 18:37
    • #3

    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

  • Stefan.J
    Meester
    Berichten
    2.358
    • 25 maart 2013 om 18:45
    • #4

    Mijn oplossing bevat 8 regels code (in de functie, inclusief sluit-accolades). Omdat het moeizaam gaat een kleine typ:

    Recursie!

  • bramieboy100
    Gevorderd
    Berichten
    433
    • 25 maart 2013 om 19:19
    • #5

    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.

    LOL

  • Tim
    Expert
    Berichten
    3.684
    • 25 maart 2013 om 19:21
    • #6
    Citaat van bramieboy100

    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

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Victor
    Meester
    Berichten
    1.680
    • 25 maart 2013 om 19:51
    • #7

    Ik was ook bezig met de recursie. Heb nu een probleem met het geheugen, maar volgens mij heb ik een loop niet helemaal goed gedaan. Ik stuur mijn oplossing denk ik morgen. ;)

    Met vriendelijke groet,

    Victor
    Beheerder ICTscripters

  • Stefan.J
    Meester
    Berichten
    2.358
    • 27 maart 2013 om 19:40
    • #8

    Ik heb het op heden nog geen enkele oplossing mogen ontvangen! Jammer, had meer verwacht! Wie gaan het nog proberen?

  • bramieboy100
    Gevorderd
    Berichten
    433
    • 27 maart 2013 om 20:34
    • #9

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

    LOL

  • Victor
    Meester
    Berichten
    1.680
    • 27 maart 2013 om 20:43
    • #10

    Ik ben er nog mee bezig. Eerst even wat kleinere dingen om bekend te raken met recursie. Best wel moeilijk!

    Met vriendelijke groet,

    Victor
    Beheerder ICTscripters

  • Tim
    Expert
    Berichten
    3.684
    • 27 maart 2013 om 20:54
    • #11
    Citaat van bramieboy100

    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

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Stefan.J
    Meester
    Berichten
    2.358
    • 27 maart 2013 om 22:51
    • #12
    Citaat van bramieboy100

    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!

  • Stefan.J
    Meester
    Berichten
    2.358
    • 28 maart 2013 om 19:25
    • #13

    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?

  • Victor
    Meester
    Berichten
    1.680
    • 29 maart 2013 om 14:25
    • #14

    Het is me eindelijk gelukt! Alleen alles even netjes maken en dan stuur ik 'm op!

    Met vriendelijke groet,

    Victor
    Beheerder ICTscripters

  • WHMCSAddons
    Meester
    Berichten
    2.411
    • 29 maart 2013 om 18:31
    • #15
    Citaat


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

    Slaat nergens op, maar goed dat is mijn mening...

  • Stefan.J
    Meester
    Berichten
    2.358
    • 30 maart 2013 om 00:22
    • #16

    @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!

  • Victor
    Meester
    Berichten
    1.680
    • 30 maart 2013 om 00:26
    • #17

    Ik dacht dat het ook dubbel moest. 1 regel code weghalen en je krijgt geen dubbele oplossingen. Ik stuur m morgen (vanmiddag) wel op ;)

    Met vriendelijke groet,

    Victor
    Beheerder ICTscripters

  • Stefan.J
    Meester
    Berichten
    2.358
    • 1 april 2013 om 23:16
    • #18

    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.

    PHP
    <?php
    $arr = array(7);
    
    
    base();
    
    
    function base() {
    	global $arr;
    	show();
    	while(getLastNotOne() != -1) {
    		doItAll();
    		show();
    	}
    }
    
    
    function doItAll() {
    	global $arr;
    	$c = count($arr);
    	//Pakt achterste waarde die groter is dan 1
    	$i = getLastNotOne();
    	
    	//Verkleint het getal gevonden op pos $i. (4 -> 3 + 1 // 3 -> 2 + 1 // 2 -> 1 + 1)
    	array_splice($arr, $i, count($arr) - $i, decreaseAtPos($arr, $i));
    	
    	//Als er een getal groter is dan de 1e is het een duplicaat (4 + 2 == 2 + 4)
    	while(isOneLargerThanPrev() != -1) {
    		$k = isOneLargerThanPrev();
    		//Als het een duplicaat is dan moet er gewoon doorgegaan worden.
    		array_splice($arr, $k, count($arr) - $k, decreaseAtPos($arr, $k));
    	}
    }
    
    
    //Er wordt een subarray gemaakt van $arr die begint op $pos. 
    //Als alleen de 1e geen 1 is, worden ze samengevoegd. (Zie count_ones())
    //Anders wordt de 1e waarde verlaagd, en een 1 toegevoegd aan het einde van de array.
    //Bijv: $arr = array(4, 2, 1); De subarray wordt array(2, 1), die wordt dan door deze functie array(1, 1, 1).
    //Dit wordt dan weer teruggevoegd in de originele array, waardoor het array(4, 1, 1, 1) wordt.
    function decreaseAtPos($arr, $pos) {
    	$arr = array_splice($arr, $pos);
    	if(count($arr) > 1) {
    		$c = count_ones();
    		
    		if($c == count($arr) - 1) {
    			array_splice($arr, 1, count($arr), array($c + 1));
    		}
    		else {
    			array_push($arr, 1);
    		}
    	}
    	else {
    		array_push($arr, 1);
    	}
    	
    	$arr[0]--;
    	return $arr;
    }
    
    
    //Displayt de array.
    function show() {
    	global $arr;
    	$count = count($arr);
    	$text = '';
    	for($i = 0; $i < $count; $i++) {
    		if($i != 0) {
    			$text .= ' + ';
    		}
    		
    		$text .= $arr[$i];
    	}
    	
    	echo($text. '<br/>');
    }
    
    
    //Returnt achterste waarde die groter is dan 1.
    function getLastNotOne() {
    	global $arr;
    	$c = count($arr);
    
    
    	for($i = $c - 1; $i >= 0; $i--) {
    		if($arr[$i] != 1) {
    			return $i;
    		}
    	}
    	
    	return -1;
    }
    
    
    //Telt aantal enen om te mergen zodra het klaar is met een reeks.
    //Bijv: (4 + 2 => 4 + 1 + 1 => 3 + 3)
    function count_ones() {
    	global $arr;
    	$r = 0;
    	$c = count($arr);
    	for($i = 0; $i < $c; $i++) {
    		if($arr[$i] == 1) {
    			$r++;
    		}
    	}
    	
    	return $r;
    }
    
    
    //Kijkt of de waarde al langs is geweest. Returnt -1 als het niet zo is, anders getLastNotOne().
    function isOneLargerThanPrev() {
    	global $arr;
    	$c = count($arr);
    	$smallest = $arr[1];
    	
    	for($i = 1; $i < $c; $i++) {
    		if($arr[$i] > $smallest || $arr[$i] > $arr[0]) {
    			return getLastNotOne();
    		}
    		else {
    			$smallest = $arr[$i];
    		}
    	}
    	return -1;
    }
    ?>
    Meer tonen

    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:

    PHP
    <?php
    
    
    function get_numbers($getal)
    {
    
    
        $oplossingen = array();
    
    
        if($getal == 1)
        {
        
            array_push($oplossingen, '1');
    
    
        }
    
    
        for($i = 1; $i < $getal ; $i++)
        {
    
    
            foreach(get_numbers($getal-$i) as $oplossing)
            {
    
    
                array_push($oplossingen, $oplossing.'+'.$i);
            
            }
        
        }
        
        array_push($oplossingen, $getal);
        $oplossingen = array_unique($oplossingen);
    
    
        return $oplossingen;
    
    
    }
    
    
    echo '<pre>';
    
    
    print_r(get_numbers(4));
    
    
    echo '</pre>';
    
    
    ?>
    Meer tonen

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

    PHP
    <?php
    
    
    function getPartitions($number, $previous = -1, $prefix = "") {
    	if($number <= $previous || $previous == -1) {
    		echo $prefix . $number . "<br />\n";
    	}
    	for($i = 1; $i < $number; $i++) {
    		if(($number - $i) <= $previous || $previous == -1) {
    			getPartitions($i, ($number - $i), $prefix . ($number - $i) . " ");
    		}
    	}
    }
    
    
    echo getPartitions(7);
    Meer tonen

    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!

  • Tim
    Expert
    Berichten
    3.684
    • 2 april 2013 om 00:20
    • #19

    Hallo,

    Hier een Java versie van Victor zijn oplossing:

    Java
    package icts;
    
    
    import java.util.LinkedHashSet;
    import java.util.Set;
    
    
    /**
     *
     * @author Tim
     */
    public class ICTS {
    
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            Set<String> result = get_numbers(6);
            for (String string : result) {
                System.out.println(string);
            }
        }
        
        private static Set<String> get_numbers(int number) {
            int i = 0;
            Set<String> solutions = new LinkedHashSet<String>();
            if(number == 1) {
                solutions.add("1");
            }
            for (i = 1; i < number; i++) {
                for (String string : get_numbers(number-i)) {
                    solutions.add(string + "+" + i);
                }
            }
            
            solutions.add(i + "");
            return solutions;
        }
    }
    Meer tonen

    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

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Stefan.J
    Meester
    Berichten
    2.358
    • 4 april 2013 om 22:40
    • #20

    Tim: Method overloading is toch niet zo bijzonder?

    Maar aan het gebrek aan reacties te zien hoef ik dit dus niet nogmaals te doen?

Registratie

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

Nu registreren Aanmelden

ICT Nieuws

  • PHP waarschuwt voor twee ernstige bugs die makkelijk uit te buiten lijken

    Aaron 22 oktober 2026 om 22:19

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37

Gebruikers die dit topic bekijken

  • 1 Gasten
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacyverklaring
  10. Contact
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design