Aftelrijmpje, wie blijft over?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C++ Developer

Functieomschrijving Ben jij als software engineer toe aan een nieuwe uitdaging? Dan zijn wij op zoek naar jou! Voor het maken van de procesbesturingsoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Ontwerpen, programmeren en testen van productaanpassingen; Implementeren van nieuwe productreleases in de projectteams; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden,

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Medior PHP Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte website die in eigen beheer zijn. In onze vestiging in Nederweert zitten onze development afdelingen en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé PHP/Back-end developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het bedenken van nieuwe functionaliteiten Het verbeteren van het

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een leuke opdrachtgever in de omgeving van Hilversum! Voor een leuk bedrijf in de omgeving van Hilversum zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. Ben jij iemand die graag aan verschillende projecten werkt en het ook leuk vindt om bij klanten op bezoek te gaan? Dan ben jij de perfecte kandidaat! Deze functie is erg divers, je moet dus goed kunnen schakelen. Je komt te werken in een klein team van developers. Binnen het bedrijf hangt er een gemoedelijke informele

Bekijk vacature »

VB.NET developer

Functie Het development team waar jij in terecht komt bestaat uit twee ervaren software developers. De directeur/eigenaar is tevens één van deze developers. Jij werkt direct samen met jouw werkgever en kan dan ook veel kennis en ervaring bij dit bedrijf op doen. Als team zijn jullie verantwoordelijk voor de kantoorapplicatie die deze organisatie aanbied in een niche markt. Het team is op dit moment actief bezig met een migratie waarbij het eindstation eindigt in een C# .NET omgeving. Echter is een deel van de software al geschreven in C# .NET. Hierbij is gebruik gemaakt van C# .NET, CSS, HTML,

Bekijk vacature »

SQL Developer

Functie omschrijving Altijd al willen werken bij een snelgroeiend bedrijf, actief in de logistieke sector? Dit is je kans! Ik ben op zoek naar een ervaren SQL Developer in de omgeving Tilburg. Dit bedrijf is gespecialiseerd in in de ontwikkeling van software en maatwerk oplossingen voor het automatiseren van logistieke processen. Klanten zijn o.a. BOL en andere grote distributiecentrums. Jouw taken worden vooral: Verantwoordelijk voor ontwikkelen van stored procedures, voor snelle afhandeling van data; Optimalisatie van de SQL query's en T-SQL query's; Jij gaat je bezig houden met ontwerpen, ontwikkelen en optimaliseren van de MS SQL Databases; In deze functie

Bekijk vacature »

Front-end developer (Vue.js) gezocht!

Functie Als Front-end developer is het jouw doel om efficiënte en effectieve frontend code te ontwerpen, ontwikkelen en onderhouden die goed aansluit bij de functionele behoefte vanuit de klant. Je zorgt voor optimale SEO-resultaten, sitespeed en frontend security. You build it, you run it, you own it! Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

SQL Developer

Functie omschrijving We are looking for a dutch native speaker Jij gaat in deze functie aan de slag met uitdagende projecten en het creëren van maatwerk software, vooral middels SQL. Iedere klant/project is weer anders, maar dat maakt dit bedrijf en de functie erg uniek & uitdagend. Verder heb je de volgende taken: Ontwikkelen en ontwerpen van SQL databases. T-SQL wordt hierbij gebruikt als programmeer laag; Optimalisatie van query's, voor een verbeterde efficiency; Begeleiden van junior developers, mits je dit leuk vindt; Heb je meer interesse in een rol als consultant, dan is dit ook mogelijk. Je heb hier meer

Bekijk vacature »

Junior Software Developer

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer!? Sta jij aan het begin van jouw loopbaan of heb jij misschien al enige ervaring? Vind jij het daarnaast belangrijk om jezelf constant te kunnen ontwikkelen en uitdagen? Lees dan snel verder! Voor een vooraanstaand softwarehuis in Nieuwegein ben ik op zoek naar een Junior Software Developer. De eigenaar van het bedrijf is ervan bewust dat je als junior nog een hoop kan leren, waardoor je de eerste maanden veel begeleiding en diverse trainingen krijgt. Daarna ga je samen met je collega's aan zowel kleine als grote projecten werken.

Bekijk vacature »

Java Front-end Developer

Dit ga je doen Ontwikkelen van nieuwe functionaliteiten in Java met tools als Springboot, MS SQL Server (T-SQL) en JavaScript; Het onderhouden van de (web-)applicaties binnen een complexe omgeving; Werken aan de migratie van een monolithisch systeem naar een architectuur gebaseerd op Kubernetes; Code reviews met collega's en actieve kennisuitdelingsessies voeren; Het uitvoeren van unit- en systeemtests Experimenteren met nieuwe tools en technieken. Hier ga je werken Binnen deze organisatie kom je te werken op de afdeling die gegevens verzamelt vanuit het hele land. Denk hierbij aan vertrouwelijke persoonsgegevens. Het team verwerkt al deze data met als doel het waarborgen

Bekijk vacature »

Java developer

Functie Je gaat aan de slag als Tester voor een aantal mooie projecten. Je komt terecht in een DevOps team waar jij aan de slag gaat om de kwaliteit te waarborgen omtrent de maatwerk software voor de klanten. Je draait je hand er niet voor om de adviserende rol te bekleden op het gebied van testautomatisering en het opzetten van testframeworks. Zoals aangegeven ga je daadwerkelijk in het eigen team aan de slag en is het daarnaast ook gebruikelijk bij de klanten op locatie te komen om te werken aan de opdrachten. Je krijgt zodoende echt een mooie kijk in

Bekijk vacature »

Belastingdienst - Freelance Senior Cobol Applicati

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 7 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Functieomschrijving: In de applicatie ETM zijn nu de inningsvoorzieningen voor ongeveer 25 aangifte- en aanslagmiddelen opgenomen. ETM is een extern aangeschafte service en het huidige contract met leverancier Oracle loopt af op 31-12-2022. Het programma uitfaseren ETM heeft als doel om vervanging te realiseren waarmee alle nu in gebruik zijnde ETM ondersteuning wordt overgenomen in nieuwe Inningsvoorzieningen om de continuïteit van de inningsprocessen te waarborgen. Eén van de inningsvoorzieningen die voor het einde van 31-12-2022

Bekijk vacature »

Back-end ontwikkelaar

Functie omschrijving Wil jij meebouwen aan diverse databasesystemen in een klein bedrijf met een platte organisatie? In een team van ruim 10 ontwikkelaars wordt er aan diverse ICT oplossingen gewerkt. Jouw taken hierbij zullen bestaan uit: Het onderhouden en door-ontwikkelen van bestaande databases. Denk hierbij aan schema verbeteringen en performance-tuning. Bij nieuwe ontwikkelingen ga jij ook bezig met het bouwen van het databaseschema. Omdat je in een klein team werkt zal je ook de C# routine verder uitbouwen en ontwikkelen. Ook kan je meedraaien in algemene refactory-, ontwikkel- of testwerkzaamheden. Je zal voornamelijk gebruik maken van de volgende technieken: .NET

Bekijk vacature »

Python Developer

Dit ga je doen Als Python Developer ben je verantwoordelijk voor: Het ontwikkelen van Stuurprogramma's in Python zodat er verbindingen kunnen worden gelegd tussen besturingssystemen en (AV) hardware; Het testen en debuggen van Stuurprorgamma's; Het communiceren met noodzakelijke partijen in gevallen waar extra technische details nodig zijn om een Stuurprogramma te ontwikkelen of problemen op te lossen; Het maken van de nodige technische documentatie (in het Engels); Het participeren in een Scrum/Agile omgeving. Hier ga je werken Deze internationale organisatie is wereldwijd een succesvol producent en leverancier van professionele AV hard- en software. Klanten gebruiken de producten o.a. voor het

Bekijk vacature »
Obelix Idefix

Obelix Idefix

06/03/2021 17:07:23
Quote Anchor link
Voor een andere hobby heb ik een uitdaging gekregen.
Bijna iedereen kent die aftelrijmpjes wel.
Iene miene mutte is er 1 van.
Als je dat met 6 mensen doet, blijft uiteindelijk nummer 1 over.
Maar wie blijft er over als er veel meer mee doen? Stel 2.500.000 deelnemers.
Bij 100, 10.000 en 1.000.000 mensen blijven respectievelijk over: #10, #5898 en #154107.

Ik weet niet hoe dit eenvoudig op te lossen is met pen en papier.
Heb Excel geprobeerd, zonder succes.

Mijn idee was nu om het eens te proberen via php. Door een array te maken.
Met elke deelnemer een waarde tussen 1 en 18 (volgens mij het aantal woorden van iene miene mutte). En dan steeds die 18e te verwijderen.
Dat in een loop, zodat er uiteindelijk 1 over blijft.

Ben aan het stoeien geweest met unset, array_splice en array_value bezig geweest.

Iemand die mee kan/wil denken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$y    =    1;    
$array = array();
$array[] = 0;    //    startwaarde array = 0. Deze gevuld, zodat combinatie voor mij wat makkelijker leesbaar is
for ($x = 1; $x <= 180; $x++)    //    loop met klein aantal waarden om array te vullen
{
    $array[] = $y;
    $y++;
    if($y == 18)    //    het idee: het aftelrijmpje heeft 18 woorden. Door zo te nummeren, kan ik makkelijk verwijderen.
    {
        $y =1;
    }
}

//    print_r($array);

//    echo "<hr>";

for($n = 1 ; $n < 10 ; $n++)    //    een loop om daarbinnen elementen te verwijderen
{
    for($z = 17; $z < 180; $z=$z+18)    //    1e element is 17e om te verwijderen, daarna stteds de 18.
    {
        unset($array[$z]);    //    verwijder element
    }
//    print_r($array);
}
Gewijzigd op 06/03/2021 17:10:30 door Obelix Idefix
 
PHP hulp

PHP hulp

09/05/2024 06:38:50
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/03/2021 10:31:24
Quote Anchor link
Even voor het ontbijt...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php

$aantalWinnaars
= 6;
$spelers = array();
$overslaan = 18;

// maak een lijst aan met spelers
for($i = 0 ; $i < 100 ; $i++) {
    $spelers[] = "Speler " . ($i + 1);
}


$winnaarKeys = ineMineMutte($spelers, $aantalWinnaars, $overslaan);

print_r($winnaarKeys);

foreach($winnaarKeys as $key) {
    echo $spelers[$key] . "<br>\n";
}

function
ineMineMutte($spelers, $aantalWinnaars, $overslaan)
{

    $i = 0;
    $winnaars = array();
    
    if($aantalWinnaars >= count($spelers)) {
        throw new Exception("Aantal winnaars moet kleiner zijn dan aantal spelers.");
    }

    if($overslaan < 0) {
        throw new Exception("Het aantal spelers dat overgeslagen moet worden moet een positief getal zijn.");
    }

    
    while(1) { // oneindige lus
        foreach($spelers as $key => $speler) { // loop door alle spelers
            if(!in_array($key, $winnaars)) { // speler kan slechts één keer winnen
                if($i == $overslaan) { // de 18e speler zeg maar
                    $winnaars[] = $key; // voeg toe aan winnaars
                    $i = 0; // opnieuw tellen naar 18
                    if(count($winnaars) == $aantalWinnaars) { // indien we voldoende winnaars hebben
                        return $winnaars;
                    }
                }
else {
                    $i++;
                }
            }
        }
    }
}

?>
Gewijzigd op 07/03/2021 10:42:11 door Frank Nietbelangrijk
 
Rob Doemaarwat

Rob Doemaarwat

07/03/2021 17:40:08
Quote Anchor link
Het duurde even voordat ik doorhad wat je precies bedoelde:
- Nummer 18 moet er uit (bij 6 spelers dus uiteindelijk, in het 3e rondje, speler 6).
- Daarna ga je met degene daarnaast weer verder, en dan weer de 18e (speler 3), enz.
- Dan heb je nog speler 1,2,4,5 over; valt speler 2 er dus uit.
- Dan 5, dan 4, en houd je dus speler 1 over.

Fijn, een potje golf op zondag:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

/**
 * Array met spelers elimineren, net zolang tot er 1 over is.
 * $players  Array met spelersnamen.
 * $target  Degene die er uit moet (computers tellen vanaf 0, dus dit is het "aantal
 *   woorden" - 1).
 */

function ienemienemutte($players,$target){
  $index = 0;
  while(($count = count($players)) > 1){ //pas stoppen als er nog maar 1 speler is
    $players = array_values($players); //numerieke, opvolgende key
    unset($players[$index = ($index + $target) % $count]); //target verwijderen (via
      //de modulus (%) wordt rekening gehouden de kans dat we "rond" zijn = opnieuw
      //vooraan beginnen)

  }
  return array_pop($players); //enige overgebleven speler = winnaar
}
/**
 * Array met spelersnamen (base-1) maken.
 * $count  Aantal spelers.
 */

function players($count){
  $players = [];
  for($i = 1; $i <= $count; $i++) $players[] = "speler $i";
  return $players;
}


print(ienemienemutte(players(6),17)."<br>\n"); //speler 1
print(ienemienemutte(players(100),17)."<br>\n"); //speler 10
print(ienemienemutte(players(10000),17)."<br>\n"); //speler 5898
//print(ienemienemutte(players(1000000),17)."<br>\n");


?>

Die laatste heb ik in commentaar gezet, omdat dat bij mij enorm lang duurde. De eerste 3 klopten wel met je opgave, dus ik ga er vanuit die laatste ook (en uiteindelijk voor 2.5M dus ook - als je maar voldoende geduld / CPU power hebt).

De volgende uitdaging is dus om het proces zo te optimaliseren dat dit antwoord ook binnen redelijke tijd wordt verkregen.

-----

De meeste tijd bleek in de herindexering van $players te zitten (dmv array_values() - vooral bij grotere arrays). Die moet er dus uit. Dat heb ik gedaan door een speler niet echt te verwijderen, maar alleen zijn naam. Pas als de hele kring een keer aan de beurt is geweest wordt de lijst met spelers in 1x opgeschoond (mbv array_filter()). Bij de "grotere kringen" scheelt dat dus enorm vaak tussentijds opschonen. Ondanks dat je nu dus steeds "alle stoelen moet nalopen" (ook de reeds lege), en niet zoals in bovenstaande versie direct naar het volgende "slachtoffer" kunt "springen", is dit toch vele malen sneller/efficiënter.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

function ienemienemutte($players,$target){
  $index = 0; //begin in eerste instantie bij de 1e speler in de kring; in de volgende
    //ronde van de while-lus hieronder gaan we verder met de index van de ronde ervoor

  while(count($players = array_filter($players)) > 1) //"verwijderde" spelers echt
    //verwijderen

    foreach($players as $key => $player) //kring langslopen (begin bij huidige index)
      if($player && ($index++ == $target)) //"verwijderde" spelers overslaan; de 2e
        //voorwaarde wordt dus alleen "uitgevoerd" (= index opgehoogd) als de speler
        //nog in het spel is

        $players[$key] = $index = 0; //speler "verwijderen", teller resetten
  return array_pop($players);
}


?>
Gewijzigd op 07/03/2021 23:20:24 door Rob Doemaarwat
 
Obelix Idefix

Obelix Idefix

09/03/2021 10:25:51
Quote Anchor link
Beide heren: bedankt!!
Ik ga beide z.s.m. testen/vergelijken (en bestuderen).
Ik begrijp nu waarom ik er zelf niet uit ben gekomen ;-)
 
Obelix Idefix

Obelix Idefix

10/03/2021 13:07:01
Quote Anchor link
@Frank: Ik heb het script getest en proberen te doorgronden.
Het script levert me niet de verwachte antwoorden op. Bij 6 deelnemers zou nummer 1 de overblijven/winnen.
Bij 100, 10.000 en 1.000.000 mensen blijven respectievelijk over: #10, #5898 en #154107.

Het script van @Rob doet dat wel. Dank daarvoor.
Is er nog een mogelijkheid om het aantal spelers "onbeperkt" groot te maken?
Heb het aantal als test eens flink verhoogd, maar liep aan tegen Fatal error: Allowed memory size
Heb dat proberen op te lossen met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ini_set('memory_limit', '2048M'); // or you could use 1G

het geheugen op te hogen. Tot 1G. De melding blijft komen bij een heel groot aantal deelnemers.
Is daar nog een oplossing voor?
 
Rob Doemaarwat

Rob Doemaarwat

10/03/2021 13:44:08
Quote Anchor link
Met mijn "versie 2" heb je volgens mij geheugen nodig voor 2x de lijst met deelnemers (tijdens array_filter() wordt er een (bijna) kopie van de originele lijst gemaakt). Als je de "namen" dus een beetje kort houdt kun je zelf uitrekenen hoe ver je met een bepaalde hoeveelheid RAM komt. Zelf kwam ik (met de "speler xxx" namen) met 1M spelers op peak memory 131Mb, en met 10M spelers op 1.5G (meer deelnemers = langere namen = waarschijnlijk wel de reden dat het niet helemaal lineair schaalt).

Mocht je boven je RAM limiet uit willen dan kun je de hele array op schijf opslaan (en dus steeds door de file heen akkeren), maar dan zal het allemaal wel heel traag worden. Of er even een avondje wiskunde aan wijden, waardoor je niet alles "na hoeft te spelen", maar _uitrekent_ wie er wint (?).
 
Obelix Idefix

Obelix Idefix

10/03/2021 14:17:46
Quote Anchor link
Rob Doemaarwat op 10/03/2021 13:44:08:
Mocht je boven je RAM limiet uit willen dan kun je de hele array op schijf opslaan (en dus steeds door de file heen akkeren), maar dan zal het allemaal wel heel traag worden.

Geen idee hoe dat te doen.

Rob Doemaarwat op 10/03/2021 13:44:08:
Of er even een avondje wiskunde aan wijden, waardoor je niet alles "na hoeft te spelen", maar _uitrekent_ wie er wint (?).

Mijn wiskundekennis is nog minder dan die van PHP....
 
Rob Doemaarwat

Rob Doemaarwat

10/03/2021 14:58:15
Quote Anchor link
Obelix Idefix op 10/03/2021 14:17:46:
Geen idee hoe dat te doen.

Bijvoorbeeld voor elke "speler" een regel in een (tekst-) bestand plaatsen, dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
speler 1
speler 2
enz

Ipv door een array te lopen ga je dan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$f
= fopen('players.txt','r');
while(!feof($f)){
  $player = fgets($f);
  //je hebt nu dus steeds maar 1 speler "in het geheugen"
  //in plaats van "allemaal"

}
fclose($f);

?>

Als je je "array" wilt aanpassen schrijf je de aanpassingen naar een nieuw bestand, enz.

Nu is je limiet opeens de grote van je schijf (ik vermoed dat er eerder een beperking op je geduld zit).
Gewijzigd op 10/03/2021 15:03:05 door Rob Doemaarwat
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.