Aftelrijmpje, wie blijft over?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Retail gigant zoekt .NET developer

Bedrijfsomschrijving Deze retail gigant is gevestigd in een mooi pand dat van alle gemakken is voorzien. Er werken een paar honderd medewerkers verdeeld over diverse afdelingen, waaronder ook de IT afdeling. Ze hebben een aantal kwaliteitsmerken in de markt staan die binnen de meeste huishoudens wel te vinden zijn. Ze hebben hier oog voor detail binnen de producten maar zeker ook oog voor de medewerkers. Zo zijn er veel mogelijkheden voor persoonlijke ontwikkeling maar ook een goede werk privé balans en een aantal mooie secundaire arbeidsvoorwaarden waar je gebruik van kan maken om in vorm te blijven. Verder is er

Bekijk vacature »

Full Stack Developer Javascript Angular (JS)

Bedrijfsomschrijving Onze klant is een internationale organisatie in Rotterdam en heeft meerdere vestigingen wereldwijd. De IT afdeling in Rotterdam verzorgt diensten voor deze landen. Ter versterking van het team zijn zij op zoek naar een ervaren Full Stack Developer. De IT afdeling bestaat uit 3 systeembeheerders en 3 developers. Samen met 3 andere Developers ontwikkel je aan het ERP pakket. De organisatie is te omschrijven als no-nonsense, ondernemend en informeel. Naast de locatie in Nederland hebben ze verschillende locaties in het buitenland. Functieomschrijving Full Stack Developer Het onderhouden en verder inrichten van het ERP pakket middels Javascript, Angular (JS), SOAP,

Bekijk vacature »

Senior C#.Net Developer - Logistieke (zeevaart) se

Voor een hechte, informele en jonge club gespecialiseerd in Transport Management Systemen voor de vracht en havensector zijn wij op zoek naar een Senior .Net C# Developer. Een goede, sociale communicator die samenwerking en passie voor het vak key vindt. En die durft te sparren, dromen en pionieren! Deze organisatie van 150 man (waarvan 9 IT-toppers) zorgen er al 30 jaar voor dat internationale transport tot in de details kunnen worden berekend, ingepland en gemanaged, bijvoorbeeld in de Rotterdamse haven. Hierdoor worden kosten, materialen, arbeid, ontwerpen en oplevering perfect en just-in-time op elkaar afgestemd. Ze zijn marktleider én pionier in

Bekijk vacature »

Klassieke Oracle ontwikkelaar die Apex wil gaan on

Bedrijfsomschrijving Dagelijks worden in in de zorg enorme aantallen data geproduceerd. Van medicijngebruik van patiënten tot aan loonkosten van personeel. Deze data bevat een schat aan informatie die pas zichtbaar wordt als ze op de juiste manier worden verzameld, opgeslagen, beheerd, bewerkt en vergeleken. Hiermee helpen zij medische instellingen om hun informatiepositie te verbeteren. Kijk bijvoorbeeld op het gebied van kwaliteit, bedrijfsvoering en marktpositie. Functieomschrijving Mijn klant heeft de huidige Oracle applicaties volledig binnen Forms reports en designer draaien. De bedoeling is dat al deze applicaties omgezet worden naar Apex applicaties in de toekomst. Daarom is mijn klant ter uitbreiding

Bekijk vacature »

Senior Software Developer

Bedrijfsomschrijving De organisatie waar je komt te werken is een enterprise omgeving waarbij IT een belangrijke rol speelt. Door de vele veranderingen in de markt waar zij op in moeten spelen, werken zij met innovatieve technologieën. Het team is erg stabiel en werkt continue aan het optimaliseren van de complexe omgeving, het implementeren van vernieuwingen. Jou kennis, expertise en enthousiasme zal hier een belangrijke bijdrage aan leveren! Belangrijk onderdeel van de werkzaamheden zal het optimaliseren van de Cloud omgeving zijn. Er heerst een familiare sfeer en collegialiteit is een belangrijk element. De maximale werkweek bestaat uit 40 uur deze zijn

Bekijk vacature »

Senior Java Developer

Bedrijfsomschrijving Als Senior Java Developer kom je te werken bij een internationaal gerenommeerd onderzoeksinstituut. Dagelijks is dit instituut verantwoordelijk voor de juiste samenwerking, toegankelijkheid en communicatie voor circa 9000 interne gebruikers. In een team van elf ontwikkelaars ben je als Senior Java Developer verantwoordelijk voor het ontwikkelen van functionele ontwerpen naar technische oplossingen. Deze projecten bestaan o.a. projecten zoals het implementeren van Elastic Search en het koppelen van CMS. Ook fungeer je als vraagbaak voor je collega’s op het gebied van backend softwareontwikkeling. Daarnaast denk je graag mee op het gebied van architectuur qua mogelijke oplossingen en innovatie. Momenteel zijn

Bekijk vacature »

.NET developer / C# / Azure

Bedrijfsomschrijving Je komt als .NET Developer te werken bij een vooraanstaande softwareontwikkelorganisatie in de verzekeringswereld. De primaire ontwikkeltaal is C#, maar ook maken ze gebruik van ASP.NET (Core), MVC en TypeScript. Daarnaast worden de stappen gezet om dit jaar naar Azure te migreren. Het belangrijkste product is een webservice (WCF) dat optimale en veilige communicatie mogelijk maakt tussen aanbieders, zorgverleners en gebruikers. Deze service maakt het mogelijk dat er per maand gemiddeld meer dan 250 miljoen berichten door hun systeem gaan met 800 berichten per piek seconde. Door de automatisering in de zorgsector is deze organisatie in de afgelopen jaren

Bekijk vacature »

Lead Developer

Telecats is op zoek naar een Lead Developer Functie omschrijving Je werk als lead developer Als lead developer maak je onderdeel uit van het team van software architecten, lead developers en software engineers en ben je betrokken bij de doorontwikkeling van de producten van Telecats. Telecats helpt klanten met het optimaliseren van hun klantcontact, van telefonie tot het slim toepassen van spraaktechnologie en machine learning. Binnen Telecats wordt onder andere gewerkt met Java, Spring, Maven en Angular. Telecats werkt onder andere samen met een remote team van software developers. Als contactpersoon van dit remote team zorg je voor het afstemmen

Bekijk vacature »

Full Stack .NET Developer

Bedrijfsomschrijving Onze klant is een vooraanstaand softwarebedrijf in de regio Amersfoort. Ze leveren oplossingen in de cloud (SaaS) aan meer dan 2 miljoen gebruikers. Dagelijks ondersteunt hun software 2000 klanten door middel van verschillende HR-oplossingen. Dit doen zij samen met 1000 collega’s. Zelf kom jij te werken in een klein, hecht en gedreven team bestaande uit zes collega’s. Samen met dit team zorg jij er onder andere voor dat 2.5 miljoen Nederlanders elke maand op tijd en op de juiste manier hun salaris ontvangen. Als Full Stack .NET Developer werk je samen in een scrum-team aan het verbeteren, uitbreiden, innoveren

Bekijk vacature »

.NET Developer Azure

Bedrijfsomschrijving Voor een goede relatie van ons in de regio Tilburg zijn wij op zoek naar een ervaren .NET Developer. De organisatie is verantwoordelijk voor de ontwikkeling van een groot aantal portalen die onmisbaar zijn in de Nederlandse zorgsector. De systemen worden gebruikt door zorgverzekeraars, zorgverleners en tal van andere partijen. Gezien de omvang, maar ook het aantal van portalen die deze organisatie op haar naam heeft staan, zijn inmiddels 9 Scrum teams verantwoordelijk voor de doorontwikkeling en het van scratch af aan opbouwen van nieuwe functionaliteiten. De teams bestaan uit meerdere ontwikkelaars, een tester, een informatie analist en een

Bekijk vacature »

Fullstack PHP developer

Bedrijfsomschrijving Deze organisatie zit in de reisbranche en is daarmee marktleider binnen hun segment. Ze zijn bezig om dit internationaal uit te rollen en daar kan jij een belangrijk onderdeel van uit gaan maken. Ze werken in een mooi pand in Amsterdam met ongeveer 30 personen. Iets minder dan de helft bedraagt de IT-afdeling, hierbij moet je denken aan developers en support medewerkers. Functieomschrijving Voornamelijk werk je hier aan de backend echter zal je ook op de front-end een bijdrage gaan leveren. Ze werken hier met Laravel, Vue.js en MySQL. Er wordt hier ook veel aandacht besteed aan code reviews

Bekijk vacature »

.Net Software Developer – Smart Logistics

Heb jij ervaring met applicatie ontwikkeling, testen en onderhoud van business-kritische .NET applicaties? En wil je graag met de nieuwste technologieën werken binnen een DevOps scrumteam? Wat ga je doen? “Use digital to move smarter De unit Smart Logistics binnen de Transport & Logistics sector van CGI ontwerpt, bouwt en onderhoudt veelal missie-kritische applicaties voor onze klanten uit de transport en logistieke sector. Zonder deze sector worden onze pakketjes niet op tijd afgeleverd, rijden de treinen niet meer van a naar b en varen schepen niet veilig de haven binnen. Om deze transport en logistieke ketens te monitoren en sturen,

Bekijk vacature »

Junior PHP Developer

Je maakt een vliegende start van je carrière door meteen mee te bouwen aan dingen zoals een optimaal werkende website aan de hand van je PHP kennis. Wat doe je als Junior PHP Developer bij Coolblue? Als Junior PHP Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen om te groeien als Junior Developer. Op dat moment komt je wil om steeds te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te kunnen maken.

Bekijk vacature »

Applicatiebeheerder

We zoeken voor deze functie een absolute kei op het gebied van SQL, Power BI, .NET Core, EDI, API en ERP-systemen. De ideale Applicatiebeheerder ziet het als een uitdaging om ook zelf de juiste oplossingen te bedenken en te bouwen en durft daarbij out-of-the- box te denken. Je bent communicatief vaardig en pragmatisch en weet met een natuurlijke drive de vertaling te maken van onze operatie naar gebruiksvriendelijke oplossingen voor interne en externe klanten. Om zo de spreekwoordelijke spil te zijn tussen mens en applicatie. Applicatiebeheerder Breda, 36-40 uur per week Herkenbaar? Lees dan verder wat je als Applicatiebeheerder gaat

Bekijk vacature »

GIS Ontwikkelaar - Utilities

Bij onze klanten vormen Geographical Information Systems (GIS) de basis van het Asset Data Management van de toekomst. Zie jij het als een uitdaging om als onderdeel van een DevOps team de systemen van onze klanten te helpen vormgeven en continu te verbeteren? Wat ga je doen? Ons team bestaat uit GEO/GIS specialisten en wij spelen een belangrijke rol op het gebied van GIS ontwikkelingen bij onze klanten. Binnen onze organisatie hebben wij een grote GEO-ICT practice waarmee we in staat zijn om een fundamenteel deel van de assets basisregistratie voor onze klanten vorm te geven. Dat doen we door

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

19/04/2021 04:49:08
 
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.