BuK/IIm20/Vorlesung 8 Thomas
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Python</language>
== Übungsaufgabe ==
Schreiben Sie Prozeduren für G (Primzahlverschlüsselung) und $G^{−1}$:$G(A^∗)→A^∗$. Erzeugen Sie auch den Stream für $A^∗$ bei gegebenem Alphabet A unter Verwendung der Primzahlverschlüsselung als Gödelisierung.
<code id="609ec36cdc7b5">
import math
from itertools import chain
alphabet = ['a','b','c']
def prim(n):
if n == 2:
return True
if n % 2 == 0:
return False
else:
for i in range(2,int(math.sqrt(n))+1):
if n % i == 0:
return False
return True
def nextPrim(n):
c = n + 1
while(True):
if prim(c):
return c
c += 1
def G(word):
g = 1
p = 1
for char in word:
if char not in alphabet:
return "word not in alphabet"
i = 0
while i < len(alphabet):
if char == alphabet[i]:
i += 1
break
i += 1
p = nextPrim(p)
g *= p**i
return g
def Gminus1(goedelnum):
l = faktorisiere(goedelnum)
l.append(0)
r = []
c = 0
search = l[0]
for num in l:
if(search == num):
c+=1
else:
r.append(alphabet[c-1])
c = 1
search = num
return "".join(r)
def faktorisiere(n):
l = []
for i in chain([2], range(3, n//2 + 1, 2)):
while n % i == 0:
l.append(i)
n = n // i
if i > n:
break
return l
</code>
<run id="609ec36cdc81f">
print(G("abc"))
print(Gminus1(2250))
print(G("aba"))
print(Gminus1(90))
print(G("ababbabaacc"))
print(Gminus1(636539951960324922510))
print(G("ba"))
print(Gminus1(12))
print(Gminus1(2252))
</run>