// sandboxba osszebaszott logikai bukfenc interface IPlayer { id: number; name: string; } type TypeGroups = { runners: IPlayer[]; officers: Array }; const Players: IPlayer[] = []; const Groups: TypeGroups[] = []; function makeid(length: number) { var result = ""; var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; var charactersLength = characters.length; for (var i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } function randomInteger(min: number, max: number) { return Math.floor(Math.random() * (max - min + 1)) + min; } const allPlayer = randomInteger(250, 500); for (let i = 0; i < allPlayer; i++) { Players.push({ id: i, name: makeid(12) }); } async function generateCombo( players: IPlayer[] ): Promise<{ group: TypeGroups; players: IPlayer[] }> { console.log(`${players.length} osszes jatekos`); const group: TypeGroups = { runners: [], officers: [] }; const rDriver = players[Math.floor(Math.random() * players.length)], maxSeats = players.length > 6 ? randomInteger(1, 4) : 2; group.runners.push(rDriver); players = players.filter((x) => x.id !== rDriver.id); for (let i = 0; i < maxSeats; i++) { const rMate = players[Math.floor(Math.random() * players.length)]; if (!rMate || players.length < 3) { break; } group.runners.push(rMate); players = players.filter((x) => x.id !== rMate.id); } console.log(`${players.length} jatekos maradt menekulok sorsolasa utan`); console.log(`${group.runners.length} menekulo`); if (players.length === 0) { return { group, players }; } while ( group.runners.length > Math.floor( group.officers.reduce((prev, officers) => (prev += officers.length), 0) * 0.5 ) ) { if (players.length === 0) { break; } const officerGroup = []; const oDriver = players[Math.floor(Math.random() * players.length)], maxSeats = randomInteger(1, 4); officerGroup.push(oDriver); players = players.filter((x) => x.id !== oDriver.id); const unitMemberCount = players.length < maxSeats ? players.length : maxSeats; for (let i = 0; i < unitMemberCount - 1; i++) { const oUnitMember = players[Math.floor(Math.random() * players.length)]; officerGroup.push(oUnitMember); players = players.filter((x) => x.id !== oUnitMember.id); } group.officers.push(officerGroup); } console.log( `${group.officers.reduce( (prev, officers) => (prev += officers.length), 0 )} rendor` ); // for (let j = 0; j < (players.length < maxSeats ? players.length : maxSeats); j++) { // const oDriver = players[Math.floor(Math.random() * players.length)], // group.officers.push(officer); // players = players.filter(x => x.id !== officer.id); // } return { group, players }; } let newPlayers = [...Players]; let allGroups = []; (async () => { const tick = new Date().getTime(); console.log("halo", newPlayers.length); while (newPlayers.length > 0) { const { group, players } = await generateCombo(newPlayers); allGroups.push(group); newPlayers = players; console.log("======================================="); } console.log("osszes brigad", allGroups); console.log("megcsinalva", new Date().getTime() - tick); })();