Aftelrijmpje, wie blijft over?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior/senior Front-end developer

Functie 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 gebouwd, of grote complexe wijzigingen worden doorgevoerd op bestaande omgevingen. Je kunt (afhankelijk van jouw wensen en doelen) dus afwisselend werken in beide teams. Hiernaast participeer je in het Chapter Front-end development waar gezamenlijk kennis en ervaring wordt gedeeld. Als Front-end developer is het jouw doel

Bekijk vacature »

Medior Front end developer React

Functie Voor deze functie ben ik op zoek naar een enthousiaste front end developer die communicatief vaardig is. Jij wordt onderdeel van een enthousiast jong team dat werkt aan grote websites. Binnen jouw rol ben jij diegene die de vertaling maakt van design naar functionele code en zorg jij voor goede experience op meerdere platformen. Dit doe je natuurlijk door gebruik te maken van Javascript, HTML, CSS en React. Daarnaast wordt er gebruik gemaakt van Webcomponents en verschillende authenticatie tools. Doordat er hier gestreefd wordt naar de beste gebruikerservaringen, wordt het product constant doorontwikkeld. Hierdoor blijven ze voor op de

Bekijk vacature »

Front-end Developer vue.js node.js SaaS

Dit ga je doen Het ontwikkelen van nieuwe features die bijdragen aan de groei van de klanten van de organisatie; Je denkt mee over nieuwe innovaties, features en verbeteringen in de applicatiearchitectuur; Je draagt bij aan de continue ontwikkeling van jouw team doordat je elke dag streeft naar het verbeteren van jouw eigen prestaties; Je neemt actief deel aan Scrum meetings en de Frontend Guild. Hier ga je werken Voor een snel groeiend bedrijf de regio Nieuw Vennep zijn wij opzoek naar een ervaren Front-end Developer. De organisatie is actief in de e-commercebranche en ontzorgt haar klanten middels een SaaS-platform.

Bekijk vacature »

Front-end Developer

Functie omschrijving Gezocht front-end developer! Voor een toffe organisatie in de regio Rhenen zij wij op zoek naar een front-end developer die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. In deze functie heb je een adviserende rol en beschik je over een grote dosis vakinhoudelijke kennis. Samen met collega’s en klanten overleg je om aangeleverde designs om te zetten naar unieke concepten. Zo draag jij je steentje bij aan de groeiambities van de klant. Voor klanten wordt jij het vaste aanspreekpunt als het gaat over planningen hierin houdt je alle betrokkenen goed op de

Bekijk vacature »

C# .NET Software Developer

Functie omschrijving Ben jij op zoek naar een nieuwe uitdaging binnen software development waar je gaat werken voor een jong en flexibel bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Software Developer met ervaring binnen C# .NET die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Verder begeleid je complexe projecten, ben jij iemand die altijd kansen ziet? Dan zoeken wij jou! In deze functie ga jij je bezighouden met: Meedenken in oplossingsrichtingen; Werken aan de architectuur; Het verbeteren van functionaliteiten binnen het dataplatform; Ontwikkelen van nieuwe technologieën. Bedrijfsprofiel Waar ga je aan de

Bekijk vacature »

Full Stack .NET Developer C# ASP.NET

Samengevat: Deze werkgever is gespecialiseerd in het op afstand bewaken en besturen van machines en processen. Ben jij een ervaren Full Stack .NET Developer? Heb je ervaring met C# en ASP.NET? Vaste baan: .Net Developer C# ASP.NET HBO €3.300 - €4.500 Deze werkgever is een snel groeiende onderneming gespecialiseerd in het op afstand bewaken en besturen van machines en processen, IoT (Internet of Things). Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Wil jij bij de top specialisten horen? Ben jij op zoek naar een

Bekijk vacature »

Lasrobotprogrammeur/operator

Heb je interesse in trekkers en beschik je overvlijmscherpse precisie? Solliciteer dan op deze vacature! Als Lasoperator ben je vooral bezig met het maken van nieuwe lasrobotprogramma’s en het optimaliseren van bestaande programma’s, zowel online als offline (incl. het bedienen van de Lasrobots). Daarnaast draag je bij aan een optimaal rendement van de las robots. Verder heb je de volgende werkzaamheden: Het meewerken als operator c.q. Robotlassen niveau 2 (van complexe samenstellingen/halffabricaten), het om- en instellen van de diverse stations van lasmallen (productdragers), het afwerken van laswerk (verwijderen lasspetters en oxiden), het bewaken van de machineplanning (op bewerkingen) incl. de

