Если алгоритм шифровки должен подходить к любому тесту с заранее неизвестными комбинациями ответов, то такого алгоритма не существует, т. к. различных комбинаций вариантов ответов больше миллиона, а трёхзначных чисел всего 1000. Если нужен алгоритм для нескольких (не более 1000) конкретных комбинаций ответов, то нужно исходить непосредственно из этих комбинаций.
Sav, заранее заданных ответов нет. Имея этот алгоритм, мне нужно будет лишь в соответствии с номером варианта теста "сгенерировать" варианты ответа. Дальше вопросы из базы сами расставятся как нужно, подставив под эти числа правильные ответы. То есть задача именно такова, как я ее сформулировал, никаких других ограничений нет.
tolich
08 Jun 2012, 13:57
Переформулирую: Из трехзначного десятичного числа получить десятизначное четверичное число с как можно более разными цифрами. Так?
Пусть номер 235.
1) Берем две первые цифры, 23. Переводим в четверичную с/с: 113, добавляем к каждому разряду 1 (игнорируя, что это четверичная система), получаем 224 - номера трех первых верных ответов.
2) Берем две последние цифры, 35. Переводим в четверичную с/с: 203, добавляем к каждому разряду 1 (игнорируя, что это четверичная система), получаем 314 - номера трех следующих верных ответов.
2) Берем последнюю и перую цифры, 52. Переводим в четверичную с/с: 310, добавляем к каждому разряду 1 (игнорируя, что это четверичная система), получаем 421 - номера трех последующих верных ответов.
4) Смотрим, какой номер встречался меньше всех, это 3, берём его номером 10-го верного ответа.
Okay?
Да, если из 99 получается 1203, старшую 1 мы смело игнорируем, а если минимальны два или три номера, то берем минимальный по значению.
tolich, спасибо, но хотелось бы, чтобы процесс вычисления занимал не больше 15-20 секунд. Мне потребовалась больше минуты, только чтобы из 719 в уме получить три четвертичных числа. Я ищу алгоритм, который может быть и алгебраически "некрасив", содержать какие-то перестановки, разные роли чисел в нем (например, параметр какой-нибудь прогрессии), особые правила замены одних чисел другими (вместо канонического перехода в четвертичную систему) и тому подобное - лишь бы все это было максимально просто. А под "нетрививально" я скорее подразумевал "неочевидно". Разные цифры - это здорово, но не обязательно. Необходимо, лишь чтобы те или иные цифры не превалировали совсем уж заметным образом. Ну и каждому варианту должно соответствовать только одно множество ответов (я так понимаю, с 4 пунктом могут возникнуть неопределенности).
И все равно спасибо.
tolich
08 Jun 2012, 15:00
Значит, возводить в квадрат двузначные числа в уме мы могем, а перевод в четверичную систему напрягает.

А это банально x/16%4, x/4%4 и x%4.
Пример: 71 (из 719): 71 - два раза пополам дает 17, еще 2 раза пополам 4. В первом случае остаток 3, во втором 1. Итого 0 (так как 4 идет в следующий разряд), 1, 3 - номера 1, 2, 4.
Ну, вопрос ведь еще в том, сколько раз нужно проделать операцию. Но даже если сравнить возведение одного двузначного числа в квадрат или перевод одного двузначного числа в четвертичную систему, второе все равно получается для меня более трудоемким: во-первых, треть квадратов двузначных чисел я наизусть знаю, а во-вторых, много операций деления, а с остатками вообще непривычно работать. Вроде ничего сложного, но на автомате не выходит: моим гуманитарным мозгам нужно "контролировать" весь процесс. А у меня из-за этого на лице возникает странное (читай: глупое) выражение. Короче, надобно нам чевойто попроще.
nosferatu
08 Jun 2012, 15:38
У меня такое ощущение, что ты выдумываешь какую-то хитрую шпору.
Нет, ведь исходные данные у меня - номер варианта, а не ответы на вопросы в нем.
tolich
08 Jun 2012, 16:17
Мне почему-то кажется, что Aleee препод.
SaintDark
08 Jun 2012, 16:23
Видать алгоритм шифрования ответов егэ или чего-то в этом роде вычислили
Цитата(tolich @ 08 Jun 2012, 16:17)

