-
Notifications
You must be signed in to change notification settings - Fork 17
/
EndYearUniforms.java
155 lines (131 loc) · 5.58 KB
/
EndYearUniforms.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
====================================================
Fundamentos Aritméticos em Java
====================================================
3/5 - Uniformes de final de ano
====================================================
Desafio
O professor Girafales organizou a confecção de um uniforme para as turmas da escola para comemorar o final do ano. Após algumas conversas, ficou decidido com os alunos que eles poderiam escolher a cor do uniforme entre branco ou vermelho. Assim sendo, Girafales precisa de sua ajuda para organizar as listas de quem quer o uniforme em cada uma das turmas, relacionando estas camisetas pela cor, tamanho (P, M ou G) e por último pelo nome.
Entrada
Cada caso de teste inicia com um valor N, (1 ≤ N ≤ 60) inteiro e positivo, que indica a quantidade de uniformes a serem feitas para aquela turma. As próximas N*2 linhas contém informações de cada um dos uniformes (serão duas linhas de informação para cada uniforme). A primeira linha irá conter o nome do estudante e a segunda linha irá conter a cor do uniforme ("branco" ou "vermelho") seguido por um espaço e pelo tamanho do uniforme "P" "M" ou "G". A entrada termina quando o valor de N for igual a zero (0) e esta valor não deverá ser processado.
Saída
Para cada caso de entrada deverão ser impressas as informações ordenadas pela cor em ordem ascendente, seguido pelos tamanhos em ordem descendente e por último por ordem ascendente de nome, conforme o exemplo abaixo.
------------------------------------------------------
| Exemplo de Entrada | Exemplo de Saída |
------------------------------------------------------
| 9 | branco P Cezar Torres Mo |
| Maria Jose | branco P Maria Jose |
| branco P | branco M JuJu Mentina |
| Mangojata Mancuda | branco G Adabi Finho |
| vermelho P | branco G Severina Rigudinha |
| Cezar Torres Mo | vermelho P Amaro Dinha |
| branco P | vermelho P Baka Lhau |
| Baka Lhau | vermelho P Carlos Chade Losna |
| vermelho P | vermelho P Mangojata Mancuda |
| JuJu Mentina | |
| branco M | |
| Amaro Dinha | |
| vermelho P | |
| Adabi Finho | |
| branco G | |
| Severina Rigudinha | |
| branco G | |
| Carlos Chade Losna | |
| vermelho P | |
| 0 | |
------------------------------------------------------
SOLUÇÃO ABAIXO: */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class EndYearUniforms {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(System.out);
public static void main(String[] args) throws IOException {
String owner, l, color, size;
Tshirt[] tshirts;
int N;
while (!(l = read()).equals("0")) {
N = toInt(l);
tshirts = new Tshirt[N];
for (int i = 0; i < N; i++) {
owner = read();
StringTokenizer st = new StringTokenizer(read());
color = st.nextToken();
size = st.nextToken();
tshirts[i] = new Tshirt(size, color, owner);
}
Arrays.sort(tshirts, new Comparator<Tshirt>() {
@Override
public int compare(Tshirt t1, Tshirt t2) {
int colorTshirt = t1.getColor().compareToIgnoreCase(t2.getColor());
int sizeTshirt = compareSizes(t1.getSize(),t2.getSize());
int ownerTshirt = t1.getOwner().compareToIgnoreCase(t2.getOwner());
if (colorTshirt != 0) return colorTshirt;
if (sizeTshirt != 0) return sizeTshirt;
if (ownerTshirt != 0) return ownerTshirt;
return 0;
}
});
for (Tshirt tshirt : tshirts) {
out.println(tshirt);
out.flush();
}
}
in.close();
out.close();
}
private static String read() throws IOException {
return in.readLine();
}
private static int toInt(String s) {
return Integer.parseInt(s);
}
private static int compareSizes(String s1, String s2) {
if((s1.equalsIgnoreCase("P") && !s2.equalsIgnoreCase("P"))
|| (s1.equalsIgnoreCase("M") && s2.equalsIgnoreCase("G"))
)
return -1;
if((s1.equalsIgnoreCase("M") && s2.equalsIgnoreCase("P"))
|| (s1.equalsIgnoreCase("G") && !s2.equalsIgnoreCase("G"))
)
return 1;
return 0;
}
}
final class Tshirt {
private String size;
private String color;
private String owner;
public Tshirt(String size, String color, String owner) {
this.size = size;
this.color = color;
this.owner = owner;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
@Override
public String toString() {
return this.getColor() + " " + this.getSize() + " " + this.getOwner();
}
}