Készítő: aaaaaaaaaaaaaa, 4 éve frissítve, szöveg nyelve: TypoScript.
Beágyazás:
  1. // sandboxba osszebaszott logikai bukfenc
  2.  
  3. interface IPlayer {
  4.   id: number;
  5.   name: string;
  6. }
  7.  
  8. type TypeGroups = { runners: IPlayer[]; officers: Array<IPlayer[]> };
  9.  
  10. const Players: IPlayer[] = [];
  11. const Groups: TypeGroups[] = [];
  12.  
  13. function makeid(length: number) {
  14.   var result = "";
  15.   var characters =
  16.     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  17.   var charactersLength = characters.length;
  18.   for (var i = 0; i < length; i++) {
  19.     result += characters.charAt(Math.floor(Math.random() * charactersLength));
  20.   }
  21.   return result;
  22. }
  23.  
  24. function randomInteger(min: number, max: number) {
  25.   return Math.floor(Math.random() * (max - min + 1)) + min;
  26. }
  27.  
  28. const allPlayer = randomInteger(250, 500);
  29.  
  30. for (let i = 0; i < allPlayer; i++) {
  31.   Players.push({ id: i, name: makeid(12) });
  32. }
  33.  
  34. async function generateCombo(
  35.   players: IPlayer[]
  36. ): Promise<{ group: TypeGroups; players: IPlayer[] }> {
  37.   console.log(`${players.length} osszes jatekos`);
  38.  
  39.   const group: TypeGroups = { runners: [], officers: [] };
  40.  
  41.   const rDriver = players[Math.floor(Math.random() * players.length)],
  42.     maxSeats = players.length > 6 ? randomInteger(1, 4) : 2;
  43.  
  44.   group.runners.push(rDriver);
  45.   players = players.filter((x) => x.id !== rDriver.id);
  46.  
  47.   for (let i = 0; i < maxSeats; i++) {
  48.     const rMate = players[Math.floor(Math.random() * players.length)];
  49.  
  50.     if (!rMate || players.length < 3) {
  51.       break;
  52.     }
  53.  
  54.     group.runners.push(rMate);
  55.     players = players.filter((x) => x.id !== rMate.id);
  56.   }
  57.  
  58.   console.log(`${players.length} jatekos maradt menekulok sorsolasa utan`);
  59.   console.log(`${group.runners.length} menekulo`);
  60.  
  61.   if (players.length === 0) {
  62.     return { group, players };
  63.   }
  64.  
  65.   while (
  66.     group.runners.length >
  67.     Math.floor(
  68.       group.officers.reduce((prev, officers) => (prev += officers.length), 0) *
  69.         0.5
  70.     )
  71.   ) {
  72.     if (players.length === 0) {
  73.       break;
  74.     }
  75.  
  76.     const officerGroup = [];
  77.  
  78.     const oDriver = players[Math.floor(Math.random() * players.length)],
  79.       maxSeats = randomInteger(1, 4);
  80.  
  81.     officerGroup.push(oDriver);
  82.     players = players.filter((x) => x.id !== oDriver.id);
  83.  
  84.     const unitMemberCount =
  85.       players.length < maxSeats ? players.length : maxSeats;
  86.  
  87.     for (let i = 0; i < unitMemberCount - 1; i++) {
  88.       const oUnitMember = players[Math.floor(Math.random() * players.length)];
  89.  
  90.       officerGroup.push(oUnitMember);
  91.       players = players.filter((x) => x.id !== oUnitMember.id);
  92.     }
  93.  
  94.     group.officers.push(officerGroup);
  95.   }
  96.  
  97.   console.log(
  98.     `${group.officers.reduce(
  99.       (prev, officers) => (prev += officers.length),
  100.       0
  101.     )} rendor`
  102.   );
  103.  
  104.   // for (let j = 0; j < (players.length < maxSeats ? players.length : maxSeats); j++) {
  105.   //     const oDriver = players[Math.floor(Math.random() * players.length)],
  106.  
  107.   //     group.officers.push(officer);
  108.   //     players = players.filter(x => x.id !== officer.id);
  109.   // }
  110.  
  111.   return { group, players };
  112. }
  113.  
  114. let newPlayers = [...Players];
  115. let allGroups = [];
  116.  
  117. (async () => {
  118.   const tick = new Date().getTime();
  119.  
  120.   console.log("halo", newPlayers.length);
  121.  
  122.   while (newPlayers.length > 0) {
  123.     const { group, players } = await generateCombo(newPlayers);
  124.  
  125.     allGroups.push(group);
  126.     newPlayers = players;
  127.  
  128.     console.log("=======================================");
  129.   }
  130.  
  131.   console.log("osszes brigad", allGroups);
  132.   console.log("megcsinalva", new Date().getTime() - tick);
  133. })();