BuK/IIm20/Vorlesung 4 Lemke
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Python</language>
== Kreativaufgabe S. 15 ==
=== Aufzählfunktion für semi-entscheidbare Menge ===
<code id="607b1c0c5f723">
import signal
from itertools import product
from math import sqrt
'''
A = {a, b, c}
M = words that begin with ab
'''
ALPHABET = 'abc'
a = 'ab'
def timeout(signum, frame):
raise Exception('Stop waiting')
def semi_chi(word):
if word[0:2] == 'ab':
return True
else:
while True:
pass
def generate_words_with_length(length):
return ["".join(x) for x in product(ALPHABET, repeat=length)]
def generate_wordset():
length = 0
while True:
for w in generate_words_with_length(length):
yield w
length += 1
def get_word_at(wordset, index):
for i in range(index+1):
w = next(wordset)
if i == index:
return w
def get_x_y_from_z(z):
w = int((sqrt(8 * z + 1) -1) / 2)
t = int((w * (w + 1)) / 2) # has to be typecast bc otherwise it will be .0 float
y = z - t
x = w - y
return (x, y)
def generate_M(z):
x, y = get_x_y_from_z(z)
signal.signal(signal.SIGALRM, timeout)
signal.alarm(y+1)
try:
word = get_word_at(generate_wordset(), x)
if semi_chi(word):
return word
except Exception:
return a
</code>
<run id="607b1c0c5f7bf">
for z in range(20):
print(generate_M(z))
</run>