Перейти к содержанию

Сообщения от Викторина

Аватар пользователя
#1052
Можешь любой сложности искать. Я каждую разгадку постараюсь понять.
Всё не так плохо как Вы думаете. Всё намного хуже!
Аватар пользователя
#1053
Все случаи не проверяла, но навскидку везде двойная проверка и можно восстановить, какой бит битый и его реальное значение.

Вот только совсем не легкий пример получился. Возможно, кто-то найдет решение попроще.
А, по-моему, xor'ами весьма изящно! Мне нравится!
 

К А
Стикеры GBF в Telegram
Аватар пользователя
#1054
Немного, правда, смущает, что i1 передаётся и в bit1 и в bit2. У нас там количество информации впритык, точно ли это никак не скажется? Но, если работает, то Ок...
 

К А
Стикеры GBF в Telegram
Аватар пользователя
#1055
Нет не работает. Пост 1022.

Добавлено через 2 минуты
Так что можно отгадывать дальше.
Всё не так плохо как Вы думаете. Всё намного хуже!
Аватар пользователя
#1056
Ну в общем-то у меня хоги и были в одном случае, токо я их называл четностью для двух битов.
Но сама идея интересная, передавать сразу функцию вместо самого сообщения.

Добавлено через 1 час 2 минуты
Функция Ф - это хог, он же четность (0 - одинаковые символы, 1 - разные символы). Само сообщение - АБВГ, цифры - номера битов.
Бит 1: Ф(А, Б)
Бит 2: Ф(В, Г)
Бит 3: Ф(1, 2)
Видно наличие/отсутствие ошибки среди первых трех битов
Бит 4: Ф (А, Г)
Бит 5: Ф (Б, В)
Бит 6: А
Бит 7: В
Если ошибка в трех первых битах успешно читаем сообщение. Пусть там нет ошибки.
Можно проверить наличие ошибки в битах 4 и 5:
Мы точно знаем из 1го и 2го, одинаковые или разные А с Б и В с Г.
То есть 00, 01, 10 или 11.
Если 1й и 2й биты имеют значения 00 или 11, то 4 и 5 тоже должны быть либо 00, либо 11 (допустимы обе комбинации одинаковых значений).
Для 01 и 10 известных неизвестные без ошибки тоже должны быть 01 и 00.
Если ошибка среди 4 и 5 есть, мы по прежнему строим сообщение через биты 1,2,6,7. Пусть ее нету. Ошибка в А, в В либо ее вообще нету.
Если ошибки вообще нету, то подставив А и В в функции 1,2 и 3,4, получим исходное сообщение в обоих случаях, причем одинаковое. Если разное, то инвертировав либо А, либо В, можем назвать абсолютно точно Ф(А, В). Я не знаю почему, но кажется, что решив систему уравнений с этой функцией и функциями из битов 1-2, 4-5, можно найти, в А или В косяк. Но видимо нет, но думать мне уже лень. Но предыдущий результат я несколько улучшил. Я читаю сообщение в 5 случаях испорченного бита и в случае отсутствия ошибки, и только в случае порчи двух конкретных битов имею 2 варианта сообщения, причем знаю об этом.
Можно попробовать также, но контрольный (3й бит) взять как Ф (2, 6).
Аватар пользователя
#1057
да, действительно. В моем решении в случае поломки бит5 возникает неопределенность. Так что не годится.
ладно, возвращаемся к передаче сообщения и "контрольной суммы".
Только в контрольной сумме ксорим не попарно, как Уран, а первый бит с каждым из следующих.

Сообщение: i1 i2 i3 i4

Передаем
bit1: i1
bit2: i2
bit3: i3
bit4: i4
bit5: xor(bit1,bit2)
bit6: xor(bit1,bit3)
bit7: xor(bit1,bit4)

Чуть позже проверю для всех вариантов.

Добавлено через 2 часа 58 минут
мде, все равно остались неоднозначности.
Этот вариант тоже нерабочий.
..разым двазым трызым рызым пята лата сигерь мата локом боком крюк за крюк из бульмы бульма урюк..
Знание некоторых закономерностей освобождает от изучения многих фактов.
Мечты сбываются рано или поздно, так или иначе.
В ответ пользователю Uranium235
Аватар пользователя
#1058
Uranium235
Ну в общем-то у меня хоги и были в одном случае, токо я их называл четностью для двух битов.
Но сама идея интересная, передавать сразу функцию вместо самого сообщения.

Добавлено через 1 час 2 минуты
Функция Ф - это хог, он же четность (0 - одинаковые символы, 1 - разные символы). Само сообщение - АБВГ, цифры - номера битов.
Бит 1: Ф(А, Б)
Бит 2: Ф(В, Г)
Бит 3: Ф(1, 2)
Видно наличие/отсутствие ошибки среди первых трех битов
Бит 4: Ф (А, Г)
Бит 5: Ф (Б, В)
Бит 6: А
Бит 7: В
Если ошибка в трех первых битах успешно читаем сообщение. Пусть там нет ошибки.
Можно проверить наличие ошибки в битах 4 и 5:
Мы точно знаем из 1го и 2го, одинаковые или разные А с Б и В с Г.
То есть 00, 01, 10 или 11.
Если 1й и 2й биты имеют значения 00 или 11, то 4 и 5 тоже должны быть либо 00, либо 11 (допустимы обе комбинации одинаковых значений).
Для 01 и 10 известных неизвестные без ошибки тоже должны быть 01 и 00.
Если ошибка среди 4 и 5 есть, мы по прежнему строим сообщение через биты 1,2,6,7. Пусть ее нету. Ошибка в А, в В либо ее вообще нету.
Если ошибки вообще нету, то подставив А и В в функции 1,2 и 3,4, получим исходное сообщение в обоих случаях, причем одинаковое. Если разное, то инвертировав либо А, либо В, можем назвать абсолютно точно Ф(А, В). Я не знаю почему, но кажется, что решив систему уравнений с этой функцией и функциями из битов 1-2, 4-5, можно найти, в А или В косяк. Но видимо нет, но думать мне уже лень. Но предыдущий результат я несколько улучшил. Я читаю сообщение в 5 случаях испорченного бита и в случае отсутствия ошибки, и только в случае порчи двух конкретных битов имею 2 варианта сообщения, причем знаю об этом.
Можно попробовать также, но контрольный (3й бит) взять как Ф (2, 6).

Пока это самое лучшее, правда, ещё не читал, что Sesame написала. Тут уже гарантированно можно обнаружить, что была ошибка! Но всё же, например...
По вашему алгоритму комбинация 0000 кодируется сообщением 0000000,
а комбинация 1111 кодируется сообщением 0000011.
А мы допустим мы получили комбинацию 0000010 :(
Да, понятно, что испортили один бит и даже больше - это шестой или седьмой бит. Но как понять передавали 0000 и испортили шестой бит с 0 на 1 или 1111 и испортили седьмой бит с 1 на 0???

Добавлено через 11 минут
Sesame
да, действительно. В моем решении в случае поломки бит5 возникает неопределенность. Так что не годится.
ладно, возвращаемся к передаче сообщения и "контрольной суммы".
Только в контрольной сумме ксорим не попарно, как Уран, а первый бит с каждым из следующих.

Сообщение: i1 i2 i3 i4

Передаем
bit1: i1
bit2: i2
bit3: i3
bit4: i4
bit5: xor(bit1,bit2)
bit6: xor(bit1,bit3)
bit7: xor(bit1,bit4)

Чуть позже проверю для всех вариантов.

Добавлено через 2 часа 58 минут
мде, все равно остались неоднозначности.
Этот вариант тоже нерабочий.
Тоже не плохо. Ошибка обнаруживается. Но вот, например, 0000 передавали или 0100 не понятно, если получили 0100000, потому что 0000 соответствует 0000000, а 0100 - 0100100 и тут та же ситуация, что и у Uranium235.
Всё не так плохо как Вы думаете. Всё намного хуже!
Аватар пользователя
#1059
Я ещё вот такое придумал на основе вышеозвученных идей, но проверил программой, вроде бы оно где-то сфейлилось.
bit1=xor(i1,i2)
bit2=xor(i1,i3)
bit3=xor(i1,i4)
bit4=xor(i2,i3)
bit5=xor(i2,i4)
bit6=xor(i3,i4)
bit7=i1

Сфейлилось на 1001 и 0110.
1001:
0011001
0110:
0011000
Если в одном варианте немцы испортят последний бит, то они совпадут. А жаль... Ну, я тоже пытался.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
#1060
Хм, а вот этот алгоритм вроде не сфейлился:
bit1=xor(i1,i2)
bit2=xor(i1,i3)
bit3=xor(i1,i4)
bit4=xor(i2,i3)
bit5=xor(i2,i4)
bit6=i2
bit7=i1

Ой, только я ступил, у меня там обратный xor в проверках фигурировал. Ошибся ) То есть 1, когда операнды одинаковые. Но да не суть, с нормальным тоже проверка проходится. Они симметрично работают.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
#1061
Ment
Хм, а вот этот алгоритм вроде не сфейлился:
bit1=xor(i1,i2)
bit2=xor(i1,i3)
bit3=xor(i1,i4)
bit4=xor(i2,i3)
bit5=xor(i2,i4)
bit6=i2
bit7=i1

