• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  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
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  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
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  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
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. Overige

Forum

  • Beta-testers gezocht voor Crypto-oefenplatform

    Syntax 29 januari 2026 om 16:11
  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 19 januari 2026 om 09:34
  • Developer Gezocht

    Mikevdk 10 januari 2026 om 18:57
  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04

Marktplaats

  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 26 december 2025 om 00:07
  • Van een pixelige afbeelding naar een strakke, moderne website

    Syntax 21 december 2025 om 17:05

Programmeeruitdaging

  • Stefan.J
  • 24 maart 2013 om 17:06
  • Stefan.J
    Master
    Ontvangen Reacties
    9
    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);
    
    
    ?>
    Toon Meer


    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!

  • Victor
    Master
    Ontvangen Reacties
    102
    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
    Ontvangen Reacties
    241
    Berichten
    4.472
    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
    Master
    Ontvangen Reacties
    9
    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
    Intermediate
    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
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 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
    Master
    Ontvangen Reacties
    102
    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
    Master
    Ontvangen Reacties
    9
    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
    Intermediate
    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
    Master
    Ontvangen Reacties
    102
    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
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 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
    Master
    Ontvangen Reacties
    9
    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
    Master
    Ontvangen Reacties
    9
    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
    Master
    Ontvangen Reacties
    102
    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
    Master
    Ontvangen Reacties
    88
    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
    Master
    Ontvangen Reacties
    9
    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
    Master
    Ontvangen Reacties
    102
    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
    Master
    Ontvangen Reacties
    9
    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;
    }
    ?>
    Toon Meer

    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>';
    
    
    ?>
    Toon Meer

    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);
    Toon Meer

    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
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 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;
        }
    }
    Toon Meer

    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
    Master
    Ontvangen Reacties
    9
    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?

Participate now!

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

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

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. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design