avva: (Default)
[personal profile] avva
Убил на нее немало времени сегодня, но очень понравилась:

Придумайте схему, у которой есть три входа A, B, C и три выхода not-A, not-B, not-C. Можно пользоваться элементами AND, OR и NOT, но AND и OR сколько угодно, а NOT не более двух штук.

Я на время постараюсь скрывать правильные ответы. Но у меня есть предложение: если вы уже знаете решение, или нашли его компьютерным перебором, не пишите его в комментах - напишите просто, что нашли, например. Нет ничего плохого в компьютерном переборе, но не всем интересно. Мне хотелось именно найти решение самому аналитическим путем.

Date: 2010-02-14 12:57 pm (UTC)
From: [identity profile] unsignedlong.livejournal.com
сделать новый "my_not"

1)x xor 1 = not x

2)z or (not z ) = 1 (это для единички в xor)
3)xor = not(z) * y + not(y)+z

not(z) можно использовать из единички, которую получили в формуле 2

Date: 2010-02-14 01:35 pm (UTC)
From: [identity profile] avva.livejournal.com
с третьим пунктом что-то не так, вам же надо вычислять не y xor z, а x xor 1, т.е. по формуле третьего пункта нужно будет еще отдельно not x.

(no subject)

From: [identity profile] unsignedlong.livejournal.com - Date: 2010-02-14 01:37 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2010-02-14 01:39 pm (UTC) - Expand

(no subject)

From: [identity profile] unsignedlong.livejournal.com - Date: 2010-02-14 01:56 pm (UTC) - Expand

(no subject)

From: [identity profile] unsignedlong.livejournal.com - Date: 2010-02-14 01:57 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2010-02-14 02:45 pm (UTC) - Expand

Date: 2010-02-14 01:36 pm (UTC)
From: [identity profile] sleeping-death.livejournal.com
xor=not(ZY)(Y+Z)

Date: 2010-02-14 01:51 pm (UTC)
From: (Anonymous)
неинтересно, слишком много условий.

Date: 2010-02-14 01:55 pm (UTC)
From: [identity profile] unsignedlong.livejournal.com
это не условия

Date: 2010-02-14 02:44 pm (UTC)
From: [identity profile] burrru.livejournal.com
На ум сразу приходят фамилии: Карацуба и Штрассен...

Date: 2010-02-14 02:45 pm (UTC)
From: [identity profile] avva.livejournal.com
Я их кстати так и не изучил, все эти быстрые умножения :(

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-14 03:08 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 07:08 pm (UTC) - Expand

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-14 08:27 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 08:47 pm (UTC) - Expand

Date: 2010-02-14 07:17 pm (UTC)
From: [identity profile] adp.myopenid.com (from livejournal.com)
Кстати говоря, к решению этой задачи вышеупомянутые алгоритмы отношения, по-моему, не имеют. Карацуба осуществляет метод вычисление-умножение-интерполяция, Штрассен - вообще непонятно какой (трактовок много, но ни одна не обобщается на большие размерности, задача сложности умножения матриц до сих пор не решена), здесь же - чистый анализ множеств на гиперкубе.

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-14 08:26 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 08:41 pm (UTC) - Expand

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-15 07:53 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 08:06 pm (UTC) - Expand

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-15 08:48 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 09:00 pm (UTC) - Expand

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-15 11:40 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-16 06:23 am (UTC) - Expand

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-16 08:41 am (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-16 08:56 am (UTC) - Expand

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-16 09:49 pm (UTC) - Expand

(no subject)

From: [identity profile] malaya-zemlya.livejournal.com - Date: 2010-02-16 10:38 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-17 05:29 am (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-17 05:37 am (UTC) - Expand

(no subject)

From: [identity profile] burrru.livejournal.com - Date: 2010-02-17 07:39 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-17 08:54 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-18 07:05 am (UTC) - Expand

Date: 2010-02-14 03:36 pm (UTC)
alexeybobkov: (Default)
From: [personal profile] alexeybobkov
О, я её лет десять назад решил аналитически.
Что интересно, вначале я доказал, что это невозможно :). Потом понял, что не учёл, что выход с одного инвертора можно завести на другой (через промежуточную логику, разумеется). Когда понял, задача сразу решилась.
Одно время схема у меня даже висела на стенке.
Могу восстановить, если надо.

В общем, в мире есть всего два инвертора. Не дай Бог один сгорит.

Date: 2010-02-14 03:40 pm (UTC)
From: [identity profile] avva.livejournal.com
В общем, в мире есть всего два инвертора. Не дай Бог один сгорит.

О!

(no subject)

From: [personal profile] alexeybobkov - Date: 2010-02-14 04:45 pm (UTC) - Expand

Осторожно, здесь решение!

From: [personal profile] alexeybobkov - Date: 2010-02-15 03:48 am (UTC) - Expand

Date: 2010-02-14 03:41 pm (UTC)
alexeybobkov: (Default)
From: [personal profile] alexeybobkov
P.S. Слышал, что задача легко решается на Прологе. Было бы полезное упражнение, наверное. Сам я, однако, не настолько хороший знаток Пролога, чтобы её решить.

Date: 2010-02-14 03:53 pm (UTC)
From: [identity profile] renivid.livejournal.com
Заводим A, B, C на AND, результ - на NOT, получаем !A+!B+!C дальше можно отделить A, B и С с помощью ИЛИ и пар B+C, A+C и A+B. Или я неправльно понял условия :).

Date: 2010-02-14 04:16 pm (UTC)
From: [identity profile] avva.livejournal.com
попробуйте выписать точнее, и увидите, что это не так просто :)