Ой, только я ступил, у меня там обратный xor в проверках фигурировал. Ошибся ) То есть 1, когда операнды одинаковые. Но да не суть, с нормальным тоже проверка проходится. Они симметрично работают.
Да. Ошибка обнаруживается, но опять же могу процитировать то, что я писал Урану.
Hermit

По вашему алгоритму комбинация 0000 кодируется сообщением 0000000,
а комбинация 1111 кодируется сообщением 0000011.
А мы допустим мы получили комбинацию 0000010 :(
Да, понятно, что испортили один бит и даже больше - это шестой или седьмой бит. Но как понять передавали 0000 и испортили шестой бит с 0 на 1 или 1111 и испортили седьмой бит с 1 на 0???
К твоему алгоритму это тоже применимо.
Пока самый лучший вариант предложил Уран.
Всё не так плохо как Вы думаете. Всё намного хуже!
Аватар пользователя
#1063
что-то я вообще начинаю сомневаться, что эту задачу можно решить через XORы.
Небось в ответе какая-нибудь подколка из разряда: если первый символ 0, то передаем только шесть бит (а кто сказал, что их обязательно 7?)
В общем, предлагаю подумать еще и в этом направлении.
..разым двазым трызым рызым пята лата сигерь мата локом боком крюк за крюк из бульмы бульма урюк..
Знание некоторых закономерностей освобождает от изучения многих фактов.
Мечты сбываются рано или поздно, так или иначе.
В ответ пользователю Sesame
Аватар пользователя
#1064
Sesame

Небось в ответе какая-нибудь подколка из разряда: если первый символ 0, то передаем только шесть бит (а кто сказал, что их обязательно 7?)
В общем, предлагаю подумать еще и в этом направлении.

Нет в ответе передаются все 7 битов!

Добавлено через 33 секунды
Их должно быть 7!
Всё не так плохо как Вы думаете. Всё намного хуже!
Аватар пользователя
#1065
А если на xor'ах мы теряем часть информации? Что если ввести ещё что-нибудь? And, например. And работает совсем иначе (а вот если есть and, то or уже не понадобится).
Или надо-таки для избежания потерь передать эти несчастные i1,i2,i3,i4, а потом замутить xor(i1,i2), xor(i1,i3), xor(i1,i4)
Как раз получается три xor'а. Хотя всё равно я вижу, что это не работает, можно придумать пример. Эх.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
#1066
XOR вроде дает информации больше, чем AND или OR, но не знаю, других идей все равно нет. Я еще вспомнила, что ксорить можно больше двух бит )) Но лично мне это не помогло.
..разым двазым трызым рызым пята лата сигерь мата локом боком крюк за крюк из бульмы бульма урюк..
Знание некоторых закономерностей освобождает от изучения многих фактов.
Мечты сбываются рано или поздно, так или иначе.