PDA

View Full Version : любителям логики


Страницы : 1 [2]

alexer
26-04-2019, 10:03
Ну нет... В википедии там приведены были конструкции вида "невыполнимое условие >> ошибочное следствие". Например: "ЕСЛИ крокодилы летают, то я - английская королева". Это даже "парадоксом"-то можно назвать с большой натяжкой, т.к. это по сути есть логическая конструкция вида: "если я наврал здесь, то я вру и здесь тоже". Всё довольно логично.
А когда написано "так как крокодилы летают, то я английская королева" - это уже не понятно что. Это какой-то бред. Потому как конструкция начинается с ложного УТВЕРЖДЕНИЯ, а не УСЛОВИЯ.
Ну а ситуация с поездами на Марсе - вообще совсем другой случай. Мне даже не понятно, как вам удается это всё смешивать в одну кучу
Да это неважно абсолютно. Вы прицепились к тому, какая там подчинительная связующая конструкция стоит: "если" или "т.к".
Важно, что утверждение имеет вид A=>B. Где для A="крокодилы летают" и B="я-королева" можно сказать "истина" или "ложь". Тогда истинность или ложность выражения "A=>B" будет определяться таблицей истинности для импликации. Вот собственно и все. Блин, это правда так трудно понять?? Ну давайте "если" говорить, если вам так больше нравится: я не против. Поезда из той же абсолютно оперы, но объяснять это я не буду: устал :) Тут бы с монетами донести.

alexer
26-04-2019, 10:06
От 50% процентов шанс спастись даст простой договор что второй заключенный выбирает монету повернутую той стороной, которая допустим в клетке А1.
А по твоему примеру только от 6 % получается шанс спастись. Или надо знать раскладку до переворачивания.
Ох, все там нормально получается... Не надо им ничего знать "до переворачивания"
Второй заключенный, когда заходит, видит раскладку с уже перевернутой монетой :
А Р
А Р
Смотрит в первый столбец: "ага, там А,А, обе монеты повернуты одинаково, значит магическая в первой строке".
Дальше смотрит в первую строку: "ага, тут А,Р, монеты повернуты по-разному, значит магическая во втором столбце".
Т.е. магическая во втором столбце первой строки, что и было загаданно.

Mikky
26-04-2019, 10:13
Ещё задачи логические будут? Может "про гномов"?
Задача про гномов давно уже гуляет по интернету (лет 10-15) , вот один из вариантов текста -
Вечером людоед поймал нескольких гномов и собрался их съесть на завтрак. Пребывая в добром расположении духа, он решил, что даст нескольким гномам шанс спастись и объяснил условия.

"На следующее утро - сказал он, я построю вас в колонну и в случайном порядке надену на вас шапки двух цветов (красный и синий). Начиная с последнего в колонне, я буду спрашивать, какого цвета его шапка. Того, кто назовет цвет своей шапки правильно - отпущу, тех кто назовет неправильный цвет - того съем. Вы будете видеть всех тех, кто стоит впереди и слышать ответы тех, кто сзади. Но цвет своей шапки никто не видит. Говорить можно только одно слово – «красный» или «синий», иначе съем всех сразу".

Соотношение красных и синих шапок гномы не могут знать. Никакие дополнительные сигналы подавать нельзя (интонацией, паузами в ответах и т.п.).

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

Димыч
26-04-2019, 10:28
....
Спасибо. Сейчас подумаю

Димыч
26-04-2019, 10:32
Да это неважно абсолютно. Вы прицепились к тому, какая там подчинительная связующая конструкция стоит: "если" или "т.к".
Важно, что утверждение имеет вид A=>B. Где для A="крокодилы летают" и B="я-королева" можно сказать "истина" или "ложь". Тогда истинность или ложность выражения "A=>B" будет определяться таблицей истинности для импликации. Вот собственно и все. Блин, это правда так трудно понять?? Ну давайте "если" говорить, если вам так больше нравится: я не против. Поезда из той же абсолютно оперы, но объяснять это я не буду: устал :) Тут бы с монетами донести.
Конечно трудно, т.к. нельзя сложить один килограмм с одним градусом кельвина, хотя 1+1 всегда =2 (в троичной и выше системе исчисления).
Поезда на Марсе - из другой оперы. Из оперы нулевых множеств все-таки.
p.s. Чтобы донести с монетами - надо сделать то же самое: чётче сформулировать мысль. Тогда если она правильная, то её могут понять и согласиться с ней.

Димыч
26-04-2019, 11:09
Про "гномов" догадался вроде. Простая задача, хотя пришлось призадуматься всё-таки.
p.s. Гномы хитрющие, блин! Как я практически! :gy:

Димыч
26-04-2019, 11:22
Девушка крутится по часовой стрелке или против?

alexer
26-04-2019, 11:29
Девушка крутится по часовой стрелки или против?
В обе стороны, т.к. картинка симметричная относительно центра. Направление вращения — это обман зрения, связанный с ведущим полушарием у наблюдателя. Если Вы немного приноровитесь, то сможете заставить ее вращаться в любую сторону по собственному желанию.

Димыч
26-04-2019, 11:39
В обе стороны, т.к. картинка симметричная относительно центра. Направление вращения — это обман зрения, связанный с ведущим полушарием у наблюдателя. Если Вы немного приноровитесь, то сможете заставить ее вращаться в любую сторону по собственному желанию.

Другие версии у кого-нибудь будут?
Кстати, Вам кажется в какую сторону? Мне - по часовой.

R60
26-04-2019, 11:54
Задача про гномов давно уже гуляет по интернету (лет 10-15) , вот один из вариантов текста -
А вот ответ из гугля -
"Последний гном говорит цвет перед ним, а тот зная свой цвет молчит, если перед ним не тот цвет. Другой, не услышав того кто напротив, узнает, что у него другой цвет и т.д."
Очередная подстава. В условиях сказано что надо назвать цвет, иначе съест всех, а в ответе написано можно молчать.

alexer
26-04-2019, 11:59
Другие версии у кого-нибудь будут?
Кстати, Вам кажется в какую сторону? Мне - по часовой.
Могу в любую заставить вращаться. Если сперва на нижней левой стороне картинки зрение сфокусировать, то будет вращаться против часовой стрелки. Если на нижней правой - то по.

R60
26-04-2019, 12:01
Ох, все там нормально получается... Не надо им ничего знать "до переворачивания"
Второй заключенный, когда заходит, видит раскладку с уже перевернутой монетой :
А Р
А Р
Смотрит в первый столбец: "ага, там А,А, обе монеты повернуты одинаково, значит магическая в первой строке".
Дальше смотрит в первую строку: "ага, тут А,Р, монеты повернуты по-разному, значит магическая во втором столбце".
Т.е. магическая во втором столбце первой строки, что и было загаданно.
Ну и получится 16 ответов, или 4? Какой из них будет правильный?

alexer
26-04-2019, 12:03
Ну и получится 16 ответов, или 4? Какой из них будет правильный?
Один ответ получится, как ещё объяснить-то, что один? Конкретно, что непонятно?

Димыч
26-04-2019, 12:08
А вот ответ из гугля -
"Последний гном говорит цвет перед ним, а тот зная свой цвет молчит, если перед ним не тот цвет. Другой, не услышав того кто напротив, узнает, что у него другой цвет и т.д."
Очередная подстава. В условиях сказано что надо назвать цвет, иначе съест всех, а в ответе написано можно молчать.
Нет, там есть номальное решение. Я его достаточно быстро придумал. И продумал - работает на первом попавшемся примере.
Правда, сначала ляпнул не подумав, что это детская задача. Нет, нормальная задача. Просто там всё время кажется, что решения не существует в принципе - как в задаче про "шахматную доску и монеты"

Димыч
26-04-2019, 12:10
В обе стороны, т.к. картинка симметричная относительно центра. Направление вращения — это обман зрения, связанный с ведущим полушарием у наблюдателя. Если Вы немного приноровитесь, то сможете заставить ее вращаться в любую сторону по собственному желанию.
Я тоже могу представить как она вращается против часовой стрелки, но тут приходится поднапрячь воображение. По умолчанию она у меня вращается по часовой стрелке.
Но... я НЕ согласен с Вашей версией, что она вращается в обе стороны равновероятно. Неа. :)

alexer
26-04-2019, 12:12
Я тоже могу представить как она вращается против часовой стрелки, но тут приходится поднапрячь воображение. По умолчанию она у меня вращается по часовой стрелке.
Но... я НЕ согласен с Вашей версией, что она вращается в обе стороны равновероятно. Неа. :)
Что значит "равновероятно"?
Это простой обман зрения. Она вообще не вращается.

Димыч
26-04-2019, 12:14
Что значит "равновероятно"?
Это простой обман зрения. Она вообще не вращается.
Ну еще скажите, что это вообще не девушка, а группа чередующихся рисунков! :gy:
Куда делся ваш хвалёный "формальный подход"?

alexer
26-04-2019, 12:20
Ну еще скажите, что это вообще не девушка, а группа чередующихся рисунков! :gy:
Куда делся ваш хвалёный "формальный подход"?
А какой вы хотите здесь формальный подход?
Ну давайте так: вращение, которое имитирует эта картинка происходит вокруг оси Oy, т.е. для каждой точки "вращающегося" объекта должны меняться координаты х и z, где z - глубина и оси Ox, Oy, Oz - направлены соответственно слева направо, снизу вверх и из экрана к наблюдателю. В проекции на экран точки будут менять только координату х. Т.к. картинки симметричны относительно центра, каждая точка будет просто осциллировать вокруг центра симметрии. В зависимости от того, осцилляцию слева направо или справа налево вы увидели первой, вы и будете воспринимать вращение. Вот вам формальный подход.

Если Вам охота относительно моего сообщения выше поразводить казуистику, то не трудитесь отвечать: я не хочу тратить время на глупые споры. Если есть комментарии по существу — welcome.

Димыч
26-04-2019, 12:22
А какой вы хотите здесь формальный подход?
Ну давайте так: вращение, которое имитирует эта картинка происходит вокруг оси Oy, т.е. для каждой точки "вращающегося" объекта должны меняться координаты х и z, где z - глубина и оси Ox, Oy, Oz - направлены соответственно слева направо, снизу вверх и из экрана к наблюдателю. В проекции на экран точки будут менять только координату х. Т.к. картинки симметричны относительно центра, каждая точка будет просто осциллировать вокруг центра симметрии. В зависимости от того, осцилляцию слева направо или справа налево вы увидели первой, вы и будете воспринимать вращение. Вот вам формальный подход.
Надо посмотреть внимательнее на картинку и подумать

alexer
26-04-2019, 12:24
Надо посмотреть внимательнее на картинку и подумать
Еще раз — если есть комментарии по существу к моему объяснению выше — welcome. Если Вы в этой теме по принципу "есть два мнения: мое и неправильное", то поищите другого собеседника.

Димыч
26-04-2019, 12:25
Еще раз — если есть комментарии по существу к моему объяснению выше — welcome. Если Вы в этой теме по принципу "есть два мнения: мое и неправильное", то поищите другого собеседника.
Есть комментарии. Но я хочу дать возможность высказаться другим сначала. Вдруг кто еще заинтересуется?

R60
26-04-2019, 12:31
Нет, там есть номальное решение. Я его достаточно быстро придумал. И продумал - работает на первом попавшемся примере.
Правда, сначала ляпнул не подумав, что это детская задача. Нет, нормальная задача. Просто там всё время кажется, что решения не существует в принципе - как в задаче про "шахматную доску и монеты"
Вариант с четностями не сработает если впереди равное кол-во гномов в одинаковых шапках.

Димыч
26-04-2019, 12:46
Вариант с четностями не сработает если впереди равное кол-во гномов в одинаковых шапках.
Должен сработать. Приводите конкретный пример, где не сработает - сейчас на его пример свой способ решения обкатаю. :)

R60
26-04-2019, 12:55
Должен сработать. Приводите конкретный пример, где не сработает - сейчас на его пример свой способ решения обкатаю. :)
С-К-С-К-С

Димыч
26-04-2019, 13:11
С-К-С-К-С
Отлично. Слева - последний (пятый), справа - первый. Условимся "К"=1, "С"=0. Последний гном вычисляет чётность суммы стоящих перед ним: 1+0+1+0=2 - чётно (фактически - определяет чётность суммы красных шляп стоящих перед ним гномов). Он говорит "Синий!". Он выживает - в этот раз ему повезло.
Следующий за ним гном (четвертый) считает чётность стоящих перед ним: 0+1+0=1 НЕчётно! И он слышал, что до него была сумма чётной (т.к. последний гном сказал "синий"). Значит именно он изменяет сумму с чётной на нечётную. А это значит, что у него красная шапка. Он говорит "красная" и гарантированно остается в живых.
Третий гном видит, что перед ним нечётная сумма: 1+0=1. Он слышал, что первые четверо гномов дают чётную сумму, а четвертый гном был красным, значит первые трое гномов будут давать нечётную сумму. Значит его шляпа не изменяет чётность, значит у него синяя шляпа.
Второй гном видит, что перед ним нечетная сумма: 0. Он слышал, что первые четверо гномов давали чётную сумму, при этом четвёртый гном был красным, а третий - синим. Значит первые два гнома должны давать нечётную сумму. Значит его шляпа меняет чётность - значит у него красная шляпа. Он тоже гарантированно выживает.
Первый гном слышал, что первые четыре гнома дают чётную сумму, при этом он уже слышал, что в этой сумме есть две красных и одна синяя. Две красных и одна синяя шляпы не меняют чётность, поэтому у него должна быть шляпа тоже не меняющая чётность - синяя.

Вроде всё просто :)

R60
26-04-2019, 13:46
А если к-к-с-к-с? Третьему надо будет сказать красный?

Димыч
26-04-2019, 14:18
А если к-к-с-к-с? Третьему надо будет сказать красный?
Третий будет знать, что сумма первых четырех чётная, а у четвертого был красный. Значит сумма первых трех - НЕчетная. Он перед собой видит нечетную сумму первых двух, значит у него шляпа, которая не меняет чётность - т.е. синяя.
Всё работает. Только в этом примере последний гном погибает, что допускало условие задачи. Зато как всегда - он спасает всех остальных, оглашая им результат по четности или нечетности суммы, стоящих перед ним

R60
26-04-2019, 14:51
Третий будет знать, что сумма первых четырех чётная, а у четвертого был красный. Значит сумма первых трех - НЕчетная. Он перед собой видит нечетную сумму первых двух, значит у него шляпа, которая не меняет чётность - т.е. синяя.
Всё работает. Только в этом примере последний гном погибает, что допускало условие задачи. Зато как всегда - он спасает всех остальных, оглашая им результат по четности или нечетности суммы, стоящих перед ним
Да, понял теперь.

ponom
26-04-2019, 15:33
Есть комментарии. Но я хочу дать возможность высказаться другим сначала. Вдруг кто еще заинтересуется?

Что тут высказываться? Alexer прав. Согласен со всеми его сообщениями по этому вопросу. У меня тоже вращается в обе стороны в зависимости от того, на какой нижней части изображения сфокусировать зрение - левой или правой.

ponom
26-04-2019, 15:40
Утверждение справедливо, как и любое утверждение для пустого множества.

В данном случае Вы не можете быть уверены, что множество пустое (что поездов на Марсе нет).

Димыч
26-04-2019, 16:19
Что тут высказываться? Alexer прав. Согласен со всеми его сообщениями по этому вопросу. У меня тоже вращается в обе стороны в зависимости от того, на какой нижней части изображения сфокусировать зрение - левой или правой.
А если теперь порассуждать о тени от девушки?
p.s. Зачем же прямо все подряд посты "заминусовывать", не разобравшись в вопросе?
Я наоборот дал вам шанс подольше подумать над интересным вопросом, а вы в штыки... :)

R60
26-04-2019, 17:10
Девушка крутится по часовой стрелки или против?
По часовой. Так как против часовой тени от ноги нет. Если не обращать внимания на тень, то переключение направления вращения занимает около 5 секунд.

alexer
26-04-2019, 17:29
А если теперь порассуждать о тени от девушки?
p.s. Зачем же прямо все подряд посты "заминусовывать", не разобравшись в вопросе?
Я наоборот дал вам шанс подольше подумать над интересным вопросом, а вы в штыки... :)
Да хоть бы и от тени. Тень точно так же симметрична относительно вертикальной оси. Источник света находится за девушкой. Просто Вы когда за тенью начинаете следить фокусируетесь на нижней части изображения (симметричной), и у вас сознание непроизвольно переключает вращение. То, что чаще переключает вращение на "по часовой стрелке" говорит лишь о том, что с большой вероятностью Вы — правша и только (хотя у некоторых левшей ведущее полушарие в этом виде активности тоже может быть правым).

Димыч
26-04-2019, 17:42
Да хоть бы и от тени. Тень точно так же симметрична относительно вертикальной оси. Источник света находится за девушкой. Просто Вы когда за тенью начинаете следить фокусируетесь на нижней части изображения (симметричной), и у вас сознание непроизвольно переключает вращение. То, что чаще переключает вращение на "по часовой стрелке" говорит лишь о том, что с большой вероятностью Вы — правша и только (хотя у некоторых левшей ведущее полушарие в этом виде активности тоже может быть правым).

Так я НЕ утверждаю, что девушка вращается ПО часовой стрелке. Я лишь говорю, что мне кажется, что она вращается по часовой стрелке. Представить её вращение против часовой стрелки - мне труднее себя заставить. Но можно конечно.

На самом деле она вращается ПРОТИВ часовой стрелки. Это следует из движения тени от её поднятой ноги и расположения источника света (за девушкой, если смотреть со стороны наблюдателя). В предположении, что по мере вращения девушки высота подъема её ноги (левой всё-таки) значимым образом не изменяется

ponom
26-04-2019, 23:08
А если теперь порассуждать о тени от девушки?
p.s. Зачем же прямо все подряд посты "заминусовывать", не разобравшись в вопросе?
Я наоборот дал вам шанс подольше подумать над интересным вопросом, а вы в штыки... :)

Во-первых, не все подряд.
Во-вторых, это не обязательно тень - это может быть отражение в зеркальной части пола.
В-третьих, что не так с тенью или отражением?

Димыч
26-04-2019, 23:29
Во-вторых, это не обязательно тень - это может быть отражение в зеркальной части пола.

Вывод от этого не изменится - девушка вращается против часовой стрелки.

В-третьих, что не так с тенью или отражением?
С тенью, и с отражением всё "так". Что тень, что отражение поднятой ноги будет длиннее, когда нога будет больше удалена от наблюдателя. Поэтому в те моменты когда появляется тень или отражение от поднятой ноги девушки - эта нога находится дальше от наблюдателя, чем в те моменты когда наблюдатель не видит от нее тень или отражение. Тень или отражение движется справа налево, значит вращение девушки идёт против часовой стрелки.

alexer
29-04-2019, 00:00
Насчет задачи про монеты, я обещал опубликовать код кодера/декодера для своего решения. Код на С++, можно для быстрой проверки засунуть в любой онлайн-компилятор.

#include <iostream>
#include <random>
#include <limits>
#include <cassert>

namespace {

// decoder for 2x2 problem
inline uint8_t decode2x2(uint8_t layout)
{
return (layout >> 2 ^ layout) & 2 | ((layout >> 1 ^ layout) & 4) >> 2;
}

// helper function based on the truth table of the flip bit value given
// the default encoded value and the target 2-bit value to be encoded
inline uint8_t findFlip2x2Helper(uint8_t x)
{
return static_cast<uint8_t>(x == 0 || x == 2 || x == 5 || x == 7) << 1
| static_cast<uint8_t>(x == 0 || x == 1 || x == 4 || x == 5);
}

// returns position of the bit to be flipped in 2x2 (i.e. 4-bit) problem
inline uint8_t findFlipBit2x2(uint8_t oddity, uint8_t magic_bit)
{
oddity = decode2x2(oddity) << 2 | magic_bit;
oddity = findFlip2x2Helper(oddity & 0xF) | findFlip2x2Helper(~oddity & 0xF);
assert(oddity <= 3);
return oddity;
}

// returns 4-bit oddity for the given 8x8 problem
inline uint8_t calculateOddity8x8(uint64_t layout)
{
layout ^= layout >> 8;
layout ^= layout >> 16;
layout ^= layout >> 2;
layout ^= layout >> 1;

uint8_t oddity{ 0 };
oddity |= static_cast<uint8_t>((layout & 0x1000000000) >> 33);
oddity |= static_cast<uint8_t>((layout & 0x100000000) >> 30);
oddity |= static_cast<uint8_t>((layout & 0x10) >> 3);
oddity |= static_cast<uint8_t>(layout & 0x1);

assert(oddity <= 0xF);

return oddity;
}

// returns 4-bit oddity for the given 4x4 problem
inline uint8_t calculateOddity4x4(uint16_t layout)
{
layout ^= layout >> 4;
layout ^= layout >> 1;

uint8_t oddity{ 0 };
oddity |= static_cast<uint8_t>((layout & 0x400) >> 7);
oddity |= static_cast<uint8_t>((layout & 0x100) >> 6);
oddity |= static_cast<uint8_t>((layout & 0x4) >> 1);
oddity |= static_cast<uint8_t>(layout & 0x1);

assert(oddity <= 0xF);

return oddity;
}

// downscales 8x8 problem to 4x4 problem by XOR-ing 4x4 blocks of the 8x8 problem
inline uint16_t downscaleXOR8x8To4x4(uint64_t layout)
{
layout ^= layout >> 32;
layout ^= layout >> 4;
layout = (layout & 0xF000000) >> 12 | (layout & 0xF0000) >> 8 | (layout & 0xF00) >> 4 | (layout & 0xF);
return static_cast<uint16_t>(layout);
}

inline uint8_t downscaleXOR4x4To2x2(uint16_t layout)
{
layout ^= layout >> 8;
layout ^= layout >> 2;
layout = (layout & 0x30) >> 2 | (layout & 0x3);
return static_cast<uint8_t>(layout);
}


uint64_t encode(uint64_t layout, int mc_r, int mc_c)
{
uint8_t magic_bit = mc_r << 3 | mc_c;
uint8_t flip_bit{ 0 };

uint8_t oddity = calculateOddity8x8(layout);
uint8_t fb = findFlipBit2x2(oddity, (magic_bit & 0x20) >> 4 | (magic_bit & 0x4) >> 2);
flip_bit |= (fb & 0x2) << 4;
flip_bit |= (fb & 0x1) << 2;

uint16_t layout_4x4 = downscaleXOR8x8To4x4(layout);
oddity = calculateOddity4x4(layout_4x4);
fb = findFlipBit2x2(oddity, (magic_bit & 0x10) >> 3 | (magic_bit & 0x2) >> 1);
flip_bit |= (fb & 0x2) << 3;
flip_bit |= (fb & 0x1) << 1;

uint8_t layout_2x2 = downscaleXOR4x4To2x2(layout_4x4);
fb = findFlipBit2x2(layout_2x2, (magic_bit & 0x8) >> 2 | (magic_bit & 0x1));
flip_bit |= (fb & 0x2) << 2;
flip_bit |= fb & 0x1;

return layout ^ 0x1ULL << (63 - flip_bit);
}

uint8_t decode(uint64_t coded_sequence)
{
uint8_t coded_value{ 0 };
uint8_t oddity = calculateOddity8x8(coded_sequence);
uint8_t decoded_sequence = decode2x2(oddity);
coded_value |= (decoded_sequence & 0x2) << 4;
coded_value |= (decoded_sequence & 0x1) << 2;

uint16_t coded_sequence_4x4 = downscaleXOR8x8To4x4(coded_sequence);
oddity = calculateOddity4x4(coded_sequence_4x4);
decoded_sequence = decode2x2(oddity);
coded_value |= (decoded_sequence & 0x2) << 3;
coded_value |= (decoded_sequence & 0x1) << 1;

uint8_t coded_sequence_2x2 = downscaleXOR4x4To2x2(coded_sequence_4x4);
decoded_sequence = decode2x2(coded_sequence_2x2);
coded_value |= (decoded_sequence & 0x2) << 2;
coded_value |= decoded_sequence & 0x1;

return coded_value;
}
}

int main()
{
std::default_random_engine generator{};
std::uniform_int_distribution<uint64_t> distribution{ 0, std::numeric_limits<uint64_t>::max() };

uint64_t layout{ distribution(generator) };
std::cout << "The initial layout is " << layout << std::endl;

int mc_r, mc_c;
{
std::cout << "Enter the row (1-based) where the magic coin is located: ";
std::cin >> mc_r; --mc_r;

std::cout << "Enter the column (1-based) where the magic coin is located: ";
std::cin >> mc_c; --mc_c;

}

uint64_t coded_sequence = encode(layout, mc_r, mc_c);
uint8_t guess = decode(coded_sequence);

std::cout << "I think the magic coin was in position (" << (guess >> 3) + 1 << ", " << (guess & 7) + 1 << ")" << std::endl;
}

Димыч
29-04-2019, 08:35
Все время удивлялся - как народ на С++ работает? Почему на нем работает? Зачем?
Есть же удобнейшая оболочка - Delphi, где всё просто и понятно. И старый добрый "паскаль" в основе

Однако же все работодатели требуют знаний неудобнейших языков почему-то... :gy:

alexer
29-04-2019, 09:32
Все время удивлялся - как народ на С++ работает? Почему на нем работает? Зачем?
Есть же удобнейшая оболочка - Delphi, где всё просто и понятно. И старый добрый "паскаль" в основе

Однако же все работодатели требуют знаний неудобнейших языков почему-то... :gy:
С++ требуют там, где важна скорость выполнения. Обычно, чтобы на С++ нормально писать, нужно знать сильно больше, чем только язык, иначе будет только хуже. Код выше для понимания тяжелый, но это лишь потому, что там битовые манипуляции сложные. Наверное, можно немного попроще придумать реализацию, но это делать мне уже точно лень.
Там, где надо писать относительно «быстро», а на скорость плевать, пользуются чем-нибудь, типа Python. Делфи точно мертв. Да и не жил никогда. Но это уже всяко оффтоп.

Димыч
29-04-2019, 09:55
С++ требуют там, где важна скорость выполнения. Обычно, чтобы на С++ нормально писать, нужно знать сильно больше, чем только язык, иначе будет только хуже. Код выше для понимания тяжелый, но это лишь потому, что там битовые манипуляции сложные. Наверное, можно немного попроще придумать реализацию, но это делать мне уже точно лень.
Там, где надо писать относительно «быстро», а на скорость плевать, пользуются чем-нибудь, типа Python. Делфи точно мертв. Да и не жил никогда. Но это уже всяко оффтоп.
Как это "точно мёртв", если я прямо сейчас доделываю мощнейшую программу по мат.моделированию процессов в атомной отрасли прямо на Delphi 7(!) :gy:
Затем года два она будет проходит аттестацию, а потом лет 20 будет использоваться в расчетном обосновании.
Хотя, и сейчас уже используется на самом деле. Просто пока там можно что улучшить - я её продолжаю дорабатывать.

Насчёт "скорости" - не верю, извини.
Вспоминаю как мы решили проверить на каком языке быстрее расчёты выполняются. И стали гонять многократно операции вида: "возвести миллион раз в степень близкую к единице, а потом выполнить миллион раз обратную операцию", после чего сравнить результаты и время вычислений. На одном и том же компе - под виндами.
Результаты меня поразили - фортран (который, по идее, должен быть заточен именно под вычисления) проиграл просто с треском - и в скорости и в точности. Долго тупили мы. Переключали типы вещественных чисел в языках, пытались в опциях компилятора всё менять. Ничего не получалось - фортран был в разы медленнее и в разы кривее. Пошли к начальнику отдела пожаловаться (т.к. знали, что он когда-то на фортране работал). Он нам почти сразу посоветовал зайти в глубокие меню и переключить в фортране тип используемых КОНСТАНТ. Т.е. когда ты там возводишь число в степень (например, а^1.001), то у тебя там по умолчанию "1.001 имеет такой тип, с которым процессору работать очень напряжно (по-моему, real*6). В результате всё тормозит нещадно. Когда изменили тип констант по умолчанию. Скорости работы фортрана и Delphi, а также точность - совпали почти ПОЛНОСТЬЮ.
Из этого, наверное, можно сделать вывод о том, что скорость работы языка (при вычислениях) вряд ли зависит от языка - если всё правильно настроить.
А вопрос начался с того - почему в стандартных конечно-элементных комплексах типа Ansys или Msc.Marc пользовательские подпрограммы предлагают делать на фортране?
Кстати, а в старых версиях Msc.Marc (а может быть и в новых тоже) по умолчанию включены такие опции, при которых изгиб простейшего стержня (который по формулам сопромата легко считается) рассчитывается с огромными погрешностями (процентов под 20). Вот такие пироги с "опциями по умолчанию" встречаются. Не только в "фортране", но и в очень серьезных коммерческих продуктах для инженерных расчётов.

Ну а про "оффтоп" - в этой теме этого добиться трудно, если посмотреть на её название :)

alexer
29-04-2019, 10:06
Как это "точно мёртв", если я прямо сейчас доделываю мощнейшую программу по мат.моделированию процессов в атомной отрасли прямо на Delphi 7(!) :gy:
Затем года два она будет проходит аттестацию, а потом лет 20 будет использоваться в расчетном обосновании.
Хотя, и сейчас уже используется на самом деле. Просто пока там можно что улучшить - я её продолжаю дорабатывать.

Насчёт "скорости" - не верю, извини.
Вспоминаю как мы решили проверить на каком языке быстрее расчёты выполняются. И стали гонять многократно операции вида: "возвести миллион раз в степень близкую к единице, а потом выполнить миллион раз обратную операцию", после чего сравнить результаты и время вычислений. На одном и том же компе - под виндами.
Результаты меня поразили - фортран (который, по идее, должен быть заточен именно под вычисления) проиграл просто с треском - и в скорости и в точности. Долго тупили мы. Переключали типы вещественных чисел в языках, пытались в опциях компилятора всё менять. Ничего не получалось - фортран был в разы медленнее и в разы кривее. Пошли к начальнику отдела пожаловаться (т.к. знали, что он когда-то на фортране работал). Он нам почти сразу посоветовал зайти в глубокие меню и переключить в фортране тип используемых КОНСТАНТ. Т.е. когда ты там возводишь число в степень (например, а^1.001), то у тебя там по умолчанию "1.001 имеет такой тип, с которым процессору работать очень напряжно (по-моему, real*6). В результате всё тормозит нещадно. Когда изменили тип констант по умолчанию. Скорости работы фортрана и Delphi, а также точность - совпали почти ПОЛНОСТЬЮ.
Из этого, наверное, можно сделать вывод о том, что скорость работы языка (при вычислениях) вряд ли зависит от языка - если всё правильно настроить.
А вопрос начался с того - почему в стандартных конечно-элементных комплексах типа Ansys или Msc.Marc пользовательские подпрограммы предлагают делать на фортране?

Ну а про "оффтоп" - в этой теме этого добиться трудно, если посмотреть на её название :)
То, что лично Вы что-то там пишите на Delphi не означает, что он жив. Это лишь что-то говорит о том, кто Ваш заказчик.
Я уже писал выше, что чтобы писать на С++ эффективно нужно знать немного больше, чем просто язык. Если не умеете в архитектуру железа, под которое пишите, и в ассемблер, то и в плюсы не надо лезть. На С++ можно писать программы, которые работают сильно быстрее, чем на Delphi или FORTRAN. Только для этого нужны очень квалифицированные (и дорогие) люди. Основная проблема С++ в том, что плохих программистов на нем, наверное, больше, чем на любом другом языке.

Димыч
29-04-2019, 10:50
То, что лично Вы что-то там пишите на Delphi не означает, что он жив. Это лишь что-то говорит о том, кто Ваш заказчик.
Я уже писал выше, что чтобы писать на С++ эффективно нужно знать немного больше, чем просто язык. Если не умеете в архитектуру железа, под которое пишите, и в ассемблер, то и в плюсы не надо лезть. На С++ можно писать программы, которые работают сильно быстрее, чем на Delphi или FORTRAN. Только для этого нужны очень квалифицированные (и дорогие) люди. Основная проблема С++ в том, что плохих программистов на нем, наверное, больше, чем на любом другом языке.
Очень, очень интересно...
Если вести речь о математических задачах, то там достаточно знать всего лишь несколько операторов - арифметические действия, операторы сравнения и оператор цикла. Ну для полноты картины - операторы считывания и записи в текстовый файл. Считывание и запись - это уже "сервис" и на скорость работы программы не влияет (при условии, что в процессе счёта не нужно непрерывно считывать данные и записывать в файл).
Так вот, почему это в том же "фортране" не "догадались" простейшие математические операторы сделать такими же быстрыми как и в С++? Неужто это прямо так трудно, что до этого могли дойти только разработчики С++? Нифига не верится как-то. Похоже на ересь всё-таки.
И ещё раз напомню, что фортран - до сих пор является встроенным языком для таких популярных программных комплексов как Ansys или Msc.Marc. Пользователи именно на нем пишут подпрограммы для этих программных комплексов. При этом Ansys очень популярен в инженерной среде и позволяет решать не только механические задачи, но и гидравлические тоже, и много-много всего другого. Лицензия стоит дофига и всё равно покупается многими инженерными конторами.
https://www.ansys.com/

Поэтому слухи о смерти фортрана уж точно не соответствуют действительности. Да и по Delphi, наверное, тоже
Но то, что сейчас многие требуют программы на С++ - я и сам вижу, поэтому и спрашиваю - "почему?"
Нет ли тут какого-то "синергетического эффекта"? Типа - договорились, и начали выпускать для велосипедов дурацкие ниппели "Presta", причем не только для тех моделей, где нужно большое давление удерживать, но и вообще - для всех, включая подвесы и фэтбайки.

P.s. Спросил других ребят, оказывается в Ansys на разные модули свои языки. Есть и "С" и "питон" тоже, помимо фортрана.

alexer
29-04-2019, 11:23
Очень, очень интересно...
Если вести речь о математических задачах, то там достаточно знать всего лишь несколько операторов - арифметические действия, операторы сравнения и оператор цикла. Ну для полноты картины - операторы считывания и записи в текстовый файл. Считывание и запись - это уже "сервис" и на скорость работы программы не влияет (при условии, что в процессе счёта не нужно непрерывно считывать данные и записывать в файл).
Так вот, почему это в том же "фортране" не "догадались" простейшие математические операторы сделать такими же быстрыми как и в С++? Неужто это прямо так трудно, что до этого могли дойти только разработчики С++? Нифига не верится как-то. Похоже на ересь всё-таки.
И ещё раз напомню, что фортран - до сих пор является встроенным языком для таких популярных программных комплексов как Ansys или Msc.Marc. Пользователи именно на нем пишут подпрограммы для этих программных комплексов. При этом Ansys очень популярен в инженерной среде и позволяет решать не только механические задачи, но и гидравлические тоже, и много-много всего другого. Лицензия стоит дофига и всё равно покупается многими инженерными конторами.
https://www.ansys.com/

Поэтому слухи о смерти фортрана уж точно не соответствуют действительности. Да и по Delphi, наверное, тоже
Но то, что сейчас многие требуют программы на С++ - я и сам вижу, поэтому и спрашиваю - "почему?"
Нет ли тут какого-то "синергетического эффекта"? Типа - договорились, и начали выпускать для велосипедов дурацкие ниппели "Presta", причем не только для тех моделей, где нужно большое давление удерживать, но и вообще - для всех, включая подвесы и фэтбайки.

P.s. Спросил других ребят, оказывается в Ansys на разные модули свои языки. Есть и "С" и "питон" тоже, помимо фортрана.
По выделенному: "операторы" в фортране не медленнее, чем в С++. Большинство вычислительных программ, написанных на фортране "в лоб", будут работать сильно быстрее, чем написанные "в лоб" программы на С++. Код на С++ окажется быстрее в случае тонко оптимизированной организации вычислений с использованием векторных инструкций, типа AVX2/AVX512, правильно организованного попадания в кэш инструкций и данных и иногда с использованием особенностей branch predictor-а. Переход к параллельным и гибридным (multi-core CPU + GPU) системам включает еще вагон очень нетривиальных оптимизаций.
Все это при желании можно делать и на других языках. Хорошая особенность С (и отчасти плюсов) заключается в том, что всегда можно довольно точно сказать, как то или иное выражение будет выглядеть после трансляции в машинный код. Я не являюсь апологетом использования того или иного языка, но, учитывая, как в последнее время развивается стандарт С++, мне понятно, почему он повсеместно используется в сферах, где важна скорость вычислений и есть возможность инвестировать в квалифицированных разработчиков.
В любом случае, речь шла о том, чтобы продемонстрировать корректность решения задачи о монетах. Поскольку я обещал выложить кодер/декодер для своего решения, я это сделал :) А уж если Вам ЯП не нравится, пожалуйста, можете на Delphi переписать и еще раз убедиться, что все работает, как и должно ;)

Димыч
29-04-2019, 11:33
Да уж.. Ничего не понял! :gy:
Но готов поверить, что С++ обладает какими-то объективными преимуществами по сравнению со многими другими языками. А не просто "потому, что везде так".

p.s. Некоторое время назад решил дополнительную работу поискать в плане разработки диковинных алгоритмов и программ. Обнаружил, что почти везде нужно знать С++. Попробовал установить и написать на нём простейшую свою программку и офигел - настолько всё показалось замороченным и неудобным, что просто жуть какая-то! Плюнул в итоге на это дело и всё. Сижу, скучаю.. :)

ponom
29-04-2019, 13:01
Тень или отражение движется справа налево, значит вращение девушки идёт против часовой стрелки.
Вы возможно удивитесь, но тень тоже меняет направление движения, в зависимости от того, на каком нижнем углу сконцентрироваться вначале.

Димыч
29-04-2019, 14:23
Вы возможно удивитесь, но тень тоже меняет направление движения, в зависимости от того, на каком нижнем углу сконцентрироваться вначале.
Конечно удивлюсь, потому, что я вижу, что она движется справо-налево, потом исчезает.
На самом деле я это самое дело уже и на другом форуме обсудил вчера-позавчера. И даже провели "практические занятия". Сошлись на том, что в принципе мои рассуждения верные, но тени все равно прорисованы кривовато. Особенно мне не понравилось, что эта девушка почти всегда в воздухе висит, изредка касаясь пола, причем почему-то пяткой! А так - кадров там много на самом деле чередуется, направление движения тени от поднятой ноги определяется однозначно вроде: справа-налево.

ponom
29-04-2019, 15:54
Конечно удивлюсь, потому, что я вижу, что она движется справо-налево, потом исчезает.
...
, направление движения тени от поднятой ноги определяется однозначно вроде: справа-налево.

Ну а я могу видеть оба варианта, когда тень движется справа налево и, когда тень движется слева направо. То, что у Вас это не получается, не является доказательством того, что это невозможно.

Димыч
29-04-2019, 17:14
Ну а я могу видеть оба варианта, когда тень движется справа налево и, когда тень движется слева направо. То, что у Вас это не получается, не является доказательством того, что это невозможно.
Как так? Не может такого быть. Это уже троллинг!
:gy:
Вот покадрово у меня есть (благодарю ещё одного спорщика)

Чередование кадров идёт слева-направо, сверху-вниз. Красным проведена линия, ниже которой появляется тень от поднятой ноги
Поэтому если у Вас тень от поднятой ноги движется слева-направо, то у вас уже СЛИШКОМ богатое воображение! :gy:

ponom
29-04-2019, 17:34
Как так? Не может такого быть. Это уже троллинг!
:gy:
Вот покадрово у меня есть (благодарю ещё одного спорщика)

Чередование кадров идёт слева-направо, сверху-вниз. Красным проведена линия, ниже которой появляется тень от поднятой ноги
Поэтому если у Вас тень от поднятой ноги движется слева-направо, то у вас уже СЛИШКОМ богатое воображение! :gy:

Ваши кадры ничего не опровергают. Девушка может вращаться в обе стороны, и тень вращается вместе с ней. И вообще это скорее всего не тень, а отражение. И не подменяйте "направление вращения" движением "слева-направо" или "справа-налево". При вращении половину цикла точка движется справа-налево, а половину - слева-направо.

Димыч
29-04-2019, 21:50
Ваши кадры ничего не опровергают. Девушка может вращаться в обе стороны, и тень вращается вместе с ней. И вообще это скорее всего не тень, а отражение. И не подменяйте "направление вращения" движением "слева-направо" или "справа-налево". При вращении половину цикла точка движется справа-налево, а половину - слева-направо.
Я там выше объяснил почему девушка вращается именно против часовой стрелки. Там всё просто. Если вкратце, то тень от поднятой ноги видна когда она находится дальше от наблюдателя, чем опорная нога. А если при этом тень движется справо налево, значит девушка вращается против часовой стрелки. То же самое справедливо и в случае, если это не тень, а отражение девушки от зеркального пола - тоже получается, что она вращается против часовой стрелки

Димыч
03-05-2019, 23:36
Ребята, дела тухлые...
Я тут задачу про "тюремщика и заключенных" задал одному шутнику.
Он немного поднапрягся и выдал следущее.
Грит, что все эти твои "маски" - полная лажа и "надувание щёк".
На самом деле там всё проще пареной репы.
Можно просто взять и, например, отксорить все порядковые номера аверсов (без всяких "масок" и прочей ерунды). После чего полученное шестибитовое число отксорить с порядковым номером "волшебной" монеты и всё - это и будет порядковый номер той монеты, которую надо перевернуть! Т.е. на полученной доске, если теперь отксорить снова все аверсы - получишь порядковый номер "волшебной" монеты.
ВСЁ!
Проверяйте :gy:
P.s. Я прямо был очень сильно разочарован, потому как стращал его, что эта задача простыми способами не решается

ratel
04-05-2019, 00:24
Вот вам более интересная загадка: двое заключенных были приговорены к смерти...

Хорошая задача, спасибо, приятно вечером после рабочей недели немного поразмышлять.

Сразу говорю, что задача сложная, но для ее решения не нужно никакой математики: только аналитическое мышление.

Ох-ох, ну, мне для решения математика всё же пригодилась, но, верю, кому-то будет достаточно просто очень хорошего воображения :)

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

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

В общем случае вершины n-мерного куба раскрасить в n цветов с таким условием нельзя, например, можете попытаться сделать такое перебором с обычным 3-мерным кубом. А вот с кубами размерности 2**n придумать такую раскраску можно, я отталкивался от естественной раскраски 4-мерного куба (смогу показать рисунок, если тут непонятно), надо добиться, чтобы изменение значения одной координаты вершины давало новый цвет. Другими словами если координаты вершины выписать в строку 2**n битов, то функция получения цвета вершины от изначальной с XOR от 2**k, где k от 0 до n-1, перебирала бы все n цветов, то есть была сюръективной. Если (2**n)-мерный куб представить как вытянутый по ещё одной оси уже раскрашенный (2**n - 1)-мерный куб, то изменение значения на этой последней координате не будет менять цвет, её можно исключить, а для остальных (2**n - 1) координат естественной функцией раскраски будет XOR от всех позиций(!) координат, где стоит единица. Для такой функции легко проверить выполнение требуемого свойства для раскраски вершин.

И, собственно, код для проверки моей идеи, надеюсь, что там всё достаточно очевидно. А если найдёте ошибку, то с меня подарок за ваше время и внимание.


#include <stdio.h>
#include <stdlib.h>

static unsigned int find_lsb_set(unsigned long long n)
{
unsigned int pos = 0;

if (!(n & 0xffffffff)) {
pos += 32;
n >>= 32;
}
if (!(n & 0xffff)) {
pos += 16;
n >>= 16;
}
if (!(n & 0xff)) {
pos += 8;
n >>= 8;
}
if (!(n & 0xf)) {
pos += 4;
n >>= 4;
}
if (!(n & 0x3)) {
pos += 2;
n >>= 2;
}
if (!(n & 0x1))
pos += 1;

return pos;
}

static unsigned int colour_decode(unsigned long long n) {
unsigned int pos, colour = 0;

/*
Get the same colour if MSB is flipped, it also ensures
that the resulting colour is in the expected range.
*/
n &= ~(1ULL << 63);

for (; n; n &= ~(1ULL << pos)) {
pos = find_lsb_set(n);
colour ^= (pos + 1);
}

return colour;
}

static int save_prisoners(unsigned long long board, unsigned int secret)
{
unsigned int colour, flip, guess;

/* Get an initial colour of the given configuration of coins */
colour = colour_decode(board);

/*
Select a cell to flip a coin to get the wanted colour of
the board, remember that flipping MSB does not change the colour.
*/
if (secret != colour)
flip = (colour ^ secret) - 1;
else
flip = 63;

/* Flip a coin on the selected cell */
board ^= (1ULL << flip);

/* Get a colour of the changed board */
guess = colour_decode(board);

printf("board: %016llx, secret: %02u --> "
"colour: %02u, flip: %02u, guess: %02u\n",
board, secret, colour, flip, guess);

return (secret == guess);
}

int main(int argc, char **argv) {
unsigned long long board;
unsigned int secret, i;

for (i = 0; i < 8; i++) {
srandom((1 << i) + i);

/* Represent a 8x8 board with coins as a (2**6)-bit number */
board = (unsigned long long)random() << 32 | random();

/* Encode a secret cell position as a 6-bit colour */
secret = random() & 0x3f;

/* Try to save prisoners */
if (save_prisoners(board, secret))
printf("Innocent people are saved.\n\n");
else
printf("Guileful villains are executed.\n\n");
}

return 0;
}

alexer
04-05-2019, 08:34
Ребята, дела тухлые...
Я тут задачу про "тюремщика и заключенных" задал одному шутнику.
Он немного поднапрягся и выдал следущее.
Грит, что все эти твои "маски" - полная лажа и "надувание щёк".
На самом деле там всё проще пареной репы.
Можно просто взять и, например, отксорить все порядковые номера аверсов (без всяких "масок" и прочей ерунды). После чего полученное шестибитовое число отксорить с порядковым номером "волшебной" монеты и всё - это и будет порядковый номер той монеты, которую надо перевернуть! Т.е. на полученной доске, если теперь отксорить снова все аверсы - получишь порядковый номер "волшебной" монеты.
ВСЁ!
Проверяйте :gy:
P.s. Я прямо был очень сильно разочарован, потому как стращал его, что эта задача простыми способами не решается
Да, это будет работать. А слабо обосновать почему? Впрочем, это действительно лаконичный, хотя и не самый вычислительно простой способ. Спасибо!
А чего разочаровываться-то? Было бы это просто, все бы сразу догадались :) То, что решение легко формулируется, не означает его очевидности. Да и собственно, тот способ, который выше приводился — это те же самые XOR-ы, только несколько иначе организованные. Разве XOR-ы - это сложно?

alexer
04-05-2019, 09:10
Хорошая задача, спасибо, приятно вечером после рабочей недели немного поразмышлять.



Ох-ох, ну, мне для решения математика всё же пригодилась, но, верю, кому-то будет достаточно просто очень хорошего воображения :)

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

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

В общем случае вершины n-мерного куба раскрасить в n цветов с таким условием нельзя, например, можете попытаться сделать такое перебором с обычным 3-мерным кубом. А вот с кубами размерности 2**n придумать такую раскраску можно, я отталкивался от естественной раскраски 4-мерного куба (смогу показать рисунок, если тут непонятно), надо добиться, чтобы изменение значения одной координаты вершины давало новый цвет. Другими словами если координаты вершины выписать в строку 2**n битов, то функция получения цвета вершины от изначальной с XOR от 2**k, где k от 0 до n-1, перебирала бы все n цветов, то есть была сюръективной. Если (2**n)-мерный куб представить как вытянутый по ещё одной оси уже раскрашенный (2**n - 1)-мерный куб, то изменение значения на этой последней координате не будет менять цвет, её можно исключить, а для остальных (2**n - 1) координат естественной функцией раскраски будет XOR от всех позиций(!) координат, где стоит единица. Для такой функции легко проверить выполнение требуемого свойства для раскраски вершин.

И, собственно, код для проверки моей идеи, надеюсь, что там всё достаточно очевидно. А если найдёте ошибку, то с меня подарок за ваше время и внимание.


#include <stdio.h>
#include <stdlib.h>

static unsigned int find_lsb_set(unsigned long long n)
{
unsigned int pos = 0;

if (!(n & 0xffffffff)) {
pos += 32;
n >>= 32;
}
if (!(n & 0xffff)) {
pos += 16;
n >>= 16;
}
if (!(n & 0xff)) {
pos += 8;
n >>= 8;
}
if (!(n & 0xf)) {
pos += 4;
n >>= 4;
}
if (!(n & 0x3)) {
pos += 2;
n >>= 2;
}
if (!(n & 0x1))
pos += 1;

return pos;
}

static unsigned int colour_decode(unsigned long long n) {
unsigned int pos, colour = 0;

/*
Get the same colour if MSB is flipped, it also ensures
that the resulting colour is in the expected range.
*/
n &= ~(1ULL << 63);

for (; n; n &= ~(1ULL << pos)) {
pos = find_lsb_set(n);
colour ^= (pos + 1);
}

return colour;
}

static int save_prisoners(unsigned long long board, unsigned int secret)
{
unsigned int colour, flip, guess;

/* Get an initial colour of the given configuration of coins */
colour = colour_decode(board);

/*
Select a cell to flip a coin to get the wanted colour of
the board, remember that flipping MSB does not change the colour.
*/
if (secret != colour)
flip = (colour ^ secret) - 1;
else
flip = 63;

/* Flip a coin on the selected cell */
board ^= (1ULL << flip);

/* Get a colour of the changed board */
guess = colour_decode(board);

printf("board: %016llx, secret: %02u --> "
"colour: %02u, flip: %02u, guess: %02u\n",
board, secret, colour, flip, guess);

return (secret == guess);
}

int main(int argc, char **argv) {
unsigned long long board;
unsigned int secret, i;

for (i = 0; i < 8; i++) {
srandom((1 << i) + i);

/* Represent a 8x8 board with coins as a (2**6)-bit number */
board = (unsigned long long)random() << 32 | random();

/* Encode a secret cell position as a 6-bit colour */
secret = random() & 0x3f;

/* Try to save prisoners */
if (save_prisoners(board, secret))
printf("Innocent people are saved.\n\n");
else
printf("Guileful villains are executed.\n\n");
}

return 0;
}

ratel, ваше решение совпадает с решением, которое выше описал Димыч. На самом деле, обоснование можно получить из элементарных свойств операции XOR, представлять себе N-мерные кубы не надо :)

Димыч
04-05-2019, 10:10
Да, это будет работать. А слабо обосновать почему? Впрочем, это действительно лаконичный, хотя и не самый вычислительно простой способ. Спасибо!
А чего разочаровываться-то? Было бы это просто, все бы сразу догадались :) То, что решение легко формулируется, не означает его очевидности.

Это следует из определения операции XOR.
Для случая, когда монета, которую надо перевернуть, увеличивает количество монет, которые ксорятся получаем:
S XOR (S XOR A) = A
Где S - первоначальная сумма аверсов;
А - порядковый номер "волшебной монеты;
(S XOR A) = В - порядковый номер монеты, которую надо перевернуть.

Для случая, когда переворачиваемая монета уменьшает количество монет, которые "ксорятся", получаем по сути то же самое, т.к. убрать ксорящееся слагаемое равносильно его повторному добавлению - всё по тому же самому правилу

alexer
04-05-2019, 10:50
Это следует из определения операции XOR.
Для случая, когда монета, которую надо перевернуть, увеличивает количество монет, которые ксорятся получаем:
S XOR (S XOR A) = A
Где S - первоначальная сумма аверсов;
А - порядковый номер "волшебной монеты;
(S XOR A) = В - порядковый номер монеты, которую надо перевернуть.

Для случая, когда переворачиваемая монета уменьшает количество монет, которые "ксорятся", получаем по сути то же самое, т.к. убрать ксорящееся слагаемое равносильно его повторному добавлению - всё по тому же самому правилу
Да, все верно. Как видите, такое решение вполне можно предложить за 45 минут. Кстати, только что посмотрел, в комментариях к статье на "хабре" это решение уже предлагали.

Димыч
04-05-2019, 12:13
Да, все верно. Как видите, такое решение вполне можно предложить за 45 минут. Кстати, только что посмотрел, в комментариях к статье на "хабре" это решение уже предлагали.
В принципе да, наверное можно было придумать решение за 45 минут
Просто уж очень страшно звучит. А после прочтения решения с "масками", только укрепляешься во мнении о том, что "и правильно, что даже браться не стал!"

Димыч
04-05-2019, 13:49
Но для любителей логических задач есть и такая прекрасная задача:
"
«Привет!» — «Привет!» — «Как дела?» — «Хорошо. Растут два сына, дошкольника». — «А сколько им лет?» — «Произведение их возрастов равно числу голубей около этой скамейки». — «Этой информации мне недостаточно!» — «Старший похож на мать». — «Вот теперь я знаю ответ на свой вопрос!»
"
Сколько лет детям?

Димыч
20-05-2019, 16:49
Задача про трёх Богов (позиционируется как "самая сложная логическая задача")

Есть три бога: A, B и C, которые являются богами истины, лжи и случая в произвольном порядке. Бог истины всегда говорит правду, бог лжи — всегда обманывает, бог случая может говорить и правду, и ложь в произвольном порядке. Требуется определить богов, задав 3 вопроса, на которые можно ответить «да» или «нет». Каждый вопрос задаётся только одному богу, но можно задавать одному богу более одного вопроса. Боги понимают язык, но отвечают на своём языке, в котором есть 2 слова «da» и «ja», причём неизвестно, какое слово обозначает «да», а какое «нет».

========================================================================================
Только что решил с небольшой подсказкой. Долго мучился, но доволен

ratel
29-06-2019, 00:30
https://i.ibb.co/4jpLHkg/zadachi.jpg (https://imgbb.com/)

ponom
29-06-2019, 01:56
Вот вам более интересная загадка: двое заключенных были приговорены к смерти. Однако им была предложена следующая сделка. Одного из заключенных (неважно, которого) надзиратель приглашает в комнату и выкладывает на шахматную доску 64 монеты, по одной в каждую клетку, произвольно вверх аверсом или реверсом. После того, как монеты выложены, надзиратель показывает на одну из них и говорит, что эта монета — "магическая" и если второй заключенный (который в комнате не присутствует) ее отгадает, то оба будут помилованы. В противном случае обоих казнят. Заключенный, присутствовавший в комнате, имеет право попросить надзирателя перевернуть одну из монет (заключенный может выбрать какую либо оставить все без изменений). Вопрос: о какой стратегии следовало договориться заключенным, чтобы второй из них, зайдя в комнату, всегда мог безошибочно угадать "магическую" монету. Оба заключенных очень умны и обладают превосходной памятью.

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

Обозначим все монеты как Mi, где i меняется от 0 до 63, а Mi принимает значения 0 (орел) или 1 (решка).

Вычислим сумму по модулю два (XOR) произведений позиций монет на их значения:
http://www.sciweavers.org/tex2img.php?eq=S%3D%20%20%5Coplus_%7Bi%3D0%7D%5E%7B63%7D%20i%20M_%7Bi%7D%20&bc=White&fc=Black&im=jpg&fs=24&ff=fourier&edit=0

S - будет числом в диапазоне 0...63 и, таким образом, указывать на позицию монеты от 0 до 63.

Пусть P - номер позиции магической монеты. Вычислим сумму по модулю два S и P.

Эта сумма и будет номером монеты, которую нужно перевернуть.

ponom
29-06-2019, 08:51
Но для любителей логических задач есть и такая прекрасная задача:
"
«Привет!» — «Привет!» — «Как дела?» — «Хорошо. Растут два сына, дошкольника». — «А сколько им лет?» — «Произведение их возрастов равно числу голубей около этой скамейки». — «Этой информации мне недостаточно!» — «Старший похож на мать». — «Вот теперь я знаю ответ на свой вопрос!»
"
Сколько лет детям?
Что в ней прекрасного?

Число голубей - N
N является квадратом (информация, что один из детей старше другого - помогла в решении, исключив вариант одинакового возраста).
Для дошкольников есть всего один вариант, N = 4. Старшему сыну 4 года, а младшему - 1.

Следующий квадрат - 9. Но старшему сыну не может быть 9 лет, ведь он дошкольник. 16 тоже не подходит, так как 8 лет - тоже уже школьный возраст.

Косяк в этой задаче в том, что не написано, одна ли мать у этих детей? Если дети от разных матерей, либо же один из них усыновлен, то вполне возможно, что обоим на самом деле по 2 года, но родились они в разные дни, и один из них все же старше другого.

Но думать при "решении" здесь вообще не нужно.

R60
29-06-2019, 09:01
Что в ней прекрасного?

Число голубей - N
N является квадратом (информация, что один из детей старше другого - помогла в решении, исключив вариант одинакового возраста).
Для дошкольников есть всего один вариант, N = 4. Старшему сыну 4 года, а младшему - 1.

Следующий квадрат - 9. Но старшему сыну не может быть 9 лет, ведь он дошкольник. 16 тоже не подходит, так как 8 лет - тоже уже школьный возраст.

Косяк в этой задаче в том, что не написано, одна ли мать у этих детей? Если дети от разных матерей, либо же один из них усыновлен, то вполне возможно, что обоим на самом деле по 2 года, но родились они в разные дни, и один из них все же старше другого.

Но думать при "решении" здесь вообще не нужно.
Почему квадратом? Почему N не может быть 2, 3, 5, 6?

R60
29-06-2019, 09:03
Не сложная. Математика нужна. На решение ушла 1 минута. Никуда не смотрел, ваши решения не читал.

Обозначим все монеты как Mi, где i меняется от 0 до 63, а Mi принимает значения 0 (орел) или 1 (решка).

Вычислим сумму по модулю два (XOR) произведений позиций монет на их значения:
http://www.sciweavers.org/tex2img.php?eq=S%3D%20%20%5Coplus_%7Bi%3D0%7D%5E%7B63%7D%20i%20M_%7Bi%7D%20&bc=White&fc=Black&im=jpg&fs=24&ff=fourier&edit=0

S - будет числом в диапазоне 0...63 и, таким образом, указывать на позицию монеты от 0 до 63.

Пусть P - номер позиции магической монеты. Вычислим сумму по модулю два S и P.

Эта сумма и будет номером монеты, которую нужно перевернуть.
И как ты эту сумму передашь второму заключенному? Это уже выяснили, что можно только передвинуть одну фигуру, сообщать числа нельзя.

ponom
29-06-2019, 10:16
Почему квадратом? Почему N не может быть 2, 3, 5, 6?
Информация, что один из детей старше другого, могла помочь только, если был выбор между двумя ситуациями, одна из которых - близнецы (одинаковый возраст, произведение возрастов является квадратом какого-то числа).

ponom
29-06-2019, 10:18
И как ты эту сумму передашь второму заключенному? Это уже выяснили, что можно только передвинуть одну фигуру, сообщать числа нельзя.
Зачем ее передавать? Он посмотрит на доску и вычислит в уме эту сумму. Для вычисления суммы нужно лишь видеть монеты на доске.

R60
29-06-2019, 10:33
Информация, что один из детей старше другого, могла помочь только, если был выбор между двумя ситуациями, одна из которых - близнецы (одинаковый возраст, произведение возрастов является квадратом какого-то числа).
Пример N=3, это произведение 3*1, и так далее. Квадрат не обязателен, поэтому вариантов больше.

ponom
29-06-2019, 11:32
Пример N=3, это произведение 3*1, и так далее. Квадрат не обязателен, поэтому вариантов больше.
Для ситуации N=3 человек из задачи нашел бы ответ без уточнения, что один из детей старше другого.

R60
29-06-2019, 16:59
Для ситуации N=3 человек из задачи нашел бы ответ без уточнения, что один из детей старше другого.
Ну и что? Какая разница, есть уточнение или нет. Всё равно ответов несколько.

R60
29-06-2019, 17:11
Не сложная. Математика нужна. На решение ушла 1 минута. Никуда не смотрел, ваши решения не читал.

Обозначим все монеты как Mi, где i меняется от 0 до 63, а Mi принимает значения 0 (орел) или 1 (решка).

Вычислим сумму по модулю два (XOR) произведений позиций монет на их значения:
http://www.sciweavers.org/tex2img.php?eq=S%3D%20%20%5Coplus_%7Bi%3D0%7D%5E%7B63%7D%20i%20M_%7Bi%7D%20&bc=White&fc=Black&im=jpg&fs=24&ff=fourier&edit=0

S - будет числом в диапазоне 0...63 и, таким образом, указывать на позицию монеты от 0 до 63.

Пусть P - номер позиции магической монеты. Вычислим сумму по модулю два S и P.

Эта сумма и будет номером монеты, которую нужно перевернуть.
Давай по другому.
Проведем 2 эксперимента. 1. надзиратель указывает клетку А4, 2. надзиратель указывает А5. Как будет изменяться твоя формула для этих экспериментов? Она же должна меняться.
Мне кажется вы не можете понять что именно надзиратель выбирает магическую монету. Если бы заключенный, то ясно что они могут договориться об одной формуле, и находить по ней число. Но для этого и формула не нужна, можно просто договориться какую клетку выбирать.
А в голову надзирателя вы не залезете, он может выбрать любой из 64 вариантов, поэтому договориться об одной формуле нереально. Переворачиванием одной монеты можно сократить область поиска, но не указать точное местоположение.

ponom
29-06-2019, 18:59
Ну и что? Какая разница, есть уточнение или нет. Всё равно ответов несколько.
Ну нет же. После уточнения для N=4 остается единственный ответ.

ponom
29-06-2019, 19:05
Давай по другому.
Проведем 2 эксперимента. 1. надзиратель указывает клетку А4, 2. надзиратель указывает А5. Как будет изменяться твоя формула для этих экспериментов? Она же должна меняться.
Формула не меняется. Меняется ответ, полученный по формуле - сумма по модулю два (оператор XOR) чисел S и P. Она четко зависит от P и после переворачивания монеты с полученным порядковым номером S начинает указывать на P.

Сумма по модулю два обладает одним полезным свойством, которое здесь и используется.

Y xor X xor X = Y

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

R60
29-06-2019, 19:24
Формула не меняется. Меняется ответ, полученный по формуле - сумма по модулю два (оператор XOR) чисел S и P. Она четко зависит от P и после переворачивания монеты с полученным порядковым номером S начинает указывать на P.

Сумма по модулю два обладает одним полезным свойством, которое здесь и используется.

Y xor X xor X = Y

Это свойство широко используется, например, в криптографии: в одноразовых блокнотах, в скрэмблерах. Очень близкой аналогией к данной задаче является задача разделения секрета между многими участниками. Именно поэтому эта задача с монетами решается без всяких усилий за минуту. Я много лет преподавал (в числе прочего) защиту информации в университете, так что более-менее ориентируюсь в соответствующей алгоритмической базе...
Хорошо, не формула меняется, а значение переменной в формуле. Поэтому и ответ меняется. Логично?
То что вы математически можете описать доску это понятно. Но в сотый раз повторю. У нас есть 3 действующих лица в задаче. Как в театре. Есть 64 варианта ответа, один из которых случайным образом выбирает надзиратель. Первый заключенный не может передать второму как изменилось значение переменной в формуле. Тоже логично? Поэтому точного ответа быть в принципе не может.

Если есть формула, о использовании которой можно договориться и она даст правильный ответ на любую из 64 монет, то почему только 64 а не 1000000 например. И вообще, где была такая волшебная формула когда я женился?

R60
29-06-2019, 19:28
Ну нет же. После уточнения для N=4 остается единственный ответ.
Детям 3 года и 1 год. N=3 . Тоже самое.

ponom
29-06-2019, 21:17
Детям 3 года и 1 год. N=3 . Тоже самое.
В этом случае человеку хватило бы информации сразу, без уточнения, что старший сын похож на свою мать.

R60
29-06-2019, 21:36
В этом случае человеку хватило бы информации сразу, без уточнения, что старший сын похож на свою мать.
Как говорится, слив засчитан?

Одиссей
29-06-2019, 23:34
Не сложная
...
Вычислим сумму по модулю два S и P.

Только по модулю 64 все-таки.

ponom
29-06-2019, 23:55
Как говорится, слив засчитан?
Какой слив? В условии задачи прямо говорится, что человек сказал, что имеющейся информации ему не достаточно.
Если бы там было три голубя, то он бы такого не мог сказать, так как в этой ситуации вариант всего один (3 и 1 год) и информации достаточно.

Для N=3 дополнительная информация не нужна. А по условию задачи она понадобилась.

Поэтому Ваш вариант отпадает, как противоречащий исходным данным задачи. Какой слив?

ponom
29-06-2019, 23:58
Только по модулю 64 все-таки.

Почему? Я имею ввиду именно по модулю 2. Числа там будут 6-ти битные (0..63). И над ними должна выполняться побитная операция XOR (сложение по модулю 2).

https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8E_2

ponom
30-06-2019, 00:08
Хорошо, не формула меняется, а значение переменной в формуле. Поэтому и ответ меняется. Логично?
То что вы математически можете описать доску это понятно. Но в сотый раз повторю. У нас есть 3 действующих лица в задаче. Как в театре. Есть 64 варианта ответа, один из которых случайным образом выбирает надзиратель. Первый заключенный не может передать второму как изменилось значение переменной в формуле.
Объясняю еще раз на пальцах.

Формула указывает на монету S.

Первый заключенный вычисляет в уме по формуле это значение S. Затем вычисляет D = S xor P (P-позиция магической монеты).

После этого первый заключенный переворачивает монету D. Этим самым он меняет значение соответствующей переменной и формула начинает выдавать уже другое значние S' = S xor D.

Теперь подставим в эту формулу "S xor P" вместо D и получим S' = S xor S xor P.

По свойству операции xor любое прибавленное два раза число сокращается и остается S' = P.

Второй заключенный заходит, смотрит на доску (с уже перевернутой монетой D), вычисляет по формуле число S' и имеет таким образом правильный ответ P.

Ничего передавать второму заключенному от первого не нужно.

ponom
30-06-2019, 07:01
Задача про трёх Богов (позиционируется как "самая сложная логическая задача")

Уважаю. Я не решил, хотя сразу было ясно, что нужно использовать отрицание отрицания для нивелирования лжи всегда лгущего бога, и неопределенности слов ja и da. Не хватило терпения подобрать правильный вопрос и продумать ветвление возможных ответов.

Эти "ja" и "da" порядком запутывают. Лучше бы боги отвечали Y и Z. :)

Одиссей
30-06-2019, 11:04
Почему? Я имею ввиду именно по модулю 2. Числа там будут 6-ти битные (0..63). И над ними должна выполняться побитная операция XOR (сложение по модулю 2).

Да это я уже запутался. В таком варианте решения нужно ксорить побитно.

R60
30-06-2019, 19:27
Объясняю еще раз на пальцах.

Формула указывает на монету S.

Первый заключенный вычисляет в уме по формуле это значение S. Затем вычисляет D = S xor P (P-позиция магической монеты).

После этого первый заключенный переворачивает монету D. Этим самым он меняет значение соответствующей переменной и формула начинает выдавать уже другое значние S' = S xor D.

Теперь подставим в эту формулу "S xor P" вместо D и получим S' = S xor S xor P.

По свойству операции xor любое прибавленное два раза число сокращается и остается S' = P.

Второй заключенный заходит, смотрит на доску (с уже перевернутой монетой D), вычисляет по формуле число S' и имеет таким образом правильный ответ P.

Ничего передавать второму заключенному от первого не нужно.
Второй заключенный что бы вычислить S' по формуле должен знать какая монета перевернутая, то-есть D. По условиям задачи он этого не должен знать. Свою формулу посмотри, там D есть.

ponom
30-06-2019, 19:59
Второй заключенный что бы вычислить S' по формуле должен знать какая монета перевернутая, то-есть D. По условиям задачи он этого не должен знать. Свою формулу посмотри, там D есть.
Нет, не должен. Он просто суммирует (мо модулю два) произведения позиций ВСЕХ монет на доске на значения монет. Среди этих монет на доске - и перевернутая. Сам факт переворачивания уже изменил значение суммы, вычисляемой по формуле так, чтобы она указывала на магическую монету.

sineemore
05-11-2019, 02:43
В теме про НЛО цитата из Дугласа Адамса. Коротко: количество планет бесконечно. Часть планет обитаема, то есть обитаемых планет конечное число. Конечное число, поделенное на бесконечность, стремится к нулю. Следовательно, Вселенная необитаема.

А почему часть бесконечности обязательно конечна? Мне кажется, не обязательно.

Или?

Димыч
05-11-2019, 08:14
В теме про НЛО цитата из Дугласа Адамса. Коротко: количество планет бесконечно. Часть планет обитаема, то есть обитаемых планет конечное число. Конечное число, поделенное на бесконечность, стремится к нулю. Следовательно, Вселенная необитаема.
А почему часть бесконечности обязательно конечна? Мне кажется, не обязательно.
Или?

Ну не... Часть от бесконечности может быть как конечным числом так и бесконечным.
Если ты имеешь в виду "несколько штук из бесконечности" - это одно дело, а если ты говоришь что-то типа "1% от бесконечности" - то это тоже будет бесконечность.
Выражение "часть из них обитаема" - больше подходит ко второй постановке вопроса, и тогда получается, что обитаемых планет бесконечное множество. Но, наверное, можно так сказать и для конечного числа планет, хотя тут по-хорошему надо говорить не "часть из них обитаема", а "из них Х планет обитаема"

Одиссей
05-11-2019, 11:27
В теме про НЛО цитата из Дугласа Адамса. Коротко: количество планет бесконечно. Часть планет обитаема, то есть обитаемых планет конечное число. Конечное число, поделенное на бесконечность, стремится к нулю. Следовательно, Вселенная необитаема.

А почему часть бесконечности обязательно конечна? Мне кажется, не обязательно.

Или?
Не обязательно. Часть может быть и конечной и бесконечной и пустой.
Забавно, что, допустим, половина бесконечного множества может оказаться "равна" ему целиком. Например если взять все целые числа, а потом разделить их на две кучи - четные и нечетные, то каждая из этих куч будет равна изначальной общей куче.

Если копать дальше, например выяснять все ли бесконечные множества одинаково бесконечны, то быстро становится ясно что не все. Некоторые бесконечные бесконечнее других. Например бесконечное число действительных чисел "больше" бесконечного числа целых.

Если копать еще дальше, разбираться насколько бесконечными бывают бесконечные множества, то там возникает уже вполне взрослая математика (aka аксиоматическая теория множеств) со своими очень специфичными приколами (например парадоксы Рассела, а потом Банаха-Тарского).

sineemore
05-11-2019, 11:36
Да, я поняла, что бесконечность, деленная на число - это тоже бесконечность. Совершенно какие-то парадоксальные свойства у нее (особенно для обывателя, меня :) )

Это можно себе и без математики представить даже, представляя себе эти планеты. Несмотря ведь на то, что необитаемых больше, чем обитаемых, обитаемых тоже потенциально бесконечно. То есть их и меньше, и равно необитаемым.

Если, разумеется, принять на веру то, что обитаемых меньше, может, на каком-то участке вселенной начинается очень высокая плотность именно обитаемых планет.

Или у меня ошибка?

Димыч
05-11-2019, 11:48
Не обязательно. Часть может быть и конечной и бесконечной и пустой.
Забавно, что, допустим, половина бесконечного множества может оказаться "равна" ему целиком. Например если взять все целые числа, а потом разделить их на две кучи - четные и нечетные, то каждая из этих куч будет равна изначальной общей куче.

С чего бы это вдруг?
Множество четных чисел составляет половину от множества целых чисел. Хотя и то и другое - бесконечность.
Ни разу не делили "бесконечность на бесконечность " что ли?

Димыч
05-11-2019, 11:51
Да, я поняла, что бесконечность, деленная на число - это тоже бесконечность. Совершенно какие-то парадоксальные свойства у нее (особенно для обывателя, меня :) )


Бесконечность-то бесконечность... Но если количество всех целых чисел разделить на количество всех четных чисел, то будет два. Т.е. эти две бесконечности не равны друг другу конечно же

sineemore
05-11-2019, 11:51
С чего бы это вдруг?
Множество четных чисел составляет половину от множества целых чисел. Хотя и то и другое - бесконечность.
Ни разу не делили "бесконечность на бесконечность " что ли?

Это, вроде, и есть пример с планетами, а также пример с % от бесконечности. Ну и разве Одиссей не то же самое сказал, что и ты?

sineemore
05-11-2019, 11:57
Бесконечность-то бесконечность... Но если количество всех целых чисел разделить на количество всех четных чисел, то будет два. Т.е. эти две бесконечности не равны друг другу конечно же

Да, но они при этом все равно бесконечности.

А бесконечность вообще - это число? То есть да, конечно.

Но у него тогда свойства отличаются от свойств обычных чисел.

Одиссей
05-11-2019, 12:33
Да, но они при этом все равно бесконечности.

А бесконечность вообще - это число? То есть да, конечно.

Но у него тогда свойства отличаются от свойств обычных чисел.
Нет, не число. В данном контексте это "кардинал" (или мощность множества).

Для кардиналов тоже можно ввести арифметические операции (сложение, деление итд), даже возведения в степень и логарифмы. Но это на пальцах уже не покажешь.

Это можно себе и без математики представить даже, представляя себе эти планеты. Несмотря ведь на то, что необитаемых больше, чем обитаемых, обитаемых тоже потенциально бесконечно. То есть их и меньше, и равно необитаемым.

Если, разумеется, принять на веру то, что обитаемых меньше, может, на каком-то участке вселенной начинается очень высокая плотность именно обитаемых планет.

Или у меня ошибка?

Из этого можно задачку сделать:
выдумайте такую числовую последовательность f(k), что
1. lim k->inf (k/f(k)) = 0
2. Для любого n существует m, такое что для всех k от m до m+n f(k+1)=f(k)+1

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

Задачка вполне детская, решается моментально, выдумать такую последовательность можно.

Димыч
05-11-2019, 13:27
Это, вроде, и есть пример с планетами, а также пример с % от бесконечности. Ну и разве Одиссей не то же самое сказал, что и ты?
Мне просто не понравился тезис о том, что бесконечности "равны".
Хотя сейчас я посмотрел ещё раз, и увидел, что "равны" там в кавычках написано. Тогда да, - "равны" (но не равны) :gy:

sineemore
05-11-2019, 13:56
Нет, не число. В данном контексте это "кардинал" (или мощность множества).

Для кардиналов тоже можно ввести арифметические операции (сложение, деление итд), даже возведения в степень и логарифмы. Но это на пальцах уже не покажешь.

Из этого можно задачку сделать:
выдумайте такую числовую последовательность f(k), что
1. lim k->inf (k/f(k)) = 0
2. Для любого n существует m, такое что для всех k от m до m+n f(k+1)=f(k)+1

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

Задачка вполне детская, решается моментально, выдумать такую последовательность можно.

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

Забавно, какие вещи существуют в мире, о которых обыватель и не думает даже)

HE02iTYQQ0I

sineemore
05-11-2019, 13:57
Интересно, а могут бесконечности быть равно по какому-то одному параметру, а по другому - не равны. Например, если представить две бесконечно длинных ленты, но одна шире другой. Такие вещи в математике рассматривают?

sineemore
05-11-2019, 16:55
Нет, не число. В данном контексте это "кардинал" (или мощность множества).

Для кардиналов тоже можно ввести арифметические операции (сложение, деление итд), даже возведения в степень и логарифмы. Но это на пальцах уже не покажешь.


Это только если касается множеств, или вообще никогда не число?

Ведь с одной стороны, это - качество множества. С другой стороны - и число тоже, которое не имеет конца.

Одиссей
06-11-2019, 12:09
Это только если касается множеств, или вообще никогда не число?

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

Пример возни с бесконечностью как с числом есть в курсе матанализа Кудрявцева. (По мне так это упражнение для особо утонченных извращенцев).

Интересно, а могут бесконечности быть равно по какому-то одному параметру, а по другому - не равны. Например, если представить две бесконечно длинных ленты, но одна шире другой. Такие вещи в математике рассматривают?
Конечно рассматривают. Конкретно с лентами - они любой ширины будут одинаково бесконечными (есть термин "равномощные"). И даже если ленту в плоскость растянуть - ничего не изменится.
А вот если из ленты сделать бесконечную рулетку с делениями, то бесконечное число делений будет "меньше" бесконечно длинны ленты. (Это тоже рассматривают.)

ratel
23-01-2020, 03:15
Упоминая логику обычно подразумевают использование дедуктивного метода для вывода умозаключений, в целом это неплохой метод для своей простоты, уверенное им владение позволяет выводить одну тавтологию из другой, а такое замечательное умение не навредит никому, кроме молодых красивых девушек.

Развитие метода было положено Аристотелем, который достаточно насмотрелся на Афинскую демократию в действии вплоть до захвата полиса более уважаемыми людьми, не мог Аристотель равнодушно смотреть на то, как естественные рабы благодаря численному преимуществу угнетают умных и богатых, и принялся писать труд "Риторика" для описания способов убеждения через речь, что включает в себя этос, пафос и логос. После смерти Македонского-младшего афиняне вспомнили хорошо проверенный способ борьбы с философами, недостойный доверия Аристотель решил не доводить дело до суда, но на всякий случай вскоре отравился артосом по другую сторону Эврипа. Обращение к рассуждению, используемый для выявления и устранения ошибочных аргументов и утверждений, логос, был выделен перипатетиками в отдельный труд «Органон», или «прибор» по-русски.

Труды Аристотеля не пропали зря, книги были переоткрыты и разрекламированы Цицероном, к несчастью, и он неблагополучно скончался из-за малодушия и предательства вольноотпущенного раба Филолога, с тех пор филология стала дисфемизмом герменевтики, а, напротив, логика Аристотеля была развита до уровня пропозициональной логики и далее до предикативной логики, которая является единственным верным методом верификации новых знаний в формальных науках: математике, философии и лингвистике. Дедуктивные умозаключения и есть применение предикативной логики, описываемой всего тремя простейшими аксиомами: ((a.b).c).(a.((a.c).a)) = c, где символ точки обозначает штрих Шеффера, универсальное подтверждение и экзистенциальное обобщение.

Краем глаза взглянув на «Органон» Аристотеля, Бэкон даже не задумался постесняться продемонстрировать публике свой собственный «Органон», а совершенно зря. Мало ли рождается людей, неспособных оперировать соритами, эпихейремами и энтимемами, но индуктивная логика хоть и выходит за рамки idem per idem, но годится лишь для подтверждения теоремы Байеса и не более того, даже тавтологию не вывести в её рамках. К счастью, Пирс-младший формально описал систему абдуктивных логических рассуждений, которая качественно лучше дедуктивной и индуктивной в смысле практического применения и созидательного описания законов нашего прекрасного мира.

И всё-таки, как же дедукция? Этот красивый в простоте метод постоянно царапает нашу культуру, воображение и самомнение, онтологические доказательства существования Бога следуют одно за другим, и теперь современно их делать в модальной логике, кто-то вообще не понимает область применимости дедуктивных рассуждений, ну а мне ближе всего мудрые слова Ревущего Льва:

So from a logical point of view
Always love a woman uglier than you

ponom
24-01-2020, 16:35
В теме про НЛО цитата из Дугласа Адамса. Коротко: количество планет бесконечно.
Как он доказал, что количество планет бесконечно?

vaisan
24-01-2020, 19:14
Как он доказал, что количество планет бесконечно?
Очень просто - методом индукции.

sineemore
24-01-2020, 20:06
Как он доказал, что количество планет бесконечно?
Это цитата из юмористической книжки. И он не доказывал именно это .

ponom
24-01-2020, 21:11
Это цитата из юмористической книжки. И он не доказывал именно это .
Стремный юмор - спорное утверждение, затем псевдологическая связка "то есть" (хотя на самом деле совсем не "то есть"), затем неверный вывод.

Такие шутки можно клепать десятками в день. Например:

Количество возможных звуков - бесконечно. Часть звуков представляют собой человеческую речь, то есть число таких звуков - конечно. Следовательно вероятность услышать человеческую речь равна конечной величине, деленной на бесконечную, а проще говоря нулю.

:wisdom: :cognac: :cognac:

sineemore
24-01-2020, 21:15
Стремный юмор - спорное утверждение, затем псевдологическая связка "то есть" (хотя на самом деле совсем не "то есть"), затем неверный вывод.

Такие шутки можно клепать десятками в день. Например:

Количество возможных звуков - бесконечно. Часть звуков представляют собой человеческую речь, то есть число таких звуков - конечно. Следовательно вероятность услышать человеческую речь равна конечной величине, деленной на бесконечную, а проще говоря нулю.

:wisdom: :cognac: :cognac:
"Автостопом по галактике " это. На мой взгляд чудесный образец бредового юмора в сочетании с глубокими идеями.
Смысл этой шутки просто в ее абсурдности

Плюс. Возможно, это пародия на бюрократию