// sandboxba osszebaszott logikai bukfenc
interface IPlayer {
id: number;
name: string;
}
type TypeGroups = { runners: IPlayer[]; officers: Array<IPlayer[]> };
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);
})();