Aftelrijmpje, wie blijft over?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET Developer

Functie omschrijving Ervaren .NET Developer gezocht! Wij zoeken een ervaren .NET developer die aan de slag gaat voor een softwarebedrijf in de regio Rhenen. In deze rol ben jij zowel zelfstandig als in teamverband verantwoordelijk voor het ontwikkelen en verbeteren van bestaande producten. Daarnaast houdt jij je bezig met de nieuwbouw van websites, webapplicaties en mobiele applicaties die zowel intern als extern gebruikt worden. Je werkt hierbij nauw samen met andere developer, productmanagers en product specialisten om mooie producten te creëren. Bedrijfsprofiel Waar kom je te werken? Je komt te werken voor snelgroeiende softwareleverancier en allround dienstverlener. Klanten van deze

Bekijk vacature »

Back-end Developer Java

Dit ga je doen Het (door)ontwikkelen van een zelfgebouwde applicatie in Java, Spring Framework, SQL, HTML, CSS en Javascript; End-to-end beheer m.b.t. de applicatie en koppelen van applicaties binnen het landschap; Ontwikkelen van rapportages voor de interne organisatie; Ontwikkelen van aanvullende functionaliteiten m.b.t. de applicatie; Uitvoeren van testen en code reviews. Hier ga je werken Binnen deze organisatie kom je te werken op de afdeling die medische gegevens verzamelt vanuit het hele land. Denk hierbij aan vertrouwelijke persoonsgegevens. Het team verwerkt al deze data met als doel het waarborgen en verbeteren van de kwaliteit van de zorg in heel Nederland.

Bekijk vacature »

Front-end developer (Angular)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

.NET software developer

Functie omschrijving Voor een gewilde werkgever in omgeving Roosendaal zijn wij op zoek naar een back-end software developer met een aantal jaar werkervaring. Je krijgt een plekje in het workflow team en je zal betrokken worden bij het bouwen van nieuwe software, en het optimaliseren van bestaande code. Je werkt bij dit bedrijf in een Scrum team waarin je soms klantcontact hebt. Jouw werkzaamheden zullen er als volgt uit zien: Je krijgt een plekje op de in-house IT afdeling. Deze afdeling bestaat uit zo'n 12 collega's, verdeeld over verschillende specialisaties (BI, Beheer, Business software & workflow). De vacature staat open

Bekijk vacature »

Back End Developer .NET

Dit ga je doen Ontwikkelen in C# .NET en werken aan nieuwbouw, uitbouw en onderhoud van de software (die communiceren met 68.000 sensoren, waardoor er meerdere miljoenen berichten per uur verwerkt worden); Samenwerken in Scrum Teams; Meewerken aan verschillende, uitdagende projecten; Werken met nieuwe technologieën en vrijheid krijgen om jezelf te ontwikkelen en door te groeien. Hier ga je werken Je komt als Developer te werken bij een organisatie die gespecialiseerd is in software die real-time wordt gebruikt. De software constateert waar werk moet worden uitgevoerd en de chauffeurs worden met een andere applicatie hierop geattendeerd. Ook wordt er direct

Bekijk vacature »

Medior .NET developer

Functie Jij gaat als Medior .NET ontwikkelaar aan de slag in ons scrumteam met 6 developers die gepassioneerd en actief bezig zijn om onze spelers kwalitatieve en mooie spelervaringen aan te bieden. Als medior .NET developer ga jij werken aan een technisch hoogwaardig platform welke bezoekerspieken verwerkt van tienduizenden tot honderdduizenden gebruikers per minuut! Ons scrumteam werkt in drie wekelijkse sprints en wij beginnen iedere ochtend met een stand-up. Jij werkt bij ons met C# .NET, .NET Core, React.JS, Xamarin, Azure, Docker en Kubernetes. Wij hechten enorm veel waarde aan het leveren van hoogwaardige en kwalitatieve code. Zodra jij de

Bekijk vacature »

C# .NET Software Ontwikkelaar

Functie omschrijving Gezocht: Software Developer C# .NET voor een dynamische organisatie! Ben je onlangs afgestudeerd of ben je toe aan de volgende stap in je professionele carrière? Lees dan verder! We zijn momenteel op zoek naar een Software Developer die klaar is voor een nieuwe uitdaging en die onze eindklant in de regio Arnhem kan versterken. In deze functie werk je aan verschillende projecten en bezoek je vaak klanten. Je kunt een rol verwachten met veel uitdaging, diversiteit en verantwoordelijkheid. Bedrijfsprofiel Binnen welke organisatie ga je aan de slag? Je gaat werken bij een organisatie die zich specialiseert in het

Bekijk vacature »

Traineeship IT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Senior Developer Betty Blocks Blauwe Haven Rotterd

Functieomschrijving Voor de Politie zijn wij opzoek naar een Senior Developer Betty Blocks Blauwe Haven Rotterdam. De politieorganisatie heeft jaarlijks te maken met een aanzienlijk aantal politiemedewerkers die vanwege mentale overbelasting niet of beperkt inzetbaar zijn. De Blauwe Haven Rotterdam ondersteunt deze politiemedewerkers in hun herstel en re-integratieproces. De huidige digitale systemen van de Politie bieden onvoldoende ondersteuning in het herstel- en re-integratieproces van politiemedewerkers. Zowel voor de politiemedewerkers als voor de organisatie. Politiemedewerkers worden buitengesloten, waardoor zij eigen regie verliezen. Begeleiders kunnen de voortgang van de medewerkers niet goed monitoren. Management beschikt niet over de mogelijkheid trends te signaleren

Bekijk vacature »

Dynamische Oracle/APEX Ontwikkelaar in de logistie

Bedrijfsomschrijving De organisatie in de regio Rotterdam is gespecialiseerd in het ontwikkelen van moderne webbased software voor de ERP branche. In totaal is er 20FTE aan specialisten actief binnen de organisatie. De ICT afdeling bestaat momenteel uit 15FTE. Ze groeien ontzettend hard en daarom zoeken zij een Oracle/APEX Developer die het reeds sterke team nog sterker komt maken. Hier werken ze op projectbasis voor verschillende grote organisaties in de logistieke sector. Het is een informele organisatie waarbinnen een fijne werksfeer heerst. Zoals aangegeven willen ze het team nog sterker maken en daarvoor zoeken ze bij voorkeur medior of senior Oracle/APEX

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Functioneel Applicatiebeheerder op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op de functionele aspecten, zodat

Bekijk vacature »

Junior Front-End Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale oplossingen van Coolblue. Wat doe je als Junior Front-End Developer bij Coolblue? Als Junior Front-End Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen. Op dat moment komt je wil om te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te maken. Je sterk analytisch vermogen komt dan goed van pas! Ook Junior Front-End Developer worden bij Coolblue?

Bekijk vacature »

Java/Kotlin Developer

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Fullstack Developer

Functieomschrijving Heb je kort geleden jouw HBO diploma ICT development behaald? Of zit je nog aan het begin van je carrière en heb je affiniteit met C#.NET? Voor een erkende werkgever in de omgeving van Oosterhout zijn wij op zoek naar een fullstack developer. Als C#.NET developer werk je samen met een vooruitstrevend team aan het ontwikkelen van maatwerk software voor klanten. Je hebt affiniteit met SQL, maar nog belangrijker is dat je kennis en ervaring hebt met C#.NET. Jouw werkzaamheden zien er als volgt uit: Het ontwikkelen van onze high-availability en high-performance backend; Je begint de dag rond 8:30

Bekijk vacature »

C# developer

Functie Als ervaren Software Engineer wordt jij verantwoordelijk voor het bedenken en ontwikkelen van technische (maatwerk) oplossingen voor onze klanten en dit samen met de klant af te stemmen. Jij wordt o.a. verantwoordelijk voor de doorontwikkeling het software pakket welke voor ons enorm belangrijk is. Dit pakket zorgt er namelijk voor dat wij complete productielijnen kunnen aansturen en monitoren. Daarnaast heb jij actief contact met onze hoofdvestiging om het software achter een van onze systemen te verbeteren en te herschrijven. Momenteel zijn onze C# applicaties geschreven met o.a. Winforms. Echter hebben wij de actieve ambitie om dit te gaan herschrijven

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

21/11/2024 19:38:07
 
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.