Мне почему-то кажется, что Aleee препод.

Достаточно горячо.
Я не понимаю, как можно зашифровать миллион вариантов в трехзначном (тысяча вариантов) числе?
А, или суть в том, чтобы поменять местами варианты ответов, адаптировав под расшифровываемую из фиксированного номера информацию?
В том и дело, что адаптировать вообще ничего не нужно. Алгоритм должен просто задавать соответствие: каждому номеру варианта - одну последовательность ответов. Входные данные - номер варианта. Какие числа будут на выходе - это не важно, лишь бы они удовлетворяли тем условиям, о которых я писал.
Etoprostoya
08 Jun 2012, 19:42
xyz - трёхзначное число, (x,y,z) - цифры.
1) (x+y+z)mod4;
2) (x+y-z)mod4;
3) (x-y+z)mod4;
4) (x-y-z)mod4;
5) (-x+y+z)mod4;
6) (-x+y-z)mod4;
7) (-x-y+z)mod4;
8) (-x-y-z)mod4;
9) (x+y)mod4;
10) (y+z)mod4;
tolich
08 Jun 2012, 19:57
1)+8)=2)+7)=3)+6)=4)+5)=0 (mod 4)
Etoprostoya
08 Jun 2012, 20:31
Цитата(etoprostoya @ 08 Jun 2012, 20:42)

xyz - трёхзначное число, (x,y,z) - цифры.
1) (x+y+z)mod4;
2) (x+y-z)mod4;
3) (x-y+z)mod4;
4) (x-y-z)mod4;
5) (-x+y+z)mod4;
6) (-x+y-z)mod4;
7) (-x-y+z)mod4;
8) (-x-y-z)mod4;
9) (x+y)mod4;
10) (y+z)mod4;
Цитата(tolich @ 08 Jun 2012, 20:57)

1)+8)=2)+7)=3)+6)=4)+5)=0 (mod 4)
Думаешь, все сразу заметят, что ответы чередуются?
1) (x+y+z)mod4;
2) (x+y-z)mod4;
3) (x-y+z)mod4;
4) (x-y-z)mod4;
5) (10-x+y+z)mod4;
6) (10-x+y-z)mod4;
7) (10-x-y+z)mod4;
8) (10-x-y-z)mod4;
9) (x+y)mod4;
10) (y+z)mod4;
tolich
08 Jun 2012, 20:34
теперь =2, велика разница.
Etoprostoya
08 Jun 2012, 20:39
Цитата(tolich @ 08 Jun 2012, 21:34)

теперь =2, велика разница.

Так не в этом же дело. Нужно было создать систему, по которой легко вычислять ответ и которую не легко понять тому, кто не знает системы.
etoprostoya, это я уже прикидывал. Дело в том, что в зависимости от четности/нечетности суммы цифр почти весь тест (по крайней мере первые 8 ответов) будет состоять из двух вариантов ответа, которые вдобавок ко всему часто (примерно в половине случаев) будут идти одинаковыми блоками по 2/4 элемента.
Etoprostoya
08 Jun 2012, 21:20
Тогда возьми другой модуль. 5 - очень простой модуль для вычисления. Будут ответы 0, 1, 2, 3, 4. Ноль просто не используй или заменяй его в результате на какую-то одну цифру. Там с чётностью проблем уже не будет, наверное.
Или так:
1) (x+y+z)mod4;
2) (x+y-z)mod4;
3) (x-y+z)mod4;
4) (x-y-z)mod4;
5) (5-x+y+z)mod4;
6) (6-x+y-z)mod4;
7) (7-x-y+z)mod4;
8) (8-x-y-z)mod4;
9) (x+y)mod4;
10) (y+z)mod4;
Цитата(etoprostoya @ 08 Jun 2012, 21:20)

Тогда возьми другой модуль. 5 - очень простой модуль для вычисления. Будут ответы 0, 1, 2, 3, 4. Ноль просто не используй или заменяй его в результате на какую-то одну цифру. Там с чётностью проблем уже не будет, наверное.
Да, можно пойти в сторону усложнения (не вычислений, все остается просто, а скорее правил). Но тут тоже появляются свои нюансы. Например, четвертый и пятый ответы будут всегда одинаковыми (даже если заменить 10 на 5/6/7/8). Ноль придется всегда заменять на что-то одно: не должно быть неопределенности. Множество ответов для вариантов с одним или двумя нолями получается совсем некрасивым: много идущих подряд цифр, опять же блочность. Зато, конечно, если цифры разные, ненулевые - множества получаются хорошие.
В принципе, что-то подобное мне наверное и придется взять на вооружение, но я все еще лелею мысль, что получится придумать что-то простое и гениальное.
tolich
08 Jun 2012, 22:40
Двоично-десятичная запись:
469 = 01|00 01|10 10|01
4*4=16 = 0001 0110
6*6=36 = 0011 0110
9*9=81 = 1000 0001
Подчеркнутые цифры - двоичные номера правильных ответов, по порядку, складываем выделенные жирным числа по модулю 4, получаем ответ на 10-й вопрос.
Номера вариантов: 1 0 1 2 2 1 1 3 0 1.
Последний вычисляется так сложно потому, что квадраты заканчиваются только на 0,1,4,5,6, то есть, на 0,1,2 - нет тройки. Суммирование слегка повышает шанс её появления.
Etoprostoya
08 Jun 2012, 23:01
tolich
вариант, может быть и выдаёт более непредсказуемые результаты, но не думаю, что он из числа решаемых за 15-20 секунд.
Цитата(tolich @ 08 Jun 2012, 22:40)

Двоично-десятичная запись:
...
Очень, очень интересно. В принципе, однозначное число перевести в двоичную можно почти моментально, шесть ответов получаются очень быстро. Еще три тоже относительно быстро. С десятым можно что-нибудь арифметическое придумать. Из существенных недостатков: некоторые на первый взгляд нетривиальные номера вариантов дадут не самые красивые множества ответов (например, вообще без какого-нибудь варианта ответа: 701 -> {130001100}), а рядомстоящие варианты будут различаться совсем незначительно (чаще всего - на 1/2 ответа). Это все не критично, и вообще мне идея нравится. Но тем не менее.
tolich
09 Jun 2012, 00:44
Лично мне в этой схеме не нравится, что все номера, кроме последнего, зависят только от одной цифры. Увы, пока хороших идей больше нет.
Действительно, совпадение хотя бы первых двух ответов у вариантов с одинаковыми первыми цифрами наблюдательный глаз заметить сможет. Будет, наверное, менее очевидно, если просто немного перетасовать порядок использования цифр, но зависимость все равно останется.
DRONыч
09 Jun 2012, 09:21
( (x+1)*4 + (y+1) *2 +z+1) mod 4
( (x+1)* (y+1) *(z+1)+z) mod 4
SerAlexandr
09 Jun 2012, 09:24
Цитата(DRONыч @ 09 Jun 2012, 12:21)

( (x+1)*4 + (y+1) *2 +z+1) mod 4
( (x+1)* (y+1) *(z+1)) mod 4
В первой формуле х не влияет на ответ, во второй многовато нолей.
tolich
09 Jun 2012, 09:31
А ещё в обеих формулах отсутствует номер вопроса.
DRONыч
09 Jun 2012, 10:52
(x+y+z+3^( (2*z)mod 3) )mod 4
2 1 0 1 0 3 0 3 2
Я что-то не понял, как у вас одно выражение с заданными xyz свелось к девяти ответам.
tolich
09 Jun 2012, 15:52
Маленькая просьба: забудьте о вычислениях по модулю. Например: 9*7+6 = 1*3+2 = 1 (mod 4). И так всюду, где в вычислениях по модулю фигурируют исходные десятичные цифры, останется только четыре варианта из десяти, вместо тысячи раскладов получается заведомо не больше, чем 64.
DRONыч
09 Jun 2012, 16:46
Цитата(Aleee @ 09 Jun 2012, 14:23)

Я что-то не понял, как у вас одно выражение с заданными xyz свелось к девяти ответам.
уточнение по задаче: в тесте 10 вопросов или есть 10 разных вариантов теста? (если первое, то я привел ответы к первым 10 вопросам)
Цитата(DRONыч @ 09 Jun 2012, 16:46)

Цитата(Aleee @ 09 Jun 2012, 14:23)

Я что-то не понял, как у вас одно выражение с заданными xyz свелось к девяти ответам.
уточнение по задаче: в тесте 10 вопросов или есть 10 разных вариантов теста? (если первое, то я привел ответы к первым 10 вопросам)
Все верно: в одном тесте 10 вопросов. Вариантов теста много, |XYZ| - номер варианта теста, который объединяет 10 вопросов. Я спрашивал, как получилось подставить в уравнение один набор чисел и получить 10 ответов.
tolich
10 Jun 2012, 06:00
Видимо, он подставлял разные.
Верно ли утверждение x>y и y>x => x=y ?
SerAlexandr
06 Sep 2012, 18:52
Нет. Вот x>=y и y>=x => x==y - верно.
Цитата(packa @ 06 Sep 2012, 19:50)

Верно ли утверждение x>y и y>x => x=y ?
Юзаем спойлер
Нет, верно!) Завтра напишу почему, ну по крайней мере как нам сказали
FallenAngel
06 Sep 2012, 18:57
Так неравенства же строгие, значит приведенное условие не имеет значения.
У нас тут не философия) Без всяких абстрактных имеет или не имеет значение В конце жду четкого ответа True or False! и пожалйста под спойлер!
SerAlexandr
06 Sep 2012, 19:02
дошло, что имелось, очевидно,
определение импликации. Однако, 1) определение сделано таким от безысходности, и 2) использовать знак следствия в таком случае негуд.
2) не знаю почему, но я вот только начал учиться в универе, и тут всегда так пишут.
SerAlexandr
06 Sep 2012, 19:22
-> должно быть, по идее.
меня тоже несколько лет так в школе учили Авось кто умный сюда придет и растолкует что к чему
feanor
06 Sep 2012, 19:29
Корректно было бы
Чему равно x>y ∧ y>x → x=y
Корректно обычно вопросов с подковыркой не бывает)))
FallenAngel
06 Sep 2012, 20:21
Все-таки это не лишено смысла, если значения x и y находились бы в параллельных измерениях. Т.е., если x>y, то неравенство x<y возможно в случае, когда y "разорвала" бы рассматриваемое измерение, то бишь вышло за пределы множества, которое принимают x и y. Но параллельное измерение должно быть фактически зеркальным изображением нашего. Тогда остается лишь "вбить" y в систему, связанную с x в параллельном измерении.
Так что давайте молиться, чтобы спонтанные разрывы материи нашего измерения произошли в этом запутанном выражении.
Upd. Другими словами, это явление будет выглядеть, как будто y выворачивает себя наизнанку. Если бы у нас были бы функции f(x) и f(y) в условии, даже линейные, я бы наглядно показал вам, как я это себе представляю :3
Цитата(packa)
У нас тут не философия) Без всяких абстрактных имеет или не имеет значение В конце жду четкого ответа True or False! и пожалйста под спойлер!
Где тут философия? Отсутствие смысла у выражения - вполне конкретная его характеристика.
Тем более что не указано, чем являются x и y (или каким образом для них определены операции сравнения).
tolich
06 Sep 2012, 20:37
x | y | x>y | y>x | x=y | x>y и y>x | x>y и y>x => x=y |
1 | 1 | 0 | 0 | 1 | 0 | 1 |
1 | 2 | 0 | 1 | 0 | 0 | 1 |
2 | 1 | 1 | 0 | 0 | 0 | 1 |
Впрочем, даже без таблицы: (x>y и y>x) - ложь, а из лжи, мало того, что имплицируется что угодно, так ещё и выводится что угодно.
Это одно из свойств логического вывода.