Advertisement
mvCode

Speluvanje AIPS

Jan 18th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.18 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4.  
  5.  
  6. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  7. K key;
  8. E value;
  9.  
  10. public MapEntry (K key, E val) {
  11. this.key = key;
  12. this.value = val;
  13. }
  14. public int compareTo (K that) {
  15. @SuppressWarnings("unchecked")
  16. MapEntry<K,E> other = (MapEntry<K,E>) that;
  17. return this.key.compareTo(other.key);
  18. }
  19. public String toString () {
  20. return "(" + key + "," + value + ")";
  21. }
  22. }
  23.  
  24.  
  25. class OBHT<K extends Comparable<K>,E> {
  26.  
  27. private MapEntry<K,E>[] buckets;
  28. static final int NONE = -1; // ... distinct from any bucket index.
  29. @SuppressWarnings({ "rawtypes", "unchecked" })
  30. private static final MapEntry former = new MapEntry(null, null);
  31. private int occupancy = 0;
  32.  
  33. @SuppressWarnings("unchecked")
  34. public OBHT (int m) {
  35. buckets = (MapEntry<K,E>[]) new MapEntry[m];
  36. }
  37.  
  38. private int hash (K key) {
  39. return Math.abs(key.hashCode()) % buckets.length;
  40. }
  41.  
  42. public MapEntry<K,E> getBucket(int i){
  43. return buckets[i];
  44. }
  45.  
  46. public int search (K targetKey) {
  47. int b = hash(targetKey); int n_search=0;
  48. for (;;) {
  49. MapEntry<K,E> oldEntry = buckets[b];
  50. if (oldEntry == null)
  51. return NONE;
  52. else if (targetKey.equals(oldEntry.key))
  53. return b;
  54. else{
  55. b = (b + 1) % buckets.length;
  56. n_search++;
  57. if(n_search==buckets.length)
  58. return NONE;
  59. }
  60. }
  61. }
  62.  
  63. public void insert (K key, E val) {
  64. MapEntry<K,E> newEntry = new MapEntry<K,E>(key, val);
  65. int b = hash(key); int n_search=0;
  66.  
  67. for (;;) {
  68. MapEntry<K,E> oldEntry = buckets[b];
  69. if (oldEntry == null) {
  70. if (++occupancy == buckets.length) {
  71. System.out.println("Hash tabelata e polna!!!");
  72. }
  73. buckets[b] = newEntry;
  74. return;
  75. } else if (oldEntry == former
  76. || key.equals(oldEntry.key)) {
  77. buckets[b] = newEntry;
  78. return;
  79. } else{
  80. b = (b + 1) % buckets.length;
  81. n_search++;
  82. if(n_search==buckets.length)
  83. return;
  84.  
  85. }
  86. }
  87. }
  88.  
  89. @SuppressWarnings("unchecked")
  90. public void delete (K key) {
  91. int b = hash(key); int n_search=0;
  92. for (;;) {
  93. MapEntry<K,E> oldEntry = buckets[b];
  94.  
  95. if (oldEntry == null)
  96. return;
  97. else if (key.equals(oldEntry.key)) {
  98. buckets[b] = former;
  99. return;
  100. } else{
  101. b = (b + 1) % buckets.length;
  102. n_search++;
  103. if(n_search==buckets.length)
  104. return;
  105.  
  106. }
  107. }
  108. }
  109.  
  110. public String toString () {
  111. String temp = "";
  112. for (int i = 0; i < buckets.length; i++) {
  113. temp += i + ":";
  114. if (buckets[i] == null)
  115. temp += "\n";
  116. else if (buckets[i] == former)
  117. temp += "former\n";
  118. else
  119. temp += buckets[i] + "\n";
  120. }
  121. return temp;
  122. }
  123. }
  124.  
  125. class Zbor implements Comparable<Zbor>{
  126. String zbor;
  127.  
  128. public Zbor(String zbor) {
  129. this.zbor = zbor;
  130. }
  131. @Override
  132. public boolean equals(Object obj) {
  133. Zbor pom = (Zbor) obj;
  134. return this.zbor.equals(pom.zbor);
  135. }
  136. @Override
  137. public int hashCode() {
  138. // Vie ja kreirate hesh funkcijata
  139.  
  140. char bukvi[] = zbor.toCharArray();
  141. int n = 0;
  142.  
  143. for( int i = 0; i < bukvi.length; i++ ){
  144.  
  145. n += bukvi[i];
  146. }
  147. return n * bukvi[ bukvi.length/2 ];
  148. }
  149. @Override
  150. public String toString() {
  151. return zbor;
  152. }
  153. @Override
  154. public int compareTo(Zbor arg0) {
  155. return zbor.compareTo(arg0.zbor);
  156. }
  157. }
  158.  
  159. public class Speluvanje {
  160. public static void main(String[] args) throws IOException {
  161. OBHT<Zbor, String> tabela;
  162. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  163. int N = Integer.parseInt(br.readLine());
  164. //---Vie odluchete za goleminata na hesh tabelata----
  165. tabela = new OBHT<Zbor,String>( 50 * N );
  166.  
  167. //Vashiot kod tuka....
  168.  
  169. for( int i = 0; i < N; i++ ){
  170.  
  171. String newWord = br.readLine();
  172.  
  173. Zbor zb = new Zbor( newWord );
  174. Zbor zbExlPoint = new Zbor( newWord + "!" );
  175. Zbor zbQwMark = new Zbor( newWord + "?" );
  176. Zbor zbBreak = new Zbor( newWord + "." );
  177. Zbor zbComma = new Zbor( newWord + "," );
  178.  
  179.  
  180. tabela.insert( zb, (String)zb.zbor );
  181. tabela.insert( zbExlPoint, (String)zbExlPoint.zbor );
  182. tabela.insert( zbQwMark, (String)zbQwMark.zbor );
  183. tabela.insert( zbBreak, (String)zbBreak.zbor );
  184. tabela.insert( zbComma, (String)zbComma.zbor );
  185.  
  186. }
  187.  
  188. String paragraph = br.readLine();
  189. String zborovi[] = paragraph.split( " " );
  190. boolean hasMistakes = false;
  191.  
  192. for( int i = 0; i < zborovi.length; i++ ){
  193.  
  194. if( zborovi[i].equals( "." ) )
  195. continue;
  196.  
  197. Zbor zb = new Zbor( zborovi[i].toLowerCase() );
  198. int index = tabela.search( zb );
  199.  
  200. if( index == -1 ){
  201. hasMistakes = true;
  202.  
  203. if( zborovi[i].endsWith( "!" ) || zborovi[i].endsWith( "?" ) || zborovi[i].endsWith( "." ) || zborovi[i].endsWith( "," ) ) {
  204. int lastChInd = zborovi[i].length() - 1;
  205. char lastCh = zborovi[i].charAt( lastChInd );
  206. zborovi[i] = zborovi[i].replace( Character.toString(lastCh), "" );
  207. }
  208.  
  209. System.out.println( zborovi[i] );
  210. }
  211. }
  212.  
  213. if( !hasMistakes )
  214. System.out.println( "Bravo" );
  215.  
  216. }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement