Deelnemers verdelen over groepen van 3 na inschrijving

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Progress Developer / Internationale markt

Functieomschrijving Wil jij in een toonaangevende organisatie werken met de ambitie om de (inter-)nationale markt te bewerken? Reageer dan nu! Uitvoeren van analyses ter bevordering van de betrouwbaarheid en performance van de applicatie; Implementeren van functionaliteiten in eigen Back Office pakket; Meedenken over de architectuur en tevens waarborgen van de architectuur; Programmeren van functionele en technische wijzigingen; Bijwerken van documentatie; Troubleshooten van complexe incidenten; Aanroepen van webservices, message handling; Functie-eisen Minimaal HBO werk en denkniveau; 6+ jaar ervaring in software ontwikkeling; Ruime ervaring met Progress / OpenEdge; Zeer sterk analytisch vermogen; Je bent communicatief en je gaat proactief te werk;

Bekijk vacature »

SQL Developer / SQL DBA / Financiële instelli

Functieomschrijving Ben jij een ervaren SQL Developer / SQL DBA die houdt van een uitdaging? Heb je ruime ervaring met SQL, SQL Server, SSIS en het bouwen van queries? Lijkt het jou interessant om verantwoordelijk te zijn voor de gehele Nederlandse database omgeving van deze internationale financiële organisatie? Lees dan snel verder! Verantwoordelijk voor operationele werking van de database omgeving voor alle Nederlandse vestigingen; Schrijven van SQL queries; Beantwoorden complexe integratie vraagstukken; Meewerken aan uiteenlopende interne projecten en organisatiebrede migratie trajecten; Requirements opstellen; Fungeren als sparringspartner voor de business. Functie-eisen HBO werk- en denkniveau; Minimaal drie jaar ervaring in een

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

07/12/2019 15:25:30
 
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
 
Verwijderd 31683

Verwijderd 31683

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 Verwijderd 31683
 
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.
 
Verwijderd 31683

Verwijderd 31683

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.
 
Verwijderd 31683

Verwijderd 31683

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.
 
Verwijderd 31683

Verwijderd 31683

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.