Deelnemers verdelen over groepen van 3 na inschrijving

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Sven Froeling

Sven Froeling

12/11/2019 17:10:01
Quote Anchor link
Hallo,

Deelnemers aan een competitie ronde hebben zich ingeschreven. Maar de deelnemers moeten random in groepen van 3 geplaatst worden, zodra de inschrijving gesloten is. En bij een bepaald aantal deelnemers moeten er ook groepen van 2 gemaakt worden, want een deelnemer kan niet alleen meedoen?
Hoe ga ik dit aanpakken?
 
PHP hulp

PHP hulp

29/03/2024 06:02:17
 
Adoptive Solution

Adoptive Solution

12/11/2019 17:13:51
Quote Anchor link
Hoe deden de mensen dat toen er nog geen computers waren?

$a % $b Modulo Remainder of $a divided by $b.

https://www.php.net/manual/en/language.operators.arithmetic.php
 
Thomas van den Heuvel

Thomas van den Heuvel

12/11/2019 17:21:13
Quote Anchor link
Daarmee (modulo rekenen) kun je in ieder geval een gevalsonderscheid maken:
#1 indien het totaal aantal deelnemers deelbaar is door 3 (rest na deling gelijk aan 0) dan kunnen alle groepen uit drie deelnemers bestaan
#2 indien de rest na deling gelijk is aan 2 dan zal er 1 groep zijn met 2 deelnemers
#3 indien de rest na deling gelijk is aan 1 dan zul je 1 groep met 3 deelnemers moeten "kannibaliseren" om hier twee groepen van 2 van te maken

En dan heb je nog mogelijk het randgeval waarbij er te weinig deelnemers zijn. Als er minder dan 4 deelnemers zijn dan is er niet zoveel competitie :).

EDIT: en daarmee garandeer je tevens dat je genoeg mensen hebt voor gevalsonderscheid #3 ((ten minste) twee groepen van twee)
Gewijzigd op 12/11/2019 17:24:09 door Thomas van den Heuvel
 
Sven Froeling

Sven Froeling

12/11/2019 20:15:37
Quote Anchor link
Ik heb een oplossing gevonden. Op basis van het aantal inschrijvingen worden er nu eerst 2 of 3 deelnemers random uit de database gehaald en daar wordt een groep-nummer aan gegeven. Daarna worden er weer 3 random uit de database gehaald van de deelnemers die nog geen groep-nummer hebben. Enz enz tot dat ze allemaal een groep-nummer hebben.
 
Thomas van den Heuvel

Thomas van den Heuvel

12/11/2019 20:18:29
Quote Anchor link
Hoe garandeer je dat je mensen niet twee keer indeelt? Dat zou je dan allemaal moeten bijhouden? Dat kan eenvoudiger?

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
// debugging
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');

// hulpfuncties
function escape($in) {
    return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}

function
dump($in) {
    if (is_array($in)) {
        $in = print_r($in, true);
    }

    echo '<pre>'.escape($in).'</pre>';
}


// deelnemers
$participants = array(
    'Henk',     // 1 persoon: te weinig deelnemers
    'Piet',     // 2 personen: te weinig deelnemers
    'Klaas',    // 3 personen: te weinig deelnemers
    'Marie',    // 4 personen: twee groepen van 2
    'Eva',      // 5 personen: een groep van 2
    'Hanneke',  // 6 personen: twee groepen van 3
    'Jan',      // 7 personen: 2 groep(en) van 2
    // 'Theo',  // 8 personen: 1 groep(en) van 2
    // 'Jaap',  // 9 personen: 3 groepen van 3
    // et cetera

);

// initiele check
if (count($participants) < 4) {
    echo '[error] te weinig deelnemers';
    exit;
}


// random volgorde
shuffle($participants);

// deel op in groepen van ten hoogste 3
$groups = array_chunk($participants, 3);

// indien laatste groep 2 personen heeft: dit werk heeft array_chunk al gedaan, de "rest" zit in de laatste groep

// indien laatste groep 1 persoon heeft