(no subject)

From: [identity profile] renivid.livejournal.com - Date: 2010-02-14 04:34 pm (UTC) - Expand

Date: 2010-02-15 10:45 am (UTC)
From: (Anonymous)
похоже что из not(A) or not(B) or not(C) трудно получить отдельно not(A) и остальные

(no subject)

From: [identity profile] renivid.livejournal.com - Date: 2010-02-15 11:18 am (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 11:25 am (UTC) - Expand

Date: 2010-02-14 04:41 pm (UTC)
From: (Anonymous)
Любую логическую схему можно реализовать на двух NOT.

Date: 2010-02-14 04:53 pm (UTC)
From: (Anonymous)
Ну то есть да, конечно. Если три инвертора можно построить из двух, то и больше тоже можно. Duh.

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 07:10 pm (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2010-02-14 09:05 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 09:12 pm (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2010-02-14 09:35 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 09:50 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 09:51 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 10:28 pm (UTC) - Expand

(no subject)

From: [personal profile] alexeybobkov - Date: 2010-02-15 12:42 am (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 07:55 am (UTC) - Expand

(no subject)

From: [personal profile] alexeybobkov - Date: 2010-02-15 03:39 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 03:58 pm (UTC) - Expand

Date: 2010-02-14 07:12 pm (UTC)
From: [identity profile] adp.myopenid.com (from livejournal.com)
Не буду портить удовольствия решения :-) Замечу только, что это - частный случай более общей задачи: как реализовать при неограниченном количестве AND и OR n отрицаний NOT x_1, ..., NOT x_n. Можно доказать, что для этого достаточно целой части сверху log_2 (n+1). Справедлива аналогичная нижняя оценка.

Date: 2010-02-14 07:17 pm (UTC)
From: [identity profile] spamsink.livejournal.com
not_A = (A+B+C) == 0 || (A+B+C) == 1 && (B || C) || (A+B+C) == 2 && B && C

Дальше подсказывать не буду.

У вас ошибка

Date: 2010-02-14 07:30 pm (UTC)
From: [identity profile] adp.myopenid.com (from livejournal.com)
Если приоритет операций классический, то правая часть равна 1 при A = 1, B = 1, C = 0, а левая - нет.

Re: У вас ошибка

From: [identity profile] spamsink.livejournal.com - Date: 2010-02-14 07:34 pm (UTC) - Expand

Re: У вас ошибка

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 07:36 pm (UTC) - Expand

Re: У вас ошибка

From: [identity profile] spamsink.livejournal.com - Date: 2010-02-14 07:37 pm (UTC) - Expand

Re: У вас ошибка

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 07:38 pm (UTC) - Expand

Re: У вас ошибка

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 07:37 pm (UTC) - Expand

Date: 2010-02-14 10:21 pm (UTC)
From: [identity profile] g00d.livejournal.com
X1 = not (A * C)
X2 = not (B + C)

not C = (X1 * X2)

X3 = X1 * (not C)
X4 = X2 + (not C)

not A = (X1 * X3)
not B = (X2 * X4)

Неверно

Date: 2010-02-14 10:26 pm (UTC)
From: [identity profile] adp.myopenid.com (from livejournal.com)
A = 1, B = 1, C = 0 => X1 = 1, X2 = 0, X1 * X2 = 0 = C.

Re: Неверно

From: [identity profile] g00d.livejournal.com - Date: 2010-02-14 10:29 pm (UTC) - Expand

Re: Неверно

From: [identity profile] adp.myopenid.com - Date: 2010-02-14 10:35 pm (UTC) - Expand

Re: Неверно

From: [identity profile] g00d.livejournal.com - Date: 2010-02-15 10:59 pm (UTC) - Expand

(no subject)

From: [identity profile] unbe.livejournal.com - Date: 2010-02-14 10:36 pm (UTC) - Expand

(no subject)

From: [identity profile] unbe.livejournal.com - Date: 2010-02-14 10:37 pm (UTC) - Expand

Date: 2010-02-15 10:41 am (UTC)
From: [identity profile] ao-terekhov.livejournal.com
А как эта задача решается компьютерным перебором?

Date: 2010-02-15 10:44 am (UTC)
From: [identity profile] avva.livejournal.com
Думаю об этом отдельную запись написать.

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 11:10 am (UTC) - Expand

(no subject)

From: [identity profile] malaya-zemlya.livejournal.com - Date: 2010-02-16 10:26 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2010-02-16 10:30 pm (UTC) - Expand

(no subject)

From: [identity profile] malaya-zemlya.livejournal.com - Date: 2010-02-16 10:38 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_iga/ - Date: 2010-02-15 12:54 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 02:50 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_iga/ - Date: 2010-02-15 04:40 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 05:15 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2010-02-16 10:00 am (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-16 10:07 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2010-02-16 11:04 am (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-16 02:31 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2010-02-16 02:36 pm (UTC) - Expand

(no subject)

From: [identity profile] malaya-zemlya.livejournal.com - Date: 2010-02-16 10:46 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-17 05:27 am (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-17 05:43 am (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-15 06:18 pm (UTC) - Expand

(no subject)

From: [identity profile] adp.myopenid.com - Date: 2010-02-16 07:53 am (UTC) - Expand

Date: 2010-02-16 09:41 am (UTC)
From: [identity profile] 1benrinnes.livejournal.com
http://domino.research.ibm.com/Comm/wwwr_ponder.nsf/Challenges/August2009.html

Date: 2010-02-16 09:48 am (UTC)

(no subject)

From: [identity profile] spamsink.livejournal.com - Date: 2010-02-18 07:52 pm (UTC) - Expand

Date: 2010-02-17 07:46 pm (UTC)
From: [identity profile] burivykh.livejournal.com
Ну, поскольку "и" и "или" позволяют делать монотонные функции, то первый инвертор вешается на "A+B+C >= 2"; после этого выясняется, что XOR всех трёх A,B,C от них и от первого инвертора монотонна, и второй инвертор вешаем на неё. А теперь на каждом "возрастающем" ребре хоть один из инверторов, да убывает, поэтому все отрицания можно собрать.

Формально:
X=NOT (AB OR AC OR BC)
Y=NOT (((A OR B OR C) X) OR ABC).

NOT A = (X (Y OR B OR C)) OR (YBC)

Вроде, так...

Date: 2010-02-18 01:42 am (UTC)
From: [identity profile] oxfv.livejournal.com
Поленился решать головой и написал программу. Работает 15 секунд, наверняка можно улучшить.

a = 0x0f
b = 0x33
c = 0x55

# three stages of list proliferation: before the first ~, after the first ~, after the second ~
# the stage counts picked empirically
stages = [3,2,2]

# adds to the list l all values that could be computed out of its elements with & and |
def proliferate_list(l, stage, d = None):

    for i in range(stages[stage]):
        lset = frozenset(l)
        for v1 in lset:
            for v2 in lset:
                if v1 < v2:     # for all unique pairs in l
                    if not (v1 & v2) in l:     l.append( v1 & v2 )
                    if not (v1 | v2) in l:     l.append( v1 | v2 )

                    if d:
                        # wraps operand in round brackets only when needed
                        def wrap_operand( s, operation ):
                            balance = 0
                            for c in s:
                                if c in ['&','|'] and balance==0:
                                    return (c==operation) and s or '(%s)'%s
                                elif c=='(':    balance += 1
                                elif c==')':    balance -= 1
                            return s

                        # keep the most concise expression for each value
                        s = wrap_operand(d[v1],'&') + '&' + wrap_operand(d[v2],'&')
                        if not d.has_key(v1&v2) or len(d[v1&v2])>len(s):  d[v1&v2] = s

                        s = wrap_operand(d[v1],'|') + '|' + wrap_operand(d[v2],'|')
                        if not d.has_key(v1|v2) or len(d[v1|v2])>len(s):  d[v1|v2] = s
    if d:
        return l, d
    else:
        return l


try:
    l = proliferate_list([a,b,c],0)
    for v1 in l:
        x = 0xff & ~v1
        l1 = proliferate_list(l+[x], 1)
        for v2 in l1:
            y = 0xff & ~v2
            if not y in l1:
                l2 = proliferate_list(l1+[y], 2)

                if len(set([0xf0, 0xcc, 0xaa]) & set(l2)) == 3:   # all three of ~a,~b,~c are found
                    # repeat the proliferation steps, this time keeping the dictionary of expressions
                    d = { a:'a', b:'b', c:'c', x:'x', y:'y' }
                    l3,d = proliferate_list([a,b,c],0,d)
                    print '  x = ~(%s)' % d[v1]   # have to print x here lest the more concise but y-dependent expression replaces it
                    l3,d = proliferate_list(l3+[x],1,d)
                    print '  y = ~(%s)' % d[v2]
                    l3,d = proliferate_list(l3+[y],2,d)

                    for v in [a, b, c]:
                        print '  ~%s: %s' % (d[v], d[0xff&~v])
                    raise Exception
except:
    pass

Вот её результат:
  x = ~((a&b)|((a|b)&c))
  y = ~((a&b&c)|((a|b|c)&x))
  ~a: ((b|c)&x)|(y&((b&c)|x))
  ~b: ((a|c)&x)|(y&((a&c)|x))
  ~c: ((a|b)&x)|(y&((a&b)|x))


7 минут

Date: 2010-02-18 09:23 pm (UTC)
From: [identity profile] gurka-ju.livejournal.com
муж случайно нашел эту задачку

если А Б С принять за 0 1 2 ...
тогда
А&(Б||C)= ^B || ^C
B&C = ^A....

на этом, кажется, все...

Re: 7 минут

Date: 2010-02-19 06:40 am (UTC)
From: [identity profile] adp.myopenid.com (from livejournal.com)
Что такое А&(Б||С), когда A Б С = 0 1 2?

Re: 7 минут

From: [identity profile] gurka-ju.livejournal.com - Date: 2010-02-23 06:28 pm (UTC) - Expand

Re: 7 минут

From: [identity profile] adp.myopenid.com - Date: 2010-02-28 03:47 pm (UTC) - Expand

Re: 7 минут

From: [identity profile] gurka-ju.livejournal.com - Date: 2010-03-01 12:55 pm (UTC) - Expand

Re: 7 минут

From: [identity profile] adp.myopenid.com - Date: 2010-03-02 07:26 am (UTC) - Expand

Date: 2010-02-22 04:31 am (UTC)
From: [identity profile] ijon-ru.livejournal.com
x4 = B and C
x6 = A and C
x7 = A and B
n1 = not (x4 or x6 or x7)
z2 = n1 and C
z3 = n1 and B
z5 = n1 and A
n2 = not (z2 or z3 or z5 or (A and B and C))
z1 = n1 and n2
z4 = x4 and n2
z6 = x6 and n2
z7 = x7 and n2
notA = z1 or z2 or z3 or z4
notB = z1 or z2 or z5 or z6
notC = z1 or z3 or z5 or z7

По совместительству код на Питоне:
c = 2
s = ''
for A in range(c):
for B in range(c):
for C in range(c):
...
s += '%i %i %i | %i %i %i | %i %i %i\n' % \
(A, B, C, not A, not B, not C, notA, notB, notC)
print s

Date: 2014-07-06 12:39 pm (UTC)
From: [identity profile] bronyuk.ru (from livejournal.com)
http://bronyuk.ru/s_pomoshcyu_dvuh_otritsaniy_sdelat_tri.html

Date: 2010-04-01 08:23 pm (UTC)
From: (Anonymous)
X = NOT(A AND B)
NOT(A) = B OR X
NOT(B) = A OR X
NOT(C) = NOT(C)
Как то уж очень просто.

Date: 2010-04-01 08:28 pm (UTC)
From: (Anonymous)
даже так:
X=NOT(A AND B AND C)
NOT(A) = X OR B OR C
NOT(B) = X OR A OR C
NOT(C) = X OR A OR B

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2010-04-01 09:52 pm (UTC) - Expand

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 30th, 2025 01:56 pm
Powered by Dreamwidth Studios