Bekijk vacature »

.Net ontwikkelaars voor de zorgsector

Bedrijfsomschrijving Voor onze klant in de omgeving van Zwolle zijn wij op zoek naar een ervaren .Net ontwikkelaar, bij voorkeur met ervaring binnen de belangrijkste sector van Nederland, namelijk: de zorgsector. Deze internationale organisatie ontwikkelt software voor de zorgsector. Er werken zo'n 25 medewerkers hard aan een oplossing die gebruikt wordt door heel Nederland. Er heerst een informele sfeer waarbij er altijd ruimte is voor een grapje. Je collega's zijn stuk voor stuk sterke ontwikkelaars vanuit verschillende achtergronden en met verschillende leeftijden. Je komt hier terecht in een organisatie die zich hard inzet om de zorgsector te verbeteren. De mogelijkheden

Bekijk vacature »

Mendix Ontwikkelaar - Vernieuwen van het applicati

Bedrijfsomschrijving De ontwikkelingen in de transportsector gaan razendsnel. Bij ons kun je een belangrijke rol spelen in deze sector. We streven ernaar om onze klanten te ontzorgen op het gebied van continuïteit en veiligheid met innovatieve producten en diensten. We willen dat onze klanten de veiligste vervoerders van Europa worden. Ons team werkt hard om deze ambitieuze doelstellingen te bereiken en we bieden een motiverende werkomgeving aan. We zijn op zoek naar zelfstarters met een focus op resultaat en beslissingsbevoegdheid. Functieomschrijving Als Mendix ontwikkelaar bij deze organisatie heb je een gevarieerde baan. Het applicatielandschap wordt vernieuwd en de “schade en

Bekijk vacature »

PHP developer (Symfony, Doctrine)

Functie Als PHP developer wordt er een hoge mate van zelfstandigheid verwacht, maar ook dat je goed opereert in een team waar kennis wordt gedeeld en dingen als codereviews erg veel voorkomen. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden

Bekijk vacature »

Traineeship Front-end developer (WO, 0 tot 3 jaar

Functie Zoals beschreven ga je vanaf start aan de slag bij een passende opdrachtgever, hierbij kijken ze echt naar jouw wensen, kennis/ervaring maar ook de reisafstand. Momenteel hebben ze meerdere klanten waarbij ze groepen hebben opgezet wat maakt dat er diverse uitdagende kansen liggen. Naast het werken bij de opdrachtgever, en het volgen van de masterclasses, zul je regelmatig met de andere trainees in contact zijn. Niet alleen op professioneel vlak maar juist ook bij de borrels en kwartaaluitjes! Kortom; een jaar lang hard aan jezelf werken in combinatie met gezelligheid en plezier. Spreek dit jou aan? Dan komen we

Bekijk vacature »

C# .NET Developer

Functie omschrijving Ben jij op zoek naar een nieuwe uitdaging binnen development waar je komt te werken binnen een flexibel, jong en ondernemend bedrijf. Lees dan snel verder! Voor deze functie zoeken wij een C# .NET Developer die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Daarnaast begeleid je complexe projecten, wij zoeken iemand die altijd kansen ziet en waarbij het glas altijd half vol is. Voor deze functie zoeken wij een Developer met ervaring op het gebied van .NET die deze organisatie gaat versterken. Binnen de organisatie ga jij je vooral bezighouden met het verbeteren van

Bekijk vacature »

Software Developer Java

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 »

PHP Developer

Functie omschrijving Als PHP Developer ga jij aan de slag met uitdagende software projecten. Jij gaat in deze functie software applicaties ontwikkelen. Deze software projecten zijn heel divers, en deze organisatie maakt software, van A tot Z. Klanten kunnen in elke sector werkzaam zijn, van profit tot non-profit. Deze software bouw je vooral in PHP en specifiek Laravel. Dit framework kent dus geen geheimen voor jou. De software die jij gaat ontwikkelen is heel divers, van urenregistratiesystemen tot compleet geautomatiseerde tools. In deze veelzijdige functie ga jij je zeker niet vervelen, elke dag bestaat weer uit nieuwe uitdagingen. Bedrijfsprofiel Deze

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor een informele club in omgeving Delft zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Als ontwikkelaar kom je terecht op een afdeling van 6 medewerkers. Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Er wordt voornamelijk gewerkt met PHP, Java en

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/2024 23:13:14
 
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.