if (count($participants) % 3 === 1) {
    // selecteer willekeurige groep van 3 deelnemers
    $groupNumber = rand(0, count($groups) - 2); // van en met 0 tot en zonder de laatste groep, -2 omdat je nummert vanaf 0
    // hussel deze groep opnieuw (niet per se nodig)
    // shuffle($groups[$groupNumber]);
    // pak laatste deelnemer

    $participant = array_pop($groups[$groupNumber]);
    // en voeg deze toe aan laatste groep
    $groups[count($groups)-1][] = $participant; // -1 omdat je nummert vanaf 0
}

// controle
dump($participants);
dump($groups);
?>
[end]
 
Sven Froeling

Sven Froeling

12/11/2019 20:27:18
Quote Anchor link
Van de deelnemers die een groep-nummer hebben gekregen wordt dit direct in de database weggeschreven. Daarna volgt er een nieuwe random ronde onder de deelnemers die nog geen groep-nummer hebben. En in mijn geval moeten de kleine groepen de eersten zijn. Die zijn immers sneller met z'n 2en dan een groep van 3 personen.
 
Thomas van den Heuvel

Thomas van den Heuvel

13/11/2019 16:57:16
Quote Anchor link
Quote:
Van de deelnemers die een groep-nummer hebben gekregen wordt dit direct in de database weggeschreven. Daarna volgt er een nieuwe random ronde onder de deelnemers die nog geen groep-nummer hebben.

Laat hier eens wat code van zien? Volgens mij doe je hier heel veel onnodige controles en voer je onnodige queries uit.

Quote:
En in mijn geval moeten de kleine groepen de eersten zijn.

Dit is nieuwe informatie. Waarom is dit nodig? En waarom had je dat dan niet in je oorspronkelijke vraagstuk gezet? Is dit niet gewoon een kunstgreep om te garanderen dat jouw code werkt?

Quote:
Die zijn immers sneller met z'n 2en dan een groep van 3 personen.

Geen idee wat dit inhoudt.

Voor mijn oplossing heb je één query nodig voor het opvragen van de deelnemers, en een aantal queries voor het wegschrijven van groepen. Meer heb je volgens mij niet nodig.

Ik vraag mij af wat het nut van het plaatsen van je vraag is als je mensen aan het (denk)werk zet en vervolgens je eigen plan trekt?
 
Sven Froeling

Sven Froeling

13/11/2019 18:10:34
Quote Anchor link
Er worden inderdaad veel heel veel queries uitgevoerd.
Het is geen kunst greep. Het betreft hier een indeling voor een golf wedstrijd. Als je dan niet alle groepen in 3 personen kunt verdelen, is het handiger dat de kleine groepen voorop lopen. Die worden anders opgehouden door een groep met meer mensen.

Ik wist niet dat je na het plaatsen van je vraag achterover moest gaan zitten en zelf enig eigen initiatief achterwege moest laten.
 
Thomas van den Heuvel

Thomas van den Heuvel

13/11/2019 19:16:44
Quote Anchor link
Wijs mij eens aan in je oorspronkelijke vraagstelling waar de nadruk wordt gelegd op groepen van twee personen? En houdt dat dan ook in dat er meer groepen gevormd moeten worden dan strict noodzakelijk? Zou dan de vraag dan niet anders moeten zijn? Groepen van twee, tenzij er één iemand overvblijft, maak dan een groep van drie? Dit levert een compleet andere specificatie. De probleemstelling bepaalt in grote mate de aanpak.

Quote:
Ik wist niet dat je na het plaatsen van je vraag achterover moest gaan zitten en zelf enig eigen initiatief achterwege moest laten.

Waarom vraag je dan in je oorspronkelijke bericht om een aanpak? Daarmee geef je de indruk dat je geen idee hebt waar je moet beginnen, en dan kun je ook verwachten dat mensen aanzetten aanleveren.

Vervolgens vertel je doodleuk dat je een oplossing hebt voor een probleem dat mogelijk totaal niet lijkt op hetgeen je vroeg.

Eigen initiatief is prima, maar toon dit dan voordat je andere mensen aan het werk zet voor een ogenschijnlijk compleet ongerelateerd vraagstuk.
 



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.