BuK/IIm20/Vorlesung 6 Nerlich
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Python</language>
=== S.11 ===
$v(x) = \begin{cases}0&x=0\\x-1&x>0\end{cases}$
$h(x) = \begin{cases}x/2&2\text{ teilt }x\\0&\text{sonst}\end{cases}$
$a(x) = \begin{cases}\perp&x=1234\vee x=7266281\\x&\text{sonst}\end{cases}$
=== S.23 ===
1.
<code id="60cf4290d7543">"""
<Sprache>
________
__\ /__
|__ TM __|
/______\
{ True }
"""</code>
2.
<code id="60cf4290d75cd">"""
<Sprache>
________
__\ /__
|__ TM __|
/______\
{ True, False }
"""</code>
=== S.20 ===
<code id="60cf4290d7648">
#!/usr/bin/env python3
from itertools import product
def nth(n: int, l: list):
return map(lambda x: x[n-1], l)
def first(l: list):
return nth(1, l)
def second(l: list):
return nth(2, l)
def concatenation(l: list, idxs: list):
l = list(l)
return ''.join(map(lambda i: l[i], idxs))
def find_index_lists(pairs: list, search_all=False):
length = 0
while True:
length += 1
print("Searching for lists of length {}".format(length))
l = find_index_lists_of_length(pairs, length, search_all=search_all)
if l and not search_all:
return l
def find_index_lists_of_length(pairs: list, length: int, search_all=False):
for index_list in product(range(0,len(pairs)), repeat=length):
concat = concatenation(first(pairs), index_list)
if concat == concatenation(second(pairs), index_list):
print("Found solution: {} ({})".format(index_list, concat))
if not search_all:
return index_list
def inspect(pairs: list, idxs: list):
one = concatenation(first(pairs), idxs)
two = concatenation(second(pairs), idxs)
if one == two:
print("MATCH! {} → {}".format(idxs, one))
else:
print("no match. {} ↓\n{}\n{}".format(idxs, one, two))
def parse_k(s: str):
if s[0] == '[' or s[-1] == ']':
return list(map(lambda x: tuple(x.split(',')), s[2:-2].split('),(')))
elif s[0] == '(' or s[-1] == ')':
return tuple(map(lambda x: tuple(x.split(',')), s[2:-2].split('),(')))
else:
raise ValueError("Invalid element for K: {}".format(s))
"""
if __name__ == '__main__':
import sys
if len(sys.argv) == 1:
print("Usage: {} K [TEST_LIST]\n with K being a list like: [(001,0),(01,011),(01,101),(10,001)]\n and TEST_LIST being an index list like: [0, 2, 1, 2]".format(sys.argv[0]))
else:
args = sys.argv[1:]
args[0] = parse_k(args[0])
if len(args) == 2:
index_list = tuple(map(lambda s: int(s), args[1][1:-1].split(',')))
inspect(args[0], index_list)
else:
find_index_lists(*args)
"""
</code>
<run id="60cf4290d76cc">find_index_lists([('1', '101'), ('10', '00'), ('011', '11')])</run>
<run id="60cf4290d7739">inspect([('001', '0'), ('01', '011'), ('01', '101'), ('10', '001')],
(1, 3, 2, 3, 3, 1, 0, 1, 3, 2, 3, 2, 3, 3, 2, 3, 3, 1, 0, 3, 3, 1, 0, 2, 3, 0, 0, 2, 3, 3, 3, 1, 0, 1, 0, 0, 0, 2, 3, 2, 3, 0, 1, 0, 3, 3, 1, 0, 3, 0, 0, 2, 3, 0, 0, 2, 0, 0, 2, 0, 1, 0, 3, 0, 0, 2))</run>