Filip_Markoski

[ADS] Translator

Nov 22nd, 2017
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.34 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.Scanner;
  5.  
  6. class MapEntry<K extends Comparable<K>, E> implements Comparable<K> {
  7.  
  8.     K key;
  9.     E value;
  10.  
  11.     public MapEntry(K key, E val) {
  12.         this.key = key;
  13.         this.value = val;
  14.     }
  15.  
  16.     public int compareTo(K that) {
  17.         @SuppressWarnings("unchecked")
  18.         MapEntry<K, E> other = (MapEntry<K, E>) that;
  19.         return this.key.compareTo(other.key);
  20.     }
  21.  
  22.     public String toString() {
  23.         return "(" + key + "," + value + ")";
  24.     }
  25. }
  26.  
  27.  
  28. class OBHT<K extends Comparable<K>, E> {
  29.  
  30.     private MapEntry<K, E>[] buckets;
  31.     static final int NONE = -1; // ... distinct from any bucket index.
  32.     @SuppressWarnings({"rawtypes", "unchecked"})
  33.     private static final MapEntry former = new MapEntry(null, null);
  34.     private int occupancy = 0;
  35.  
  36.     @SuppressWarnings("unchecked")
  37.     public OBHT(int m) {
  38.         buckets = (MapEntry<K, E>[]) new MapEntry[m];
  39.     }
  40.  
  41.     private int hash(K key) {
  42.         return Math.abs(key.hashCode()) % buckets.length;
  43.     }
  44.  
  45.     public MapEntry<K, E> getBucket(int i) {
  46.         return buckets[i];
  47.     }
  48.  
  49.     public int search(K targetKey) {
  50.         int b = hash(targetKey);
  51.         int n_search = 0;
  52.  
  53.         for (; ;) {
  54.             MapEntry<K, E> oldEntry = buckets[b];
  55.  
  56.             if (oldEntry == null)
  57.                 return NONE;
  58.             else if (targetKey.equals(oldEntry.key))
  59.                 return b;
  60.             else {
  61.                 b = (b + 1) % buckets.length;
  62.                 n_search++;
  63.                 if (n_search == buckets.length)
  64.                     return NONE;
  65.             }
  66.         }
  67.     }
  68.  
  69.     public void insert(K key, E val) {
  70.         MapEntry<K, E> newEntry = new MapEntry<K, E>(key, val);
  71.         int b = hash(key);
  72.         int n_search = 0;
  73.  
  74.         for (; ; ) {
  75.             MapEntry<K, E> oldEntry = buckets[b];
  76.             if (oldEntry == null) {
  77.                 /*if (++occupancy == buckets.length) {
  78.  
  79.                     System.out.println("Hash tabelata e polna!!!");
  80.                 }
  81.                 System.out.println(String.format("Occ: %d & Len: %d", occupancy, buckets.length));*/
  82.                 buckets[b] = newEntry;
  83.                 return;
  84.             } else if (oldEntry == former || key.equals(oldEntry.key)) {
  85.                 buckets[b] = newEntry;
  86.                 return;
  87.             } else {
  88.                 b = (b + 1) % buckets.length;
  89.                 n_search++;
  90.                 if (n_search == buckets.length)
  91.                     return;
  92.  
  93.             }
  94.         }
  95.     }
  96.  
  97.     @SuppressWarnings("unchecked")
  98.     public void delete(K key) {
  99.         int b = hash(key);
  100.         int n_search = 0;
  101.         for (; ; ) {
  102.             MapEntry<K, E> oldEntry = buckets[b];
  103.  
  104.             if (oldEntry == null)
  105.                 return;
  106.             else if (key.equals(oldEntry.key)) {
  107.                 buckets[b] = former;
  108.                 return;
  109.             } else {
  110.                 b = (b + 1) % buckets.length;
  111.                 n_search++;
  112.                 if (n_search == buckets.length)
  113.                     return;
  114.  
  115.             }
  116.         }
  117.     }
  118.  
  119.     public String toString() {
  120.         String temp = "";
  121.         for (int i = 0; i < buckets.length; i++) {
  122.             temp += i + ":";
  123.             if (buckets[i] == null)
  124.                 temp += "\n";
  125.             else if (buckets[i] == former)
  126.                 temp += "former\n";
  127.             else
  128.                 temp += buckets[i] + "\n";
  129.         }
  130.         return temp;
  131.     }
  132. }
  133.  
  134.  
  135. class Zbor implements Comparable<Zbor> {
  136.     String zbor;
  137.  
  138.     public Zbor(String zbor) {
  139.         this.zbor = zbor;
  140.     }
  141.  
  142.     @Override
  143.     public boolean equals(Object o) {
  144.         if (this == o) return true;
  145.         if (o == null || getClass() != o.getClass()) return false;
  146.  
  147.         Zbor zbor1 = (Zbor) o;
  148.  
  149.         return zbor != null ? zbor.equals(zbor1.zbor) : zbor1.zbor == null;
  150.     }
  151.  
  152.     @Override
  153.     public int hashCode() {
  154.         return zbor.hashCode();
  155.     }
  156.  
  157.     @Override
  158.     public String toString() {
  159.         return zbor;
  160.     }
  161.  
  162.     @Override
  163.     public int compareTo(Zbor arg0) {
  164.         return zbor.compareTo(arg0.zbor);
  165.     }
  166. }
  167.  
  168. public class Preveduvac {
  169.     public static void main(String[] args) throws IOException {
  170.         Scanner scanner = new Scanner(System.in);
  171.  
  172.         int numberOfEntries = scanner.nextInt();
  173.         scanner.nextLine();
  174.  
  175.         OBHT<Zbor, String> table = new OBHT<Zbor, String>(numberOfEntries);
  176.  
  177.         for (int i = 0; i < numberOfEntries; i++) {
  178.             String macedonianWord = scanner.next();
  179.             String englishWord = scanner.next();
  180.             scanner.nextLine();
  181.             table.insert(new Zbor(englishWord), macedonianWord);
  182.         }
  183.  
  184.         while (scanner.hasNextLine()) {
  185.             String toTranslate = scanner.nextLine();
  186.             if (toTranslate.equals("KRAJ")) {
  187.                 break;
  188.             }
  189.  
  190.  
  191.             int searchIndex = table.search(new Zbor(toTranslate));
  192.             if (searchIndex != -1) {
  193.                 MapEntry<Zbor, String> searchBucket = table.getBucket(searchIndex);
  194.                 System.out.println(searchBucket.value);
  195.             } else {
  196.                 System.out.println("/");
  197.             }
  198.  
  199.         }
  200.     }
  201. }
Advertisement
Add Comment
Please, Sign In to add comment