diff options
Diffstat (limited to '')
-rw-r--r-- | šola/p1/dn/DN10_63230317.java | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/šola/p1/dn/DN10_63230317.java b/šola/p1/dn/DN10_63230317.java new file mode 100644 index 0000000..25dc70f --- /dev/null +++ b/šola/p1/dn/DN10_63230317.java @@ -0,0 +1,141 @@ +import java.util.*; +import java.util.stream.*; +public class DN10_63230317 { + static class Trit implements Comparable<Trit> { + int vrednost; + public Trit (String s) { + vrednost = 3; + if (s.equals("da")) + vrednost = 0; + if (s.equals("ne")) + vrednost = 1; + if (s.equals("morda")) + vrednost = 2; + } + @Override + public String toString () { + String s[] = new String[]{"da", "ne", "morda", "nedefinirano"}; + return s[vrednost]; + } + @Override + public int compareTo (Trit o) { + return Integer.compare(vrednost, o.vrednost); + } + } + static class Vrednost implements Comparable<Vrednost> { + int tip; + String niz; + Trit trit; + int št; + public Vrednost (String s) { + tip = 2; + niz = s; + } + public Vrednost (Trit t) { + tip = 3; + trit = t; + } + public Vrednost (int š) { + tip = 1; + št = š; + } + @Override + public String toString () { + switch (tip) { + case 1: + return Integer.valueOf(št).toString(); + case 2: + return niz; + case 3: + return trit.toString(); + } + return null; + } + @Override + public int compareTo (Vrednost o) { + if (tip != o.tip) + return Integer.compare(tip, o.tip); + switch (tip) { + case 1: + return Integer.compare(št, o.št); + case 2: + return niz.compareTo(o.niz); + case 3: + return trit.compareTo(o.trit); + } + throw new RuntimeException("unreachable"); + } + } + static class Vrstica { + Vrednost stolpci[]; + public Vrstica (Vrednost[] s) { + stolpci = s; + } + public Vrstica (int tipi[], String s) { + stolpci = new Vrednost[tipi.length]; + int i = 0; + if (s.split(" ").length != tipi.length) + throw new RuntimeException("nepravilno število stolpcev. niz je " + s + ", tipov je " + tipi.length); + for (String a : s.split(" ")) { + switch (tipi[i]) { + case 1: + stolpci[i++] = new Vrednost(Integer.parseInt(a)); + continue; + case 2: + stolpci[i++] = new Vrednost(a); + continue; + case 3: + stolpci[i++] = new Vrednost(new Trit(a)); + continue; + } + throw new RuntimeException("nepoznan tip"); + } + } + static class Primerjalnik implements Comparator<Vrstica> { + int kriteriji[]; + public Primerjalnik (int[] k) { + kriteriji = k; + } + @Override + public int compare (Vrstica a, Vrstica b) { + for (int i = 0; i < kriteriji.length; i++) { + int r = a.stolpci[(int) Math.abs(kriteriji[i])-1].compareTo(b.stolpci[(int) Math.abs(kriteriji[i])-1]); + if (r == 0) + continue; + return (int) Math.signum(kriteriji[i])*r; + } + return 0; + } + } + public static Comparator<Vrstica> primerjalnik (int[] kriteriji) { + return new Primerjalnik(kriteriji); + } + @Override + public String toString () { + return String.join("|", Arrays.asList(stolpci).stream().map(s -> s.toString()).collect(Collectors.toList())); + } + } + public static void main (String[] args) { + Scanner sc = new Scanner(System.in); + int m = sc.nextInt(); + int n = sc.nextInt(); + int tipi[] = new int[n]; + for (int i = 0; i < n; i++) + tipi[i] = sc.nextInt(); + int k = sc.nextInt(); + int kriteriji[] = new int[k]; + for (int i = 0; i < k; i++) + kriteriji[i] = sc.nextInt(); + sc.nextLine(); // preskočimo do konca te vrstice s številkami + ArrayList<Vrstica> vrstice = new ArrayList<>(); + for (int i = 0; i < m; i++) { + String besedilo = sc.nextLine(); + if (besedilo.equals("")) + throw new RuntimeException("prazna vrstica na indeksu " + i + " od skupno " + m); + vrstice.add(new Vrstica(tipi, besedilo)); + } + Collections.sort(vrstice, Vrstica.primerjalnik(kriteriji)); + for (Vrstica vrstica : vrstice) + System.out.println(vrstica.toString()); + } +} |