Advertisement
osipyonok

Untitled

Nov 24th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //lab 1 v 9
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.IOException;
  7. import java.util.Scanner;
  8. import java.util.*;
  9.  
  10. class UniqueChars{//хуйня в которой храним слова
  11.     public int cnt;//кол-во уникальных букв
  12.     public String s;//само слово
  13.    
  14.     public UniqueChars(int _c , String _s){//тупа конструктор
  15.         cnt = _c;
  16.         s = _s;
  17.     }
  18. }
  19.  
  20. public class Lab1 {
  21.     public static void main(String[] args) {   
  22.         try{
  23.             Set<UniqueChars> list = new TreeSet<UniqueChars>(new Comparator<UniqueChars>() {//множество в котором мы храним слова
  24.                 public int compare(UniqueChars o1, UniqueChars o2) {//свой компаратор для множества. нужен для того чтоб каждое слово встречалось не более 1 раза
  25.                     return o1.s.compareTo(o2.s);
  26.                 }
  27.             });
  28.             BufferedReader bufferedReader = new BufferedReader(new FileReader("input.in"));//открываем текстовый файлик input.in
  29.             int cur = bufferedReader.read();//считываем первый символ
  30.             String s = "";
  31.             while (cur != -1) {//пока мы не дошли до конца файла (это дерьмо bufferedReader вернет -1 в конце файла)
  32.                 char ch = (char)cur;//переводим текущий символ с int в char
  33.                 if(IsSeparator(ch)){//если текущий символ это не английская бука
  34.                     if(s.length() > 0){//и слово не пустое (на случай нескольких пробелов подряд)
  35.                         int cnt = Count(s);//находим количество уникальных букв
  36.                         if(list.size() > 0){//если до этого мы уже находили какие-то слова
  37.                             if(list.iterator().next().cnt <= cnt){//и у них количество уникальный букв <= количеству их у текущего слова
  38.                                 if(list.iterator().next().cnt < cnt){//если строго меньше, то удаляем найденные до этого слова
  39.                                     list.clear();
  40.                                 }
  41.                                 list.add(new UniqueChars(cnt , s));//то заносим это слово в список
  42.                             }
  43.                         }else{
  44.                             list.add(new UniqueChars(cnt , s));//иначе просто заносим его так как наш список пуст
  45.                         }
  46.                         s = "";//и обнуляем текущее слово
  47.                     }
  48.                 }else{
  49.                     s += ch;//если текущий символ - буква, просто дописываем ее в конец текущего слова
  50.                 }
  51.                 cur = bufferedReader.read();// читаем следующий символ с файла
  52.             }
  53.             int cnt = Count(s);
  54.             if(s.length() > 0){
  55.                 if(list.size() > 0){
  56.                     if(list.iterator().next().cnt <= cnt){
  57.                         if(list.iterator().next().cnt < cnt){
  58.                             list.clear();
  59.                         }
  60.                         list.add(new UniqueChars(cnt , s));
  61.                     }
  62.                 }else{
  63.                     list.add(new UniqueChars(cnt , s));
  64.                 }
  65.             }
  66. //херня аналогичная описанной выше, на случай если файл заканчивался не пробелом или другим разделителем, а буквой
  67.             if(list.size() == 0){//если список пуст
  68.                 System.out.println("There is no words in the file");
  69.             }else{
  70.                 for(UniqueChars uc : list){//иначе выводим слова со списка
  71.                     System.out.println(uc.s);
  72.                 }
  73.             }
  74.         }catch(FileNotFoundException e){//на случай если файла input.in нету
  75.             System.out.print("File not found");
  76.         }catch (IOException e) {//на случай хуй пойми чего, без этого не хотело работать
  77.             e.printStackTrace();
  78.         }
  79.     }
  80.    
  81.     public static int Count(String s){//cчитаем уникальные буква
  82.         int cnt = 0;//в начале их 0
  83.         boolean[] used = new boolean['z' + 1];//used[буква] = true , если в слове уже встречалась эта буква, в начале все false
  84.         for(int i = 0 ; i < s.length() ; ++i){//проходим по слову
  85.             if(used[s.charAt(i)] == false){//если раньше не встретили эту букву
  86.                 used[s.charAt(i)] =  true;//то отмечаем ее
  87.                 ++cnt;//и увеличиваем счетчик
  88.             }
  89.         }
  90.         return cnt;
  91.     }
  92.    
  93.     public static boolean IsSeparator(char ch){//true если ch - разделитель, иначе, если буква - то false
  94.         if('a' <= ch && 'z' >= ch)return false;
  95.         if('A' <= ch && 'Z' >= ch)return false;    
  96.         return true;
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement