Баян в квадрате
От: vadimcher  
Дата: 16.01.10 03:32
Оценка: 3 (1) :))) :)
Вообще люди, серьезно занимающиеся теорией излучения и распространения баянов, баянизмом, знают, что в этой теории полно парадоксов, и некоторые из них понять и, тем более, представить достаточно сложно, по крайней мере, сложнее квантовой механики. Вот, например, возьмем базовое понятие. Единицей в баянизме принято считать "баян". И хотя баян является единицей в этой теории, при возведении в квадрат, он уже не баян, хотя единица в квадрате -- это единица... Странно как-то.

Не верите? Продемонстрировать этот эффект достаточно просто, и возможно даже в домашних условиях.

Возьмем какой-нибудь баян. Вот, например, этот:
"Раджа решил наградить двух своих мудрецов и подарить им участок земли. Все владения раджи -- участок земли 100 на 100. Он выделил им прямоугольный участок с целочисленными длиной и шириной, причем обе больше 1. Первому мудрецу S он сказал плошадь участка, а второму мудрецу P -- полупериметр. И сказал он им, что получат они от него этот участок, если оба, не сообщая друг другу никаких полученных сведений, поймут размеры участка.
S: я не знаю размеры :^(
P: а я знал, что ты не знаешь размеры :^P
S: а я теперь знаю размеры :^D
P: ну теперь и я тоже знаю, пакуем чемоданы!!!
Какой размер участка?"

Для начала не мешает убедиться, что это действительно баян. Проверим это с помощью следующей программы на C++:
#define S(x) x(stop, MAXS, ptos);
#define P(x) x(ptos, MAXP, stop);
void main(void) {
    init();
    S(idontknow)
    P(nothingnew)
    S(iknow)
    P(iknow)
    cout << out() << " solution(s)" << endl;
}

Несущественные детали реализации я опустил... Важно здесь, что выводит программа:
4x13 17 52
1 solution(s)

Таким образом, статус баяна подтвержден.

Теперь возведем его в квадрат:
"Раджа решил наградить двух своих мудрецов и подарить им участок земли. Все владения раджи -- участок земли 100 на 100. Он выделил им прямоугольный участок с целочисленными длиной и шириной, причем обе больше 1. Первому мудрецу S он сказал плошадь участка, а второму мудрецу P -- полупериметр. И сказал он им, что получат они от него этот участок, если оба, не сообщая друг другу никаких полученных сведений, поймут размеры участка.
S: я не знаю размеры :^(
P: а я знал, что ты не знаешь размеры :^P
S: да? а я знал, что ты знал, что я не знаю размеры! :^P
P: круто! я признаться, не знал, что ты знал, что я знал, что ты не знал размеры... и по-прежнему не знаю размеры :^(
S: а я теперь знаю размеры :^D
P: ну теперь и я тоже знаю, пакуем чемоданы!!!
Какой размер участка?"

Аналогичная программа:
#define S(x) x(stop, MAXS, ptos);
#define P(x) x(ptos, MAXP, stop);
void main(void) {
    init();
    S(idontknow)
    P(nothingnew)
    S(nothingnew)
    P(somethingnewbutistilldontknow)
    S(iknow)
    P(iknow)
    cout << out() << " solution(s)" << endl;
}

показывает, что это уже не баян! Что думаете, коллеги?

А вот зайца кому, зайца-выбегайца?!
Re: Баян в квадрате
От: servancho Россия https://dedis.ru
Дата: 16.01.10 08:16
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>показывает, что это уже не баян! Что думаете, коллеги?


Хороводоводовед?
Если руки золотые, не важно из какого места они растут.
Re: Баян в квадрате
От: rg45 СССР  
Дата: 17.01.10 15:56
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>...Вот, например, возьмем базовое понятие. Единицей в баянизме принято считать "баян". И хотя баян является единицей в этой теории, при возведении в квадрат, он уже не баян, хотя единица в квадрате -- это единица... Странно как-то.


Все дело в том, что единица в квадрате — это не простая единица, а КВАДРАТНАЯ! Как метр. Сам по себе — это просто метр, а в квадрате — совсем другое дело, он хоть и один, но уже квадратный. Так и баян
--
Re: Баян в квадрате
От: Кодт Россия  
Дата: 17.01.10 16:28
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>"Раджа решил наградить двух своих мудрецов и подарить им участок земли. Все владения раджи -- участок земли 100 на 100. Он выделил им прямоугольный участок с целочисленными длиной и шириной, причем обе больше 1. Первому мудрецу S он сказал плошадь участка, а второму мудрецу P -- полупериметр. И сказал он им, что получат они от него этот участок, если оба, не сообщая друг другу никаких полученных сведений, поймут размеры участка.


Раджа или благодушный попался, или невнимательный.
Мудрецы же — несознательно или хитроумно — нарушили условие, и таки сообщили друг другу полученные сведения

А если бы мудрецы вступили в предварительный сговор, они могли бы сообщить друг другу значения S и P двоичным кодом
— "1" — "я (по-прежнему) не знаю размеры"
— "0" — "я знаю, что ты не знаешь размеры"
— ";" — "я знаю, что ты знаешь, что я не знаю размеры"
Когда оба перешлют свои числа, они будут знать (S,P) и легко найдут ответ — каким бы он ни был.

V>S: я не знаю размеры :^(

V>P: а я знал, что ты не знаешь размеры :^P
V>S: да? а я знал, что ты знал, что я не знаю размеры! :^P
V>P: круто! я признаться, не знал, что ты знал, что я знал, что ты не знал размеры... и по-прежнему не знаю размеры :^(
V>S: а я теперь знаю размеры :^D
V>P: ну теперь и я тоже знаю, пакуем чемоданы!!!
V>Какой размер участка?"

Было бы интересно решить эту задачу каким-нибудь ленивым методом, а не просеивать всё пространство чисел (вынужденно ограниченное некими "разумными" пределами).
Перекуём баги на фичи!
Re: Баян в квадрате
От: vadimcher  
Дата: 20.01.10 04:36
Оценка: :))) :))) :)
Здравствуйте, vadimcher, Вы писали:
[]
V>Возьмем какой-нибудь баян. Вот, например, этот:
[]
V>Теперь возведем его в квадрат:
V>"Раджа решил наградить двух своих мудрецов и подарить им участок земли. Все владения раджи -- участок земли 100 на 100. Он выделил им прямоугольный участок с целочисленными длиной и шириной, причем обе больше 1. Первому мудрецу S он сказал плошадь участка, а второму мудрецу P -- полупериметр. И сказал он им, что получат они от него этот участок, если оба, не сообщая друг другу никаких полученных сведений, поймут размеры участка.
V>S: я не знаю размеры :^(
V>P: а я знал, что ты не знаешь размеры :^P
V>S: да? а я знал, что ты знал, что я не знаю размеры! :^P
V>P: круто! я признаться, не знал, что ты знал, что я знал, что ты не знал размеры... и по-прежнему не знаю размеры :^(
V>S: а я теперь знаю размеры :^D
V>P: ну теперь и я тоже знаю, пакуем чемоданы!!!
V>Какой размер участка?"

V>Аналогичная программа:

[]
V>показывает, что это уже не баян! Что думаете, коллеги?

Так как я ответ для "небаяна" знаю, задал эту задачку двум приятелям, т.е. одному сумму сказал, другому -- произведение. Причем даже сказал, что числа от 2 до 100. Причем они даже знают про исходный баян, и знают, что числа, которые я им сообщил, можно найти путем обмена подобными сообщениями... Между ними состоялся такой диалог:
— Я не знаю.
— Я тоже, хотя я знал, что ты не знаешь.
— Зашибись, я тоже знал, что ты не знаешь... Не помогло.
— Мне тоже.

А вот зайца кому, зайца-выбегайца?!
Re: Баян в квадрате
От: Буравчик Россия  
Дата: 20.01.10 14:05
Оценка: 15 (1)
Здравствуйте, vadimcher, Вы писали:

V>показывает, что это уже не баян! Что думаете, коллеги?


У меня получилась такая программка на haskell:

dialog2 = do
  A `say` IDontKnow     -- S: я не знаю размеры :^(
  P `say` IKnowThat     -- P: а я знал, что ты не знаешь размеры :^P
  A `say` IKnowThat     -- S: да? а я знал, что ты знал, что я не знаю размеры! :^P
  P `say` IDontKnowThat -- P: круто! я признаться, не знал, что ты знал, что я знал, что ты не знал размеры... 
  P `say` IDontKnow     --    и по-прежнему не знаю размеры :^(
  A `say` IKnow         -- S: а я теперь знаю размеры :^D
  P `say` IKnow         -- P: ну теперь и я тоже знаю, пакуем чемоданы!!!


Выдает:

Found 1 solution(s)
Region {side1 = 11, side2 = 26, area = 286, perimeter = 74}


Правильно?
Best regards, Буравчик
Re[2]: Баян в квадрате
От: Буравчик Россия  
Дата: 21.01.10 07:26
Оценка: 35 (3)
Полный листинг:

import qualified Data.Map as M
import Control.Monad.State
import Text.Printf

data Region = Region {side1::Int, side2::Int, area::Int, perimeter::Int} deriving Show

maxSide = 100
regions = [ Region a b (a*b) (2*a+2*b) | a <- [2..maxSide], b <- [a..maxSide] ]
area2regs = M.fromListWith (++) [ (area r, [r]) | r <- regions ]
perimeter2regs = M.fromListWith (++) [ (perimeter r, [r]) | r <- regions ]

---

data Sage = A | P
data Fact = IKnow | IDontKnow | IKnowThat | IDontKnowThat

update A IKnow (as,ps) = ([a | a <- as, length (filter (\r -> perimeter r `elem` ps) (area2regs M.! a)) == 1], ps)
update P IKnow (as,ps) = (as, [p | p <- ps, length (filter (\r -> area r `elem` as) (perimeter2regs M.! p)) == 1])

update A IDontKnow (as,ps) = ([a | a <- as, length (filter (\r -> perimeter r `elem` ps) $ area2regs M.! a) > 1], ps)
update P IDontKnow (as,ps) = (as, [p | p <- ps, length (filter (\r -> area r `elem` as) $ perimeter2regs M.! p) > 1])

update A IKnowThat (as,ps) = ([a | a <- as, all (\r -> perimeter r `elem` ps) $ area2regs M.! a], ps)
update P IKnowThat (as,ps) = (as, [p | p <- ps, all (\r -> area r `elem` as) $ perimeter2regs M.! p])

update A IDontKnowThat (as,ps) = ([a | a <- as, any (\r -> not $ perimeter r `elem` ps) $ area2regs M.! a], ps)
update P IDontKnowThat (as,ps) = (as, [p | p <- ps, any (\r -> not $ area r `elem` as) $ perimeter2regs M.! p])

---

type RadgaST a = State ([Int],[Int]) a

say :: Sage -> Fact -> RadgaST ()
sage `say` fact = get >>= put . update sage fact

calcDialog d = 
  let (as,ps) = execState d (M.keys area2regs, M.keys perimeter2regs)
  in [ r | r <- regions, area r `elem` as, perimeter r `elem` ps ]

run dialog = do
  let rs = calcDialog dialog
  putStrLn $ printf "Found %d solution(s)" (length rs)
  mapM_ (putStrLn.show) rs


Решение первой задачи:
main = run $ do
  A `say` IDontKnow
  P `say` IKnowThat
  A `say` IKnow
  P `say` IKnow


Решение второй:
main = run $ do
  A `say` IDontKnow     -- S: я не знаю размеры :^(
  P `say` IKnowThat     -- P: а я знал, что ты не знаешь размеры :^P
  A `say` IKnowThat     -- S: да? а я знал, что ты знал, что я не знаю размеры! :^P
  P `say` IDontKnowThat -- P: круто! я признаться, не знал, что ты знал, что я знал, что ты не знал размеры... 
  P `say` IDontKnow     --    и по-прежнему не знаю размеры :^(
  A `say` IKnow         -- S: а я теперь знаю размеры :^D
  P `say` IKnow         -- P: ну теперь и я тоже знаю, пакуем чемоданы!!!
Best regards, Буравчик
Re[3]: Баян в квадрате
От: vadimcher  
Дата: 21.01.10 21:45
Оценка:
Здравствуйте, Буравчик, Вы писали:

Б>Полный листинг:


Б>[ haskell]

Б>[ /haskell]

Б>Решение первой задачи:

Б>
Б>main = run $ do
Б>  A `say` IDontKnow
Б>  P `say` IKnowThat
Б>  A `say` IKnow
Б>  P `say` IKnow
Б>


Б>Решение второй:

Б>
Б>main = run $ do
Б>  A `say` IDontKnow     -- S: я не знаю размеры :^(
Б>  P `say` IKnowThat     -- P: а я знал, что ты не знаешь размеры :^P
Б>  A `say` IKnowThat     -- S: да? а я знал, что ты знал, что я не знаю размеры! :^P
Б>  P `say` IDontKnowThat -- P: круто! я признаться, не знал, что ты знал, что я знал, что ты не знал размеры... 
Б>  P `say` IDontKnow     --    и по-прежнему не знаю размеры :^(
Б>  A `say` IKnow         -- S: а я теперь знаю размеры :^D
Б>  P `say` IKnow         -- P: ну теперь и я тоже знаю, пакуем чемоданы!!!
Б>


Да, 11 26. Супер! Осталось только понять теперь, как это понять умом. Вообще, сколько пядей во лбу надо иметь, чтобы хотя бы понять, что твоя фраза может помочь другому понять, что его другая фраза поможет тебе и т.д.

Одному сказали 286, другому -- 37 (полупериметр). 286 = 2 * 11 * 13. У первого всего два варианта (так как поле ограничено 100): 22 13 или 11 26. Он не знает. У второго вариантов еще больше: 2 35, 3 34, ..., 18 19. Он знает, что первый не знает, если для каждого из вариантов можно придумать другой с таким же произведением, например, если предположить, что размер 2 35, то первый знает 70, и он не знает, то ли 2 35, то ли 10 7, или 14 5. Одно из чисел всегда четное, поэтому мы можем поделить его на 2, а второе умножить на 2 (оба по-прежнему меньше 100). Исключение -- случай 2 35, т.к. 2 на 2 делить нельзя, но мы его уже рассмотрели. Короче, он мог такое сказать.

Но далее, первый должен был сообразить, что он знал, что второй знал, что он не знал. Т.е. мало того, что он должен сообразить такое сказать, и оно может помочь другому, так еще и второй должен был сказать до этого, что он знал, что первый не знал. Короче, продолжаем. Первый теперь думает: 22 13 или 11 26. Если поле 11 26, то второй знает 37, значит он думает, что я знаю 2*35 или 3*34 и т.д., и в любом случае он знает, что у меня по крайней мере два варианта. Если же поле 22 13, то он знает 35, значит он думает, что я знаю 2*33 или 3*32 и т.д., и он опять-таки знает, что я изначально не знаю ответ, т.к., например, если я знаю 2*33, то у меня изначально несколько вариантов: 2*33 3*22 6*11, и т.д. Как и в случае 11 26.

В общем, он понимает, что оба варианта остались, т.е. никакой новой информации он не получил, но все-таки сообразил, что можно сказать, что он знал, что второй знал, что первый не знал.

Теперь второй чешет репу. Ему посложнее. У него по-прежнему все варианты 2 35, 3 34, ..., 18 19. Возьмем, например, 2 35. Тогда площадь была бы 70. Т.е. у первого было бы изначально три варианта 2 35, 5 14, 7 10. Знал бы он тогда, что я знал, что он не знает? Нет. Потому, что, он думал бы, что если поле было бы 5 14, то я бы знал 19, а тогда я не знал бы, что первый не знал, потому что я, имея сумму 19, не знал бы, а вдруг поле 2 17, а тогда первый сразу знает, что это и есть размеры поля. В общем, второй не знал, что первый знал, что второй знал, что первый не знал, и признался в этом (вдруг поможет -- хотя сама по себе эта фраза никак не помогает, первый после нее мог бы сказать, что он знал, что второй не знал, что первый знал, что второй знал, что первый не знал... но тогда это был бы уже баян в кубе). Далее, он думает, кто же остался после этого? 2 35 не может быть, т.к., как сказано выше, зная площадь 70, можно думать, что второй 5 14, а тогда второй не знал бы изначально, что первый не знал размеры. 3 34 дает площадь 102, варианты 2 51, 3 34, 6 17, во всех случаях первый мог бы такое сказать. Остается. Ну и т.д. Можно проверить, что второй, немного поразмыслив, придет к выводу, что осталось 7 возможных вариантов. Поэтому он говорит, что он пока не знает.

Но вот тут наступает замечательный момент! Первый теперь должен "немного поразмыслить" за каждого из возможных вариантов второго. Благо их всего два: 11 26 и 22 13, но у каждого по 16-17 вариантов первого, и прийти к выводу, что только 11 26 остался бы с несколькими вариантами, а 22 13 уже нашел бы ответ. Поэтому он говорит, что уже знает.

И теперь, внимание! У второго после предыдущих размышлений осталось 7 вариантов первого. Теперь он должен за каждого из них "немного поразмыслить" за каждый возможный вариант второго, чтобы прийти к выводу, что только один из них мог бы знать теперь ответ. Вот, например, первый вариант первого: допустим, что первый знает 3*34. Тогда у него варианты второго 2+51, 3+34, 6+17. Для каждого из них он должен перебрать все варианты первого, т.е. для 2+51: 2*51, 3*50, ..., 25*26, для 3+34 аналогично, и также для 6+17, и для каждого варианта первого посмотреть, мог бы тот первый знать, что второй сразу знал, что первый не знает. Т.е., например, для 3*50 надо посмотреть все варианты второго: 2+51, 3+50 и т.д. и выяснить, все ли он изначально знали, что первый не знает... Короче, я уже сам запутался.

Второй должен проделать всю процедуру, описанную выше, целиком для всех возможных 7 типов первого, включая все размышления каждого из них на предыдущем шаге, на котором, первый, кстати, размышлял за второго на предыдущем шаге, включающем перебор 15+ вариантов. В общем, мне даже описать это сложно.

Собственно, вопрос. Какая степень доверия должна быть к интеллектуальным способностям другого, чтобы вот так строить собственные выводы?..

А вот зайца кому, зайца-выбегайца?!
Re[4]: Баян в квадрате
От: Кодт Россия  
Дата: 21.01.10 22:20
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Собственно, вопрос. Какая степень доверия должна быть к интеллектуальным способностям другого, чтобы вот так строить собственные выводы?..

Владимир Лефевр, теория рефлексии...

Другое интересно: как без брутфорса найти решения. Просеять 100*100 — дело нехитрое...

Кстати, какие в принципе возможны решения, соответствующие произвольным цепочкам из {"не знаю", "я это знаю"}?
Перекуём баги на фичи!
Re[4]: Баян в квадрате
От: Буравчик Россия  
Дата: 22.01.10 11:01
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Вообще, сколько пядей во лбу надо иметь, чтобы хотя бы понять, что твоя фраза может помочь другому понять, что его другая фраза поможет тебе и т.д.


Вообще, в исходной задаче все фразы заданы изначально, а мы пытаемся найти вариант, подходящий под эти фразы.

И я так понимаю, ты предлагаешь решить другую задачу — что они должны говорить, чтобы найти ответ для заданной пары (площадь, периметр). И, похоже, данная задача не менее интересная, чем первая.

Мысль такая.

Исходя из предыдущих ответов каждый мудрец знает список возможных площадей и список возможных периметров. Т.е. достаточно запоминать два списка: возможные площади и возможные периметры (в начале эти списки включат все площади и все периметры). Каждая фраза какого-нибудь мудреца может уменьшить количество подходящих вариантов (уменьшается один из этих двух списков).

Значит, надо называть любую фразу, после анализа которой нам удастся вычеркнуть какие-либо варианты. И, наоборот, фразу, которая не позволяет убрать варианты, называть не нужно.

Последовательное выполнение данного правила приведет к двум случаям:
1. Останется единственный вариант (площадь, периметр). Это и будет ответ.
2. Останется несколько вариантов. И любые фразы мудрецов не позволят вычеркнуть варианты. Тогда решения нет, т.е. как бы они не пытались, они не смогут угадать ответ с помощью данных фраз.

В общем, нам не нужно понимать "... что твоя фраза может помочь другому понять, что его другая фраза поможет тебе и т.д.". Достаточно действовать исходя из ситуации, сложившейся на данном шаге.
Best regards, Буравчик
Re[5]: Баян в квадрате
От: Буравчик Россия  
Дата: 22.01.10 11:23
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Другое интересно: как без брутфорса найти решения. Просеять 100*100 — дело нехитрое...


По-моему, никак. Пара причин:

1. Как определить что данная площадь предполагает несколько вариантов (ответ мудреца Площадь: Я не знаю)? Только разложив ее на простые сомножители. Если сомножителей больше двух, то вариантов несколько. Т.е. анализ площадей завязан на простые числа. А значит, без перебора будет трудновато.

2. Как определить что данная площадь предполагает ровно один вариант (ответ мудреца Площадь: Я знаю)? Даже, если у нас есть некая система уравнений/неравенств, решив которое мы можем узнать площади, то нам надо доказывать единственность решения. Доказать единственность решения (площади), завязанного на список периметров, которые в свою очередь завязаны на площади (снова простые числа). И здесь без перебора будет трудновато.

В общем, я считаю, что сократить перебор можно, а полностью избавиться от него — нет.
Т.е. сложность не меньше O(N*N). В приведенных решениях, вроде, даже больше.

К>Кстати, какие в принципе возможны решения, соответствующие произвольным цепочкам из {"не знаю", "я это знаю"}?


Что имеется ввиду?

Я сделал небольшой анализ.
Вот список участков, для которых мудрецы могли бы найти решение с помощью такого типа цепочек.
Для поля 72х72: (сторона1, сторона2)

(2,10)
(2,15)
(3,18)
(4,13)
(5,6)
(48,72)
(50,72)
(54,64)
(60,60)

Best regards, Буравчик
Re[6]: Баян в квадрате
От: Кодт Россия  
Дата: 22.01.10 12:25
Оценка:
Здравствуйте, Буравчик, Вы писали:

К>>Другое интересно: как без брутфорса найти решения. Просеять 100*100 — дело нехитрое...


Б>По-моему, никак. Пара причин:


Б>1. Как определить что данная площадь предполагает несколько вариантов (ответ мудреца Площадь: Я не знаю)? Только разложив ее на простые сомножители. Если сомножителей больше двух, то вариантов несколько. Т.е. анализ площадей завязан на простые числа. А значит, без перебора будет трудновато.


Б>2. Как определить что данная площадь предполагает ровно один вариант (ответ мудреца Площадь: Я знаю)? Даже, если у нас есть некая система уравнений/неравенств, решив которое мы можем узнать площади, то нам надо доказывать единственность решения. Доказать единственность решения (площади), завязанного на список периметров, которые в свою очередь завязаны на площади (снова простые числа). И здесь без перебора будет трудновато.


Б>В общем, я считаю, что сократить перебор можно, а полностью избавиться от него — нет.

Б>Т.е. сложность не меньше O(N*N). В приведенных решениях, вроде, даже больше.

Но вряд ли автор задачи рассчитывал на брутфорс с помощью компьютера. Только на логические рассуждения.

"Площадь: я не знаю" — произведение p неоднозначно факторизуется — разбивается на сомножители.
"Сумма: я это знаю" — для суммы s, все пары слагаемых k,(s-k) дают k*(s-k) которые неоднозначно факторизуются.

Кстати, вопрос: множество таких сумм конечно или нет?
Оно просеивается простыми числами: {s} = N \ {x+y | x,y<-P}

"Площадь: теперь я знаю ответ" — все пары сомножителей m,(p/m) дают сумму m+p/m, все пары слагаемых которой, k,m+p/m-k дают произведения, которые неоднозначно факторизуются.
"Сумма: теперь и я знаю ответ" — грррррр!


К>>Кстати, какие в принципе возможны решения, соответствующие произвольным цепочкам из {"не знаю", "я это знаю"}?

Б>Что имеется ввиду?

Рассмотрим множество задач, в которых мудрецы в диалоге говорили упомянутые фразы.
Каждая такая задача определяется цепочкой фраз. Или, если угодно, цепочкой двоичных цифр 0 и 1

Некоторые из задач имеют единственное решение. "01", "0111" — только что рассмотрели.
Некоторые — имеют неоднозначное решение. Например, "" — "я знаю ответ, и я знаю ответ". Подходят 1,1 и 1,2.
Некоторые, возможно, вообще решения не имеют.
Перекуём баги на фичи!
Re[7]: Баян в квадрате
От: Буравчик Россия  
Дата: 22.01.10 13:27
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Но вряд ли автор задачи рассчитывал на брутфорс с помощью компьютера. Только на логические рассуждения.


По-моему, даже для анализа первого ответа необходимо факторизовать числа от 4 до 5184 (все возможные площади). Не похоже на задачку, которую можно решить в уме.

К>"Площадь: я не знаю" — произведение p неоднозначно факторизуется — разбивается на сомножители.

К>"Сумма: я это знаю" — для суммы s, все пары слагаемых k,(s-k) дают k*(s-k) которые неоднозначно факторизуются.

К>Кстати, вопрос: множество таких сумм конечно или нет?

К>Оно просеивается простыми числами: {s} = N \ {x+y | x,y<-P}

Т.е. числа, которые нельзя представить в виде суммы двух простых.

1. Существуют нечетные такие числа. Т.к. если s — нечетное, то x — четное, y — нечетное. Значит x = 2 (единственное четное простое), y = любое нечетное простое. И найдутся соседние простые числа расстояние между которыми больше двух.

2. Насчет четных s — это нерешенная проблема (любое чётное число не меньшее четырёх можно представить в виде суммы двух простых чисел). См. Проблема Гольдбаха

К>"Площадь: теперь я знаю ответ" — все пары сомножителей m,(p/m) дают сумму m+p/m, все пары слагаемых которой, k,m+p/m-k дают произведения, которые неоднозначно факторизуются.


И самое главное — такая пара должна быть единственной. Иначе он не знал бы ответ.
Как показать единственность без перебора?

К>"Сумма: теперь и я знаю ответ" — грррррр!


Я тоже не смог
Best regards, Буравчик
Re[7]: Баян в квадрате
От: Буравчик Россия  
Дата: 22.01.10 13:51
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Рассмотрим множество задач, в которых мудрецы в диалоге говорили упомянутые фразы.

К>Каждая такая задача определяется цепочкой фраз. Или, если угодно, цепочкой двоичных цифр 0 и 1

К>Некоторые из задач имеют единственное решение. "01", "0111" — только что рассмотрели.


Таких очень мало. Я привел список "единственных" решений для поля 72х72.

К>Некоторые — имеют неоднозначное решение. Например, "" — "я знаю ответ, и я знаю ответ". Подходят 1,1 и 1,2.


Таких много.

Кстати, для "я знаю ответ, и я знаю ответ" варианты 1,1 и 1,2 не подходят (т.к. сторона должна быть больше 2).
Зато подходит:

Region {side1 = 2, side2 = 2, area = 4, perimeter = 8}
Region {side1 = 2, side2 = 3, area = 6, perimeter = 10}
Region {side1 = 2, side2 = 5, area = 10, perimeter = 14}
Region {side1 = 2, side2 = 7, area = 14, perimeter = 18}
Region {side1 = 2, side2 = 11, area = 22, perimeter = 26}
Region {side1 = 2, side2 = 13, area = 26, perimeter = 30}
Region {side1 = 2, side2 = 17, area = 34, perimeter = 38}
Region {side1 = 2, side2 = 19, area = 38, perimeter = 42}
Region {side1 = 2, side2 = 23, area = 46, perimeter = 50}
Region {side1 = 2, side2 = 29, area = 58, perimeter = 62}
Region {side1 = 3, side2 = 5, area = 15, perimeter = 16}
Region {side1 = 4, side2 = 37, area = 148, perimeter = 82}
Region {side1 = 71, side2 = 72, area = 5112, perimeter = 286}
Region {side1 = 72, side2 = 72, area = 5184, perimeter = 288}


К>Некоторые, возможно, вообще решения не имеют.


Таких тоже много (не уверен).

Вообще, все это сильно зависит от размера исходного поля.
Best regards, Буравчик
Re[7]: Баян в квадрате
От: vadimcher  
Дата: 22.01.10 17:56
Оценка:
Здравствуйте, Кодт, Вы писали:
[]
К>"Площадь: я не знаю" — произведение p неоднозначно факторизуется — разбивается на сомножители.
К>"Сумма: я это знаю" — для суммы s, все пары слагаемых k,(s-k) дают k*(s-k) которые неоднозначно факторизуются.

К>Кстати, вопрос: множество таких сумм конечно или нет?

К>Оно просеивается простыми числами: {s} = N \ {x+y | x,y<-P}

К>"Площадь: теперь я знаю ответ" — все пары сомножителей m,(p/m) дают сумму m+p/m, все пары слагаемых которой, k,m+p/m-k дают произведения, которые неоднозначно факторизуются.

К>"Сумма: теперь и я знаю ответ" — грррррр!

К>>>Кстати, какие в принципе возможны решения, соответствующие произвольным цепочкам из {"не знаю", "я это знаю"}?

Б>>Что имеется ввиду?

К>Рассмотрим множество задач, в которых мудрецы в диалоге говорили упомянутые фразы.

К>Каждая такая задача определяется цепочкой фраз. Или, если угодно, цепочкой двоичных цифр 0 и 1

К>Некоторые из задач имеют единственное решение. "01", "0111" — только что рассмотрели.

[]

Вот здесь не понятно. 0111 -- в исходной задаче вторым было утверждение, что я знаю, что ты не знал. Такое утверждение отлично от утверждения я знаю ответ. В первом случае оно означает, что для моих вариантов никаких изменений не произошло, т.е. все варианты другого могли бы так сказать. А во втором случае оно означает, что из всех вариантов другого только один мог бы так сказать, а значит я уже знаю ответ. Поэтому в программе для этих двух ответов различные функции. Есть еще такая -- я не знал этого, т.е. не все варианты другого мог ли бы так сказать.

А вот зайца кому, зайца-выбегайца?!
Re[8]: Баян в квадрате
От: Кодт Россия  
Дата: 22.01.10 19:23
Оценка:
Здравствуйте, vadimcher, Вы писали:

К>>Некоторые из задач имеют единственное решение. "01", "0111" — только что рассмотрели.

V>[]

V>Вот здесь не понятно. 0111 -- в исходной задаче вторым было утверждение, что я знаю, что ты не знал.

Очепятался. Конечно же, 0110.

V>Такое утверждение отлично от утверждения я знаю ответ. В первом случае оно означает, что для моих вариантов никаких изменений не произошло, т.е. все варианты другого могли бы так сказать. А во втором случае оно означает, что из всех вариантов другого только один мог бы так сказать, а значит я уже знаю ответ. Поэтому в программе для этих двух ответов различные функции. Есть еще такая -- я не знал этого, т.е. не все варианты другого мог ли бы так сказать.


Подразумевается, что в конце строки есть два восклицания "эврика! я знаю ответ!"


Утверждение "я знаю, что ты знаешь" означает "я ещё с предыдущего полухода знал, что ты скажешь — но смолчал".
Смолчал не потому, что я такой подлец скрытный, а потому что
— не успел — это моё первое утверждение (второй полуход)
— косноязык и боюсь отхватить от раджи за болтливость, ибо что он подумает?
1. "я не знаю"
2. "я знаю что ты не знаешь"
3. "я знаю, что ты знаешь, что я не знаю"
==
1. "я не знаю; но знаю, что ты скажешь: "я знаю, что ты не знаешь..."
2. "ах вот оно как..."
Перекуём баги на фичи!
Re[9]: Баян в квадрате
От: vadimcher  
Дата: 22.01.10 20:15
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, vadimcher, Вы писали:


К>>>Некоторые из задач имеют единственное решение. "01", "0111" — только что рассмотрели.

V>>[]

V>>Вот здесь не понятно. 0111 -- в исходной задаче вторым было утверждение, что я знаю, что ты не знал.

К>Очепятался. Конечно же, 0110.

V>>Такое утверждение отлично от утверждения я знаю ответ. В первом случае оно означает, что для моих вариантов никаких изменений не произошло, т.е. все варианты другого могли бы так сказать. А во втором случае оно означает, что из всех вариантов другого только один мог бы так сказать, а значит я уже знаю ответ. Поэтому в программе для этих двух ответов различные функции. Есть еще такая -- я не знал этого, т.е. не все варианты другого мог ли бы так сказать.


К>Подразумевается, что в конце строки есть два восклицания "эврика! я знаю ответ!"



К>Утверждение "я знаю, что ты знаешь" означает "я ещё с предыдущего полухода знал, что ты скажешь — но смолчал".

К>Смолчал не потому, что я такой подлец скрытный, а потому что
К>- не успел — это моё первое утверждение (второй полуход)
К>- косноязык и боюсь отхватить от раджи за болтливость, ибо что он подумает?
К>1. "я не знаю"
К>2. "я знаю что ты не знаешь"
К>3. "я знаю, что ты знаешь, что я не знаю"
К>==
К>1. "я не знаю; но знаю, что ты скажешь: "я знаю, что ты не знаешь..."
К>2. "ах вот оно как..."

Ну да, но только по сути это уже не описывается как 0 и 1. 0 -- это утверждение, означающее, что у меня больше 1 варианта на "другого". 1 -- у меня ровно 1 вариант. А "я знаю, что ты знаешь/не знаешь/..." -- это, что все мои варианты другого к настоящему могли бы сказать то же самое (например, они все сказали бы 0, значит у них у всех к настоящему моменту было бы более одного своих вариантов, или они все сказали бы, что они знали -- это значит, что у них у всех все свои кандидаты (меня) такие, что они все сказали бы это).

А далее становится еще интереснее. Например, мы пробегаем все возможные варианты тех, кого можно было бы определить по серии таких утверждений (хотя бы тех четырех, что во второй задаче: я не знаю, я знаю, я знал, что..., я не знал, что...), получаем те размеры, которые можно так получить. Теперь смотрим на те, что нельзя так получить. Может есть еще какие-то утверждения, которые помогли бы теперь вытащить какие-то из этих размеров. Например, я знаю, что у меня сумма x, но в результате диалога остаются варианты:
сумма произведение
  x         a
  x         b
  y         a
  y         b

(Такие варианты действительно возможны после некоторой серии ответов.) В этом случае оба в стопоре. Я знаю, что он a или b, но кем бы он ни был он знает, что я x или y. Но может быть здесь есть другая серия сообщений, которая оставила бы теперь xa xb za zb, тогда по крайней мере он бы уже знал, что у меня x. Или такие, например, утверждения: "Я, признаться, не знал, что ты знал, что ... Вот если бы ты не знал, что ..., то я бы знал, что ..." Таким образом можно давать намеки на особенности суммы x по сравнению с суммой y.

У меня такое впечатление, что подобным образом можно было бы вытянуть любой размер, как в том самом утверждении, что "наименьшее натуральное число, которое нельзя записать 10 словами русского языка" -- если такой размер остался, который нельзя найти, то его как-то можно идентифицировать. Но требования к умственным способностям участников растут экспоненциально.

А вот зайца кому, зайца-выбегайца?!
Re: Баян в квадрате
От: Sinus Россия  
Дата: 02.02.10 07:23
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Вообще люди, серьезно занимающиеся теорией излучения и распространения баянов, баянизмом, знают, что в этой теории полно парадоксов, и некоторые из них понять и, тем более, представить достаточно сложно, по крайней мере, сложнее квантовой механики. Вот, например, возьмем базовое понятие. Единицей в баянизме принято считать "баян". И хотя баян является единицей в этой теории, при возведении в квадрат, он уже не баян, хотя единица в квадрате -- это единица... Странно как-то.


А вот самый классический баян легко возводится в квадрат и не только.
9 лампочек в одной комнате, 9 выключателей в другой, какое минимальное количество попыток необходимо и т. д...
И такая вариация. 4 лампочки в одной комнате, 4 выключателя в другой, но положение вкл-выкл для каждого из них может быть любым. Сколько здесь нужно попыток?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.