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

Ло­ги­че­ская функ­ция F задаётся вы­ра­же­ни­ем ((xy ) ∧ (yw)) ∨ (z ≡ ( xy)).

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

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

 

Пе­ре­мен­ная 1Пе­ре­мен­ная 2Пе­ре­мен­ная 3Пе­ре­мен­ная 4Функ­ция
????????????F
110
10
110

 

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

 

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

 

Пе­ре­мен­ная 1Пе­ре­мен­ная 2Функ­ция
??????F
010

 

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

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

Ре­ше­ние.

За­ме­тим, что в каж­дом столб­це, кроме тре­тье­го, как ми­ни­мум в одной стро­ке встре­ча­ет­ся 1. Часть ло­ги­че­ско­го вы­ра­же­ния (z ≡ ( xy)) будет равна 0 толь­ко тогда, когда z будет при­ни­мать зна­че­ние, от­лич­ное от x ∨ y. Если по­ста­вить в со­от­вет­ствие пе­ре­мен­ной z какой-либо стол­бец, кроме тре­тье­го, усло­вие (z ≡ ( xy)) будет при­ни­мать зна­че­ние 1 в какой-либо из строк таб­ли­цы. Сле­до­ва­тель­но, пе­ре­мен­ная z со­от­вет­ству­ет тре­тье­му столб­цу.

Пе­ре­мен­ные y и w не долж­ны од­но­вре­мен­но при­ни­мать зна­че­ние 1. Сле­до­ва­тель­но, пе­ре­мен­ной y со­от­вет­ству­ет пер­вый стол­бец, а пе­ре­мен­ной w со­от­вет­ству­ет вто­рой стол­бец. Зна­чит, четвёртый стол­бец фраг­мен­та таб­ли­цы ис­тин­но­сти со­от­вет­ству­ет пе­ре­мен­ной x.

 

При­ве­дем дру­гое ре­ше­ние.

Со­ста­вим таб­ли­цу ис­тин­но­сти для вы­ра­же­ния ((xy ) ∧ (yw)) ∨ (z ≡ ( xy)) вруч­ную или при по­мо­щи языка Python:

print("x y z w")

for x in range(0, 2):

for y in range(0, 2):

for z in range(0, 2):

for w in range(0, 2):

if not(((x <= y) and (y <= w)) or (z == (x or y))):

print(x, y, z, w)

Далее вы­пи­шем те на­бо­ры пе­ре­мен­ных, при ко­то­рых дан­ное вы­ра­же­ние равно 0. В на­бо­рах пе­ре­мен­ные за­пи­шем в по­ряд­ке х, y, z,w.

По­лу­чим сле­ду­ю­щие на­бо­ры:

(0, 1, 0, 0),

(1, 0, 0, 0),

(1, 0, 0, 1),

(1, 1, 0, 0).

Со­по­ста­вим эти на­бо­ры с при­ве­ден­ным в за­да­нии фраг­мен­том таб­ли­цы ис­тин­но­сти.

За­ме­тим, что ни в одном из на­бо­ров пе­ре­мен­ная z не при­ни­ма­ет еди­нич­ное зна­че­ние. Сле­до­ва­тель­но, пе­ре­мен­ной z со­от­вет­ству­ет тре­тий стол­бец, и во всех строч­ках таб­ли­цы в тре­тьем столб­це стоит 0.

Пе­ре­мен­ная w при­ни­ма­ет еди­нич­ное зна­че­ние толь­ко в одном на­бо­ре. Сле­до­ва­тель­но, пе­ре­мен­ной w со­от­вет­ству­ет вто­рой стол­бец, и в пер­вой и вто­рой сточ­ках таб­ли­цы во вто­ром столб­це стоит 0.

Тре­тья стро­ка таб­ли­цы, в ко­то­рой пе­ре­мен­ная w при­ни­ма­ет еди­нич­ное зна­че­ние, со­от­вет­ству­ет на­бо­ру (1, 0, 0, 1). В этом на­бо­ре еди­нич­ное зна­че­ние при­ни­ма­ет также пе­ре­мен­ная х. Сле­до­ва­тель­но, пе­ре­мен­ной х со­от­вет­ству­ет чет­вер­тый стол­бец.

Тогда пер­вый стол­бец со­от­вет­ству­ет пе­ре­мен­ной у.

 

Ответ: ywzx.

 

При­ве­дем ре­ше­ние Ко­ло­ме­ец Юрия при по­мо­щи про­грам­мы, ко­то­рая сразу вы­да­ет ответ без про­ме­жу­точ­ных эта­пов. Про­грам­ма из 24 строк, что для трех­ми­нут­но­го за­да­ния мно­го­ва­то, но ре­ше­ние ра­бо­та­ет.

 

from random import *

s = []

null = lambda x, y, z, w: True if ((not x or y) and (not y or w)) or (z == (x or y)) else False # ((x → y ) ∧ (y → w)) ∨ (z ≡ ( x ∨ y)).

act = True

while act:

active = 0

f = [randint(0,1) for i in range(4)]

if f[0] == 1 and f[3] == 1 and len(s) == 0:s.append(f)

if f[0] == 1 and len(s) == 1 and f not in s:s.append(f)

if f[1] == 1 and f[3] == 1 and len(s) == 2 and f not in s:s.append(f)

if len(s) == 3:

while active != 1000:

active += 1

i_x = choice([i for i in range(4)])

i_y = choice([i for i in range(4) if i != i_x])

i_z = choice([i for i in range(4) if i != i_x and i != i_y])

i_w = choice([i for i in range(4) if i != i_x and i != i_y and i != i_z])

if null(s[0][i_x], s[0][i_y], s[0][i_z], s[0][i_w]) == False:

if null(s[1][i_x], s[1][i_y], s[1][i_z], s[1][i_w]) == False:

if null(s[2][i_x], s[2][i_y], s[2][i_z], s[2][i_w]) == False and act == True:

for i in s:print(i)

print(f"Ответ: x = {i_x + 1}; y = {i_y + 1}; z = {i_z + 1}; w = {i_w + 1}")

act = False

if active == 1000:s.clear()

 

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

 

import itertools,re

def f(vars):

x,y,z,w = vars

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

matrix = ['1..10', '1...0', '.1.10']

numvars=len(matrix[0])-1

table=[''.join(map(str,vars)) + str(int(f(vars))) for vars in itertools.product( [0,1], repeat=numvars )]

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

permtable=[''.join([line[perm[i]] for i in range(numvars)])+line[-1] for line in table]

for lines in itertools.permutations(permtable,len(matrix)):

if re.search(''.join(matrix),''.join(lines)):

print(''.join(['xyzw'[perm[i]] for i in range(numvars)]))

 

При­ве­дем ре­ше­ние Вла­ди­ми­ра Бур­ми­ст­ро­ва на языке Python.

 

from itertools import *

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

return ((x <= y) and (y <= w)) or (z == (x or y))

for a1, a2, a3, a4, a5, a6, a7 in product([0, 1], repeat = 7):

table = [(1, a1, a2, 1), (1, a3, a4, a5), (a6, 1, a7, 1)]

if len(table) == len(set(table)):

for p in permutations('xyzw'):

if [f(**dict(zip(p, r))) for r in table] == [0, 0, 0]:

print(*p, sep='')


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

Раздел кодификатора ФИПИ: 1.5.1 Вы­ска­зы­ва­ния, ло­ги­че­ские опе­ра­ции, кван­то­ры, ис­тин­ность вы­ска­зы­ва­ния