Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.91 KB | None | 0 0
  1. from graphviz import Digraph
  2. #programul normal
  3. # FA CU COMMAND PROMPT , LA MINE NU MERGE IN PYCHARM
  4. # pune pe desktop, si un fisier date.txt
  5. #variabilele
  6. st_initial=0
  7. st_final=[]
  8. adiacenta={}
  9. n=0
  10. parcurse=[]
  11. traducere=[]
  12. def citire():
  13.     global adiacenta,st_final,st_initial,traducere
  14.     f=open("date.txt")
  15.     n=int(f.readline())
  16.     st_initial=f.readline()[0]
  17.     sir=f.readline()
  18.     st_final=sir.split()
  19.     sir=f.readline()
  20.     while (sir):
  21.         l=sir.split()
  22.         for i in range(2):
  23.             if (l[i] not in traducere):
  24.                 traducere.append(l[i])
  25.         if (adiacenta.get(l[0])==None):
  26.             adiacenta[l[0]]={}
  27.             adiacenta[l[0]][l[1]]=[l[2]]
  28.         else:
  29.             if(adiacenta[l[0]].get(l[1])==None):
  30.                 adiacenta[l[0]][l[1]]=[l[2]]
  31.             else:
  32.                 adiacenta[l[0]][l[1]].append(l[2])
  33.         sir=f.readline()
  34.  
  35. #verificarea inputului
  36.  
  37. def check_input(sir):
  38.     if (sir!="" and sir!="λ"):
  39.         ex_litere=0
  40.         ex_cifre=0
  41.         drum=[]
  42.         for x in sir:
  43.             drum.append(x)
  44.             if (x.isdecimal()):
  45.                 ex_cifre=1
  46.             elif (x in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ"):
  47.                 ex_litere=1
  48.             else:
  49.                 ex_cifre=2 # datele sunt gresite
  50.         if (ex_cifre+ex_litere==1):
  51.             parcurgerea_cuvantului(drum)
  52.         else:
  53.             print("Drumul este gresit")
  54.     else:
  55.         if (st_initial in st_final):
  56.             print("Da")
  57.         else:
  58.             print("Drumul e gresit")
  59.  
  60. #parcurgerea cuvantului
  61.  
  62. def parcurgerea_cuvantului(drum):
  63.     global adiacenta,st_final,st_initial,n,parcurse
  64.     poz=st_initial
  65.     log=0
  66.     for x in drum:
  67.         for k in adiacenta[poz].keys():
  68.             if (x in adiacenta[poz][k]):
  69.                 parcurse.append((poz,k))
  70.                 poz=k
  71.                 break
  72.         else:
  73.             log=1
  74.     if (poz not in st_final):
  75.         log=1
  76.     if (log==0):
  77.         print("Da")
  78.     else:
  79.         print("Drumul este gresit")
  80.  
  81. citire()
  82. cuvant=input("Introduceti cuvantul:")
  83. check_input(cuvant)
  84. print(adiacenta)
  85. print(parcurse)
  86. print(traducere)
  87.  
  88.  
  89. #grafica
  90. g=Digraph(name="Automat",filename="fisier.pdf")
  91. g.attr('node',shape='doublecircle')
  92. for x in st_final:
  93.     g.node(x)
  94. g.attr('node',shape='circle')
  95. for x in traducere:
  96.     if (x in st_initial):
  97.         g.node('', shape = 'none')
  98.         g.node(x)
  99.         g.edge('', x, label = 'START')
  100.     if (x not in st_final):
  101.         g.node(x)
  102. for x in adiacenta.keys():
  103.     for k in adiacenta[x].keys():
  104.         if (adiacenta[x][k]!=[]):
  105.             for v in adiacenta[x][k]:
  106.                 if ((x,k) in parcurse):
  107.                     g.attr('edge',color='green')
  108.                     g.edge(x,k,v)
  109.                 else:
  110.                     g.attr('edge',color='black')
  111.                     g.edge(x,k,v)
  112. g.view()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement