Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.34 KB | None | 0 0
  1. from problem import Problem
  2. import random
  3. import string
  4.  
  5.  
  6. def random_string_generator(str_size, allowed_chars):
  7.     return ''.join(random.choice(allowed_chars) for x in range(str_size))
  8.  
  9.  
  10. class Tema1(Problem):
  11.     def __init__(self):
  12.         chars = string.ascii_letters
  13.         size1 = random.randrange(1, 10)
  14.         size2 = random.randrange(1, 10)
  15.         size3 = random.randrange(1, 10)
  16.         data1 = random_string_generator(size1, chars)
  17.         data2 = random_string_generator(size2, chars)
  18.         data3 = random_string_generator(size3, chars)
  19.         statement = 'Aveti la dispozitie 3 SD: \n'
  20.         statement += '1 -> stiva\n'
  21.         statement += '2 -> coada\n'
  22.         statement += '3 -> stiva\n'
  23.         statement += 'Operatii:\n'
  24.         statement += 'caracter -> se introduce caracterul in prima stiva\n'
  25.         statement += '1 -> se scoate din structura 1 se introduce in structura 2\n'
  26.         statement += '2 -> se scoate din structura 2 se introduce in structura 3\n'
  27.         statement += '3 -> se scoate din structura 3 se introduce in structura 1\n'
  28.         statement += 'Scrieti un sir de operatii pentru a avea la sf.\n'
  29.         statement += '1 -> ' + data1
  30.         statement += '\n2 -> ' + data2
  31.         statement += '\n3 -> ' + data3
  32.         data = data1 + ' ' + data2 + ' ' + data3
  33.         super().__init__(statement, data)
  34.  
  35.     def solve(self):
  36.         # implementare stiva
  37.         class Stack:
  38.             def __init__(self):
  39.                 self.items = []
  40.                 self.v = []
  41.  
  42.             def isEmpty(self):
  43.                 return self.items == []
  44.  
  45.             def push(self, item):
  46.                 self.items.append(item)
  47.  
  48.             def pop(self):
  49.                 return self.items.pop()
  50.  
  51.             def peek(self):
  52.                 return self.items[len(self.items) - 1]
  53.  
  54.             def size(self):
  55.                 return len(self.items)
  56.  
  57.             def show(self):
  58.                 print(self.items)
  59.  
  60.             def afisare(self):
  61.                 v = []
  62.                 while self.isEmpty() == False:
  63.                     x = self.pop()
  64.                     v.append(x)
  65.                 x = len(v)-1
  66.                 while x>=0:
  67.                     self.push(v[x])
  68.                     x = x-1
  69.                 self.v = list(reversed(v))
  70.  
  71.         stack1 = Stack()
  72.         stack2 = Stack()
  73.  
  74.         # implementare coada
  75.         class Node(object):
  76.  
  77.             def __init__(self, item=None):
  78.                 self.item = item
  79.                 self.next = None
  80.                 self.previous = None
  81.  
  82.         class Queue(object):
  83.  
  84.             def __init__(self):
  85.                 self.size = 0
  86.                 self.front = None
  87.                 self.rear = None
  88.                 self.v = []
  89.  
  90.             def isEmpty(self):
  91.                 return self.size == 0
  92.  
  93.             def Push(self, x):
  94.                 newNode = Node(x)
  95.                 if self.isEmpty():
  96.                     self.front = self.rear = newNode
  97.                 else:
  98.                     self.rear.next = newNode
  99.                 newNode.previous = self.rear
  100.                 self.rear = newNode
  101.                 self.size += 1
  102.  
  103.             def Pop(self):
  104.                 item = self.front.item
  105.                 self.front = self.front.next
  106.                 self.size -= 1
  107.                 if self.isEmpty():
  108.                     self.rear = None
  109.                 return item
  110.  
  111.             def q_front(self):
  112.                 if self.isEmpty():
  113.                     return None
  114.                 return self.front.item
  115.  
  116.             def q_rear(self):
  117.                 if self.isEmpty():
  118.                     return None
  119.                 return self.rear.item
  120.  
  121.             def afisare(self):
  122.                 v = []
  123.                 while self.isEmpty() == False:
  124.                     x = self.Pop()
  125.                     v.append(x)
  126.                 for x in v:
  127.                     self.Push(x)
  128.  
  129.                 self.v = v
  130.  
  131.         queue = Queue()
  132.         s = self.data
  133.         solutie = '\nInitial propozitia este: ' + '"' + str(s) + '"'
  134.         s = s.split(" ")
  135.         solutie += '\nSe imparte propozitia in cuvinte intr-un vector.'
  136.         solutie += '\nAstfel vectorul devine:  ' + str(s)
  137.  
  138.  
  139.         if len(s) != 3:
  140.             print("Nu sunt 3 cuvinte\n")
  141.  
  142.         else:
  143.             solutie += '\nIntroducem primul cuvant in stiva 1 astfel:\n'
  144.  
  145.             a = list(s[0])
  146.  
  147.             for x in a:
  148.                 stack1.push(x)
  149.  
  150.                 stack1.afisare()
  151.                 solutie += '\n\t\t\t\tStiva 1: ' + ' ' + str(stack1.v) + '\n'
  152.  
  153.             a = list(s[2])
  154.             solutie += '\nVrem sa introducem in stiva 1 cel de-al treilea cuvant (pe litere), apoi il introducem in coada, apoi in stiva 2.'
  155.  
  156.  
  157.             for x in a:
  158.                 stack1.push(x)
  159.  
  160.                 stack1.afisare()
  161.                 solutie += '\n\t\t\t\tStiva 1 : ' + ' ' + str(stack1.v)
  162.                 var = stack1.pop()
  163.                 var1 = '\u0336' + var
  164.                 stack1.push(var1)
  165.                 queue.Push(var1)
  166.                 stack2.push(var)
  167.  
  168.  
  169.                 stack2.afisare()
  170.                 queue.afisare()
  171.                 solutie += '\n\t\t\t\tCoada: ' + str(queue.v)
  172.                 solutie += '\n\t\t\t\tStiva 2: ' + str(stack2.v) + '\n'
  173.  
  174.  
  175.  
  176.             a = list(s[1])
  177.             solutie += '\n\nVrem sa introducem in stiva 1 cel de-al doilea cuvant (pe litere), apoi il introducem in coada:\n'
  178.  
  179.             for x in a:
  180.                 stack1.push(x)
  181.  
  182.                 stack1.afisare()
  183.                 solutie += '\n\t\t\t\tStiva 1: ' + str(stack1.v)
  184.                 var = stack1.pop()
  185.                 var1 = '\u0336' + var
  186.                 stack1.push(var1)
  187.                 queue.Push(var)
  188.  
  189.  
  190.                 queue.afisare()
  191.                 stack1.afisare()
  192.                 solutie += '\n\t\t\t\tStiva 1: ' + str(stack1.v)
  193.                 solutie += '\n\t\t\t\tCoada: ' + str(queue.v) + '\n'
  194.             solutie += 'La final:\n'
  195.  
  196.             stack1.afisare()
  197.             solutie += "Elementele stivei 1 sunt:\n" + str(stack1.v)
  198.             queue.afisare()
  199.             solutie += "\nElementele cozii sunt:\n" + str(queue.v)
  200.             stack2.afisare()
  201.             solutie += "\nElementele stivei 2 sunt:\n" + str(stack2.v)
  202.             return solutie
  203.  
  204.  
  205. p = Tema1()
  206. print(p.statement)
  207. print(p.solve())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement