Advertisement
nikolaliltek

NP - Lab 5

Dec 17th, 2017
3,135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.91 KB | None | 0 0
  1. /*Супер-стринг Problem 1
  2. Треба да се напише класа SuperString. Класата во позадина претставува листа на стрингови LinkedList<String> и ги нуди следните методи:
  3.  
  4. SuperString() - креира празен стринг
  5. append(String s) - го додава стрингот на крајот во листата
  6. insert(String s) - го додава стрингот на почеток на листата
  7. contains(String s):boolean - враќа true доколку стрингот s се наоѓа во супер-стрингот. Стрингот s може да е разделен во повеќе подстрингови во листата. Пр: list = [ "st" , "arz" , "andrej" ] , contains("tarzan") –> true
  8. reverse() - го превртува стрингот на следниов начин. Ги превртува сите елементи во листата, а потоа и секој подстринг како елемент посебно го превртува. list = [ "st" , "arz" , "andrej: ]; reverse(); list = [ "jerdna", "zra", "ts"]
  9. toString():String - ги враќа конкатенирани сите елементи во листата list = [ "st" , "arz" , "andrej"]; toString() -> "starzandrej"
  10. removeLast(int k) – ги отстранува последнo додадените k подстрингови*/
  11.  
  12. import java.util.Scanner;
  13. import java.util.LinkedList;
  14. import java.util.List;
  15. import java.util.stream.Collectors;
  16.  
  17. class SuperString {
  18.     private LinkedList<String> lista;
  19.     private LinkedList<String> stringList;
  20.     public void append(String next) {
  21.         lista.add(next);
  22.         stringList.push(next);
  23.     }
  24.  
  25.     public void insert(String next) {
  26.         lista.addFirst(next);
  27.         stringList.push(next);
  28.     }
  29.  
  30.     @Override
  31.     public String toString() {
  32.  
  33.         return lista.toString();
  34.     }
  35.  
  36.     public boolean contains(String next) {
  37.         String cont = lista.toString();
  38.         return cont.contains(next);
  39.     }
  40.  
  41.     public void reverse() {
  42.  
  43.             LinkedList<String> newList = new LinkedList<>();
  44.             lista.forEach(newList::addFirst);
  45.             List<String> reversedList = newList.stream()
  46.                     .map(word -> new StringBuilder(word).reverse().toString())
  47.                     .collect(Collectors.toList());
  48.  
  49.             LinkedList<String> vratiNazad = new LinkedList<String>(){
  50.             public String toString()
  51.             {
  52.                 StringBuilder sb = new StringBuilder();
  53.                 for (String aLista : lista) sb.append(aLista);
  54.                 return sb.toString();
  55.             }
  56.         };
  57.             for(int i=0;i<reversedList.size();i++)
  58.             vratiNazad.addLast(reversedList.get(i));
  59.             lista = vratiNazad;
  60.         LinkedList<String> newHelper = new LinkedList<>();
  61.         stringList.forEach(newHelper::addFirst);
  62.  
  63.         List<String> helperList = newHelper
  64.                 .stream()
  65.                 .map(word -> new StringBuilder(word).reverse().toString())
  66.                 .collect(Collectors.toList());
  67.  
  68.         stringList.clear();
  69.         helperList.forEach(stringList::addFirst);
  70.  
  71.  
  72.     }
  73.  
  74.     public SuperString() {
  75.         lista = new LinkedList<String>(){
  76.             public String toString()
  77.             {
  78.                 StringBuilder sb = new StringBuilder();
  79.                 for (String aLista : lista) sb.append(aLista);
  80.                 return sb.toString();
  81.             }
  82.         };
  83.         stringList = new LinkedList<String>();
  84.     }
  85.  
  86.     public void removeLast(int i) {
  87.         for(int j=0;j<i;j++)
  88.         lista.remove(stringList.pop());
  89.     }
  90. }
  91.  
  92.  
  93. public class SuperStringTest {
  94.    
  95.     public static void main(String[] args) {
  96.         Scanner jin = new Scanner(System.in);
  97.         int k = jin.nextInt();
  98.         if (  k == 0 ) {
  99.             SuperString s = new SuperString();
  100.             while ( true ) {
  101.                 int command = jin.nextInt();
  102.                 if ( command == 0 ) {//append(String s)
  103.                     s.append(jin.next());
  104.                 }
  105.                 if ( command == 1 ) {//insert(String s)
  106.                     s.insert(jin.next());
  107.                 }
  108.                 if ( command == 2 ) {//contains(String s)
  109.                     System.out.println(s.contains(jin.next()));
  110.                 }
  111.                 if ( command == 3 ) {//reverse()
  112.                     s.reverse();
  113.                 }
  114.                 if ( command == 4 ) {//toString()
  115.                     System.out.println(s);
  116.                 }
  117.                 if ( command == 5 ) {//removeLast(int k)
  118.                     s.removeLast(jin.nextInt());
  119.                 }
  120.                 if ( command == 6 ) {//end
  121.                     break;
  122.                 }
  123.             }
  124.         }
  125.     }
  126.  
  127. }
  128.  
  129. /*Листа на цели броеви Problem 2 (1 / 13)
  130. Со користење на ArrayList или LinkedList сакаме да развиеме класа за работа со листи од цели броеви IntegerList. Листата ги има следните вообичаени методи:
  131.  
  132. IntegerList() - конструктор кој креира празна листа.
  133. IntegerList(Integer… numbers) - конструктор коj креира листа што ги содржи елементите numbers во истиот редослед во кој тие се појавуваат во низата.
  134. add(int el, int idx) - го додава елементот на соодветниот индекс. Доколку има други елементи после таа позиција истите се поместуваат на десно за едно место (нивните индекси им се зголемуваат за 1). Доколку idx е поголемо од сегашната големина на листата ја зголемуваме листата и сите нови елементи ги иницијалираме на нула (освен тој на позиција idx кој го поставуваме на el).
  135. remove(int idx):int - го отстранува елементот на дадена позиција од листата и истиот го враќа. Доколку после таа позиција има други елементи истите се поместуваат во лево (нивните индекси се намалуваат за 1).
  136. set(int el, int idx) - го поставува елементот на соодветната позиција.
  137. get(int idx):int - го враќа елементот на соодветната позиција.
  138. size():int - го враќа бројот на елементи во листата.
  139. Освен овие методи IntegerList треба да нуди и неколку методи згодни за работа со цели броеви:
  140.  
  141. count(int el):int - го враќа бројот на појавувања на соодветниот елемент во листата.
  142. removeDuplicates() - врши отстранување на дупликат елементите од листата. Доколку некој елемент се сретнува повеќе пати во листата ја оставаме само последната копија од него. Пр: 1,2,4,3,4,5. -> removeDuplicates() -> 1,2,3,4,5
  143. sumFirst(int k):int - ја дава сумата на првите k елементи.
  144. sumLast(int k):int - ја дава сумата на последните k елементи.
  145. shiftRight(int idx, int k) - го поместува елементот на позиција idx за k места во десно. При поместувањето листата ја третираме како да е кружна. Пр: list = [1,2,3,4]; list.shiftLeft(1,2); list = [1,3,4,2] - (листата е нула индексирана така да индексот 1 всушност се однесува на елементот 2 кој го поместуваме две места во десно) list = [1,2,3,4]; list.shiftLeft(2, 3); list = [1,3,2,4] - елементот 3 го поместуваме 3 места во десно. По две поместувања стигнуваме до крајот на листата и потоа продолжуваме да итерираме од почетокот на листата уште едно место и овде го сместуваме.
  146. shiftLeft(int idx , int k) - аналогно на shiftRight.
  147. addValue(int value):IntegerList - враќа нова листа каде елементите се добиваат од оригиналната листа со додавање на value на секој елемент. Пр: list = [1,4,3]; addValue(5) -> [6,9,8]
  148. Забелешка која важи за сите методи освен add: Ако индексот е негативен или поголем од тековната големина на листата фрламе исклучок ArrayIndexOutOfBoundsException.*/
  149.  
  150. import java.util.ArrayList;
  151. import java.util.Arrays;
  152. import java.util.LinkedList;
  153. import java.util.Scanner;
  154. import java.util.stream.Collectors;
  155.  
  156. class IntegerList{
  157.     private ArrayList<Integer> list;
  158.  
  159.     IntegerList(){
  160.         list = new ArrayList<>();
  161.     }
  162.  
  163.     IntegerList(Integer... numbers){
  164.         list = new ArrayList<>(Arrays.asList(numbers));
  165.     }
  166.  
  167.     void add(int el, int idx){
  168.         if (idx>list.size()){
  169.             int n = idx-list.size();
  170.             for(int i=0;i<n;i++){
  171.                 list.add(0);
  172.             }
  173.             list.add(el);
  174.         }
  175.         else list.add(idx,el);
  176.     }
  177.  
  178.     void remove(int idx){
  179.         validateIndex(idx);
  180.         list.remove(idx);
  181.     }
  182.  
  183.     void set(int el, int idx){
  184.         validateIndex(idx);
  185.         list.set(idx,el);
  186.     }
  187.  
  188.     int get(int idx){
  189.         validateIndex(idx);
  190.         return list.get(idx);
  191.     }
  192.  
  193.     int size(){
  194.         return list.size();
  195.     }
  196.  
  197.     int count(int el){
  198.         return (int) list.stream()
  199.                 .filter(n -> n.equals(el))
  200.                 .count();
  201.     }
  202.  
  203.     void removeDuplicates(){
  204.         for (int i = 0; i < list.size(); i++) {
  205.             //System.out.println(arrayList.toString());
  206.             Integer integer = list.get(i);
  207.             for (int j = 0; j < i; j++) {
  208.                 if (integer.equals(list.get(j))) {
  209.                     list.remove(j);
  210.                     i--;
  211.                     break;
  212.                 }
  213.             }
  214.         }
  215.     }
  216.  
  217.     int sumFirst(int k){
  218.         return list.stream().limit(k).mapToInt(Integer::valueOf).sum();
  219.     }
  220.  
  221.     int sumLast(int k){
  222.         return list.subList(list.size()-k,list.size()).stream().mapToInt(Integer::valueOf).sum();
  223.     }
  224.  
  225.     void shiftRight(int idx, int k){
  226.         validateIndex(idx);
  227.         int shIdx = (idx+k) % list.size();
  228.         Integer num = list.get(idx);
  229.         list.remove(idx);
  230.         list.add(shIdx,num);
  231.     }
  232.  
  233.     void shiftLeft(int idx, int k){
  234.         validateIndex(idx);
  235.         int shIdx = (idx-k) % list.size();
  236.         if(shIdx<0) shIdx+=list.size();
  237.         Integer num = list.get(idx);
  238.         list.remove(idx);
  239.         list.add(shIdx,num);
  240.     }
  241.  
  242.     IntegerList addValue(int value){
  243.         ArrayList<Integer> tmp =list.stream().map(n->n+value).collect(Collectors.toCollection(ArrayList::new));
  244.         return new IntegerList(tmp);
  245.     }
  246.  
  247.     IntegerList(ArrayList<Integer> nums){
  248.         list = nums;
  249.     }
  250.  
  251.     void validateIndex(int idx){
  252.         if(idx<0 || idx>=list.size()) throw new ArrayIndexOutOfBoundsException();
  253.     }
  254. }
  255.  
  256. public class IntegerListTest {
  257.  
  258.     public static void main(String[] args) {
  259.         Scanner jin = new Scanner(System.in);
  260.         int k = jin.nextInt();
  261.         if ( k == 0 ) { //test standard methods
  262.             int subtest = jin.nextInt();
  263.             if ( subtest == 0 ) {
  264.                 IntegerList list = new IntegerList();
  265.                 while ( true ) {
  266.                     int num = jin.nextInt();
  267.                     if ( num == 0 ) {
  268.                         list.add(jin.nextInt(), jin.nextInt());
  269.                     }
  270.                     if ( num == 1 ) {
  271.                         list.remove(jin.nextInt());
  272.                     }
  273.                     if ( num == 2 ) {
  274.                         print(list);
  275.                     }
  276.                     if ( num == 3 ) {
  277.                         break;
  278.                     }
  279.                 }
  280.             }
  281.             if ( subtest == 1 ) {
  282.                 int n = jin.nextInt();
  283.                 Integer a[] = new Integer[n];
  284.                 for ( int i = 0 ; i < n ; ++i ) {
  285.                     a[i] = jin.nextInt();
  286.                 }
  287.                 IntegerList list = new IntegerList(a);
  288.                 print(list);
  289.             }
  290.         }
  291.         if ( k == 1 ) { //test count,remove duplicates, addValue
  292.             int n = jin.nextInt();
  293.             Integer a[] = new Integer[n];
  294.             for ( int i = 0 ; i < n ; ++i ) {
  295.                 a[i] = jin.nextInt();
  296.             }
  297.             IntegerList list = new IntegerList(a);
  298.             while ( true ) {
  299.                 int num = jin.nextInt();
  300.                 if ( num == 0 ) { //count
  301.                     System.out.println(list.count(jin.nextInt()));
  302.                 }
  303.                 if ( num == 1 ) {
  304.                     list.removeDuplicates();
  305.                 }
  306.                 if ( num == 2 ) {
  307.                     print(list.addValue(jin.nextInt()));
  308.                 }
  309.                 if ( num == 3 ) {
  310.                     list.add(jin.nextInt(), jin.nextInt());
  311.                 }
  312.                 if ( num == 4 ) {
  313.                     print(list);
  314.                 }
  315.                 if ( num == 5 ) {
  316.                     break;
  317.                 }
  318.             }
  319.         }
  320.         if ( k == 2 ) { //test shiftRight, shiftLeft, sumFirst , sumLast
  321.             int n = jin.nextInt();
  322.             Integer a[] = new Integer[n];
  323.             for ( int i = 0 ; i < n ; ++i ) {
  324.                 a[i] = jin.nextInt();
  325.             }
  326.             IntegerList list = new IntegerList(a);
  327.             while ( true ) {
  328.                 int num = jin.nextInt();
  329.                 if ( num == 0 ) { //count
  330.                     list.shiftLeft(jin.nextInt(), jin.nextInt());
  331.                 }
  332.                 if ( num == 1 ) {
  333.                     list.shiftRight(jin.nextInt(), jin.nextInt());
  334.                 }
  335.                 if ( num == 2 ) {
  336.                     System.out.println(list.sumFirst(jin.nextInt()));
  337.                 }
  338.                 if ( num == 3 ) {
  339.                     System.out.println(list.sumLast(jin.nextInt()));
  340.                 }
  341.                 if ( num == 4 ) {
  342.                     print(list);
  343.                 }
  344.                 if ( num == 5 ) {
  345.                     break;
  346.                 }
  347.             }
  348.         }
  349.     }
  350.  
  351.     public static void print(IntegerList il) {
  352.         if ( il.size() == 0 ) System.out.print("EMPTY");
  353.         for ( int i = 0 ; i < il.size() ; ++i ) {
  354.             if ( i > 0 ) System.out.print(" ");
  355.             System.out.print(il.get(i));
  356.         }
  357.         System.out.println();
  358.     }
  359.  
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement