Задания
Версия для печати и копирования в MS Word
Тип 2 № 61348
i

Две ло­ги­че­ские функ­ции за­да­ны вы­ра­же­ни­я­ми:

F1  =  (x ≡ y) ∧ (w → z)

F2  =  (x → y) → (w ≡ z)

Дан ча­стич­но за­пол­нен­ный фраг­мент, со­дер­жа­щий не­по­вто­ря­ю­щи­е­ся стро­ки таб­ли­цы ис­тин­но­сти обеих функ­ций.

Опре­де­ли­те, ка­ко­му столб­цу таб­ли­цы ис­тин­но­сти со­от­вет­ству­ет каж­дая из пе­ре­мен­ных w, x, y, z.

???

???

???

???

F1

F2

11110
0101
0000

 

В от­ве­те на­пи­ши­те буквы w, x, y, z в том по­ряд­ке, в ко­то­ром идут со­от­вет­ству­ю­щие им столб­цы (сна­ча­ла буква, со­от­вет­ству­ю­щая пер­во­му столб­цу; затем буква, со­от­вет­ству­ю­щая вто­ро­му столб­цу, и т. д.). Буквы в от­ве­те пи­ши­те под­ряд, ни­ка­ких раз­де­ли­те­лей между бук­ва­ми ста­вить не нужно.

 

При­мер. Пусть за­да­но вы­ра­же­ние x → y, за­ви­ся­щее от двух пе­ре­мен­ных x и y, и фраг­мент таб­ли­цы ис­тин­но­сти для одной функ­ции:

 

Пе­ре­мен­ная 1

???

Пе­ре­мен­ная 2

???

Функ­ция

F

010

 

Тогда пер­во­му столб­цу со­от­вет­ству­ет пе­ре­мен­ная y, а вто­ро­му столб­цу со­от­вет­ству­ет пе­ре­мен­ная x. В от­ве­те нужно на­пи­сать: yx.

Спрятать решение

Ре­ше­ние.

Со­ста­вим таб­ли­цу ис­тин­но­сти для ис­ход­ных вы­ра­же­ний при по­мо­щи языка Python:

xyzwf1f2
000011
000100
001010
001111
010001
010100
011000
011101
100001
100101
101001
101101
110011
110100
111010
111111

def f_1(x, y, z, w):

if ((x == y) and (w <= z )) == 1:

return 1

else:

return 0

def f_2(x, y, z, w):

if ((x <= y) <= (w == z)) == 1:

return 1

else:

return 0

print('x y z w f1 f2')

for x in range(2):

for y in range(2):

for z in range(2):

for w in range(2):

print(x, y, z, w, ' ', f_1(x, y, z, w), ' ',f_2(x, y, z, w))

Мы по­лу­чи­ли 16 на­бо­ров.

Рас­смот­рим первую стро­ку таб­ли­цы, в ней зна­че­ние пер­вой функ­ции равно 1, а зна­че­ние вто­рой  — 0, при этом три пе­ре­мен­ные при­ни­ма­ют зна­че­ние 1. Это воз­мож­но толь­ко в одном слу­чае (1, 1, 1, 0), то есть w со­от­вет­ству­ет вто­рой стол­бец.

Рас­смот­рим тре­тью стро­ку таб­ли­цы, в ней зна­че­ние пер­вой функ­ции равно 0, и зна­че­ние вто­рой  — 0, при этом пе­ре­мен­ная w при­ни­ма­ет зна­че­ние 0. Это воз­мож­но толь­ко в одном слу­чае (0, 1, 1, 0), то есть x со­от­вет­ству­ет тре­тий стол­бец.

Те­перь най­дем слу­чай, при ко­то­ром пер­вая функ­ция при­ни­ма­ет зна­че­ние 1, w при­ни­ма­ет зна­че­ние 1, x при­ни­ма­ет зна­че­ние 0. Это воз­мож­но толь­ко в одном слу­чае (0, 0, 1, 1), то есть y со­от­вет­ству­ет пер­вый стол­бец, а z со­от­вет­ству­ет четвёртый стол­бец.

 

Ответ: ywxz.

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

import itertools,fnmatch

def perm(s,p):

return ''.join([s[ndx] for ndx in p])+s[len(p):]

 

def f(vars):

x,y,z,w = vars

f1 = (x==y) and (not w or z)

f2 = not (not x or y) or (w == z)

return ''.join(map(str,vars)) + str(int(f1)) + str(int(f2))

 

matrix = ['1?1110', '010?1?', '?00?00']

numvars = 4

numlines = len(matrix)

table = [f(vars) for vars in itertools.product((0,1), repeat=numvars)]

for p in itertools.permutations(range(numvars)):

permtable = [perm(line,p) for line in table]

for lines in itertools.permutations(permtable,numlines):

if fnmatch.fnmatch(''.join(lines),''.join(matrix)):

print(perm('xyzw',p))


Аналоги к заданию № 61348: 61382 Все