// // Konstante, metode in razredi, ki jih uporabljamo pri obeh načinih testiranja. // import java.util.*; import java.io.File; import java.io.FileNotFoundException; public class TestSkupno { // datoteka z besedami public static final String SLOVAR = "slovar.txt"; // največje dovoljeno število poskusov public static final int MAKS_ST_POSKUSOV = 100; // slovenska abeceda public static String ABECEDA = "abcdefghijklmnoprstuvz"; // // Razred za tvorbo lastnih izjem. // public static class WordleIzjema extends RuntimeException { public WordleIzjema(String sporocilo) { super(sporocilo); } } // // Prebere slovar in vrne množico njegovih besed. // public static Set preberiSlovar(String slovar) { Set besede = new TreeSet<>(); try (Scanner sc = new Scanner(new File(slovar))) { while (sc.hasNextLine()) { String beseda = sc.nextLine().strip(); if (beseda.length() > 0) { besede.add(beseda); } } } catch (FileNotFoundException ex) { System.err.printf("Datoteka %s ne obstaja.%n", slovar); } return besede; } // // Vrne odziv za podani par besed // : pravilna beseda // : strojeva izbira // public static List izracunajOdziv(String prava, String izbrana) { int n = prava.length(); // Preverimo , dolžino in sestavo ( lahko vsebuje samo // male črke slovenske abecede). if (izbrana == null) { throw new WordleIzjema("Metoda je vrnila , čeprav odziv ni bil enak ['+', '+', ..., '+']."); } if (n != izbrana.length()) { throw new WordleIzjema(String.format("Metoda je vrnila besedo napačne dolžine (%d).", izbrana.length())); } for (int i = 0; i < n; i++) { char znak = izbrana.charAt(i); if (ABECEDA.indexOf(znak) < 0) { throw new WordleIzjema(String.format("Metoda je vrnila besedo z neveljavnim znakom (%c).", znak)); } } List odziv = new ArrayList<>(); for (int i = 0; i < n; i++) { odziv.add('-'); } List lstPrava = string2lstchar(prava); List lstIzbrana = string2lstchar(izbrana); // Poiščemo pravilne črke na pravilnih mestih. for (int i = 0; i < n; i++) { if (lstPrava.get(i) == lstIzbrana.get(i)) { odziv.set(i, '+'); lstPrava.set(i, '#'); lstIzbrana.set(i, '_'); } } // Poiščemo pravilne črke na napačnih mestih. for (int ixIzbrana = 0; ixIzbrana < n; ixIzbrana++) { char crka = lstIzbrana.get(ixIzbrana); if (crka != '_') { int ixPrava = lstPrava.indexOf(crka); if (ixPrava >= 0) { odziv.set(ixIzbrana, 'o'); lstPrava.set(ixPrava, '#'); lstIzbrana.set(ixIzbrana, '_'); } } } // Na ostalih mestih je odziv enak '-'. return odziv; } // // Vrne seznam znakov podanega niza // (npr. "znanka" -> ['z', 'n', 'a', 'n', 'k', 'a']). // public static List string2lstchar(String niz) { List rezultat = new ArrayList<>(); int n = niz.length(); for (int i = 0; i < n; i++) { rezultat.add(niz.charAt(i)); } return rezultat; } // // Vrne niz, sestavljen iz znakov iz podanega seznama // (npr. ['z', 'n', 'a', 'n', 'k', 'a'] -> "znanka"). // public static String lstchar2string(List seznam) { StringBuilder sb = new StringBuilder(); for (char znak: seznam) { sb.append(znak); } return sb.toString(); } }