Skip to content

Instantly share code, notes, and snippets.

@NargiT
Last active February 6, 2018 21:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NargiT/798f5dbcf61da46a5cdea07ea056bcdd to your computer and use it in GitHub Desktop.
Save NargiT/798f5dbcf61da46a5cdea07ea056bcdd to your computer and use it in GitHub Desktop.
Skillvalue - foot
package fr.nargit.foot;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class Main {
private static class Team implements Comparable {
private String name;
private Integer[] kpi;
private Double avg;
public Team(String name, Integer... kpi) {
this.name = name;
this.kpi = kpi;
this.avg = Arrays.stream(this.kpi).mapToDouble(Integer::byteValue).average().getAsDouble();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer[] getKpi() {
return kpi;
}
public void setKpi(Integer[] kpi) {
this.kpi = kpi;
}
public Double avg() {
return avg;
}
@Override
public int compareTo(Object o) {
return new CompareTeam().compare(this, (Team) o);
}
}
public static class CompareTeam implements Comparator<Team> {
@Override
public int compare(Team o1, Team o2) {
if (o1.avg() > o2.avg()) {
return 1;
} else if (o1.avg() < o2.avg()) {
return -1;
} else {
final int first = o1.kpi[0].compareTo(o2.kpi[0]);
if (first == 0) {
final int second = o1.kpi[1].compareTo(o2.kpi[1]);
if (second == 0) {
final int third = o1.kpi[2].compareTo(o2.kpi[2]);
if (third == 0) {
final List<String> list = Arrays.asList(o1.getName(), o2.getName());
Collections.sort(list);
return list.get(0).equals(o1.getName()) ? 1 : -1;
} else {
return third;
}
} else {
return second;
}
} else {
return first;
}
}
}
}
public static void main(String[] args) {
List<Team> teams = new LinkedList<>();
try (Scanner scanner = new Scanner(new FileReader(args[0]))) {
while (scanner.hasNextLine()) {
String name = "";
while (!scanner.hasNextInt()) {
name += scanner.next();
}
int kpi1 = scanner.nextInt();
int kpi2 = scanner.nextInt();
int kpi3 = scanner.nextInt();
teams.add(new Team(name, kpi1, kpi2, kpi3));
}
final Stack<Team> stack = new Stack<>();
getResults(teams, stack);
/* YOUR CODE HERE */
final int size = stack.size();
for (int i = 0; i < size; i++) {
final Team pop = stack.pop();
System.out.println(pop.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void getResults(List<Team> winners, Stack<Team> stack) {
if (winners.size() == 1) {
stack.push(winners.get(0));
return;
}
List<Team> list = new ArrayList<>();
List<Team> currentWinners = new ArrayList<>();
for (int i = 0; i < winners.size(); i += 2) {
Team winner = getWinner(winners.get(i), winners.get(i + 1));
Team looser = getLooser(winners.get(i), winners.get(i + 1));
list.add(looser);
currentWinners.add(winner);
}
list.sort(new CompareTeam());
list.forEach(stack::push);
getResults(currentWinners, stack);
}
public static Team getWinner(Team team1, Team team2) {
final int result = team1.compareTo(team2);
if (result > 0) {
return team1;
} else {
return team2;
}
}
public static Team getLooser(Team team1, Team team2) {
final int result = team1.compareTo(team2);
if (result < 0) {
return team1;
} else {
return team2;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment