Advertisement
jovanovski

The A-Team: Поништување на топчиња

Oct 7th, 2014
634
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.95 KB | None | 0 0
  1. import java.util.NoSuchElementException;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.util.LinkedList;
  6. import java.util.List;
  7.  
  8. interface Queue<E> {
  9.  
  10.     // Elementi na redicata se objekti od proizvolen tip.
  11.  
  12.     // Metodi za pristap:
  13.  
  14.     public boolean isEmpty ();
  15.         // Vrakja true ako i samo ako redicata e prazena.
  16.  
  17.     public int size ();
  18.         // Ja vrakja dolzinata na redicata.
  19.  
  20.     public E peek ();
  21.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  22.  
  23.     // Metodi za transformacija:
  24.  
  25.     public void clear ();
  26.         // Ja prazni redicata.
  27.  
  28.     public void enqueue (E x);
  29.         // Go dodava x na kraj od redicata.
  30.  
  31.     public E dequeue ();
  32.         // Go otstranuva i vrakja pochetniot element na redicata.
  33.  
  34. };
  35.  
  36. interface Stack<E> {
  37.  
  38.     // Elementi na stekot se objekti od proizvolen tip.
  39.  
  40.     // Metodi za pristap:
  41.  
  42.     public boolean isEmpty ();
  43.         // Vrakja true ako i samo ako stekot e prazen.
  44.  
  45.     public E peek ();
  46.         // Go vrakja elementot na vrvot od stekot.
  47.  
  48.     // Metodi za transformacija:
  49.  
  50.     public void clear ();
  51.         // Go prazni stekot.
  52.  
  53.     public void push (E x);
  54.         // Go dodava x na vrvot na stekot.
  55.  
  56.     public E pop ();
  57.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  58. };
  59.  
  60. class ArrayQueue<E> implements Queue<E> {
  61.  
  62.     // Redicata e pretstavena na sledniot nacin:
  63.     // length go sodrzi brojot na elementi.
  64.     // Ako length > 0, togash elementite na redicata se zachuvani vo elems[front...rear-1]
  65.     // Ako rear > front, togash vo  elems[front...maxlength-1] i elems[0...rear-1]
  66.     E[] elems;
  67.     int length, front, rear;
  68.  
  69.     @SuppressWarnings("unchecked")
  70.     public ArrayQueue (int maxlength) {
  71.         elems = (E[]) new Object[maxlength];
  72.         clear();
  73.     }
  74.  
  75.     public boolean isEmpty () {
  76.         // Vrakja true ako i samo ako redicata e prazena.
  77.         return (length == 0);
  78.     }
  79.  
  80.     public int size () {
  81.         // Ja vrakja dolzinata na redicata.
  82.         return length;
  83.     }
  84.  
  85.     public E peek () {
  86.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  87.         if (length > 0)
  88.             return elems[front];
  89.         else
  90.             throw new NoSuchElementException();
  91.     }
  92.  
  93.     public void clear () {
  94.         // Ja prazni redicata.
  95.         length = 0;
  96.         front = rear = 0;  // arbitrary
  97.     }
  98.  
  99.     public void enqueue (E x) {
  100.         // Go dodava x na kraj od redicata.
  101.         elems[rear++] = x;
  102.         if (rear == elems.length)  rear = 0;
  103.         length++;
  104.     }
  105.  
  106.     public E dequeue () {
  107.         // Go otstranuva i vrakja pochetniot element na redicata.
  108.         if (length > 0) {
  109.             E frontmost = elems[front];
  110.             elems[front++] = null;
  111.             if (front == elems.length)  front = 0;
  112.             length--;
  113.             return frontmost;
  114.         } else
  115.             throw new NoSuchElementException();
  116.     }
  117. };
  118.  
  119. class ArrayStack<E> implements Stack<E> {
  120.  
  121.     // Stekot e pretstaven na sledniot nacin:
  122.     //depth e dlabochinata na stekot, a
  123.     // elems[0...depth-1] se negovite elementi.
  124.     private E[] elems;
  125.     private int depth;
  126.  
  127.     @SuppressWarnings("unchecked")
  128.     public ArrayStack (int maxDepth) {
  129.         // Konstrukcija na nov, prazen stek.
  130.         elems = (E[]) new Object[maxDepth];
  131.         depth = 0;
  132.     }
  133.  
  134.  
  135.     public boolean isEmpty () {
  136.         // Vrakja true ako i samo ako stekot e prazen.
  137.         return (depth == 0);
  138.     }
  139.  
  140.  
  141.     public E peek () {
  142.         // Go vrakja elementot na vrvot od stekot.
  143.         if (depth == 0)
  144.             throw new NoSuchElementException();
  145.         return elems[depth-1];
  146.     }
  147.  
  148.  
  149.     public void clear () {
  150.         // Go prazni stekot.
  151.         for (int i = 0; i < depth; i++)  elems[i] = null;
  152.         depth = 0;
  153.     }
  154.  
  155.  
  156.     public void push (E x) {
  157.         // Go dodava x na vrvot na stekot.
  158.         elems[depth++] = x;
  159.     }
  160.  
  161.  
  162.     public E pop () {
  163.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  164.         if (depth == 0)
  165.             throw new NoSuchElementException();
  166.         E topmost = elems[--depth];
  167.         elems[depth] = null;
  168.         return topmost;
  169.     }
  170. };
  171.  
  172. /*
  173.  
  174. Поништување топчиња Задача 1
  175. Да се напише алгоритам со кој ќе се имплементира играта “Поништување топчиња”. Во оваа игра на располагање
  176. имате топчиња во три различни бои (R-црвена, G-зелена и B-сина), обележани со знакот + или -.
  177. Поништување на топчиња може да настане само доколку тие се од иста боја и со спротивен знак.
  178. На почеток се генерира една случајна листа со топчиња. Ваша задача е од тој влез, како доаѓаат
  179. топчињата да направите поништување и да кажете колку, од каков тип (+ или -) и од која боја
  180. фалат за да се поништат сите топчиња од влезот.
  181.  
  182. Влез: Листа од случајни топчиња и тоа во облик: боја, знак
  183.  
  184. Име на класата (Java): Topcinja
  185.  
  186. Делумно решение: Задачата се смета за делумно решена доколку се поминати 5 тест примери.
  187. Забелешка: При реализација на задачите МОРА да се користат дадените структури,
  188. а не да се користат помошни структури како низи или сл.
  189.  
  190. Пример влез: R+ G- G+ G+ R+ B- B+ R- G+ R- B- B+ B+ R+
  191. Парови кои може да се формираат од овој список се: (R+,R-); (B+, B-); (B- B+); (R+, R-); (G-, G+); (R+, R-)
  192. Остануваат без партнер: G+, G+, B+, R+
  193. Излез:
  194.  
  195. 4
  196. R- G- G- B-
  197.  
  198. */
  199.  
  200.  
  201. public class Topcinja {    
  202.  
  203.     public static void main (String[] args) throws IOException {
  204.        
  205.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
  206.         String vlez[] = new String[100];
  207.         vlez = br.readLine().split(" ");
  208.  
  209.         ArrayStack<String> rStack = new ArrayStack<>(100);
  210.         ArrayStack<String> gStack = new ArrayStack<>(100);
  211.         ArrayStack<String> bStack = new ArrayStack<>(100);
  212.        
  213.        
  214.         for(int i=0;i<vlez.length;i++){
  215.             String segasenVlez = vlez[i];
  216.            
  217.             if(segasenVlez.equals("R+")){
  218.                 if(rStack.isEmpty()){
  219.                     rStack.push(segasenVlez);
  220.                 }
  221.                 else{
  222.                     String gorenElement = rStack.peek();
  223.                     if(gorenElement.equals("R-")){
  224.                         rStack.pop();
  225.                     }
  226.                     else{
  227.                         rStack.push(segasenVlez);
  228.                     }
  229.                 }
  230.             }
  231.             else if(segasenVlez.equals("R-")){
  232.                 if(rStack.isEmpty()){
  233.                     rStack.push(segasenVlez);
  234.                 }
  235.                 else{
  236.                     String gorenElement = rStack.peek();
  237.                     if(gorenElement.equals("R+")){
  238.                         rStack.pop();
  239.                     }
  240.                     else{
  241.                         rStack.push(segasenVlez);
  242.                     }
  243.                 }
  244.             }
  245.             else if(segasenVlez.equals("G+")){
  246.                 if(gStack.isEmpty()){
  247.                     gStack.push(segasenVlez);
  248.                 }
  249.                 else{
  250.                     String gorenElement = gStack.peek();
  251.                     if(gorenElement.equals("G-")){
  252.                         gStack.pop();
  253.  
  254.                     }
  255.                     else{
  256.                         gStack.push(segasenVlez);
  257.                     }
  258.                 }
  259.             }
  260.             else if(segasenVlez.equals("G-")){
  261.                 if(gStack.isEmpty()){
  262.                     gStack.push(segasenVlez);
  263.                 }
  264.                 else{
  265.                     String gorenElement = gStack.peek();
  266.                     if(gorenElement.equals("G+")){
  267.                         gStack.pop();
  268.                     }
  269.                     else{
  270.                         gStack.push(segasenVlez);
  271.                     }
  272.                 }
  273.             }
  274.             else if(segasenVlez.equals("B+")){
  275.                 if(bStack.isEmpty()){
  276.                     bStack.push(segasenVlez);
  277.                 }
  278.                 else{
  279.                     String gorenElement = bStack.peek();
  280.                     if(gorenElement.equals("B-")){
  281.                         bStack.pop();
  282.                     }
  283.                     else{
  284.                         bStack.push(segasenVlez);
  285.                     }
  286.                 }
  287.             }
  288.             else if(segasenVlez.equals("B-")){
  289.                 if(bStack.isEmpty()){
  290.                     bStack.push(segasenVlez);
  291.                 }
  292.                 else{
  293.                     String gorenElement = bStack.peek();
  294.                     if(gorenElement.equals("B+")){
  295.                         bStack.pop();
  296.                     }
  297.                     else{
  298.                         bStack.push(segasenVlez);
  299.                     }
  300.                 }
  301.             }
  302.         }
  303.        
  304.  
  305.        
  306.         if(!rStack.isEmpty()){
  307.             while(!rStack.isEmpty()){
  308.                 String gorenElement = rStack.pop();
  309.                 if(gorenElement.equals("R+")){
  310.                     System.out.print("R- ");
  311.                 }
  312.                 else{
  313.                     System.out.print("R+ ");
  314.                 }
  315.             }
  316.         }
  317.        
  318.         if(!gStack.isEmpty()){
  319.             while(!gStack.isEmpty()){
  320.                 String gorenElement = gStack.pop();
  321.                 if(gorenElement.equals("G+")){
  322.                     System.out.print("G- ");
  323.                 }
  324.                 else{
  325.                     System.out.print("G+ ");
  326.                 }
  327.             }
  328.         }
  329.        
  330.         if(!bStack.isEmpty()){
  331.             while(!bStack.isEmpty()){
  332.                 String gorenElement = bStack.pop();
  333.                 if(gorenElement.equals("B+")){
  334.                     System.out.print("B- ");
  335.                 }
  336.                 else{
  337.                     System.out.print("B+ ");
  338.                 }
  339.             }
  340.         }
  341.        
  342.     }
  343. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement