I am little new in android and java and trying to create function which generate random cricket team of 11 players with captain and vice captain with following strict rule like
[*]min and max players for each role,
[*]max players from one team
[*]if contest is small, 80% player need to be consistent and 20% risky players and if contest is mega, 60% player will be consistent and 40% risky players
[*]all teams should be unique
[*]random players combination based on team like 7-4,4-7,5-6 and 6-5 etc
< /ol>
Теперь я выполнил функцию такую: < /p>
private void generateTeams(List captains, List viceCaptains) {
if (!canGenerateTeams()) {
showErrorDialog(getString(R.string.error), getString(R.string.unable_to_generate_teams));
return;
}
int consistentRatio = contestType == 2 ? 80 : 60; // Small contest: 80-20, Mega contest: 60-40
// Prepare player pools
List allPlayers = new ArrayList(PlayersViewModelCricketAI.getBothTeamsPlayers().getValue());
allPlayers.removeAll(selectedPlayerOut); // Remove locked-out players
// Sort players by credits (higher credits first for consistent players)
allPlayers.sort((p1, p2) -> Double.compare(p2.getPlayerCredit(), p1.getPlayerCredit()));
// Divide players into consistent and risky groups
int splitIndex = (consistentRatio * allPlayers.size()) / 100;
List consistentPlayers = new ArrayList(allPlayers.subList(0, splitIndex));
List riskyPlayers = new ArrayList(allPlayers.subList(splitIndex, allPlayers.size()));
// Initialize team generation parameters
List generatedTeams = new ArrayList();
Set generatedTeamSignatures = new HashSet();
int maxPlayersFromOneTeam = MAX_PLAYERS_ONE_TEAM;
int requiredTeams = totalTeamsToCreate;
int attempts = 0;
int maxAttempts = (requiredTeams * 50);
Random random = new Random();
while (generatedTeams.size() < requiredTeams && attempts < maxAttempts) {
attempts++;
List teamPlayers = new ArrayList();
Set teamPlayerIds = new HashSet();
int team1Count = 0, team2Count = 0;
// Randomly choose a valid team combination (e.g., 7-4, 6-5, 5-6)
int team1Limit = 4 + random.nextInt(4); // Adjust range as needed
int team2Limit = TOTAL_PLAYERS - team1Limit;
// Add locked-in players
for (Player player : selectedPlayerIn) {
if (teamPlayers.size() < TOTAL_PLAYERS && !teamPlayerIds.contains(player.getPlayerId())) {
if (validatePositionConstraints(player, teamPlayers)) {
teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());
if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}
}
// Add captain and vice-captain
Player captain = captains.get(random.nextInt(captains.size()));
Player viceCaptain = viceCaptains.get(random.nextInt(viceCaptains.size()));
// Ensure captain and vice-captain are not the same
if (captain.getPlayerId() != viceCaptain.getPlayerId()) {
if (!teamPlayerIds.contains(captain.getPlayerId()) && validatePositionConstraints(captain, teamPlayers)) {
teamPlayers.add(captain);
teamPlayerIds.add(captain.getPlayerId());
if (captain.getPlayerTeamNumber() == 1) team1Count++;
if (captain.getPlayerTeamNumber() == 2) team2Count++;
}
if (!teamPlayerIds.contains(viceCaptain.getPlayerId()) && validatePositionConstraints(viceCaptain, teamPlayers)) {
teamPlayers.add(viceCaptain);
teamPlayerIds.add(viceCaptain.getPlayerId());
if (viceCaptain.getPlayerTeamNumber() == 1) team1Count++;
if (viceCaptain.getPlayerTeamNumber() == 2) team2Count++;
}
}else{
continue;
}
// Fill remaining slots with consistent players
for (Player player : consistentPlayers) {
if (teamPlayers.size() >= TOTAL_PLAYERS) break;
if (!teamPlayerIds.contains(player.getPlayerId()) && validatePositionConstraints(player, teamPlayers)) {
if (player.getPlayerTeamNumber() == 1 && team1Count >= team1Limit) continue;
if (player.getPlayerTeamNumber() == 2 && team2Count >= team2Limit) continue;
teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());
if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}
// Fill remaining slots with risky players
for (Player player : riskyPlayers) {
if (teamPlayers.size() >= TOTAL_PLAYERS) break;
if (!teamPlayerIds.contains(player.getPlayerId()) && validatePositionConstraints(player, teamPlayers)) {
if (player.getPlayerTeamNumber() == 1 && team1Count >= team1Limit) continue;
if (player.getPlayerTeamNumber() == 2 && team2Count >= team2Limit) continue;
teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());
if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}
if (validateTeam(teamPlayers, maxPlayersFromOneTeam)) {
List playerIds = new ArrayList();
for (Player p : teamPlayers) {
playerIds.add(p.getPlayerId());
}
Collections.sort(playerIds);
String teamSignature = playerIds + "-" + captain.getPlayerId() + "-" + viceCaptain.getPlayerId();
// Check uniqueness
if (!generatedTeamSignatures.contains(teamSignature)) {
Team team = new Team();
team.players = new ArrayList(teamPlayers);
team.captainId = captain.getPlayerId();
team.viceCaptainId = viceCaptain.getPlayerId();
generatedTeams.add(team);
generatedTeamSignatures.add(teamSignature); // Track this team
}
}
}
Log.e("RESULTS","REQUIRED TEAMS: "+ totalTeamsToCreate +" GENERATED TEAMS: "+ generatedTeams.size()+" ATTEMPTS:"+attempts);
String content = getResources().getString(R.string.teams_count_confirmation, generatedTeams.size());
showSuccessDialog(content, generatedTeams);
}
< /code>
И результат журнала похож на этот < /p>
2024-12-01 09:51:07.597 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:30
2024-12-01 09:51:11.173 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:40
2024-12-01 09:51:14.302 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:32
2024-12-01 09:51:16.138 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:37
2024-12-01 09:51:17.869 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:28
2024-12-01 09:51:19.641 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:37
2024-12-01 09:51:21.848 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:35
2024-12-01 09:51:23.616 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:33
2024-12-01 09:51:25.495 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:48
2024-12-01 09:51:27.400 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 16 ATTEMPTS:1000
2024-12-01 09:51:30.288 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:34
2024-12-01 09:51:32.172 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:32
2024-12-01 09:51:33.722 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:39
2024-12-01 09:51:36.133 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:25
2024-12-01 09:51:37.877 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:29
2024-12-01 09:51:39.724 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:39
2024-12-01 09:51:42.020 25080-25080 RESULTS com.example.teams E REQUIRED TEAMS: 20 GENERATED TEAMS: 16 ATTEMPTS:1000
, как вы можете видеть, его генерируют необходимые команды всего за меньшие попытки, и иногда даже 1000 попыток не генерировать достаточно необходимых команд, есть достаточно игроков, но делая случайные вещи, вызывая дублированные команды и попытаться получить неудачу, , поэтому я хочу улучшить свой код, чтобы он мог создать необходимые случайные вещи со строго -то строго -то соблюдающими мои правила . Дайте мне знать, если кто -то здесь может помочь мне в том же
спасибо! < /P>
I am little new in android and java and trying to create function which generate random cricket team of 11 players with captain and vice captain with following strict rule like
[*][b]min and max players for each role,[/b] [*][b]max players from one team[/b] [*]i[b]f contest is small, 80% player need to be consistent and 20% risky players and if contest is mega, 60% player will be consistent and 40% risky players[/b] [*][b]all teams should be unique[/b] [*][b]random players combination based on team like 7-4,4-7,5-6 and 6-5 etc[/b] < /ol> Теперь я выполнил функцию такую: < /p> [code]private void generateTeams(List captains, List viceCaptains) { if (!canGenerateTeams()) { showErrorDialog(getString(R.string.error), getString(R.string.unable_to_generate_teams)); return; }
int consistentRatio = contestType == 2 ? 80 : 60; // Small contest: 80-20, Mega contest: 60-40
// Prepare player pools List allPlayers = new ArrayList(PlayersViewModelCricketAI.getBothTeamsPlayers().getValue()); allPlayers.removeAll(selectedPlayerOut); // Remove locked-out players
// Sort players by credits (higher credits first for consistent players) allPlayers.sort((p1, p2) -> Double.compare(p2.getPlayerCredit(), p1.getPlayerCredit()));
// Divide players into consistent and risky groups int splitIndex = (consistentRatio * allPlayers.size()) / 100; List consistentPlayers = new ArrayList(allPlayers.subList(0, splitIndex)); List riskyPlayers = new ArrayList(allPlayers.subList(splitIndex, allPlayers.size()));
// Initialize team generation parameters List generatedTeams = new ArrayList(); Set generatedTeamSignatures = new HashSet(); int maxPlayersFromOneTeam = MAX_PLAYERS_ONE_TEAM;
int requiredTeams = totalTeamsToCreate; int attempts = 0; int maxAttempts = (requiredTeams * 50);
Random random = new Random();
while (generatedTeams.size() < requiredTeams && attempts < maxAttempts) { attempts++;
List teamPlayers = new ArrayList(); Set teamPlayerIds = new HashSet(); int team1Count = 0, team2Count = 0;
// Randomly choose a valid team combination (e.g., 7-4, 6-5, 5-6) int team1Limit = 4 + random.nextInt(4); // Adjust range as needed int team2Limit = TOTAL_PLAYERS - team1Limit;
// Add locked-in players for (Player player : selectedPlayerIn) { if (teamPlayers.size() < TOTAL_PLAYERS && !teamPlayerIds.contains(player.getPlayerId())) { if (validatePositionConstraints(player, teamPlayers)) { teamPlayers.add(player); teamPlayerIds.add(player.getPlayerId());
if (player.getPlayerTeamNumber() == 1) team1Count++; if (player.getPlayerTeamNumber() == 2) team2Count++; } } }
// Add captain and vice-captain Player captain = captains.get(random.nextInt(captains.size())); Player viceCaptain = viceCaptains.get(random.nextInt(viceCaptains.size()));
// Ensure captain and vice-captain are not the same if (captain.getPlayerId() != viceCaptain.getPlayerId()) { if (!teamPlayerIds.contains(captain.getPlayerId()) && validatePositionConstraints(captain, teamPlayers)) { teamPlayers.add(captain); teamPlayerIds.add(captain.getPlayerId()); if (captain.getPlayerTeamNumber() == 1) team1Count++; if (captain.getPlayerTeamNumber() == 2) team2Count++; }
if (!teamPlayerIds.contains(viceCaptain.getPlayerId()) && validatePositionConstraints(viceCaptain, teamPlayers)) { teamPlayers.add(viceCaptain); teamPlayerIds.add(viceCaptain.getPlayerId()); if (viceCaptain.getPlayerTeamNumber() == 1) team1Count++; if (viceCaptain.getPlayerTeamNumber() == 2) team2Count++; } }else{ continue; }
// Fill remaining slots with consistent players for (Player player : consistentPlayers) { if (teamPlayers.size() >= TOTAL_PLAYERS) break;
if (!teamPlayerIds.contains(player.getPlayerId()) && validatePositionConstraints(player, teamPlayers)) { if (player.getPlayerTeamNumber() == 1 && team1Count >= team1Limit) continue; if (player.getPlayerTeamNumber() == 2 && team2Count >= team2Limit) continue;
teamPlayers.add(player); teamPlayerIds.add(player.getPlayerId()); if (player.getPlayerTeamNumber() == 1) team1Count++; if (player.getPlayerTeamNumber() == 2) team2Count++; } }
// Fill remaining slots with risky players for (Player player : riskyPlayers) { if (teamPlayers.size() >= TOTAL_PLAYERS) break;
if (!teamPlayerIds.contains(player.getPlayerId()) && validatePositionConstraints(player, teamPlayers)) { if (player.getPlayerTeamNumber() == 1 && team1Count >= team1Limit) continue; if (player.getPlayerTeamNumber() == 2 && team2Count >= team2Limit) continue;
teamPlayers.add(player); teamPlayerIds.add(player.getPlayerId()); if (player.getPlayerTeamNumber() == 1) team1Count++; if (player.getPlayerTeamNumber() == 2) team2Count++; } }
if (validateTeam(teamPlayers, maxPlayersFromOneTeam)) { List playerIds = new ArrayList(); for (Player p : teamPlayers) { playerIds.add(p.getPlayerId()); } Collections.sort(playerIds); String teamSignature = playerIds + "-" + captain.getPlayerId() + "-" + viceCaptain.getPlayerId();
// Check uniqueness if (!generatedTeamSignatures.contains(teamSignature)) { Team team = new Team(); team.players = new ArrayList(teamPlayers); team.captainId = captain.getPlayerId(); team.viceCaptainId = viceCaptain.getPlayerId(); generatedTeams.add(team); generatedTeamSignatures.add(teamSignature); // Track this team } } }
Существует ли проект, аналогичный Ломбоку, который может изменить прямой доступ к полям для использования геттеров и сеттеров с помощью автоматического генератора Java Bytecode? Lombok уже делает это для всех видов удобств, таких как @Data , он...
I am using dompdf to create a pdf file out of an html file that gets created on-the-fly for the sole purpose of it serving as input for the pdf generator, however I am having trouble doing this, I implemented the code in this thread and everything...
Я пытаюсь сгенерировать номер счета в следующей последовательности в php L5-0124-0001 (где L5 — название компании, 01 — месяц, а 24 — год, где последние четыре цифры — серийный номер). Я использовал этот код с октября 2023 года, все работало...