powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Относительно простые задачки
339 сообщений из 339, показаны все 14 страниц
Относительно простые задачки
    #39914285
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не плодить топики, здесь будет всякая ерунда на один укус.

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

Алгоритм должен работать за линейное время. То есть если вагонов окажется N штук, то всяких действий не более чем O(N)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914302
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ходить вперед-назад можно?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914304
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin
Ходить вперед-назад можно?
да.

по сути всё то же самое как в оригинале, плюс ограничение на асимптотику
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914592
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Представляя себя машиной Тьюринга.

Я могу бегать вправо(+1) влево(-1). Справа - включать свет во всех вагонах. Влево выключать.
Сначала +1,-1. Потом +2,-2 и так далее пока половина вагонов не будет включена.
При этом в уме считать.

Получается асимптоматика вроде квадратичной. Цикл с увеличивающимся внутренним циклом.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914600
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня получается по три пробежки между точками A->B->A->B, далее точка B превращается в A и все повторяется, плюс одна финальная пробежка, когда во всех вагонах будет одинаковое состояние, по моей стратегии получается максимум 4*N проходов, вроде как удовлетворяет O(N).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914625
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
когда во всех вагонах будет одинаковое состояние,

Когда в старом вагоне будет состояние, отличное от установленного ранее.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914703
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.
все верно, сейчас проверил, действительно 4N в худшем случае (когда непосредственно перед самым первым вагоном выключен свет).

у меня было решение немного хуже, от 4N до 8N: ходить от некоего постоянного стартового вагона (с выключенным светом) вправо, включая везде свет и запоминая, в каком по счету вагоне последний раз был выключен, потом возвращаться и проверять стартовый. Забеги делать сначала на 1, потом на 2, потом на 4, на 8 вагонов и т.д.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914779
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.


Как я понял, нельзя И метить и включать свет.
либо одно, либо другое
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914789
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.

Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914791
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон.
Там все правильно, за исключением того, что это 5N.
Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914797
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
5N.
да, точно.
финальная пробежка будет туда и обратно по всему поезду.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914799
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
5N.
да, точно.
финальная пробежка будет туда и обратно по всему поезду.
Кстати, 4N можно добиться инверсией подключения и направления основного обхода
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914802
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Dima T
Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон.
Там все правильно, за исключением того, что это 5N.
Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода.

Он ходит туда-сюда увеличивая проходимый отрезок. В худшем случае (изначально в вагоны в состоянии: 01010101010) будет такая последовательность переходов из вагона в вагон: 1,3,5,7...N, это арифметическая прогрессия, ее сумма ((1+N)/2)*N, т.е. O(N 2 )
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914804
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все-таки сначала надо определиться что означает термин "действие". Проверка света в одном вагоне это действие?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914806
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
пропущено...
да, точно.
финальная пробежка будет туда и обратно по всему поезду.
Кстати, 4N можно добиться инверсией подключения и направления основного обхода
не очень понял, как это.


Dima T
Соколинский Борис
пропущено...
Там все правильно, за исключением того, что это 5N.
Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода.

Он ходит туда-сюда увеличивая проходимый отрезок. В худшем случае (изначально в вагоны в состоянии: 01010101010) будет такая последовательность переходов из вагона в вагон: 1,3,5,7...N, это арифметическая прогрессия, ее сумма ((1+N)/2)*N, т.е. O(N 2 )
нет.
Пройдя очередной отрезок АВАВ (то есть пройдя по нему 3 раза), он делает точку В стартовой и уже не будет за неё возвращаться.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914807
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Все-таки сначала надо определиться что означает термин "действие". Проверка света в одном вагоне это действие?
действие - переход в соседний вагон.
Можно ещё переключение света и проверку так назвать, но на линейность асимптотики это не влияет, потому не заморачиваемся.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914813
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183
iOracleDev
когда во всех вагонах будет одинаковое состояние,

Когда в старом вагоне будет состояние, отличное от установленного ранее.

Да, оба выражения отражают одно и то же.

Aklin
Как я понял, нельзя И метить и включать свет.
либо одно, либо другое

Ничего метить нельзя, можно только ходить из вагона в вагон по ходу или против хода поезда и включать
или выключать свет в вагоне, кроме того можно считать вагоны. Буквами я их называю чтобы проще было
понять алгоритм. Например вагон с которого начали пусть будет 0-й, следующий вагон принятый новой точкой
отсчета например будет 5-й по счету от нулевого, следующий будет например 7-й по счету от 0-го и 2-й по
счету от 5-го, т.е. никаких букв мы в вагонах не рисуем.

Соколинский Борис
Там все правильно, за исключением того, что это 5N.
Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода.

Да, посчитал последнюю пробежку по всему кругу только туда, обратно упустил, получается 5N в худшем случае, в лучшем 2N.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914816
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Пройдя очередной отрезок АВАВ (то есть пройдя по нему 3 раза), он делает точку В стартовой и уже не будет за неё возвращаться.

Как не будет если
iOracleDev
... обозначим его буковкой B, включаем в нем свет и идем обратно в A ...


O(N) будет если добавить возможность "телепортации" между А и Б, т.е. переход из А в Б это одно действие, т.к. вагоны между А и Б не интересны, их состояние известно.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914818
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наверное был не прав. По моему методу также нелья понять при движении вправо - выключил ли я лампочку
либо она просто уже была выключена.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914820
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Нет, каждый вагон посещается не более пяти раз, в самом плохом случае получаем 5*N.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914826
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
пропущено...
Кстати, 4N можно добиться инверсией подключения и направления основного обхода
не очень понял, как это.

Если при проходе B->A выключать во всех вагонах свет, то можно обратно в B не возвращаться, просто искать не первый выключенный, а первый включенный.
4N, на самом деле не получается, но будет <5N.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914829
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Как не будет если
iOracleDev
... обозначим его буковкой B, включаем в нем свет и идем обратно в A ...
так ведь буквицей А каждый раз будет назван новый вагон, а не тот, с которого начали:
iOracleDev
назначаем вагон B вагоном A и далее повторяем описанную процедуру
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914830
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Если при проходе B->A выключать во всех вагонах свет, то можно обратно в B не возвращаться, просто искать не первый выключенный, а первый включенный.
так первый включенный и будет В :) то есть всё то же самое.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914835
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Dima T,

Нет, каждый вагон посещается не более пяти раз, в самом плохом случае получаем 5*N.

Понял, ты продвигаешься постоянно вперед, т.е. А всегда смещается вперед, а Б где-то впереди А. Тогда O(N)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914840
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
Если при проходе B->A выключать во всех вагонах свет, то можно обратно в B не возвращаться, просто искать не первый выключенный, а первый включенный.
так первый включенный и будет В :) то есть всё то же самое.
Первый по ходу движения.
Т.е. схема такая:
когда идем CW первый вагон в цепочке выключен, остальные проверенные включены.
когда идем CCW первый вагон включен, остальные проверенные выключены.
При возврате в точку проверки каждый раз решаем в какую сторону идти - туда где меньше проверенных вагонов, и по ходу движения либо включаем проверенные, либо выключаем.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914843
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дайте определение вагона А,

как-то не особенно очевидно, что все тут срастается.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914846
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, тут лучше сразу на IT-шный язык перейти.
Есть закольцованная R/W цепочка битов неизвестной длины и состояния, нужно найти длину.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914848
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть машина Тьюринга которая бегает по ленте завернутой в кольцо. На ленте - только нули и единички.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914855
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... и указатель стоит на бите со значением b

поехали
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914858
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
машина Тьюринга
которая к тому же умеет считать шаги, без этого можно только включить (или выключить) свет во всех вагонах
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914860
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
машина Тьюринга
которая к тому же умеет считать шаги, без этого можно только включить (или выключить) свет во всех вагонах

Да у нее нет другой памяти кроме ленты. Но согласись. Было бы красивое решение? Да?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914867
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
... и указатель стоит на бите со значением b

поехали

Просто все. Суть в том что сзади остаются единицы и проверяется что до следующего нуля круг вперед. Если нет, то 0 становится 1.

Допустим исходное состояние
Код: plaintext
010101010
Указатель А на первый бит, выставляем его в 0, идем вперед до следующего 0 это будет Б
Код: plaintext
1.
010101010
А Б
Устанавливаем Б в 1, проверяем что А == 0, если так то продолжаем, ставим 1 в А, возвращаемся в Б и назначаем его А
Код: plaintext
1.
110101010
  А
дальше повторяем
Код: plaintext
1.
110101010
  А Б
Код: plaintext
1.
111101010
    А Б
Код: plaintext
1.
111111010
      А Б
и на следующей итерации А и Б окажутся одним и тем же битом.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914869
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
6.
interface LoopTrain {
    boolean check();
    boolean set(boolean value);
    void stepRight();
    void stepLeft();
}
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914879
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Имя пользователя1
пропущено...
которая к тому же умеет считать шаги, без этого можно только включить (или выключить) свет во всех вагонах

Да у нее нет другой памяти кроме ленты. Но согласись. Было бы красивое решение? Да?
согласен.

и навскидку, такое решение есть для задачи "обнулить машиной Тьюринга все ячейки закольцованной ленты неопределенной длины".
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914883
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

спасибо
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914891
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
пропущено...
так первый включенный и будет В :) то есть всё то же самое.
Первый по ходу движения.
Т.е. схема такая:
когда идем CW первый вагон в цепочке выключен, остальные проверенные включены.
когда идем CCW первый вагон включен, остальные проверенные выключены.
При возврате в точку проверки каждый раз решаем в какую сторону идти - туда где меньше проверенных вагонов, и по ходу движения либо включаем проверенные, либо выключаем.
А все таки 4 N получается. Ибо количество шагов возврата к точке проверке и обратно не более N
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914899
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Соколинский Борис
пропущено...
Первый по ходу движения.
Т.е. схема такая:
когда идем CW первый вагон в цепочке выключен, остальные проверенные включены.
когда идем CCW первый вагон включен, остальные проверенные выключены.
При возврате в точку проверки каждый раз решаем в какую сторону идти - туда где меньше проверенных вагонов, и по ходу движения либо включаем проверенные, либо выключаем.
А все таки 4 N получается. Ибо количество шагов возврата к точке проверке и обратно не более N
не понял идею.
можно на простом примере?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914921
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
есть два счетчика P/N: количество проверенных битов при движении вперед/назад
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
010101000 P=0 N=0
A
010101000 P=0 N=2
  B  
001101000 P=2 N=0
A
101101000 P=2 N=4
     B               
101100111 P=2 N=4
A      
111110111 P=4 N=4
     B               
Переключаем и идем в любую сторону.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914944
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cорри, не дописал две итерации

есть два счетчика P/N: количество проверенных битов при движении вперед/назад
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
010101000 P=0 N=0
A
010101000 P=2 N=0
  B  
001101000 P=2 N=0
A
101101000 P=2 N=4
     B               
101100111 P=2 N=4
A      
011110111 P=4 N=4
     B               
000001111 P=4 N=4
A
100000000 P=4 N=8
A,B
011111111 P=8 N=8
A<>A
C=9
                    
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915016
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да у нее нет другой памяти кроме ленты. Но согласись. Было бы красивое решение? Да?
думаю что в этом случае как раз память есть, а именно сколько шагов и в каком направлении мы прошли.

Хотя в твоем случае это по сути обычная машина Тьюринга.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915018
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Код: plaintext
1.
2.
3.
010101000 P=0 N=0
A
010101000 P=2 N=0
  B  
Это значит идем вправо на два вагона?
А потом возвращаемся обратно на два вагона, то есть всего 4 шага ?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915077
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin,
Долго объяснять, я запрограммировал оба варианта
Код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
program CycleChain;
{$APPTYPE CONSOLE}
uses sysutils;
type
  TChainGenerator=class
  private
    FRandSeed: integer;
    FBits: array of Boolean;
    FIndex: integer;
    FIterCounter: integer;
    function GetState: boolean;
    procedure SetState(const Value: boolean);
  public
    procedure Init(N: integer);
    procedure Reset(AsRandom: boolean);

    property State: boolean read GetState write SetState;
    property NIter: integer read FIterCounter;
    procedure Move(FF: boolean);
  end;

{ TChainGenerator }

function TChainGenerator.GetState: boolean;
begin
  Result:=FBits[FIndex];
end;

procedure TChainGenerator.Init(N: integer);
begin
  SetLength(FBits, N);
  Randomize;
  FRandSeed:=RandSeed;
end;

procedure TChainGenerator.Move(FF: boolean);
begin
  if FF
    then FIndex:=(FIndex+1) mod length(FBits)
  else if FIndex=0
    then FIndex:=high(FBits)
    else dec(FIndex);
  inc(FIterCounter);
end;

procedure TChainGenerator.Reset(AsRandom: boolean);
var i: integer;
begin
  RandSeed:=FRandSeed;
  for i:=0 to high(FBits) do
  if AsRandom
    then FBits[i]:=random<0.5
    else FBits[i]:=odd(i);
  FIndex:=0;
  FIterCounter:=0;
end;

procedure TChainGenerator.SetState(const Value: boolean);
begin
  FBits[FIndex]:=value;
end;


//========= поиск в одном направлении =====================//
function SearchUni(CG: TChainGenerator): integer;
var
  i, CCounter: integer;
begin
  repeat
    CG.State:=false; //устанавливаем начальную позицию в 0
    CCounter:=0;     //cбрасываем счетчик
    repeat
      CG.Move(true);
      inc(CCounter);
    until not CG.State; //дошли нуля

    CG.State:=true; //переключили в 1

    for i:=CCounter-1 downto 0 do //возвращаемся назад
      CG.Move(false);

    if CG.State
      then Break; //изменился переключатель

    //перенос точки проверки
    CG.State:=true; //переключаем
    for i:=0 to CCounter-1 do //двигаемся обратно
      CG.Move(true);

  until false;
  Result:=CCounter;
end;


//========= поиск в двух направлениях =====================//
function SearchBi(CG: TChainGenerator): integer;
var
  i: integer;
  C: array[boolean] of Integer;
  FF: boolean;

begin
  C[false]:=0; C[true]:=0; FF:=true;
  repeat
    CG.State:=not FF; //устанавливаем начальную позицию в обратном направлении

    //движение без проверки
    for i:=0 to C[ff]-1 do begin
      CG.Move(FF);
      CG.State:=FF;
    end;

    //движение с проверкой
    repeat
      CG.Move(FF);
      inc(C[FF]);
      if (CG.State<>FF) then begin
        CG.State:=FF; //переключаем состояние
        Break;
      end;
    until false;

    //возврат в точку для проверки
    FF:=not FF;
    for i:=C[not FF]-1 downto 0 do begin
      CG.Move(FF);
      if i<>0
        then CG.State:=FF; //переключаем состояние для всех кроме точки проверки
    end;

    if CG.State<>FF
      then Break //изменился переключатель, нашли конец
    else begin
      //выбор направления движения
      if C[FF]>C[not FF] then
        FF:=not FF;

      //перенос точки проверки
      for i:=0 to C[FF] do begin
        CG.State:=FF;
        CG.Move(FF);
      end;
      inc(C[not FF], C[FF]);
      C[FF]:=0;
    end;
  until false;
  Result:=C[not FF];
end;



//================ Вызывалка ====================================//
var
  Rnd: boolean;
  i, N: integer;
  CG: TChainGenerator;

begin
  CG:=TChainGenerator.Create;

  for rnd:=false to true do begin
    if Rnd
      then Writeln('========Random test=========')
      else Writeln('========Regular test========');

    for i:=1 to 9 do begin
      N:=i*10;
      CG.Init(i*10);
      Write(format('N=%d',[N]));
      CG.Reset(Rnd);
      Write(format(' uni N/C %d/%d',[SearchUni(CG), CG.NIter]));
      CG.Reset(Rnd);
      Writeln(format(' bi N/C %d/%d',[SearchBi(CG), CG.NIter]));
    end;
    Writeln;
  end;
  Readln;
end.



Результаты

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
========Regular test========
N=10 uni N/C 10/44 bi N/C 10/43
N=20 uni N/C 20/94 bi N/C 20/83
N=30 uni N/C 30/144 bi N/C 30/123
N=40 uni N/C 40/194 bi N/C 40/163
N=50 uni N/C 50/244 bi N/C 50/203
N=60 uni N/C 60/294 bi N/C 60/243
N=70 uni N/C 70/344 bi N/C 70/283
N=80 uni N/C 80/394 bi N/C 80/323
N=90 uni N/C 90/444 bi N/C 90/363

========Random test=========
N=10 uni N/C 10/47 bi N/C 10/46
N=20 uni N/C 20/97 bi N/C 20/90
N=30 uni N/C 30/147 bi N/C 30/128
N=40 uni N/C 40/197 bi N/C 40/169
N=50 uni N/C 50/247 bi N/C 50/220
N=60 uni N/C 60/297 bi N/C 60/258
N=70 uni N/C 70/329 bi N/C 70/300
N=80 uni N/C 80/397 bi N/C 80/346 
N=90 uni N/C 90/441 bi N/C 90/386
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915078
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
господа, вспомнился ещё паззл умеренной сложности.

На фестиваль фокусников приехало 65 участников. Так уж заведено правилами, что в любой день участник может либо выступать, либо смотреть выступления других, но нельзя и то и другое. Какое минимальное количество дней достаточно для фестиваля, чтобы каждый увидел выступление каждого? С доказательством минимальности.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915100
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сможем - ли мы посчитать площадь поверхности тора таким-же образом окрашивая клетки в 0 или 1 для
случайной поверхности где записан шум?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915102
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Сможем - ли мы посчитать площадь поверхности тора таким-же образом окрашивая клетки в 0 или 1 для
случайной поверхности где записан шум?
сначала выясним высоту, потом ширину :)

а вот как обнулить все клетки клеточным автоматом вроде двумерной машины Тьюринга, который может только записывать ячейку, смотреть ячейку, и двигаться на одну из 4 соседних, но не умеет считать - это уже интересный вопрос.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915106
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дали бы третий цвет...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915255
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
господа, вспомнился ещё паззл умеренной сложности.

На фестиваль фокусников приехало 65 участников. Так уж заведено правилами, что в любой день участник может либо выступать, либо смотреть выступления других, но нельзя и то и другое. Какое минимальное количество дней достаточно для фестиваля, чтобы каждый увидел выступление каждого? С доказательством минимальности.
Есть какие-то ограничения на количество выступлений? Если нет, то ответ - бесконечность (Кто-то решил выступать каждый день)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915286
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
господа, вспомнился ещё паззл умеренной сложности.

На фестиваль фокусников приехало 65 участников. Так уж заведено правилами, что в любой день участник может либо выступать, либо смотреть выступления других, но нельзя и то и другое. Какое минимальное количество дней достаточно для фестиваля, чтобы каждый увидел выступление каждого? С доказательством минимальности.
Есть какие-то ограничения на количество выступлений? Если нет, то ответ - бесконечность (Кто-то решил выступать каждый день)
можно считать, что у каждого есть только один уникальный фокус, который он может показать. И все остальные должны хотя бы раз это увидеть. Он может выступать с этим фокусом хоть сколько угодно, однако нам требуется минимизировать количество дней фестиваля.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915288
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шестьдесят четыре артиста выступают в первый день для одного зрителя.
На следующий день - сольное выступление для шестидесяти четырёх зрителей.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915296
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Шестьдесят четыре артиста выступают в первый день для одного зрителя.
На следующий день - сольное выступление для шестидесяти четырёх зрителей.
но тогда эти 64 не увидят выступление друг друга.

Я имел в виду, что у каждого свой уникальный фокус.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915383
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
господа, вспомнился ещё паззл умеренной сложности.

На фестиваль фокусников приехало 65 участников. Так уж заведено правилами, что в любой день участник может либо выступать, либо смотреть выступления других, но нельзя и то и другое. Какое минимальное количество дней достаточно для фестиваля, чтобы каждый увидел выступление каждого? С доказательством минимальности.

Меньше 65 не придумал - по одному в день.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915388
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Имя пользователя1
господа, вспомнился ещё паззл умеренной сложности.

На фестиваль фокусников приехало 65 участников. Так уж заведено правилами, что в любой день участник может либо выступать, либо смотреть выступления других, но нельзя и то и другое. Какое минимальное количество дней достаточно для фестиваля, чтобы каждый увидел выступление каждого? С доказательством минимальности.

Меньше 65 не придумал - по одному в день.
условию соответствует, но конечно можно намного меньше
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915397
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
пропущено...
Есть какие-то ограничения на количество выступлений? Если нет, то ответ - бесконечность (Кто-то решил выступать каждый день)
можно считать, что у каждого есть только один уникальный фокус, который он может показать. И все остальные должны хотя бы раз это увидеть. Он может выступать с этим фокусом хоть сколько угодно, однако нам требуется минимизировать количество дней фестиваля.

OK, формализуем задачу.
Есть квадратная матрица размера N.
По столбцам - "я посмотрел", по строкам - "меня посмотрели".
Исходно она единичная (я себя уже видел, остальные - нет), нужно ее полностью заполнить за минимальное количество итераций.
В каждой итерации может быть любое множество элементов (S). Если элемент k входит в S, при выполнении итерации для элемента k заполняются единицами все элементы в к-той строке, кроме тех, кто входит в S.
Для начала определимся с оптимальным числом элементов в S (максимизируем количество установленных единиц при выполнении итерации).
Получаем рекурентную формулу (1)


если ее развернем, получим (2):


Оптимум достигается при K=[N/2] т.е каждый день должно выступать 32 участника.
Исходя из оптимального соотношения за первые два для заполняем два квадранта матрицы (в первый день верхний правый, во второй - нижний левый)
Оставшиеся квадранты разбиваем по той же схеме ("верхние"/нижние)
Получаем окончательную формулу:

При N=65 D= 12
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915400
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
D= 12
можно меньше.

тут всё проще намного, только надо "с другого конца" зайти.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915462
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
"Матричный конец" мне кажется вполне разумным и максимальное количество выступающих в день тоже.
Очевидно также, что более четверти в день заполнить невозможно, т.е. D>=4.
Проблема в том, что при такой схеме матрица заполняется неравномерно.
Интуитивно хочется делать блоки выступающих порядка и перетасовывать их, но пока не придумал как.
Если придумаю, будет 8-9 :)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915480
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

говорю же - посмотри на эту задачу с обратной стороны. Всё моментально встанет на свои места самым очевидным образом. Ну кроме док-мина, это отдельная вишенка на торте.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915490
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис,

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


Сейчас пока не могу.
Пока на предыдущую (вагоны) посмотрю.
Условия те же, нужно придумать алгоритм, который работает как O(2N) с вероятностью >=(1/2) 2N
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915494
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
Соколинский Борис,

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


Сейчас пока не могу.
Пока на предыдущую (вагоны) посмотрю.
Условия те же, нужно придумать алгоритм, который работает как O(2N) с вероятностью >=(1/2) 2N
22060302 работает как O(2N) с вероятностью P=(1/2) N-1 , что больше (1/2) 2N

а именно, для случаев, когда во всех вагоны, кроме стартового, свет включен. В стартовом неважно, всё равно он выключается первым же действием.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915499
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1

а именно, для случаев, когда во всех вагоны, кроме стартового, свет включен. В стартовом неважно, всё равно он выключается первым же действием.
Извиняюсь, неправильно сформулировл
P>=1-(1/2) 2N
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915518
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
Да у нее нет другой памяти кроме ленты. Но согласись. Было бы красивое решение? Да?
согласен.

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

Каким образом золотой рыбке понять, что лента пройдена?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915558
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Имя пользователя1
пропущено...
согласен.

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

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

В общем, по аналогии с твоим решением. Тоже линейное время получится.

Всё это можно обыграть состояниями и переходами.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915563
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

у меня получилось 8
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915590
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Соколинский Борис,

у меня получилось 8
8 - правильный результат. Как делать? И почему меньше нельзя?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915593
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

Не работает, золотая рыбка проплыв из одного вагона в другой имеет состояние только текущего вагона, т.е. 0 или 1, она не помнит что было в предыдущем, у нее нет дополнительных регистров памяти, она не может анализировать последовательности.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915597
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Имя пользователя1,

Не работает, золотая рыбка проплыв из одного вагона в другой имеет состояние только текущего вагона, т.е. 0 или 1, она не помнит что было в предыдущем, у нее нет дополнительных регистров памяти, она не может анализировать последовательности.
ну вообще-то в машине Тьюринга есть состояния. Что надо сделать, определяется текущим состоянием и содержимым текущей ячейки.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915602
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

Я зацепился за фразу - нет другой памяти кроме ленты, флаг состояния это уже внешняя по отношению к ленте память, а так да красивое решение требующее меньший объем информации и не проигрывающее в скорости.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915603
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
iOracleDev
Имя пользователя1,

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

Машина представляет собой конечный автомат. Тоесть количествое ее внутренних состояний лимитировано.
Лента - предполагает собой данные. Или диск. Как вам будет угодно. И благодаря этой ленте можно реализовывать
различные алгоритмы которые могут потребовать бесконечного набора данных. Или очень большого.

Поэтому я-бы различал FSM и память.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915630
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Имя пользователя1
пропущено...
согласен.

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

Каким образом золотой рыбке понять, что лента пройдена?

Моё решение - длинное. И судя по всему квадратичное.
Бегать влево и вправо с расширяющимся циклом на единичку.
И делать инверсию света. Если инверсия слева - совпала с инверсией справа (2 проверки)
то это наш вагон и длина состава равна сумме двух полу-циклов.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915633
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
господа, вспомнился ещё паззл умеренной сложности.

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

В первый день - выступили 33. Оставшиеся 32 их посмотрели.
На следующий день выступили 32 и их посмотрели 33.
2 дня.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915649
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Соколинский Борис
пропущено...
Есть какие-то ограничения на количество выступлений? Если нет, то ответ - бесконечность (Кто-то решил выступать каждый день)

В первый день - выступили 33. Оставшиеся 32 их посмотрели.
На следующий день выступили 32 и их посмотрели 33.
2 дня.
надо чтобы каждый увидел выступление каждого. А выступающие не могут смотреть выступления друг друга
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915652
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
пропущено...

В первый день - выступили 33. Оставшиеся 32 их посмотрели.
На следующий день выступили 32 и их посмотрели 33.
2 дня.
надо чтобы каждый увидел выступление каждого. А выступающие не могут смотреть выступления друг друга

Ага . Я понял. Рисуем орграф. 65 вершин. Несвязный.

Цель - сделать его полносвязным. Есть ограничения. В один день каждая вершина может поставить либо
сет исходящих рёбер. Либо сет входящих.

Непойму. Вроде всё учел?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915654
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Имя пользователя1
пропущено...
надо чтобы каждый увидел выступление каждого. А выступающие не могут смотреть выступления друг друга

Ага . Я понял. Рисуем орграф. 65 вершин. Несвязный.

Цель - сделать его полносвязным. Есть ограничения. В один день каждая вершина может поставить либо
сет исходящих рёбер. Либо сет входящих.

Непойму. Вроде всё учел?
да, похоже на то
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915655
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет не то. Тогда за 2 дня все решается. Нужно еще одно ограничение.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915656
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Нет не то. Тогда за 2 дня все решается. Нужно еще одно ограничение.
всё верно.
просто если некая вершина в некоторый день добавляет к себе исходящие ребра (участник выступает), то те вершины, к которым эти ребра направлены, могут в тот день добавлять только входящие. И наоборот.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915660
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наклёвывается алгоритм. Но формулы пока нет.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915744
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Aleksandr Sharahov
Соколинский Борис,

у меня получилось 8
8 - правильный результат. Как делать? И почему меньше нельзя?


Как делать? - написать программу )
Пример расписания выступлений фокусников с номерми 0..64 на 8 дней:
0,1,5,8,13,16,18,21,22,25,26,27,28,29,30,31,34,35,37,38,42,44,47,48,49,50,53,54,58,61,63,64
1,2,4,5,6,7,11,13,14,15,17,18,19,20,22,23,24,28,29,33,34,35,36,39,43,45,48,49,50,57,60,64
0,3,4,5,6,7,8,9,10,12,14,17,18,19,21,24,26,27,29,31,32,36,37,40,43,46,47,55,56,57,58,62,64
0,2,3,4,9,10,11,12,13,14,15,16,19,20,21,29,33,34,38,39,40,42,43,44,47,48,51,52,54,56,59,61
0,1,3,4,11,15,16,17,18,23,24,25,26,27,28,30,34,37,39,40,41,42,46,49,51,52,53,55,56,57,60,61,62
5,6,8,9,11,12,13,19,20,21,22,23,27,28,30,32,33,35,36,38,41,44,45,52,53,55,56,57,58,59,61,62,63
2,3,6,7,8,9,10,17,22,23,25,26,30,31,32,33,38,39,41,42,43,45,46,47,49,50,51,54,59,60,62,63,64
1,2,7,10,12,14,15,16,20,24,25,31,32,35,36,37,40,41,44,45,46,48,50,51,52,53,54,55,58,59,60,63

И почему меньше нельзя?
Надо набрать 4160 ребер. Меньше, чем за 8 дней не получается.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915749
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov, это шикарно. Но ты выдал нам нечитаемую колбасу из цифр.

Неужели ты думаешь что кто-то будет их читать? В задаче нам интересен принцип.
Доказательсто. И ответ.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915750
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно, что за 8 дней на тех же условиях может выступить большее количество фокусников
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915753
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Aleksandr Sharahov, это шикарно. Но ты выдал нам нечитаемую колбасу из цифр.

Неужели ты думаешь что кто-то будет их читать? В задаче нам интересен принцип.
Доказательсто. И ответ.


неужели ты думаешь, что никто не хочет получить удовольствие от самостоятельного решения задачи?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915757
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто ты подразнил всех готовым ответом. А это - как-то не совсем честно.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915758
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Просто ты подразнил всех готовым ответом. А это - как-то не совсем честно.


Ответ не единственный, их целое множество, вот еще один:
0,1,5,6,7,8,9,10,14,16,20,21,22,25,28,29,32,33,34,35,39,40,43,47,48,50,55,57,58,59,61,62,64
3,5,6,9,12,15,16,17,18,20,21,23,24,26,29,30,31,34,35,37,40,42,44,45,46,50,51,52,57,60,62,63,64
0,1,2,3,4,5,8,10,12,13,15,18,19,20,22,24,26,27,35,39,41,42,43,45,51,53,54,55,56,57,59,62,63
4,6,7,11,13,17,18,19,21,23,24,25,27,28,30,35,36,38,39,43,44,45,48,53,56,58,59,60,61,63,64
0,1,2,5,10,11,14,16,24,25,26,27,28,30,31,33,34,36,38,40,41,42,43,44,46,47,49,51,52,53,54,56,58,64
3,4,7,8,9,10,11,12,14,17,18,19,22,26,27,28,29,32,33,36,37,40,41,46,49,52,54,59,60,61,62
1,2,4,6,8,9,11,12,13,15,23,25,31,32,33,34,37,38,42,44,45,46,47,48,49,50,54,55,56,57,60,61
0,2,3,7,13,14,15,16,17,19,20,21,22,23,29,30,31,32,36,37,38,39,41,47,48,49,50,51,52,53,55,58,63
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915785
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор пишет
С доказательством минимальности.

Я не проверял твои данные. Возможно они верные. Но ты просто подтвердил что твой код генерирует
как минимум несколько решеней. Это хорошо. Но в качестве доказательства нужна либо формула
с выводом либо пошагово алгоритм из которого станет всем очевидно что это и есть доказательство
минимальности.

Что поделаешь. Такие мы айтишники. Видим мир сквозь призму алгоритмов. Ну ... это не так уж плохо пока.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915792
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Автор пишет
С доказательством минимальности.


Я не проверял твои данные. Возможно они верные. Но ты просто подтвердил что твой код генерирует
как минимум несколько решеней. Это хорошо. Но в качестве доказательства нужна либо формула
с выводом либо пошагово алгоритм из которого станет всем очевидно что это и есть доказательство
минимальности.

Что поделаешь. Такие мы айтишники. Видим мир сквозь призму алгоритмов. Ну ... это не так уж плохо пока.

Как айтишник айтишнику:

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

Возможно, кому-то будет интересно решить двойственную задачу:
найти максимальное количество фокусников, выступающих на 8-дневном фестивале.

Скажу сразу, что у меня есть решения этой задачи для нескольких N>65,
но по сложившейся традиции нет доказательства максимальности ))
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915829
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох уж эти брутфорсеры)
Здесь интересна простая идея, а не конкретное расписание выступлений. Различных расписаний так много, что ни одно из них не представляет ценности.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915850
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с тобой согласен. Давай от индукции. 1 фокусник - лишено смысла.

2 - фокусника. 2 дня. Один выступает. Другой смотрит. Потом меняются.
3 - фокусника и т.д.

Я расчитываю узреть формулу. Раньше чем достигнем числа 65.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915852
berlaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решим общую задачу: если на конкурс приехали k фокусников, то какое минимальное число N дней понадобится?

Нарисуем квадрат A размером kxk и в каждую ячейку запишем число 1..N по правилам: если A(i,j) = n, то i-й участник первый раз выступал для j-го зрителя в n-й день. Диагональ A(i,i) оставим пустой.
Все ячейки, кроме диагональных, должны быть заполнены. Такж заметим, что если в строке i содержится число n, то это число не может содержаться в столбце i - выступающий не может быть зрителем в один и тот же день. И наоборот, если i-й столбец содержит n, то i-я строка n не содержит. Т.е., для любого i половина чисел из набора 1..N должна идти в i-ю строку, а оставшиеся - в i-й столбец. Осталось найти такое N, чтобы количество сочетаний из N по N/2 было >= k.

Для k=65 минимальное N=8. C(8,4)=70.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915856
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В треугольнике Паскаля число 70 стоит в диагонали. Это значит что оно не может соответствовать C(8,4)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915861
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
berlaga
Решим общую задачу: если на конкурс приехали k фокусников, то какое минимальное число N дней понадобится?

Нарисуем квадрат A размером kxk и в каждую ячейку запишем число 1..N по правилам: если A(i,j) = n, то i-й участник первый раз выступал для j-го зрителя в n-й день. Диагональ A(i,i) оставим пустой.
Все ячейки, кроме диагональных, должны быть заполнены. Такж заметим, что если в строке i содержится число n, то это число не может содержаться в столбце i - выступающий не может быть зрителем в один и тот же день. И наоборот, если i-й столбец содержит n, то i-я строка n не содержит. Т.е., для любого i половина чисел из набора 1..N должна идти в i-ю строку, а оставшиеся - в i-й столбец. Осталось найти такое N, чтобы количество сочетаний из N по N/2 было >= k.

Для k=65 минимальное N=8. C(8,4)=70.
да, всё верно.

Я примерно так же решал: среди 8 дней есть 70 разных способов выбрать 4 дня для выступлений, то есть хватит на всех, при этом если рассмотреть любую пару участников, то найдётся день, когда один из них выступает, а другой смотрит, и наоборот.

Минимальность для 65 доказывал по индукции. Если для М участников надо не меньше К дней, то для 2М+1 участников понадобится хотя бы К+1 дней, потому что после первого дня либо среди зрителей, либо среди выступающих будет по крайней мере М человек, которые не видели друг друга. Начинаем с 2 человек и 2 дней, и по этой формуле доходим до 8 дней для 65.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915863
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В треугольнике Паскаля число 70 стоит в диагонали. Это значит что оно не может соответствовать C(8,4)
не знаю, при чем тут диагональ, но С(8, 4) действительно равно 70, легко проверить по формуле
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915869
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daycount=8
mancount=70
Done 4830
1,2,7,9,10,13,16,17,18,19,20,21,24,26,28,30,31,33,34,35,36,43,46,47,51,53,55,57,60,61,62,64,67,68,69
2,3,4,5,7,11,14,17,18,21,22,24,26,27,32,36,37,40,42,44,47,49,50,51,53,54,56,57,58,59,62,64,65,66,68
0,1,6,8,10,11,12,15,20,23,27,30,32,33,38,39,40,41,46,47,49,50,51,52,53,55,56,58,60,61,62,64,65,66,69
0,1,2,4,5,6,9,10,12,13,14,15,16,18,25,26,27,28,29,30,34,37,38,39,43,44,46,47,48,50,56,59,63,65,68
3,5,8,9,10,12,13,16,20,21,23,24,25,29,31,35,36,38,39,42,44,45,48,49,50,51,52,54,58,59,61,66,67,68,69
3,4,5,6,7,8,9,14,15,17,19,21,22,23,26,28,29,32,33,34,35,39,40,41,42,45,46,48,53,60,63,65,66,67,69
0,2,3,6,7,8,11,12,13,14,19,22,24,25,28,29,30,31,32,35,37,41,43,44,45,52,54,55,56,57,58,60,61,62,63
0,1,4,11,15,16,17,18,19,20,22,23,25,27,31,33,34,36,37,38,40,41,42,43,45,48,49,52,54,55,57,59,63,64,67
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39915874
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
В треугольнике Паскаля число 70 стоит в диагонали. Это значит что оно не может соответствовать C(8,4)
не знаю, при чем тут диагональ, но С(8, 4) действительно равно 70, легко проверить по формуле

А ну ОК. Я просто уточнял.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39916016
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придумал вариант первой задачи топика для двухмерного пространства и машины Тьюринга.


Есть клеточное поле, размером NxM, причем натуральные числа N и M неизвестны. В каждой клетке может быть 0 или 1, исходная расстановка неизвестна. Поле является тором: если уйти за верхний край, окажешься снизу, за правый - слева, и т.д. В общем, как замкнутая лента, только двухмерная. Есть машина Тьюринга, с конечным набором состояний, и указателем на текущую ячейку. Программа выглядит как набор инструкций (State, bit) -> (State, bit, move): то есть в зависимости от текущего состояния машины и содержимого (бита) ячейки выбрать новое состояние, записать в ячейку новый бит (или оставить прежний), и сдвинуться куда-то - вверх, вниз, вправо или влево.

Требуется обнулить все ячейки за время порядка O(N*M)


пояснение: машина Тьюринга не умеет считать, может только менять состояние - целое число от 1 до K. Программа не должна зависеть от M, N и стартового содержимого ячеек. Перед стартом текущий указатель ставится в одну из ячеек, без разницы какую.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39916023
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

Сначала по твоему методу делаешь один ряд в одном из измерений, дальше отталкиваясь от этого ряда твоим же методом проходишь по всем рядам другого измерения.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39916025
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Имя пользователя1,

Сначала по твоему методу делаешь один ряд в одном из измерений, дальше отталкиваясь от этого ряда твоим же методом проходишь по всем рядам другого измерения.
действительно) этот первый ряд забить единицами, потом стартовать с его клеток поочередно, пока эти единицы не закончатся
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39916083
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала надо определить M,N.
Изначально мы стоим в ячейке (0,0) условно.
1) Бегаем по тору по горизонтали от (0,0) по алгоритму поезда. который мы уже заем. Вычисляем M.
2) Бегаем по вертикали от (0,0) и определяем N
3) Дальше просто в двойном цикле проходим змейкой по тору и устанавливаем нули во все ячейки.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39916084
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя змейка тут не нужна. Тут-же тор.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918317
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё вспомнилась.

Разбить всё множество натуральных чисел на 3 части таким образом, чтобы числа m, 2m и 3m всегда попадали в разные части (m - любое натуральное)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918568
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
что нужно указать в качестве разбиения натуральных? (ибо словесное определение уже само есть описанием разбиения, если оно конечно существует)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918577
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что мешает засунуть каждое число в свою часть, содержащую только это число?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918584
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
что нужно указать в качестве разбиения натуральных?
придумать правило, по которому можно для любого числа определить, в какую из этих трёх частей оно попадёт.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918586
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
что мешает засунуть каждое число в свою часть, содержащую только это число?
частей всего, а натуральных чисел много.

Или я не понял вопрос...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918588
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще говоря, полностью задача такая: для любого k придумать разбиение множества натуральных чисел на k частей, чтобы числа m, 2m, 3m, ..., k*m попадали в разные части.

Понятно, как это делать для конкретных k, но общий способ что-то не придумывается...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918628
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
я бы не сказал, что понятно даже для 3-х.
Обзовём классы: х 2х 3х. 1 обязана быть в классе х.
Строим:
х 2х 3х1 2 34 8 12 5 10 156 12 .....
Сначала всё однозначно, но при х=6, я впадаю в ступор, дважды случается 12.
Что я не так делаю? требую разоблачения.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918760
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Что я не так делаю?
все так, но покамест не выявлена общая идея, по которой не только для трёх, а вообще для произвольного количества можно решать.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918796
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1, дорогой,
я ведь не сам фокус прошу разоблачить. Что Я не так деляю, из=за чего получаю ротиворечие? Или чего-то не увидел в формулировке. Чего не увидел? или классы могут пересекаться, или не всё из 2Х 3Х имеет Х, или ..?
Тут же все шаги обязаловка (ИМХО):
(1,2,3) обязательно. И вообще все остальные простые в Х, в 2Х - подмн-во чётных, в 3Х - подмн-во кратных 3. Затем вычёркиваем наподобие Эратосфена с той разницей, что м.б. ветвления. Но далее:
(4 8 12) - обязат,
(5 10 15) - обязат
6 обязат в Х, иначе противоречие с п.1
и тогда (6 12 18) ??
Итого 12 в 2Х и в 3Х одновременно. Значит 6 не мо.б. в Х. Где ж тогда?..
И значит невозможно. Что не так в ситуации?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918799
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

возможно, в табличке некоторые числа "сели не в свои сани"
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918881
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чё было прямо не сказать, что не требуется обязательно К в Х, 2К в 2Х .., главное чтоб всегда в разные? или снова не так?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918885
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
главное чтоб всегда в разные?
именно так.

Про обязательные в условии ничего не сказано.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918886
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что с поездом?

Автор заказывал алгоритм с O(n).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918888
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А что с поездом?

Автор заказывал алгоритм с O(n).
приз ушел автору 22060302

моё решение тут 22060460 , последняя строка
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918900
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас-же квадратичная сложность. С каким-то коеффициентом но все равно - площадь.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918901
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё был вариант, который я так и не понял) но там реально больше 3.5*N не было ни при каких раскладах
22061152
SearchBi
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918902
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
У вас-же квадратичная сложность. С каким-то коеффициентом но все равно - площадь.
где квадратичная?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918904
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если продублировать рисунок поезда несколько раз (как матрицу) и обозначить на
нем посещения вагонов - то будет рисунок наподобие пирамиды или
расширяющейся трапеции. Это суть - площадь от N. Тоесть квадратичная
сложность.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918908
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Если продублировать рисунок поезда несколько раз (как матрицу) и обозначить на
нем посещения вагонов - то будет рисунок наподобие пирамиды или
расширяющейся трапеции. Это суть - площадь от N. Тоесть квадратичная
сложность.
где именно ты увидел квадратичную сложность?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918910
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это хождение по поезду туда-сюда

повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.
Это суть - вложенный цикл. Который расширяется до N.
Как треугольная матрица. Он - полиномиален. И степень полинома - количество
вложенных циклов. Если два цикла - квадрат. Три цикла - куб и так далее.
Если внутренний цикл расширяется или сужается это "тем не менее"
полином второй степени. Просто с делителем.

И я не понимаю как вы в этой задаче можете гарантировать N.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918914
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

После проверки каждого отрезка точка А перемещается в начало следующего, нет полных обходов поезда.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918915
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

там уже разобрали и согласились, что 5N, читай первую страницу
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39918916
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну сорян тогда я ошибся.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919225
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
Я так думаю:
Сначала
1 2 3
Затем:
ПРОИЗВЕД(pi^ki) * (2^2a+1 * 3^2b) * (3^2d+1 * 2^2c)
(скобки в показателях степени опущены). Мож и допилить надо, да не царское это дело.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919237
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
(2^2a+1 * 3^2b) * (3^2d+1 * 2^2c)
кто все эти буквы?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919246
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1, конспиратор, японамать.
pi - простые, окромя 2 и 3
ki a b c d -- показатели сепени (натуральные, и 0 там, где нужно)
i -- натуральный индекс по простым множителям
Соответственно в классе Х все, кто не делится на 2 и 3
в 2Х -- они же домноженные на нечётные степени 2 и чётные 3
в 3Х -- аналогично, но 3 в нечётной и 2 в чётной.

Полагаю, очень близко к ответу, но у меня закончились карандашные грифили, они очень ломкие ...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919252
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Соответственно в классе Х все, кто не делится на 2 и 3
в 2Х -- они же домноженные на нечётные степени 2 и чётные 3
в 3Х -- аналогично, но 3 в нечётной и 2 в чётной.
так и не понял, где число 42...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919267
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.

Если будет дан поезд с 1000 вагонами где свет включен в четных вагонах
и выключен в нечётных (worst case) данный алгоритм КМК все таки
получаем квадратичную сложность.

Под элементарной операцией я подразумеваю движение в любую сторону
и действия со светом.

Если я прав - то состав с 2000 вагонами приведет к увеличению количества
операций не в два а в большую величину.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919291
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.

Если будет дан поезд с 1000 вагонами где свет включен в четных вагонах
и выключен в нечётных (worst case) данный алгоритм КМК все таки
получаем квадратичную сложность.

Под элементарной операцией я подразумеваю движение в любую сторону
и действия со светом.

Если я прав - то состав с 2000 вагонами приведет к увеличению количества
операций не в два а в большую величину.

Увеличение в два раза увеличит операции в два раза. Тут я пример обхода давал 22060734

PS Худший случай - свет везде потушен.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Твой пример с указателями? Дима в поезде нет указателей. Чтобы проверить инверсию света в первом
вагоне тебе надо в этот первый вагон физически добежать. Тоесть вернуться обратно сделав N шагов
алгоритма.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919348
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Твой пример с указателями? Дима в поезде нет указателей. Чтобы проверить инверсию света в первом
вагоне тебе надо в этот первый вагон физически добежать. Тоесть вернуться обратно сделав N шагов
алгоритма.


фишка в том, что в режиме "обратного хода" он проходит через каждый вагон ровно один раз, никакой вагон не посещается дважды
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919350
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

просто возьми бумагу и ручку, и проверь описанный алгоритм для двух-трех случаев. Все вопросы отпадут
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919389
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Твой пример с указателями? Дима в поезде нет указателей.

Хоть как называй: указатели, смещения и т.д. и т.п. Александр попросил назвать указателем, я назвал. На работу алгоритма это никак не влияет.
mayton
Чтобы проверить инверсию света в первом
вагоне тебе надо в этот первый вагон физически добежать. Тоесть вернуться обратно сделав N шагов
алгоритма.

Верно, так и происходит. Прочитай внимательно тот мой пост. Суть алгоритма в том что нет постоянного первого вагона, на каждой итерации другой вагон становиться первым.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919620
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
так и не понял, где число 42...
Там было недопродумано, а допиливать никто не захотел. С чётностью мне не удалось 4 комбинации степеней разнести в 3-х класса на условиях задачи. Ещё раньше не прошёл метод вычетов. Тогда скрестил их.
Если не ошибся, то умножение на 2 или на 3 переводит любое число в разные классы. В то же время классы не пересекаются согласно формуле:
X1= {2^3a * 3^3b}, здесь оба вычета по модулю 3 равны,
X2= {2^3c+(1 2 0) * 3^3d+(0 1 2)} , здесь его вычет соответственно (1 2 0) и (0 1 2)
X3= {2^3e+(0 1 2) * 3^3f+(1 2 0)}, аналогично
, где a b c d e f >=0
(1 2 0) это как бы в векторном виде.

По этой классификации 42= 2*3 *(7). Вычеты показателей степени равны, значит Х1, вместе с 1.
2= 2^1 * 3^0, класс Х2
3= 2^0 * 3^1, класс Х3
4= 2^2 * 3^0, класс Х3
6= 2^1 * 3^1, класс Х1
12= 2^2 * 3^1, класс Х2
18= 2^1 * 3^2, класс Х3
и т.д. Как-то так.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919626
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю: классная задачка, никогда таких не решал. Здесь в одной куче сразу циклы, вычеты и простые числа.
З.Ы. об обобщениях не думал.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919661
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

Да, всё верно, здесь именно про вычеты и т.д.)

Но интересна эта задача именно в общем виде. Идею можно разглядеть, если решить не для 3, а например для 6 или даже лучше для 10. Тогда и появляется вишенка на торте - вопрос о том, можно ли это сделать для любого количества классов. Я пока не понял.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919672
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока мне кажется, что это зависит от возможности разложить К*К комбинаций вычетов на К циклов с какими-то св-вами. Может "не всё так просто" , та самая клюквочка скажется, не знаю.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39919876
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
X1= {2^3a * 3^3b}, здесь оба вычета по модулю 3 равны,
X2= {2^3c+(1 2 0) * 3^3d+(0 1 2)} , здесь его вычет соответственно (1 2 0) и (0 1 2)
X3= {2^3e+(0 1 2) * 3^3f+(1 2 0)}, аналогично
, где a b c d e f >=0
(1 2 0) это как бы в векторном виде.
проще говоря, если классы пронумеровать числами 0, 1, 2, то для числа вида 2 a * 3 b * X номер класса равен (a + 2b) mod 3
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39920217
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну наверное так и есть.
Тут возникла мысль, она же и вопрос на обобщение задачи. Нужно было разбить натуральные числа на 3 непересекающихся класса, а обобщение: разбить на К классов, так? Вы пишете, что общий алгоритм не вырисовывается, хотя для каждого К вроде получается эд хок?

Вчера я пораскидал мозги на пробу для 10, сегодня весь день на ходу что-то крутилось в голове. Поток сознания получился вроде того:
Если в разложении М отсутствуют все множители из формулировки (*2 *3 *4 ... *К), а любое такое число и мн-во их будем называть А. Класс Х1 будет (предварительно) содержать А. Причём Х1 <> А. Остальные классы назовём Х2 Х3 Х4 ...
Есть К классов (ящиков) Х1 Х2 Х3 Х4 ... Хк
Есть К-1 множителей (*1) *2 *3 *4 ... *К
Для каждого М есть вектор из К произведений (м*1 м*2 м*3 м*4 ... м*К).
В т.ч, к примеру, если м1= А*3 , то вектор произведений будет 3*(А*1 А*2 А*3 А*4 ... А*К).
Умножение эквивалентно прибавлению 1 в одной координате вектора степеней (a b c d e f g ...). Надо чтобы добавление 1 переводило число в другой класс, и чтобы так было в любом классе.
.......... у нас К координат, значит д.б. К значений (e+i). И мы знаем, что a=вычеты по модулю 2 (a=V(2)), b=V(3), c=V(4) ... Так приходим к вектору вычетов и к циклам по вычетам. Вроде К "шестерёнок" на одной оси. Но в каждой к-те своя длина цикла. А если множитель= 7, а классов 10? 7 вычетов нехватает для 10 классов, и 10 не делится на 7 оборотов. А если множитель= 4, то имеем (2^a 3^b 2^2c) ....... Как-то надо использовать НОК().
В общем, устно не получачется даже для К=4.

Так вот предложение есть. Если вдруг ещё нет описания обобщённого решения, если трудно это сделать ручками, может быть программно формировать формулу для каждого К? Причём формировать формулу в текстовом виде (примерно как для К=3 или в виде массивов).
Может программа даст опору для формулировки формулы. Я потому имею ввиду текстовую форму, что поначалу не оставляет надежда, что метод для К=3 можно обобщить. Но это пока надежда (искать в инете лень).
Голосуйте либо кидайте тухлыми томатами (помидоры нынче отменили).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39920229
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Нужно было разбить натуральные числа на 3 непересекающихся класса, а обобщение: разбить на К классов, так?
да.
числа m, 2m, 3m, ..., K*m должны попадали в разные классы, для любого m

надо просто обобщить формулу 22068507

Если К=6, то для числа m = (2 a * 3 b * 5 c * X) номер класса получается (1*a + 3*b + 5*с) mod 6

вот в этих числах - в данном случае (1, 3, 5), но для других К будут другие наборы - вся собака и зарыта.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39921918
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возился с К=4. В сравнении с 3 тут 2^x покрывает все 4^у. У меня менее красивый метод: все комбинации остатков. Получились след. комбинации наборов остатков (слева единственный столб для 3, справа перестановки для 2 при соответств. 3-вычете).
вычеты"3" "2":х1 х2 х3 х40 0 1 2 31 1 2 3 02 2 3 0 13 3 0 1 2

Для К=5 метод аналогичный, только матрица уже 3Д, и 2-остатки должны быть в комбинации с матрицей
"для-3" х "для-5"

Что-то похожее для 6. Но есть особенность, *6=2*3 даёт одновременное прибавление по 1 в двух позициях. Поэтому нельзя, чтобы в одной строке матрицы для "2" х "3" стояли однаковые остатки. Похожим способ и далее. Только размерность растёт и метод дальше не получается наглядным. Поэтому и предлагал программку составить.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39922217
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Возился с К=4. В сравнении с 3 тут 2^x покрывает все 4^у. У меня менее красивый метод: все комбинации остатков. Получились след. комбинации наборов остатков (слева единственный столб для 3, справа перестановки для 2 при соответств. 3-вычете).
вычеты"3" "2":х1 х2 х3 х40 0 1 2 31 1 2 3 02 2 3 0 13 3 0 1 2
ага, как раз это получается по формуле (a+3b) mod 3, в той схеме, которую я приводил
здесь каждая дополнительное умножение на 2 добавляет 1 к номеру группы, а умножение на 3 добавляет 3. Умножение на 4 добавляет 2, и таким образом, ничего не накладывается друг на друга.

exp98
Что-то похожее для 6. Но есть особенность, *6=2*3 даёт одновременное прибавление по 1 в двух позициях. Поэтому нельзя, чтобы в одной строке матрицы для "2" х "3" стояли однаковые остатки.
да, там дальше начинаются комбинации из простых чисел.

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

например, для 10: (1*a + 4*b + 6*с + 9*d) mod 10, где a, b, c, d - степени при 2, 3, 5, 7, а числа 1,4,6,9 - коэффициенты.
для небольших N коэффициенты всегда легко подбираются. Для больших подобрать трудно.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39922534
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
.... как раз это получается по формуле (a+3b) mod 3, в той схеме, которую я приводил ... Для больших подобрать трудно.
Странно, сегодня учился переключаться на метод "поризведение чисел по модулю" как способ порождения и перестановок и комбинаций. Вообще, я этим никогда не занимался.

И для 4 у меня вышло, что (a+3b)mod 4 это ещё одно решение (как и a+7b, a+11b ...) остаток 3, и в рез-те комбинации 00 22 и 11 33 разнеслись в 2 класса
А как в моём посте, так это (a+5b)mod 4 остаток 1. И в нём все 00 22 11 33 в одном классе.
Что-то не так?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39922545
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1, ещё я вот что хотел спросить. Год назад читал
РАН, Дискретная мат-ка, 2004 г, Системы образующих для групп с заданными св-вами.

Там про использование сплетения групп и полугрупп, чтобы получать заранее заданные св-ва.
Читал, читал, разобрался на <20%. Вдруг наведёт на общее решение.

А вообще же одн и тот же алгоритм не бобязан существовать для всей "массовой проблемы".
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39923096
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл, что линейная комбинация необязательна. Ещё есть резерв - показатель степени.
Напр К=4
вычеты
"3"| "2":х1 х2 х3 х40| 0 1 2 31| 1 2 3 02| 0 1 2 33| 1 2 3 0
формула (b + (a + (b+1)mod 2)) mod 4
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39923348
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
формула (b + (a + (b+1)mod 2)) mod 4
а и b - это степени для 2 и 3 в разложении числа на множители?

Код: javascript
1.
2.
3.
function f (a, b) {
    return (b + (a + (b+1) % 2)) % 4;
}


можно легко проверить, что практически для каждой пары (а, b) будут повторы среди f(a,b), f(a+1,b), f(a+2,b), f(a,b+1), а должны быть уникальными.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39923645
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, всё спутал, сделал как хотел.
формула: b+ (a+ 2* (b mod 2)) mod 4
Проверка (по вертикали a=const, по горизонтали b=const):
Код: sql
1.
2.
3.
4.
5.
a  b  class	a  b  class	a  b  class	a  b  class
0  0  0  	1  0  1  	2  0  2  	3  0  3
0  1  3  	1  1  0  	2  1  1  	3  1  2
0  2  2  	1  2  3  	2  2  0  	3  2  1
0  3  1  	1  3  2  	2  3  3  	3  3  0

Соответствует моей матричной записи:
Код: sql
1.
2.
3.
4.
5.
3^ *2^:	X0	X1	X2	X3
0	0	1	2	3
1	2	3	0	1
2	0	1	2	3
3	2	3	0	1
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39923650
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
b+ (a+ 2* (b mod 2)) mod 4
согласен, только это ведь то же самое, что (a + 3 * b) mod 4 или (a - b) mod 4 , в зависимости от b

а последние две формулы одинаковы, потому что в кольце вычетов по модулю 4, добавить 3 или вычесть 1 - без разницы

итого, от линейной комбинации никуда не ушли.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39923679
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
Надо же, равенства не проверял, я на бумажке, а на ней изначальные матрицы разнились. Посмотрю ...

А вот по поводу 10. Где я ошибаюсь?
По поводу формулы для 10: (1*a + 4*b + 6*с + 9*d) mod 10

Написал формализацию задачи,
если формула линейная вида k2*a + k3*b + k5*c + k7*d.

множители 2 3 5 7
показатели степени a b c d
коэф-ты в линейной формуле к2 к3 к5 к7.

Общее ограничение: все ki>0
Ограничения на принадлежность одному классу наращиваются
с ростом порядка задачи аналогично такому:
(k2+k3), (k2+k5) <>0 mod 10,
2*k2, 3*k2, 2*k3 <>0 mod 10.

Остатки для линейной формулы с положительными коэф-тами {ki} и с шагом,
к-рый соответствует умножению на ki= j ( т.е.цифре при +rj)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 +r1	 +r2	 +r3	 +r4	 +r5	 +r6	 +r7	 +r8	 +r9
0	0	0	0	0	0	0	0	0
1	2	3	4	5	6	7	8	9
2	4	6	8	0	2	4	6	8
3	6	9	2	5	8	1	4	7
4	8	2	6	0	4	8	2	6
5	0	5	0		0	5	0	5
6		8				2		4
7		1				9		3
8		4				6		2
9		7				3		1


... здесь убрал свой вопрос, кажется допёр ...

Это ещё не проверял: (a + b + с + d) mod 10.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39923700
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Общее ограничение: все ki>0
Ограничения на принадлежность одному классу наращиваются
с ростом порядка задачи аналогично такому:
(k2+k3), (k2+k5) <>0 mod 10,
2*k2, 3*k2, 2*k3 <>0 mod 10.

общее ограничение можно сделать так
0 < ki <10

потому что в итоге всё равно будет mod 10

вот 9 значений, которые символизируют умножение на 2...10:

k2, k3, 2*k2, k5, (k2+k3), k7, 3*k2, 2*k3, (k2+k5)

эти значения должны давать разные остатки от деления на 10, причем все остатки больше 0, то есть всего 9 вариантов.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39924087
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверил программно (a + b + с + d) mod 10
но вдруг ошибся, первый раз ведь.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39924309
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский Борис
Долго объяснять, я запрограммировал оба варианта

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
========Regular test========
N=10 uni N/C 10/44 bi N/C 10/43
N=20 uni N/C 20/94 bi N/C 20/83
N=30 uni N/C 30/144 bi N/C 30/123
N=40 uni N/C 40/194 bi N/C 40/163
N=50 uni N/C 50/244 bi N/C 50/203
N=60 uni N/C 60/294 bi N/C 60/243
N=70 uni N/C 70/344 bi N/C 70/283
N=80 uni N/C 80/394 bi N/C 80/323
N=90 uni N/C 90/444 bi N/C 90/363


Думается, SearchUni можно оптимизировать. Как понимаю, суть алгоритма состоит в превращении последовательности всех битов в 1 за исключением единственного 0. При нахождении очередного нуля алгоритм пытается найти следующий и заканчивает свою работу если доходит до стартового нуля.

Суть оптимизации: нет смысла возвращаться назад, если расстояние между нулями меньше, чем уже заполненное единицами расстояние.

Пример: пройдено 5 битов (установлены в 1), шестой бит нулевой (стартовая точка). Если восьмой бит оказывается нулём, то, он точно не может быть шестым битом=стартовой точкой. Следовательно, нет смысла в проверке на хвост (или голову).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39924539
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labarad,

В худших случаях по прежнему 5*N, хотя таких кейсов намного меньше
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39924707
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1
labarad,

В худших случаях по прежнему 5*N, хотя таких кейсов намного меньше

Надо будет преодолеть лень и самому попробовать модифицировать код, чтобы получить практический результат. Исхожу из предположения, что число переходов может сократиться с 4N до 2N для больших N:
1N - последовательно по кругу от нуля к нулю +
1N - возврат к голове.

Но даже в этом (худшем) случае оптимизация с 4N до 3N - это 25%-ый прирост производительности и стоит прилагаемых усилий.

Худший случай: каждый следующий ноль находится на расстоянии большем (x+1), чем путь (x) от первичной точки до текущего нуля.

Единственный вопрос: стоит ли считать операцию сравнения как дополнительную, сравнимую с переходом из вагона в вагон?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39924930
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1,

Поразмыслил более предметно. Вынужден согласиться с Вашей оценкой в 5N. 2N добавляет финальная проверка на хвост (голову).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39926025
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К задаче классификации натуральных на (х 2*х 3*х ... К*х).
Сделал проверку для К=10(только) можно экспериментировать с подбором к-тов (правда универсальную для лбого К делать это долго и муторно, но нарастить довольно быстро, ну и МЛ никого не заинтересует)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
  %%%%%%%%  запускать  clear all; close all; row= 1; my10_mod;
K=10; pk=4; T=K^pk;   N= cast([0:T-1]', 'int32');
KI(1, :)= [1, 1, 1, 1];  %% double
KI(2, :)= [1, 4, 6, 9];
KI(3, :)= [0, 4, 6, 9];  %% error "+1"
KI(4, :)= [1, 0, 6, 9];  %% error "+1"
KI(5, :)= [1, 4, 0, 9];  %% error "+1"
KI(6, :)= [1, 4, 6, 0];  %% error "+1"
KI(7, :)= [1, 1, 1, 0];  %% error "+1"
KI(8, :)= [0, 1, 0, 1];  %% error "+1+1"
KI(9, :)= [3 9 3 9] .* KI(1, :);
ki= KI(row, :)'; 
    
%% Вычислить массив по форуле
S= sprintf( '%04.0i', N); ... %% здесь 4==pk
S(S==' ')= '0'; ...
S= reshape(S, pk, [])'; ... %% матрица(T*pk) цифр (для K<11)
D4= reshape( sscanf(S, '%1i'), T, []); clear S; ... %% матрица(T*pk) всех вычетов
M(1:T)= mod( D4*ki, K); ... %% формула классификации
    

%% Проверка
... h1= [1000, 100, 10, 1]; h2= 2*h1; h3= 3*h1; 
h1= zeros(1,pk); h1(pk)=1; for t= pk:-1:2  h1(t-1)= floor(K*h1(t));  end;
h2= 2*h1; h3= 3*h1;

  %{
   M(1+0+h1(1)+h1(3))= M(1+0);  % имитация ошибочной формулы (нек-х повторов)
   M(1+8070+h1(1)+h1(3))= M(1+8070); 
   M(1+6060+h1(1)+h1(3))= M(1+6060); 
  %}

V2357= zeros(T,pk);  V2= zeros(T, pk);  V2325= zeros(T, pk);
 %% hk= 1 + mod(i+h1(:), T);
for i1= (0:K-1)
  for i2= (0:K-1)
    for i3= (0:K-1)
      for i4= (0:K-1)
        ij= [i1, i2, i3, i4]; ij0= 1+ij*h1';
        ij1= mod(1+ij, K); ij2= mod(2+ij, K); ij3= mod(3+ij, K); 
        J= logical([1 1]); ij23= zeros(1,pk); ij23(J)= mod(1+ij(J), K);
        J= logical([1 0 1]); ij25= zeros(1,pk); ij25(J)= mod(1+ij(J), K);

  %% I= (M(ij)==M(ij+"1000"));
  H1= [ij; ij; ij; ij]; x= diag(ones(pk,1)); H1(logical(x))= ij1';  
  Y= M(1+H1*h1'); 
  I= (M(ij0)==Y)';  V2357( 1+ ij*h1', I)= 1;

  H22= ij; H22(1)= ij2(1);  if M(ij0)==M(1+H22*h1')  V2(ij0, 1)= 1; end;  %%"2^2"
  H23= ij; H23(1)= ij3(1);  if M(ij0)==M(1+H23*h1')  V2(ij0, 2)= 1; end;  %%"2^3"
  H32= ij; H32(2)= ij2(2);  if M(ij0)==M(1+H32*h1')  V2(ij0, 3)= 1; end;  %%"3^2"
 ...
  H223= ij; H223(1)= ij1(1);  H223(2)= ij1(2);  if M(ij0)==M(1+H223*h1')  V2325(ij0, 1)= 1; end; %%"2*3"
  H225= ij; H225(1)= ij1(1);  H225(3)= ij1(3);  if M(ij0)==M(1+H225*h1')  V2325(ij0, 2)= 1; end; %%"2*5"

        end;
    end;
  end;
end;


%% Проверка проверок
[sum(V2357); sum(V2); sum(V2325)]
% z=find(V2357(:,4)~=0); size(z), D4(z(1:3), :), M(z(1:3)),

...
Рейтинг: 0 / 0
Относительно простые задачки
    #39926307
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного подрихтовал, чтобы можно было безболезненно проверять комбинации для К=[7; 10]. Вроде менял только вот это:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
  %%%%%%%%  запускать  clear all; close all; row= 1; my10_mod;
.....   
%% Вычислить массив по форуле
S= sprintf( '%04.0i', N); ... %% здесь 4==pk
S(S==' ')= '0'; ...
S= reshape(S, pk, [])'; ... %% матрица(T*pk) цифр (для K<11)
D4= reshape( sscanf(S, '%1i'), T, []); clear S; ... %% матрица(T*pk) всех вычетов
M(1:T)= mod( D4*ki, K); ... %% формула классификации

снова полный вариант:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
  %%%%%%%%  запускать  clear all; close all; row= 1; K=10; my10_mod;
pk=4; T=K^pk;   N= cast([0:T-1]', 'int32');
KI(1, :)= [1, 1, 1, 1];  %% double
KI(2, :)= [1, 4, 6, 9];
KI(3, :)= [0, 4, 6, 9];  %% error "+1"
KI(4, :)= [1, 0, 6, 9];  %% error "+1"
KI(5, :)= [1, 4, 0, 9];  %% error "+1"
KI(6, :)= [1, 4, 6, 0];  %% error "+1"
KI(7, :)= [1, 1, 1, 0];  %% error "+1"
KI(8, :)= [0, 1, 0, 1];  %% error "+1+1"
KI(9, :)= [3 9 3 9] .* KI(1, :);
KI(10, :)= [1 2 3 1] .* KI(1, :);
KI(11, :)= [2 2 3 1] .* KI(1, :);
KI(12, :)= [2 2 2 2] .* KI(1, :);  %% error для 10, 8 (но не для 9, 7)
KI(13, :)= 5* KI(1, :);
ki= KI(row, :)'; 
    
%% Вычислить массив по форуле
... h1= [1000, 100, 10, 1]; h2= 2*h1; h3= 3*h1; 
h1= zeros(1,pk); h1(pk)=1; for t= pk:-1:2  h1(t-1)= floor(K*h1(t));  end;
D4= zeros(T, pk); ... %% матрица(T*pk) всех вычетов
for i1= (0:K-1)
  for i2= (0:K-1)
    for i3= (0:K-1)
      for i4= (0:K-1)
        ij= [i1, i2, i3, i4]; ij0= ij*h1'; 
        N(1+ij0)= ij0;  D4(1+ij0, :)= ij;
      end;
    end;
  end;
end;
N= cast(N, 'int32');
M(1:T)= mod( D4*ki, K); ... %% формула классификации
    

%% Проверка
... h1= [1000, 100, 10, 1]; h2= 2*h1; h3= 3*h1; 
h1= zeros(1,pk); h1(pk)=1; for t= pk:-1:2  h1(t-1)= floor(K*h1(t));  end;
h2= 2*h1; h3= 3*h1; h4= 4*h1; ...

  %{
   M(1+0+h1(1)+h1(3))= M(1+0);  % имитация ошибочной формулы (нек-х повторов)
   M(1+8070+h1(1)+h1(3))= M(1+8070); 
   M(1+6060+h1(1)+h1(3))= M(1+6060); 
  %}

V2357= zeros(T,pk);  V2= zeros(T, pk);  V2325= zeros(T, pk);
 %% hk= 1 + mod(i+h1(:), T);
for i1= (0:K-1)
  for i2= (0:K-1)
    for i3= (0:K-1)
      for i4= (0:K-1)
        ij= [i1, i2, i3, i4]; ij0= 1+ij*h1';
        ij1= mod(1+ij, K); ij2= mod(2+ij, K); ij3= mod(3+ij, K); 
        J= logical([1 1]); ij23= zeros(1,pk); ij23(J)= mod(1+ij(J), K);
        J= logical([1 0 1]); ij25= zeros(1,pk); ij25(J)= mod(1+ij(J), K);

  %% I= (M(ij)==M(ij+"1000"));
  H1= [ij; ij; ij; ij]; x= diag(ones(pk,1)); H1(logical(x))= ij1';  
  Y= M(1+H1*h1'); 
  I= (M(ij0)==Y)';  V2357( 1+ ij*h1', I)= 1;

  H22= ij; H22(1)= ij2(1);  if M(ij0)==M(1+H22*h1')  V2(ij0, 1)= 1; end;  %%"2^2"
  H23= ij; H23(1)= ij3(1);  if M(ij0)==M(1+H23*h1')  V2(ij0, 2)= 1; end;  %%"2^3"
  H32= ij; H32(2)= ij2(2);  if M(ij0)==M(1+H32*h1')  V2(ij0, 3)= 1; end;  %%"3^2"
 ...
  H223= ij; H223(1)= ij1(1);  H223(2)= ij1(2);  if M(ij0)==M(1+H223*h1')  V2325(ij0, 1)= 1; end; %%"2*3"
  H225= ij; H225(1)= ij1(1);  H225(3)= ij1(3);  if M(ij0)==M(1+H225*h1')  V2325(ij0, 2)= 1; end; %%"2*5"

      end;
    end;
  end;
end;


%% Проверка проверок
[sum(V2357); sum(V2); sum(V2325)]
% z=find(V2357(:,4)~=0); size(z), D4(z(1:3), :), M(z(1:3)), 

Мне кажется, что для любой размерности (К) задачи совершенно безопасно выбирать коэф-ты ki из числа тех, что НОД(K, ki)=1, тогда остатки пробегают весь диапазон, и ki==1 годятся для всех K>6(меньше не смотрел).

У кого есть опровергающий пример?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39930767
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал с постоянным кол-вом циклов ("почти универсально") для K=(7:11), можно и 12 и больше, но полноценная проверка всё равно отсутствует. Комбинации вычетов создаёт универсально. Но проверки делает универсально только для х*p, где р - простой делитель размерности задачи К. Проверки типа х*p1*р2... - по-прежнему как в старом варианте - больше неохота с этим возиться.

снова целиком:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
  %%%%%%%% v3.2, for K=(7:11),  запускать  clear all; close all; row= 1; K=11; my10_mod;
pk=4; pk= length(primes(K)); T=K^pk;

%% М-ца для к-тов формулы, разные варианты: с ошибками и без
KI= zeros(100, pk);
KI(1, :)= 1;  %% double
KI(2, 1:4)= [1, 4, 6, 9]; % error "+1" for K=11 only!
KI(3, 1:4)= [0, 4, 6, 9];  %% error "+1" 
KI(4, 1:4)= [1, 0, 6, 9];  %% error "+1"
KI(5, 1:4)= [1, 4, 0, 9];  %% error "+1"
KI(6, 1:4)= [1, 4, 6, 0];  %% error "+1"
KI(7, 1:4)= [1, 1, 1, 0];  %% error "+1"
KI(8, 1:4)= [0, 1, 0, 1];  %% error "+1+1"
KI(9, 1:4)= [3 9 3 9];
KI(10, 1:4)= [1 2 3 1];
KI(11, 1:4)= [2 2 3 1];
KI(12, :)= 2;  %% no error
KI(13, :)= 5;
KI(14, :)= 3;

ki= KI(row, :)';  %% работать с этим вариантом к-тов для формулы
    
%% Вычислить массив по форуле
... h1= [1000, 100, 10, 1]; h2= 2*h1; h3= 3*h1; 
h1= zeros(1,pk); h1(pk)=1; for t= pk:-1:2  h1(t-1)= floor(K*h1(t));  end;
D4= zeros(T, pk); ... %% матрица(T*pk) всех комбинаций вычетов

%% Вычислить каждую цифру каждого числа и поместить в матрицу D4()
i1234(1:pk)= 0;
for cnt= 1:T
  %%cnt= 1+ [0 1 1 1 0]*h1'; % для проверки
  x= cnt-1;
  for t= (1:pk)  i1234(t)= floor(x/h1(t)); x= x - h1(t)*i1234(t);  end;

   %% ij= [i1234(1), i1234(2), i1234(3), i1234(4)]; ij0= ij*h1'; 
  ij(1:pk)= i1234; ij0= ij*h1'; 
  D4(1+ij0, :)= ij;
end;

    '-- ESC --',
    pause;    

M(1:T)= mod( D4*ki, K); ... %% формула классификации


%% Проверить каждую комбинацию вычетов (а лучше бы лишь некоторые)
... h1= [1000, 100, 10, 1]; h2= 2*h1; h3= 3*h1; 
h1= zeros(1,pk); h1(pk)=1; for t= pk:-1:2  h1(t-1)= floor(K*h1(t));  end;
h2= 2*h1; h3= 3*h1; h4= 4*h1; ...

  %{
   M(1+0+h1(1)+h1(3))= M(1+0);  % имитация ошибочной формулы (нек-х повторов)
   M(1+8070+h1(1)+h1(3))= M(1+8070); 
   M(1+6060+h1(1)+h1(3))= M(1+6060); 
  %}

V2357= zeros(T,pk);  V2= zeros(T, pk);  V2325= zeros(T, pk);
for cnt= 1:T
    %% BODY of Loop 
      ij(1:pk)= D4(cnt, :);  ij0= 1+ij*h1';
      ij1= mod(1+ij, K); ij2= mod(2+ij, K); ij3= mod(3+ij, K); 
      J= logical([1 1]); ij23= zeros(1,pk); ij23(J)= mod(1+ij(J), K);
      J= logical([1 0 1]); ij25= zeros(1,pk); ij25(J)= mod(1+ij(J), K);

  %% I= (M(ij)==M(ij+"1000"));
  H1= zeros(pk,pk); for t= 1:pk  H1(t,1:pk)= ij;  end;  x= diag(ones(pk,1)); H1(logical(x))= ij1';  
  Y= M(1+H1*h1'); 
  I= (M(ij0)==Y)';  V2357( 1+ ij*h1', I)= 1;

  H22= ij; H22(1)= ij2(1);  if M(ij0)==M(1+H22*h1')  V2(ij0, 1)= 1; end;  %%"2^2"
  H23= ij; H23(1)= ij3(1);  if M(ij0)==M(1+H23*h1')  V2(ij0, 2)= 1; end;  %%"2^3"
  H32= ij; H32(2)= ij2(2);  if M(ij0)==M(1+H32*h1')  V2(ij0, 3)= 1; end;  %%"3^2"
 
  H223= ij; H223(1)= ij1(1);  H223(2)= ij1(2);  if M(ij0)==M(1+H223*h1')  V2325(ij0, 1)= 1; end; %%"2*3"
  H225= ij; H225(1)= ij1(1);  H225(3)= ij1(3);  if M(ij0)==M(1+H225*h1')  V2325(ij0, 2)= 1; end; %%"2*5"

end; %for


%% Проверка проверок
[sum(V2357); sum(V2); sum(V2325)]
% z=find(V2357(:,4)~=0); size(z), D4(z(1:3), :), M(z(1:3)),
%% V23 и V25  аналогично

На этом покончил.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932330
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошую задачку сегодня задали:

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

Я ее решил в том смысле, что понял принцип и нашел правильный ответ.
Но в общем виде формулу не выводил, можно это рассматривать как бонус :)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932348
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это классика )

в общем виде вопрос лучше ставить наоборот: сколько максимум этажей можем проверить на разбиваемость, если есть K яиц и лимит на N бросков.

S(k, n) = S(k-1, n-1) + 1 + S(k, n-1)

то есть первый бросок проверяет некоторый этаж где-то "посередине". Если разбилось, то окучиваем всё что ниже, S(k-1, n-1) штук, поскольку осталось k-1 яиц и n-1 бросков. Если не разбилось, то S(k, n-1) этажей сверху.

ну и по индукции легко доказать явную формулу (если нигде не напутал)



используя тождество C(a, b) = C(a-1, b) + C(a-1, b-1)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932391
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

Нужно найти минимум функции f = 100/n + n - 1, где n может принимать значения от 1 до 50.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932393
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev,

поправка, плюс остаток от целочисленного деления 100%n
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932396
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Брутфорс - идём с 1 этажа вверх и кидаем. Как только разобъется - нашли.

Оптимизация этого брутфорса - найти удачное начальное приближение. Желательно с запасом в 1-2 этажа.
Первый бросок - пристрелочный. Второй - доказательство правоты.

Для улучшения КМК можно вспомнить физику Ньютона. Как там с падением. И как разбивание яйца зависит от
высоты. В практике оно должно разбиться уже на 1 этаже но мы берем яйцо математическое. Тоесть возможно
оно гораздо твёрже. У ньютона кажется при одинаковом ускорении свободного падения скорость растет
квадратично. Тоесть формула должна иметь вид квадратного корня.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932397
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно найти минимум функции f = 100/n + 100%n + n - 1 2
n от 1 до 50, % - ремайндер оператор.

PS: ответ соответственно n = 10, а итераций 18
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932401
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev,

Можно меньше
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932420
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,
этажи для первого яйца:
1, 12, 25, 37, 48, 58, 67, 75, 82, 88, 93, 97, 100
(от 100 назад через 3 на первом шаге, + 1 на каждом следующем.)

если на первом этаже яйцо точно не бьется, то 13 для всех кроме случая попадания на 100, тогда 14
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932423
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
если разобьется на 25, то 15.
Идея присутствует, но нуждается в рихтовке.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932424
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторесли на первом этаже яйцо точно не бьется
формулировка кривая, но лучше не сумел сказать.
если бы было известно, что на первом шаге точно не бьется, его можно было бы и не бросать.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932425
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

мне лень рихтовать, - это неравномерный поиск.

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

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

-----------
когда шел с обратной стороны, получалось 1, 14, 25...
но что что-то не срослось и побежал назад от ста. от ста.
может оно и с обеих сторон не сходится - тогда я не знаю как правильно сращивать поход слева с походом справа.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932432
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

собственно да, в обе стороны на "пару" не сходится.
предпоследний шаг надо "рихтовать".
я пока не понимаю, как это назвать и что это значит...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932435
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

1, 14, 26, 37... и далее по предыдущему списку
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932437
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
iOracleDev,

Можно меньше

В принципе идея понятна, сохранять постоянное количество итреаций и найти минимум стартового интервала.

15
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
length = 85   100-length = 15     interval = 15   count = 1   interval-1+count = 15
length = 71   100-length = 29     interval = 14   count = 2   interval-1+count = 15
length = 58   100-length = 42     interval = 13   count = 3   interval-1+count = 15
length = 46   100-length = 54     interval = 12   count = 4   interval-1+count = 15
length = 35   100-length = 65     interval = 11   count = 5   interval-1+count = 15
length = 25   100-length = 75     interval = 10   count = 6   interval-1+count = 15
length = 16   100-length = 84     interval = 9   count = 7   interval-1+count = 15
length = 8   100-length = 92     interval = 8   count = 8   interval-1+count = 15
length = 1   100-length = 99     interval = 7   count = 9   interval-1+count = 15

14
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
length = 86   100-length = 14     interval = 14   count = 1   interval-1+count = 14
length = 73   100-length = 27     interval = 13   count = 2   interval-1+count = 14
length = 61   100-length = 39     interval = 12   count = 3   interval-1+count = 14
length = 50   100-length = 50     interval = 11   count = 4   interval-1+count = 14
length = 40   100-length = 60     interval = 10   count = 5   interval-1+count = 14
length = 31   100-length = 69     interval = 9   count = 6   interval-1+count = 14
length = 23   100-length = 77     interval = 8   count = 7   interval-1+count = 14
length = 16   100-length = 84     interval = 7   count = 8   interval-1+count = 14
length = 10   100-length = 90     interval = 6   count = 9   interval-1+count = 14
length = 5   100-length = 95     interval = 5   count = 10   interval-1+count = 14
length = 1   100-length = 99     interval = 4   count = 11   interval-1+count = 14

13
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
length = 87   100-length = 13     interval = 13   count = 1   interval-1+count = 13
length = 75   100-length = 25     interval = 12   count = 2   interval-1+count = 13
length = 64   100-length = 36     interval = 11   count = 3   interval-1+count = 13
length = 54   100-length = 46     interval = 10   count = 4   interval-1+count = 13
length = 45   100-length = 55     interval = 9   count = 5   interval-1+count = 13
length = 37   100-length = 63     interval = 8   count = 6   interval-1+count = 13
length = 30   100-length = 70     interval = 7   count = 7   interval-1+count = 13
length = 24   100-length = 76     interval = 6   count = 8   interval-1+count = 13
length = 19   100-length = 81     interval = 5   count = 9   interval-1+count = 13
length = 15   100-length = 85     interval = 4   count = 10   interval-1+count = 13
length = 12   100-length = 88     interval = 3   count = 11   interval-1+count = 13
length = 10   100-length = 90     interval = 2   count = 12   interval-1+count = 13
length = 9   100-length = 91     interval = 1   count = 13   interval-1+count = 13
length = 8   100-length = 92     interval = 1   count = 14   interval-1+count = 14
length = 7   100-length = 93     interval = 1   count = 15   interval-1+count = 15
length = 6   100-length = 94     interval = 1   count = 16   interval-1+count = 16
length = 5   100-length = 95     interval = 1   count = 17   interval-1+count = 17
length = 4   100-length = 96     interval = 1   count = 18   interval-1+count = 18
length = 3   100-length = 97     interval = 1   count = 19   interval-1+count = 19
length = 2   100-length = 98     interval = 1   count = 20   interval-1+count = 20
length = 1   100-length = 99     interval = 1   count = 21   interval-1+count = 21


Как выразить простой формулой не знаю.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932454
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
докрутилось и сложилось в пазл:

сумма 1+2+3+4+5+6+7+8+9+10+11+12+13+14=105

Поэтому уменьшаем пять правых слагаемых на единицу каждый:

1+2+3+4+5+6+7+8+9+9+10+11+12+13=100
так получаем число элементов в слоте

завершение раскладки должно быть таким:
слот старт до штук в слоте13100- 1129899211959731091944986905880856773797665728556649447559337461022636111142512011313

Первый бросок делаем в слот 1 по его левому краю - 14
если шар разбился, идем в предыдущий слот со вторым шаром и шагаем по не посещенным этажам,
если нет, продолжаем в следующем слоте с первым шаром, и бросаем с левого крайнего (нижнего) этажа слота.

последовательность бросков первого шара 14,26,37,47,56,65,73,80,86,91,95,98,100

PS
что там рассказывают про "динамическое программирование"?

PS2 что-то лихо в правых (верхних) двойках запутался...
(;;
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932472
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

последовательность бросков первого шара 14,26,37,47,56,65,73,80,86,91,95,98,100
Все верно.

В случае яиц шаров алгоритм понятен, а вот с тремя уже не очень.
Объяснения под спойлером не понял.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932532
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделал то же самое но с другого конца, проверяя гипотезу, что например 15 это минимальное число итераций, первый шаг проверка на 15 этаже, если первое золотое яичко разбилось, то проверяем с первого по 14, соответственно худший случай это 15 итераций, далее чтобы не ухудшить количество итераций (одну мы уже сделали), следующий шаг 14 (29 этаж) это вторая итерация, если яйцо разбилось, то нужно проверить 13 этажей, получаем 13 + 2 итераций (2 - предыдущие уже сделанные итерации) и так далее, получается каждый следующий шаг для условия непревышения заданного количества итераций уменьшается на единицу.

У вас сколько минимум получился?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932541
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Объяснения под спойлером не понял.
речь об этом? 22089442

Попробую "разжевать")

Итак, у нас в запасе K яиц, ограничение на N бросков.
Какова максимальная высота дома, чтобы мы с такими ограничениями могли выяснить, с какого этажа разбивается яйцо. Ну или вообще не разбивается.


Искомую функцию максимальной высоты обозначим как S(K, N)

1) Более простой кейс - яиц бесконечно много (или хотя бы не меньше чем N), в общем, их экономить не надо и мы ориентируемся только на броски.
Очевидно, наилучшая стратегия - поиск делением пополам.
Бросаем со среднего этажа, если разбилось, надо проверять нижнюю часть, с лимитом N-1, иначе верхнюю часть, тоже с лимитом N-1, потому что один бросок уже сделан.
Тогда получается
S(N) = S(N-1) + 1 + S(N-1)
S(0) = 0
что дает S(N) = 2 N - 1

2) Если вернуть в игру К, то поиск немного "перекособачивается".
Если на первом броске яйцо разбилось, то для проверки нижней части будет K-1 яиц и N-1 бросков. Если не разбилось, то для верхней части имеем K яиц и N-1 бросков.
Формула будет аналогичная:

S(K, N) = S(K-1, N-1) + 1 + S(K, N-1)
S(0, N) = S(K, 0) = 0

В принципе, можно считать по этой формуле, можно переделать в явный вид, но для общего случая там сумма биномиальных коэффициентов, в для конкретных K - полином от N
например, если 2 яйца, то S(2, N) = (N 2 + N) / 2
для 3 яиц S(3, N) = (N 3 + 5*N) / 6

и т.е.

Например, 100 этажей.
если 2 яйца, то за 13 бросков можем проверить максимум 91 этаж, за 14 будет 105 этажей, то есть 14 достаточно
если 3 яйца, то 8 бросков проверяют 92 этажа, 9 бросков хватит на 129, то есть надо 9 бросков.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932644
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
Объяснения под спойлером не понял.
речь об этом? 22089442
Попробую "разжевать")
Получилось, спасибо :)
А как для произвольных (K, N) должен выглядеть алгоритм обхода?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932704
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА как для произвольных (K, N) должен выглядеть алгоритм обхода?

вероятно таким:

1) строишь возвратную последовательность для K
2) выравниваешь её на фактическое N
3) кладешь M = N - это число не обследованных шаров
4) шагаешь по полученной возвратной последовательности обратным ходом,
сохраняя номер броска в переменной i, на каждом шаге уменьшая M: M=M-1
5) отыскиваешь i, на котором разбился первый шар
6) Если M=0 To Стоп
7) присваиваешь - K=K-i, N = (Число_элементов в слоте_предшествующем_i - 1), M = N
8) GOTO 1


Но интереснее было бы увидеть пример практической ценности.
Генераторы случайных чисел?
- не похоже, - здесь явно пирамидально закошеный поиск.
Хде, хде его применимость, какие ленты с барабанами по нему плачут?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932707
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7) k = k-1,...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932710
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в этой задаче есть естественный ранг, в виде "номера этажа"
и "дорогое разрушающее исследование" в виде разбиваемого яйца.
Пока не вижу, как из этого практическая применимость получается.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932713
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть получается, в что в практическом случае,
с одной стороны, должна существовать бесплатная естественная сортировка по адекватному параметру
одновременно с дорогим, разрушительным для прибора исследованием.

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

Требуется найти золотой шарик, сломав не более чем K инструментов.

какую более практичную для целей прикладного программирования модель можно предложить?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932733
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
вероятно таким:
Я думаю качественные рассуждения будут одинаковые для всех {K, N} - если яйцо на i-м шаге разобьётся, нужно оставшимися локализовать решение за нужное число итераций.

К примеру: K=3, N=8; (I0=0)

I1= I0 +7*8/2 +1 = 29;
I2= I1+ 6*7/2 + 1 = 51;
I3= I2+ 5*6/2 + 1 = 67;
I4= I3+ 4*5/2 +1 = 78;
I5= I4 +3*4/2 + 1 = 85;
I6= I5 +2*3/2 + 1 = 89;
I7= I6 +1*2/2 + 1 = 91;
I8= 92;
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932774
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

авторЯ думаю качественные рассуждения будут одинаковые для всех {K, N} - если яйцо на i-м шаге разобьётся, нужно оставшимися локализовать решение за нужное число итераций.

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

у меня впечатление, что в части фактического деления на области поиска у задачи более одного решения....

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

Это что, на четырёх шарах квадратные числа появятся, что-ли?

позже может каких табличек отпишу.
Пока недосуг.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932778
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

Даже для двух шаров решение не одно.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932797
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
booby,

Даже для двух шаров решение не одно.

для 2 шаров и 100 этажей множественность решений определяется тем, что
1+2+3+4+5+6+7+8+9+10+11+12+13+14= 105
для двух шаров и 105 этажей решение должно быть единственным.

Для трёх шаров дело обстоит иначе.
Здесь и для 92 этажей 8 максимальных бросаний не дают единственного решения
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932834
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
...
К примеру: K=3, N=8; (I0=0)

I1= I0 +7*8/2 +1 = 29;
I2= I1+ 6*7/2 + 1 = 51;
I3= I2+ 5*6/2 + 1 = 67;
I4= I3+ 4*5/2 +1 = 78;
I5= I4 +3*4/2 + 1 = 85;
I6= I5 +2*3/2 + 1 = 89;
I7= I6 +1*2/2 + 1 = 91;
I8= 92;


Разглядел - да, это правильное и единственное решение.
Было бы интересно узнать, как именно оно было найдено.
(В том смысле - как именно ты вышел на треугольные числа.)

Я бы это решение изображал так:
номер этажа (старт слота)номер броска 1го шара последний в слотеРезерв бросков при спускештук элементов в слоте поискаостаток в слоте после бросания первого шара928-010917-000896901218558824378484376673774111051266516152915062221-02872828

1, 3, 6, 10, 15, 21, 28 - последовательность треугольных чисел.
Красиво также то, что при этом резерв оставшихся бросков идеально точно сходится с числом оставшихся в слоте элементов, которые можно проверить двумя шарами.

Можно сказать, что трёх-шаровыми конфигурациями управляют треугольные числа, а двух-шаровыми - простой натуральный ряд.
(отсюда подозрения на квадратность, которая должна проявить себя в четырёх-шаровых конфигурациях)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932845
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Разглядел - да, это правильное и единственное решение.
Было бы интересно узнать, как именно оно было найдено.
(В том смысле - как именно ты вышел на треугольные числа.)
К сожалению, через рекурсию, явную формулу не придумал.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932885
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
(В том смысле - как именно ты вышел на треугольные числа.)
22089764 тут они упоминаются для К=2


Соколинский Борис
А как для произвольных (K, N) должен выглядеть алгоритм обхода?
берем простой случай - высота дома максимальная для конкретных (K, N), тут всегда будет единственный возможный обход, строго по формуле S(K, N) = S(K-1, N-1) + 1 + S(K, N-1)

этажи нумеруются с 1.

1) offset = 0

2) floor = offset + S(K-1, N-1) + 1 // этаж для броска

2.1) разбилось?
2.1.1) K = K-1, N = N-1
2.1.2) goto 2

2.1) не разбилось?
2.2.1) offset = floor, N = N-1
2.2.2) goto 2

выходим, когда броски или яйца закончатся, ответом будет номер этажа последнего броска с разбиванием.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932886
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Можно сказать, что трёх-шаровыми конфигурациями управляют треугольные числа, а двух-шаровыми - простой натуральный ряд.
(отсюда подозрения на квадратность, которая должна проявить себя в четырёх-шаровых конфигурациях)
K-шаровыми конфигурациями управляют числа S(K-1, N-1) 22089764

S(3, N) = (N 3 + 5*N) / 6
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932973
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не "дорогое разрушающее исследование", а расходный материал. Хотя яйца теперь да, не дёшевы.
Наверное скажу очевидное. Когда яиц 2)), и когда их очень много.
Если интервалов первого порядка очень много,то и попыток много, если мало, то попыток внутри интервала много и т.д. Должен иметься подобие минимакса. Похоже, имеем нижний предел в районе ЛОГ(2, 100) т.е. 6-7 попыток даже при 100500 яйцах.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932980
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне почему-то задача напомнила 15 радиоактивных шаров.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932986
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Мне почему-то задача напомнила 15 радиоактивных шаров.
что там? пиши сюда
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932993
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39932998
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в итоге 7 оказалось?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933006
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я тем временем вспомнил задачу, весьма напоминающую название текущего топика.

Есть строка длиной 99 символов, причем все символы в строке разные.
За одно действие можно взять 2 соседние
подстроки и обменять местами (например, было "...abcdefg...", стало "...aefbcdg...", поменяли красную и синюю подстроки).
Сколько минимум действий понадобится, чтобы развернуть строку задом наперед?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933014
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сразу пояснение: тут не нужен какой-то хитрый сложный алгоритм, надо найти простую общую идею и применить.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933015
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
в итоге 7 оказалось?

У меня получалось 8.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933028
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
а я тем временем вспомнил задачу, весьма напоминающую название текущего топика.

Есть строка длиной 99 символов, причем все символы в строке разные.
За одно действие можно взять 2 соседние
подстроки и обменять местами (например, было "...abcdefg...", стало "...aefbcdg...", поменяли красную и синюю подстроки).
Сколько минимум действий понадобится, чтобы развернуть строку задом наперед?

как-то так должно быть
2*Floor(log2(99)) = 12

Это обратный Евклид
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933036
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибся на 1:
2*Floor(log2(Floor(99/2))) + 1 = 11
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933038
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

не очень понял, как именно сделать
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933048
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я верно понял задачу.

Давайте возьмем маленькую строку (не 99 а чуть меньше):

Код: sql
1.
The quick brown fox jumps over lazy dog



п просто перевернем ее. Мне кажется тут переворотов надо floor(length/2).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933074
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

похоже я сморозил малек. Забудь пока.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933078
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Давайте возьмем маленькую строку (не 99 а чуть меньше):

Код: sql
1.
The quick brown fox jumps over lazy dog

по условию в строке нет повторяющихся символов.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933079
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у того, о чем я подумал, глубина рекурсии 6, а ходов 95

подразумевал вот что:
abcdefgk (a b c d e f g k)

меняем ближайшие символы (a b -> b a) кроме среднего при нечетном числе символов -> badcfekg
меняем затронутые пары -> dcbakgfe
меняем четверки -> kgfedcba

итог kgfedcba
------------------

2mayton - здесь по условию можно заменять только соседние подстроки
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933082
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
меняем ближайшие символы (a b -> b a) кроме среднего при нечетном числе символов -> badcfekg
меняем затронутые пары -> dcbakgfe
меняем четверки -> kgfedcba
ага, понял.

можно существенно меньше ходов
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933088
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
Давайте возьмем маленькую строку (не 99 а чуть меньше):

Код: sql
1.
The quick brown fox jumps over lazy dog

по условию в строке нет повторяющихся символов.

Я не знаю английскую панграмму которая имела бы смысл и при этом содержала бы все буквы
алвавита по 1 штуке. Для русского языка была тестовая фраза "в чащах юга жил бы цитрус..."

Но к чорту прозу. Давайте просто алвафиты. 99 букв - это 33 русских + 22 латиницы + 10 цифр.

Или просто упростим задачу до реверса массива байтов.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933115
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
...

можно существенно меньше ходов

явные вращения как-то комбинируются?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933121
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напомнило одну задачку для начинающих из Haskell.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933122
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Имя пользователя1
...

можно существенно меньше ходов

явные вращения как-то комбинируются?
Сами подстроки переворачивать нельзя, только обменять местами, как в примере из условия.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933132
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вращение на 1 элемент представляется явным "обменом местами"
abcdefgk - abcdefg k -> kabcdefg
kabcdefg - kabcdef g -> gkabcdef

можно навращать полстроки...
но здесь может оказаться хитрая комбинация вращений с "простыми обменами".
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933136
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вращениях можно наковырять даже перестановки. Которых будет факториал от количества букв в строке.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933160
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то "вращение" 2-х соседей не запрещено. И уж это точно инверсия даже с т.зр. теоргрупп. А из инверсий любую перестановку можно собрать, правда не оптимально. "Пузырьком" будет.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39933173
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
вращение на 1 элемент представляется явным "обменом местами"
abcdefgk - abcdefg k -> kabcdefg
kabcdefg - kabcdef g -> gkabcdef
понял.
да, такие можно, разумеется.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934653
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22090677 не зашло, попробуем другую, строго по сабжу.

Строка S1 содержит только буквы R, G, B, и больше никаких других символов.
Из неё делается строка S2, длиной на 1 меньше, по правилу: S2[i] = rgb(S1[i], S1[i+1]).
Из S2 аналогично делается S3, и т.д., пока не окажется строка S N длиной 1, с одним символом.
Надо по строке S1 определить этот символ в S N .


Упомянутая функция rgb(x, y) получает на вход два параметра - буквы из набора (R, G, B). Если x=y, то возвращается x, иначе возвращается третья буква из набора, та, которой не равны х и у.

Пример
Код: sql
1.
2.
3.
4.
5.
S1 = RGBBR
S2 = BRBG
S3 = GGR
S4 = GB
S5 = R



Итого из "RGBBR" получилось "R".

Паззл интересен тем, что тут можно хитро оптимизировать, и даже километровые строки будут обрабатываться быстро.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934676
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

здесь код конкретный ожидается, или как?

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

а вообще, имхо, если считаешь, что время вышло, то прилично было бы дать ссылку на решение, если это общеизвестная задача,
или показать свое личное решение.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934684
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Имя пользователя1,

здесь код конкретный ожидается, или как?
достаточно идеи, а кодинга нам и по работе хватает )

booby
а) за какое число обменов двух соседних строк задача решается для длины 99
б) с какой наименьшей длины работает ожидаемое решение эффективнее простого попарного обмена

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

99 решается за 50 обменов.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934701
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

там был еще один вопрос ... :))

то есть 9 решится по этой схеме за 5?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934702
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
У меня идея в том, чтобы свести операцию rgb к арифметической.
Обозначим R=0, G=1, B=2
rgb(x,y)=(3-x-y) mod 3.
Дальше с телефона неудобно
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934710
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Обозначим R=0, G=1, B=2
rgb(x,y)=(3-x-y) mod 3.
можно и так) rgb верно считается.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934713
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
там был еще один вопрос ... :))

то есть 9 решится по этой схеме за 5?
вопрос я видел, но подсказок больше давать нет смысла, и так уже теперь всё понятно
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934735
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
Обозначим R=0, G=1, B=2
rgb(x,y)=(3-x-y) mod 3.
можно и так) rgb верно считается.
Дальше мы пользуемся тем, что остаток от деления суммы остатков от деления есть просто остаток от деления суммы.
И выясняем, что достаточно сложить все числа с правильными весами и взять остаток от деления.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934747
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
22090677 не зашло, попробуем другую, строго по сабжу.

Строка S1 содержит только буквы R, G, B, и больше никаких других символов.
Из неё делается строка S2, длиной на 1 меньше, по правилу: S2[i] = rgb(S1[i], S1[i+1]).
Из S2 аналогично делается S3, и т.д., пока не окажется строка S N длиной 1, с одним символом.
Надо по строке S1 определить этот символ в S N .


Упомянутая функция rgb(x, y) получает на вход два параметра - буквы из набора (R, G, B). Если x=y, то возвращается x, иначе возвращается третья буква из набора, та, которой не равны х и у.

Пример
Код: sql
1.
2.
3.
4.
5.
S1 = RGBBR
S2 = BRBG
S3 = GGR
S4 = GB
S5 = R



Итого из "RGBBR" получилось "R".

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

Есть подозрение что достаточно посчитать rgb() от крайних, т.е. rgb(R, R)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934752
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Даже из примера видно, что это не так - начинаем с S3
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934753
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
И выясняем, что достаточно сложить все числа с правильными весами и взять остаток от деления.
то есть решение за O(N)?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934754
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
Ну да, вроде.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934759
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напомнило PPM сжатие. Там тоже брался текст. Выборка группы букв. И эти буквы вращались
и заносились в справочник. Потом эти карусели использовались как справочник.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934762
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1,
Ну да, вроде.
можно существенно ускорить.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934763
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Имя пользователя1
22090677 не зашло, попробуем другую, строго по сабжу.

Строка S1 содержит только буквы R, G, B, и больше никаких других символов.
Из неё делается строка S2, длиной на 1 меньше, по правилу: S2[i] = rgb(S1[i], S1[i+1]).
Из S2 аналогично делается S3, и т.д., пока не окажется строка S N длиной 1, с одним символом.
Надо по строке S1 определить этот символ в S N .


Упомянутая функция rgb(x, y) получает на вход два параметра - буквы из набора (R, G, B). Если x=y, то возвращается x, иначе возвращается третья буква из набора, та, которой не равны х и у.

Пример
Код: sql
1.
2.
3.
4.
5.
S1 = RGBBR
S2 = BRBG
S3 = GGR
S4 = GB
S5 = R




Итого из "RGBBR" получилось "R".

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

Есть подозрение что достаточно посчитать rgb() от крайних, т.е. rgb(R, R)
совпадение )
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934791
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
Имя пользователя1,
Ну да, вроде.
можно существенно ускорить.
Если очень хочется - можно не учитывать элементы строки с весами, кратными 3.
Но это, вроде, не очень существенно.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934803
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
пропущено...
можно существенно ускорить.
Если очень хочется - можно не учитывать элементы строки с весами, кратными 3.
Но это, вроде, не очень существенно.
то есть не брать нули?
это, скорее, деоптимизация, дополнительная проверка появляется.

задача больше на математику, чем на кодинг.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934811
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хотите играть с булевой алгеброй - попробуйте вручную
минимизировать булеву функцию от 16 булевых аргументов.

Я поднимал топик когда-то на эту тему.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934815
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
то есть не брать нули?
Не нули, а элементы с соответсующими номерами.
Если я правильно понимаю, в указанном примере совершенно неважно, что стоит в S[2] (0-based), ответ не изменится.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934816
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Если хотите играть с булевой алгеброй - попробуйте вручную
минимизировать булеву функцию от 16 булевых аргументов.
в институте наелись этих ДНФ-в и Жегалкиных )
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934817
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отнюдь. Может и наелись но до сих пор законы Моргана и Поглощения на знают и сокращать предикаты не умеют.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934819
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
то есть не брать нули?
Не нули, а элементы с соответсующими номерами.
Если я правильно понимаю, в указанном примере совершенно неважно, что стоит в S[2] (0-based), ответ не изменится.
а, понял.
нет, это не совсем то.

некоторые элементы, понятное дело, придется пропустить, если мы хотим быстрее чем O(N), но вот какие именно...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934848
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1

некоторые элементы, понятное дело, придется пропустить, если мы хотим быстрее чем O(N), но вот какие именно...
Ясно.
Если я правильно понимаю, весовые коэффициенты в моей формуле соответствуют биномиальным. И можно пропустить все кратные 3 - т.е те, где в разложении на простые множители троек в числителе больше чем в знаменателе.
Осталось только формулу подобрать.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934853
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если очень повезет и N будет степенью 3 - тогда мегаформула от Dima_T
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934855
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Если очень повезет и N будет степенью 3 - тогда мегаформула от Dima_T
а если не повезет? )
N может быть любым
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934856
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
А если не повезет - нужно думать над разложением, чем сейчас и занимаюсь :)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934871
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не выходит каменный цветок.
Есть противные N (8, 17...) где ничего нельзя пропускать, и подозреваю что этот ряд уходит в бесконечность.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934897
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Не выходит каменный цветок.
Есть противные N (8, 17...) где ничего нельзя пропускать, и подозреваю что этот ряд уходит в бесконечность.
да, это худшие случаи, которые оптимизировать не получится...
в троичном форме у них будут сплошные двойки
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934899
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
да, это худшие случаи, которые оптимизировать не получится...
Т.е. в общем случае все равно O(N)

Имя пользователя1
в троичном форме у них будут сплошные двойки
Это уже спойлер и после него неинтересно, можно ответ оглашать.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934927
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Если очень повезет и N будет степенью 3 - тогда мегаформула от Dima_T

Мне вникать времени не было, затестил на бумажке 4 случайных 4-значных набора, все подошли под придуманную формулу, подумал а почему бы нет?
Да, потом понял что не всегда формула работает.
Т.е. вероятность что значение подходит под мою формулу очень высокая, но осталось придумать как проверить что можно использовать мою формулу на конкретном значении.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39934931
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Т.е. вероятность что значение подходит под мою формулу очень высокая
Не очень.
Только в случае (N-1)=3 K .
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39935889
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Множество А изначально содержит 2 элемента - числа 1 и 4. За одно действие можно добавить туда число (a+b+ab), где a и b - любые два числа из А. Получится ли на каком-то шаге добавить туда число 2000000, и если да, то как?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39935915
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Множество А изначально содержит 2 элемента - числа 1 и 4. За одно действие можно добавить туда число (a+b+ab), где a и b - любые два числа из А. Получится ли на каком-то шаге добавить туда число 2000000, и если да, то как?
Формула добавления может содержать два одинаковых аргумента?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39935921
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
Множество А изначально содержит 2 элемента - числа 1 и 4. За одно действие можно добавить туда число (a+b+ab), где a и b - любые два числа из А. Получится ли на каком-то шаге добавить туда число 2000000, и если да, то как?
Формула добавления может содержать два одинаковых аргумента?
да, а и b могут быть одним и тем же элементом из А
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39935923
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В прочем, неважно
Z=(a+b+ab)=(a+1)*(b+1) - 1
2000001 имеет единственное разложение на простые множители: 3 и 666667, т.е. в множество должны входить 2 и 666666. Насчет второго можно сомневаться, но первого точно нет.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39935926
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

верно)

там ещё второй вопрос был: можно ли получить так какое-нибудь число вида 2*10 k , где k - натуральное
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936130
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1

там ещё второй вопрос был: можно ли получить так какое-нибудь число вида 2*10 k , где k - натуральное
Это сходу не решить.
Понятно, что у Z+1 в разложении будет тройка (соответственно нужна двойка в множестве), но если разложение не единственное, ее можно скомбинировать с другим множителем.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936308
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по просьбе Майтона, заруливаем в геометрию

разрезать равносторонний треугольник на 2 куска равной площади, так чтобы длина линии разреза была минимальной

ещё на разрезание:

дан треугольник с углами 20 гр., 60 гр., 100 гр. Его разрезают по биссектрисе. Потом любой из полученных кусков тоже разрезается по биссектрисе. И так далее. Можно ли на каком-то этапе получить треугольник, подобный исходному?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936322
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
по просьбе Майтона, заруливаем в геометрию

разрезать равносторонний треугольник на 2 куска равной площади, так чтобы длина линии разреза была минимальной


Линия = прямая линия или может быть "криволинейной"?

По-идее, не прямая линия не может дать лучшего результата, но с доказательством проблемы.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936324
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
Имя пользователя1
по просьбе Майтона, заруливаем в геометрию

разрезать равносторонний треугольник на 2 куска равной площади, так чтобы длина линии разреза была минимальной


Линия = прямая линия или может быть "криволинейной"?

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

доказательство для минимальной линии есть, довольно простое.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936327
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
разрезать равносторонний треугольник на 2 куска равной площади, так чтобы длина линии разреза была минимальной
Куски односвязные?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936330
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
разрезать равносторонний треугольник на 2 куска равной площади, так чтобы длина линии разреза была минимальной
Куски односвязные?
да
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936466
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1
labarad,

В худших случаях по прежнему 5*N, хотя таких кейсов намного меньше

Если решать задачу практически в виде алгоритма для стандартного компа, то подсчитать количество вагонов можно за N, т.е. всего за один проход:

1. Запомнить состояние нулевого вагона.
2.а Если состояние следующего вагона НЕ совпадает со значением п.1 (нулевой вагон), то
- идти дальше в следующий вагон.
2.б Если состояние следующего вагона совпадает со значением п.1 (нулевой вагон), то
- изменить состояние текущего вагона и
- проверить состояние нулевого вагона: если состояние нулевого вагона изменилось (не совпадает с п.1), то круг замкнулся
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936568
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это
labarad
можно за N

противоречит этому
labarad
проверить состояние нулевого вагона

т.к. "проверить состояние нулевого вагона" = вернутся в нулевой вагон, и так много раз.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936584
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
это
labarad
можно за N

противоречит этому
labarad
проверить состояние нулевого вагона

т.к. "проверить состояние нулевого вагона" = вернутся в нулевой вагон, и так много раз.
именно.

"для стандартного компа", у нас тут двусвязный кольцевой список с булевскими значениями, и всего один указатель на элемент, примерно так.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936661
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1
msLex
...
т.к. "проверить состояние нулевого вагона" = вернутся в нулевой вагон, и так много раз.
именно.

"для стандартного компа", у нас тут двусвязный кольцевой список с булевскими значениями, и всего один указатель на элемент, примерно так.

Друзья,

Нисколько не спорю, что, например, при ограничении функционала железа невозможно оптимизировать алгоритм. Однако, на компе, где можно программно иметь не один, а два указателя (в поезде находится два человека, а не один) производительность можно повысить аж в 5 раз. Что, согласитесь, на больших объёмах весьма существенно - час будет прога считать данные или пять часов? И цена этому ускорению - условные 4 или 8 байт. :)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936706
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labarad,

решение чем-то напоминает "я же не отдам некту яблоко, хоть он дерись"
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936748
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov
labarad,

решение чем-то напоминает "я же не отдам некту яблоко, хоть он дерись"

Могу только повторить: эффективность реализации алгоритма объективно зависит от платформы, на которой он будет исполняться.

Например, если проектируете железо, то добавление простенькой функции хранения дополнительного указателя позволит увеличить скорость обработки данных в пять раз. Стоит ли учитывать возможность такой оптимизации, думаю, вопрос риторический.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39936837
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labarad,

теперь уже больше похоже на "как пройти на Дерибасовскую"
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938150
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.


а если всего будет 2 вагона (но мы этого не знаем) и в обоих свет выключен?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938188
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKn
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.


а если всего будет 2 вагона (но мы этого не знаем) и в обоих свет выключен?
с двумя и даже с одним вагоном всё нормально работает, можно легко проверить.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938199
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задачи пока без решений:
22090677 Есть строка длиной 99 символов, причем все символы в строке разные.
За одно действие можно взять 2 соседние подстроки и обменять местами (например, было "...abcdefg...", стало "...aefbcdg...", поменяли красную и синюю подстроки).
Сколько минимум действий понадобится, чтобы развернуть строку задом наперед?
----
22095992 Множество А изначально содержит 2 элемента - числа 1 и 4. За одно действие можно добавить туда число (a+b+ab), где a и b - любые два числа из А, возможно, одинаковые. Получится ли на каком-то шаге добавить туда какое-нибудь число вида 2*10 k , где k - натуральное (то есть число 200...0), и если да, то как?
----
22096932 разрезать равносторонний треугольник на 2 куска равной площади, так чтобы длина линии разреза была минимальной
----
22096932 дан треугольник с углами 20 гр., 60 гр., 100 гр. Его разрезают по биссектрисе. Потом любой из полученных кусков тоже разрезается по биссектрисе. И так далее. Можно ли на каком-то этапе получить треугольник, подобный исходному?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938227
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1,

с двумя вагонами, при условии их идентичности и замкнутости и свет может быть включен или не включен, и если свет выключен в обоих, при указанных выше действиях получим включенный свет в обоих и безконечный бег по кругу.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938230
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKn
при указанных выше действиях получим включенный свет в обоих и безконечный бег по кругу
нет.
при каждом включении света мы возвращаемся к вагону А (при возврате считаем вагоны в обратную сторону, и зная сколько прошли вагонов "вперед", легко можем вернуться в указанный) и проверяем в нем свет, который оставили выключенным.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938262
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1,

согласен, зря это я ...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938270
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKn
зря это я ...
штраф - решение для 22100539
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938292
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
разрезать равносторонний треугольник на 2 куска равной площади, так чтобы длина линии разреза была минимальной
Куски односвязные?
Это какая по счёту проблема Гильберта? дайте премию скорей ...
Открывая страницу для ответа, я собирался доказать, что достаточно срезать верхушку самого маленького угла параллельно противоп-й стороне. Отсечь ~sqr(3)/2-ую часть этой высоты. И тогда длина среза~sqr(3)*a. Для произвольного тр-ка. Т.к. любая незамкнутая спрямляемая и непрерывная кривая обязательно пересечёт этот срез ==> её длина будет больше.
Конечно и в цифрах тоже я могу ошибаться, проверять не буду.

Но пока ждал открытия страницы, подумал, зачем обязательно открытую кривую? Тем более, в условии равносторонний тр-к. А вдруг окружность или квадрат внутри?
Да вроде при одинаковой площади (а площадь мы знаем) наименьший периметр имеет окружность. Вот не помню в каком это классе замкнутых кривых. ПОлучатся R ~ a/2/sqr(2pi).
Тогда длина = a*sqr(pi/2).
Если снова не ошибся.

Добавил для полноты: это меньше вписанной окр.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938299
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1 22096932 дан треугольник с углами 20 гр., 60 гр., 100 гр. Его разрезают по биссектрисе. Потом любой из полученных кусков тоже разрезается по биссектрисе. И так далее. Можно ли на каком-то этапе получить треугольник, подобный исходному? Получается, что резать можно только всё время через одну и ту же вершину?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938328
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Соколинский Борис
пропущено...
Куски односвязные?
Это какая по счёту проблема Гильберта? дайте премию скорей ...
Открывая страницу для ответа, я собирался доказать, что достаточно срезать верхушку самого маленького угла параллельно противоп-й стороне. Отсечь ~sqr(3)/2-ую часть этой высоты. И тогда длина среза~sqr(3)*a. Для произвольного тр-ка. Т.к. любая незамкнутая спрямляемая и непрерывная кривая обязательно пересечёт этот срез ==> её длина будет больше.
Конечно и в цифрах тоже я могу ошибаться, проверять не буду.

Но пока ждал открытия страницы, подумал, зачем обязательно открытую кривую? Тем более, в условии равносторонний тр-к. А вдруг окружность или квадрат внутри?
Да вроде при одинаковой площади (а площадь мы знаем) наименьший периметр имеет окружность. Вот не помню в каком это классе замкнутых кривых. ПОлучатся R ~ a/2/sqr(2pi).
Тогда длина = a*sqr(pi/2).
Если снова не ошибся.

Добавил для полноты: это меньше вписанной окр.
что-то не очень.
Линия разреза очевидно должна быть меньше стороны треугольника. Даже если просто разрезать по высоте, длина разреза будет a*sqrt(3)/2, а это далеко не минимум.
exp98
Имя пользователя1 22096932 дан треугольник с углами 20 гр., 60 гр., 100 гр. Его разрезают по биссектрисе. Потом любой из полученных кусков тоже разрезается по биссектрисе. И так далее. Можно ли на каком-то этапе получить треугольник, подобный исходному?
Получается, что резать можно только всё время через одну и ту же вершину?нет, каждый раз выбираем произвольную вершину, потом берём один из двух получившихся кусков
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938352
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
задачи пока без решений:
22095992 Множество А изначально содержит 2 элемента - числа 1 и 4. За одно действие можно добавить туда число (a+b+ab), где a и b - любые два числа из А, возможно, одинаковые. Получится ли на каком-то шаге добавить туда какое-нибудь число вида 2*10 k , где k - натуральное (то есть число 200...0), и если да, то как?
Ответ - нет. Доказательство следующее:
Возьмем множество B, такое что B k =A k +1. Тогда любой B k =B i *B j , т.е все элементы B в разложении на простые множители должны иметь только 2 и 5.
2*10 k +1 всегда будет иметь 3, т.е. не входит в B.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938361
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
задачи пока без решений:
22095992 Множество А изначально содержит 2 элемента - числа 1 и 4. За одно действие можно добавить туда число (a+b+ab), где a и b - любые два числа из А, возможно, одинаковые. Получится ли на каком-то шаге добавить туда какое-нибудь число вида 2*10 k , где k - натуральное (то есть число 200...0), и если да, то как?
Ответ - нет. Доказательство следующее:
Возьмем множество B, такое что B k =A k +1. Тогда любой B k =B i *B j , т.е все элементы B в разложении на простые множители должны иметь только 2 и 5.
2*10 k +1 всегда будет иметь 3, т.е. не входит в B.
верно.

я чуть по другому решил: все элементы из А при делении на 3 дают остаток 0 или 1
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938368
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1

22090677 Есть строка длиной 99 символов, причем все символы в строке разные.
За одно действие можно взять 2 соседние подстроки и обменять местами (например, было "...abcdefg...", стало "...aefbcdg...", поменяли красную и синюю подстроки).
Сколько минимум действий понадобится, чтобы развернуть строку задом наперед?


Я взял короткую строку abcd. Для простоты пускай ее размер будет кратным 2^n.
Тогда чтобы ее перевернуть можно сделать дерево действий.
1. abcd => (ab)(cd) => swap => (cd)(ab)
2. Повторить рекурсивно для каждой группы до тех пор пока в группе не будет 1 символ.
(d)(c)(b)(a)

Тоесть за 3 свопа мы перевернули 4 символьную строку.

Для 99 символов будет логарифм2 высоты дерево свопов.

Но беря во внимание что на последнем уровне количество листьев будет ]99/2[ = 50

То моё древо-видное решение будет ничем не лучше чем стандартная функция реверса строки.
Которая делает тоже самое за гарантированное число 50 а для древо-видного свопа нужно еще
посчитать порядка 7 уровне дерева сверху.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938376
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
а для древо-видного свопа нужно еще
посчитать порядка 7 уровне дерева сверху.
там будет ещё примерно столько же обменов )
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938384
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
а для древо-видного свопа нужно еще
посчитать порядка 7 уровне дерева сверху.
там будет ещё примерно столько же обменов )

А у этой задачи точно есть решение? Просто я не слышал чтобы кто-то сильно переживал
по поводу o(n) reverse.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938389
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Имя пользователя1
пропущено...
там будет ещё примерно столько же обменов )

А у этой задачи точно есть решение? Просто я не слышал чтобы кто-то сильно переживал
по поводу o(n) reverse.
эту задачу не надо рассматривать как реализацию reverse. Никто в здравом уме не будет реверсить строку или массив подобным образом. Просто головоломка, на подумать, размять мозг, отвлечься от кодерской рутины.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938400
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Имя пользователя1
пропущено...
там будет ещё примерно столько же обменов )

А у этой задачи точно есть решение? Просто я не слышал чтобы кто-то сильно переживал
по поводу o(n) reverse.

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

PS
конечно, известно, что за три реверса выполняется произвольный циклический сдвиг.
Значит, какая-то последовательность циклических сдвигов должна формировать реверс.
Но в этом месте я продолжаю верить в первую часть своей гипотезы.
Т.е. почти наверно, такая последовательность, да еще если она даёт число действий,
по сути равное числу свопов для разворота массива, использовалась бы как стандартный алгоритм
разворота односвязного списка.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938406
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
пропущено...

А у этой задачи точно есть решение? Просто я не слышал чтобы кто-то сильно переживал
по поводу o(n) reverse.
эту задачу не надо рассматривать как реализацию reverse. Никто в здравом уме не будет реверсить строку или массив подобным образом. Просто головоломка, на подумать, размять мозг, отвлечься от кодерской рутины.

А у тебя есть твоё предложение по решению?

Я почему спрашиваю. Обидно знаешь-ли. Делать что-то "просто так". А ты - как ловкий тролль.
Забросил. И сидишь себе.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938414
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
что-то не очень. Линия разреза очевидно должна быть меньше стороны треугольника. Даже если просто разрезать по высоте, длина разреза будет a*sqrt(3)/2, а это далеко не минимум.
Н-да, там поспешил, пересчитал. Последнее слово a*sqrt(2)/2 , всяко меньше, м.б. и не так далеко, но хотел назвать именно это (если снова не ошибся).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938428
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
я так скромно думаю:
если бы у этой задачи было решение, да еще универсальное, его, почти наверно, можно было бы использовать
для разворота односвязного списка быстрее, чем за n-1 шагов
нет, решение не подойдёт для списка, там доступ к произвольным элементам
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938455
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Имя пользователя1
пропущено...
эту задачу не надо рассматривать как реализацию reverse. Никто в здравом уме не будет реверсить строку или массив подобным образом. Просто головоломка, на подумать, размять мозг, отвлечься от кодерской рутины.

А у тебя есть твоё предложение по решению?

Я почему спрашиваю. Обидно знаешь-ли. Делать что-то "просто так". А ты - как ловкий тролль.
Забросил. И сидишь себе.
решение есть. Когда нет решения, то я об этом сразу говорю.

Если кто сомневается в наличии, могу выслать персональным сообщением.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938456
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Имя пользователя1
что-то не очень. Линия разреза очевидно должна быть меньше стороны треугольника. Даже если просто разрезать по высоте, длина разреза будет a*sqrt(3)/2, а это далеко не минимум.
Н-да, там поспешил, пересчитал. Последнее слово a*sqrt(2)/2 , всяко меньше, м.б. и не так далеко, но хотел назвать именно это (если снова не ошибся).
ага, понял. Разрез параллельно стороне. Но это не минимум
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938460
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
пропущено...

А у тебя есть твоё предложение по решению?

Я почему спрашиваю. Обидно знаешь-ли. Делать что-то "просто так". А ты - как ловкий тролль.
Забросил. И сидишь себе.
решение есть. Когда нет решения, то я об этом сразу говорю.

Если кто сомневается в наличии, могу выслать персональным сообщением.

Нет уж. Давай в этот топик. Мне секретов не надо. Иначеб я тут не сидел.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938464
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Разрез параллельно стороне. Но это не минимум
Ну значит один из ближайших наклонных меньше, возможно, даже что с изломом или с 2-мя даже. Неохота смотреть на движение точек по сторонам. Они там с разной скоростью.
Народ! налетай, задел сделан.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938466
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Нет уж. Давай в этот топик.
Нет уж, нет уж, ещё не все притрагивались. Попарно 2-х соседей ведь можно ж поменять. А нет ли ощущения, что битиё яиц было бы разминкой к этой? зря что ли продукт изводили ...
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938486
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98
Нет уж, нет уж, ещё не все притрагивались.

Согласен, хочется подумать. А когда решение уже выложено, то желание пропадает.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938487
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
А нет ли ощущения, что битиё яиц было бы разминкой к этой? зря что ли продукт изводили ...
ничего общего, совсем разные идеи
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938488
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1
ничего общего, совсем разные идеи

А какой лучший результат для строки в 99 символов?

N получить довольно просто:
1. подстрока а - последний символ, подстрока b - с первого до предпоследнего символа
2. подстрока а - последний символ, подстрока b - со второго до предпоследнего символа
и т.д. пока все символы не встанут на свои места.

Т.е. каждый раз последний символ ставим на должное ему место:

012345678 9 - 012345678 и 9
9 01234567 8 - 01234567 и 8
98 0123456 7 - 0123456 и 7
987 012345 6 - 012345 и 6
9876 01234 5 - 01234 и 5
98765 0123 4 - 0123 и 4
987654 012 3 - 012 и 3
9876543 01 2 - 01 и 2
98765432 0 1 - 0 и 1
98765432 1 0 - done
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938489
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labarad
А какой лучший результат для строки в 99 символов?
50 действий
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938622
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в задачах оптимизации исхожу из некого физико-механического принципа. Если
представлять символы - ящиками а позиции - стеллажами то задача сводится
к некому оптимальному маршруту авто-погрузчика который может их очень
быстро перевернуть. Причем авто-погрузчик может захватывать группу ящиков.

Я думал и так и эдак и лучше чем классический реверс - ничего не выходит.

Но поскольку автор говорит - что это "разогрев" аудитории - тогда я жду что
будет следующее. Сама по себе задача реверса уже не интересна.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938653
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из курса инженерной графики (AutoCad e.t.c) я помню что такое линейное преобразование.
Вобщем суть такова. Если у вас есть объект в 3D пространстве (множество трехмерных точек)
и вам его надо часто и много двигать и вращать и масштабировать (наподобие 3д шутера)
то вы принимаете решение закрепить на ним матрицу линейных преобразований (4х4)
и меняя ее коэффициенты можно деформировать и масштабировать вращать и двигать
этот объект.

В неком гипотетическом случае строка может быть представлена стационарным
иммутабельным вектором. И набором линейных преобразований. Сдвиг. И масштабирование.
Но в данном случае масштабирование будет единичкой со знаком + или -. И эти коэффициенты -
частный случай матрицы 2х2 для данного одномерного вектора символов.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class ReversAbleString(val string : String) {

   var int offset; 
   var int scale; // +1,-1   
 
   def getTransformedString() : String = ???

   def reverse() {
      ... invert scale and change offset to be correct
   }
}



Здесь реверс будет иметь сложность o(1). Хотя билдер строки будет иметь какую-то линейную
комплексность но нам пофиг. Предполагаем что есть некое lazy поведение. Вдруг строка вообще
не понадобится (типичный случай для логгеров) а преобразование зря делалось.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39938817
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я думал и так и эдак и лучше чем классический реверс - ничего не выходит.
классический реверс дает 49 обменов символами (первый с последним, второй с предпоследним и тд), он по любому быстрее. Здесь прикол именно в ограничениях - можно обменивать местами только соседние подстроки
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39939334
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
хватит издеваться над животными,
треугольник режется дугой окружности,
режем радиусом t= a*sqr( sqr(27)/4/pi), L~0,673387*a >2/3
(если прямой,то только a*sqr(2)/2, L~0,7*a)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39939349
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

что за дуга, где центр, и главное, почему это минимум? )
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39939712
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
будете маскироваться до победного? имеете меньшее значение -- предъявите + алгоритм.
Окр. центром в вершине тр-ка, радиус t указан выше.
Ну, 2pi*R/6 же. Доказывать не требовалось по ТЗ. Хотя можно и обсудить, но только после вас. И ... я ведь не свободен от ошибок, да и допускаю возможность нескольких вариантов непрерывной линии одной длины.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39939832
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Доказывать не требовалось по ТЗ. Хотя можно и обсудить, но только после вас.
доказательство тут - самая интересная деталь.

Пусть у нас линия разреза между точками А и В на сторонах. Соединим 6 треугольников одноимёнными точками. Линии разреза станут замкнутым контуром, площадь внутри которого равна 3 треугольниками. Как известно, минимальная длина будет, если этот контур - окружность, что получается, если разрез делать по дуге.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39939891
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это безусловно интересно тем, кто не брался за задачу. Только вы умело обходите суть вопроса.
1) Вопрос был про значение. Значение см. выше в моём посте. Откуда же я его взял?
2) Док-во. я вроде и намекал на это самое док-во и эту теорему минимальности, см. выше в моём посте. И даже в явном виде упомянул ещё ранее (п.3)
3) Отдельного объяснения требует, почему круг, вырезанный внутри тр-ка, будет длиннее разомкнутой линии. Та же самая теорема + вычисление её периметра и сравнение. Эти значения я приводил ранее при первых попытках решения.
(далее удалил ...)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39939898
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собсно, хотел спорсить: кто-нибудь брался за вопрос с бисектириссами треугольника? Что-то пока ничего простого не проглядывает. Если рисовать граф, то он уж очень быстро растёт с каждым разрезом, чтобы использовать подбор комбинаций углов А/2, В/2 и (180-А-В/2).
Маячат впереди какие-то суммы 2^k (если в обратном направлении) - не более того. Где-то должны появиться циклические послед-сти.
Если отталкиваться от соотношения сторон при разрезании, то формулы кажутся ещё громоздче.

Короче говоря, какие будут подходы к решению?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39940178
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Собсно, хотел спорсить: кто-нибудь брался за вопрос с бисектириссами треугольника? Что-то пока ничего простого не проглядывает. Если рисовать граф, то он уж очень быстро растёт с каждым разрезом, чтобы использовать подбор комбинаций углов А/2, В/2 и (180-А-В/2).
Маячат впереди какие-то суммы 2^k (если в обратном направлении) - не более того. Где-то должны появиться циклические послед-сти.
Если отталкиваться от соотношения сторон при разрезании, то формулы кажутся ещё громоздче.

Короче говоря, какие будут подходы к решению?


можно попробовать решать в обратную сторону:
рекурсивно из какого треугольника мог бы получиться заданный
и доказать, что там все зациклено
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39940307
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov, так хорошо в надежде, что не все варианты нужно перебрать. Но умозрительно кажется, что придётся рассматривать фиктивные варианты. Т.к. если обратный вывод, то мы не знаем заранее, какой угол получен на пересечении бисектриссы со стороной, а какой делением угла и т.д.
Ну т.е. кроме равенства А+В+С=180 и нечем воспользоваться, выходит.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39940309
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
...3) Отдельного объяснения требует, почему круг, вырезанный внутри тр-ка, будет длиннее разомкнутой линии.
4) И ещё доказать, почему не получится резать дугой (либо ломанной), имеющей ровно 2 тт пересечения с одно стороной?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39940327
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Aleksandr Sharahov, так хорошо в надежде, что не все варианты нужно перебрать. Но умозрительно кажется, что придётся рассматривать фиктивные варианты. Т.к. если обратный вывод, то мы не знаем заранее, какой угол получен на пересечении бисектриссы со стороной, а какой делением угла и т.д.
Ну т.е. кроме равенства А+В+С=180 и нечем воспользоваться, выходит.


Требуемое финальное состояние с отношением углов 1:3:5 может быть получено
только из трех предыдущих состояний: 1:2:6, 2:2:5, 2:3:4.

Эти три состояния, в свою очередь, могут быть получены только из состояний:
1:2:6, 1:4:4, 2:2:5, 2:3:4.

Состояние 1:4:4 может быть получено только из 2:3:4.

Видим, что среди всех возможных начальных состояний нет финального.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39940399
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1
классический реверс дает 49 обменов символами (первый с последним, второй с предпоследним и тд), он по любому быстрее. Здесь прикол именно в ограничениях - можно обменивать местами только соседние подстроки

Наверное, всё-таки предпочту сдаться. Если было бы очень нужно , то решал бы задачу методом перебора на 9 или 10 элементах: количество символов+начальная позиция дают N во второй степени итераций для шага. А таких шагов по условию задачи д.б. не более, чем N/2+1. Т.е. для 10 элементов в худшем случае порядка триллиона операций (10 в 12-ой), чтобы увидеть незамечаемое.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39940485
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39941125
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня рекорд вчера был 6 перестановок для (1 2 3 4 5 6 7 8). Но воспроизвести не смог, т.к. перемещал по столу фишки из коробки "Пятнашки" и не записал.

А с бисектриссами, да, воспроизвёл. Действитеьлно невозмоно получить. Оказалось, что эту задачу быстрее было 1 раз сделать, чем 100 раз думать, как это сделать. Такая мораль.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39941137
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
У меня рекорд вчера был 6 перестановок для (1 2 3 4 5 6 7 8). Но воспроизвести не смог, т.к. перемещал по столу фишки из коробки "Пятнашки" и не записал.


и эта тоже не особенно сложная, сама формула намекает, что надо работать с парами )
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39941161
labarad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98
У меня рекорд вчера был 6 перестановок для (1 2 3 4 5 6 7 8). Но воспроизвести не смог, т.к. перемещал по столу фишки из коробки "Пятнашки" и не записал.

Если Вы про строку в 99 символов, тогда точно надо прогу написать. Хотя в оценке количества итераций я и ошибся (помимо начальной позиции и общего количества символов ещё есть разделитель), но с 8-ю элементами прога посчитает в обозримое время. Ну а как только уловка станет видна, воспроизвести её на большем масштабе не составит труда.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39941194
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labarad
exp98
У меня рекорд вчера был 6 перестановок для (1 2 3 4 5 6 7 8). Но воспроизвести не смог, т.к. перемещал по столу фишки из коробки "Пятнашки" и не записал.

Если Вы про строку в 99 символов, тогда точно надо прогу написать. Хотя в оценке количества итераций я и ошибся (помимо начальной позиции и общего количества символов ещё есть разделитель), но с 8-ю элементами прога посчитает в обозримое время. Ну а как только уловка станет видна, воспроизвести её на большем масштабе не составит труда.


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

Для обратной перестановки программа не нужна, т.к. есть регулярный алгоритм с точно известным количеством шагов.
Чтобы понять, что к чему, проще начать с нечетного N=5, 7, 9, 11, 13, например, на картах.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39941789
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного оффотоп, тем не менее.
Относительно простые задачки в игре exapunks , много кто решал? Игра про конечные автоматы, с завуалированными ограничениями на количество используемых регистров. В торренте - лежит.Задачи простые, но вопрос о другом - кто-нибудь пробовал? Язык как бейсик команд 20, и все интуитивные.
Меня зацепило уже месяц ковыряю расслабленно под настроение. Задачи, они не просто на математику, а на прикладное программирование что ли.
Отдельный вопрос графики в сравнении с остальными вот бы где спорщиков по датабаза круче и чей язык быстрее протестировать.
Наберите exapunks в ютубе, может кому приглянется, у кого зуд этот, чтоб его, чего-то покодить.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39941846
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам себе на уме тихо веду монолог...
авторОтдельный вопрос графики в сравнении с остальными
RTFM :D :D :D Изучал графики, похоже они твои же предыдущие попытки просто отрисовывают :D В ютубах тоже неоднократно встречал подобное моему заблуждение :D Взял из первых обучающих заданий программу, и в хвост ее и в гриву, там просто не может быть более изящного решения, только тогда обратил внимание, чтоже графики по завершению показывают, до этого никак.
zachtronics молодцы, у меня ощущение, что все шишки зазвидевшемуся "программисту" на одном блюде вынесли :D

Не сочтите за рекламу, но раз тема про относительно простые задачи - ВЕЩЬ EXAPunks Zachtronics, уже в торрентах :D
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39941980
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера были гости дома, обсуждали детей, пока они в других комнатах в телефоны играли.
Тут меня осенило - пойдем Миша попробуем эту игру.
Вердикт- с алгоритмикой у него все замечательно, но не его это от слова вообще. Т.е. на простые действия он разложить может, а вот то, что робот делает все строго по его указке (я команды тупо набивал что он скажет на обучающем уровне), его никак не вставило. Очень полезная игра.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39991983
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по программированию:

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

время O(N), память O(1)


пример: гирьки 5, 3, 7, 9, 1, результат 14 (взяли гирьки 5 и 9)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39991984
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по математике:

Два человечища играют в числа: первый называет некоторое натуральное число, второй вычитает целый квадрат из названного, далее, по очереди - первый возводит оставшееся значение в натуральную степень, второй вычитает какой-нибудь целый квадрат, и т.д. Второй выигрывает, когда число обнулится (как сами знаете кто). Может ли первый не допустить обнуления?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992047
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
... Определить, какую максимальную суммарную массу мы сможем составить из гирек, ...

составить из 2-х гирек ??
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992070
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Имя пользователя1
... Определить, какую максимальную суммарную массу мы сможем составить из гирек, ...

составить из 2-х гирек ??
это в примере получилось из 2х, потому что их всего 5.
а так гирек может быть много, и соответственно выбрать получится много. Главное, чтобы выбранные не стояли изначально рядом друг с другом
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992163
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
по программированию:

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

время O(N), память O(1)


пример: гирьки 5, 3, 7, 9, 1, результат 14 (взяли гирьки 5 и 9)
С двумя гирьками все просто
Код: pascal
1.
2.
3.
4.
5.
6.
MaxL := X[0];
Result := X[2] + MaxL;
for i := 1 to N - 3 do begin
  MaxL := Max(MaxL, X[i]);
  Result := Max(Result, X[i+2]+MaxL);
end;

Для произвольного числа, вероятно нужно обобщить - считать условные "Odd" и "Even" суммы слева и выбирать, что пристыковать к результату.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992167
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
по математике:

Два человечища играют в числа: первый называет некоторое натуральное число, второй вычитает целый квадрат из названного, далее, по очереди - первый возводит оставшееся значение в натуральную степень, второй вычитает какой-нибудь целый квадрат, и т.д. Второй выигрывает, когда число обнулится (как сами знаете кто). Может ли первый не допустить обнуления?
Думаю, что да.
Поскольку ряд сумм квадратов натуральных чисел расходится, всегда найдется такая степень k (нечетная, разумеется), что число при вычитании ближайшего квадрата будет а) больше результата предыдущей итерации б) не являться квадратом натурального числа.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992186
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
по математике:

Два человечища играют в числа: первый называет некоторое натуральное число, второй вычитает целый квадрат из названного, далее, по очереди - первый возводит оставшееся значение в натуральную степень, второй вычитает какой-нибудь целый квадрат, и т.д. Второй выигрывает, когда число обнулится (как сами знаете кто). Может ли первый не допустить обнуления?
Думаю, что да.
Поскольку ряд сумм квадратов натуральных чисел расходится, всегда найдется такая степень k (нечетная, разумеется), что число при вычитании ближайшего квадрата будет а) больше результата предыдущей итерации б) не являться квадратом натурального числа.
идея не совсем верная.

может, я криво сформулировал?
ходы первого и второго на псевдокоде с присваиваниями выглядят так:

1) X := ...
2) X := X - n 2
1) X := X m
2) X := X - n 2
1) X := X m
...
всё кроме первой строки повторяется, n и m на каждой итерации произвольные (не обязательно одни и те же).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992195
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока не cxbnfk.
Если может, то 1-му надо не допустить, чтобы при его ходе
1) Y := X^m
X было квадратом. Тогда m можно брать нечётным.

С другой стороны, 2-й всегда может дать приближение к Y с точностью(2n+-1), т.к. (n+1)^2= n^2 +2n+1
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992197
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
Вроде я так и понял.

Первому игроку нужно не допустить чтобы
X m -n 2 =k 2 ,
а поскольку нет ограничений на m, это без труда можно сделать.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992205
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

в общем, решение пока не верное)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992206
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
С другой стороны, 2-й всегда может дать приближение к Y с точностью(2n+-1), т.к. (n+1)^2= n^2 +2n+1
как это использовать?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992207
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Для произвольного числа, вероятно нужно обобщить - считать условные "Odd" и "Even" суммы слева и выбирать, что пристыковать к результату.
да, тут можно выбирать произвольное число гирек, понятно что чем больше тем лучше.
например, если все гирьки одинаковы, то просто берем все нечетные, это будет половина или чуть более (если гирек нечетное количество)

сама задачка не сказать что интересная, но здесь прикольно что решение совсем простое
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992209
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С гирьками поэкспериментировал... Написать NlogN легко, а чтобы именно что N было..

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


С квадртами я пока дошел до мысли что можно сделать число четным, потом сделать число кратным тройке, потом пятерке, только смысла в этом немного... Разве что произведение простых чисел минус один в определенный момент станет квадратом.
Тогда как первый ни возводи в степень этот квадрат, ничего не выйдет.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39992289
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin
И много случаев, когда самая тяжелая гирька не используется.
да запросто, например (2, 3, 2)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39993728
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что простой перебор вариантов считается "неспортивным" способом?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39993729
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183
Я правильно понимаю, что простой перебор вариантов считается "неспортивным" способом?
если этот перебор впишется в ограничения на асимптотику, то вполне спортивно.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39993756
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
exp98
С другой стороны, 2-й всегда может дать приближение к Y с точностью(2n+-1), т.к. (n+1)^2= n^2 +2n+1
как это использовать?
Пожалуй сдамся. Не знаю как использовать. Находу не получилось.
Я не уверен, есть ли обязателный выиигрыш у кго-либо.

К сказанному ранее дополню.
Например 2-й может брать не ближайший квадрат, а перед ним, чтобы получить чётный остаток.
Если 2-й дурак, то остаток будет отрицательным.
Если дурак 1-й, то он , будет возводить в чётную степень,
возьмёт исходное Х вида n^2 + 2^k*t^2, либо вида n^2 + 2^k*t^2. где k,t>1, либо Х= {1...6}
1-го погубит даже степень вида (2^k*3)^3 и ^5 на втором шаге.
Все мои скудные мысли. Теоремы типа Эйлера у меня не на слуху, если надо их использовать.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39993790
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Если 2-й дурак, то остаток будет отрицательным.
Если дурак 1-й, то он , будет возводить в чётную степень,
подразумевается, что оба играют оптимально.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39993795
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На меня можно не рассчитывать:
exp98
Пожалуй сдамся. Не знаю как использовать. Находу не получилось.
Я не уверен, есть ли обязателный выиигрыш у кго-либо.
Я даже не знаю как подойти к случаю, если после 1-го шага останется 3^7, 3^11 ...
Даже не знаю, оптимально ли допускать такаую возможность. Куда уж до стратегии мне ... Всегда любил кооперативные "игры", совместное достижение рез-та.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39993830
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Теоремы типа Эйлера у меня не на слуху, если надо их использовать.
нет, здесь теоремы вообще не понадобятся. Задачка совсем простая, математика там на уровне 5 класса очень средней школы.

Пока высказано только очевидное соображение, что первому не следует брать четную степень. Осталось понять, что можно и что нельзя сделать с помощью нечётной.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39993877
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1, ну не скажиавтор возьмёт исходное Х вида n^2 + 2^k*t^2, тоже 1-му нельзя и тоже очевидное. И n^2+3^3 нельзя, и n^2+3^5. Да я и остатки покомбинировал, ограничений не увидел. На этом фонтан идей высох.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39994222
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подсказки
про игру с числамичто, если бы первый игрок не имел возможности возводить в степень? как бы тогда играл второй?

про гирькив каком случае мы возьмем в набор крайнюю справа (или слева) гирьку?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39994245
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
подсказки
что, если бы первый игрок не имел возможности возводить в степень? как бы тогда играл второй?
100500 раз вычтет по 1 - вот и победа. А 1-й сидит и хлопает глазами, в то время как его обувает 2-й.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39994254
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Имя пользователя1
подсказки
что, если бы первый игрок не имел возможности возводить в степень? как бы тогда играл второй?
100500 раз вычтет по 1 - вот и победа.
это медленно, он хочет побыстрее)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39994524
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всё сказал.
Возведение в 1-ю степень смертельно 1-му.
Поспешная апроксимация 2рым в виде (не)чётных степеней 2ки, да и просто квадратами. Всё равно дойдёт дело до "-1".
Я не смог найти половых признаков решающей ситации. Пусть пробуют другие.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39994544
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перешли в теорию игр?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39994553
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Перешли в теорию игр?
тут от теории игр - ноль целых хрен десятых.
говорю же, математика для 5 класса.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39994572
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже перешёл в 6-й класс.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #40058363
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про гирьки вроде просто, не?

Рисуем граф из элементов и пути, по которым в них можно попасть.
Пути в узел N взвешиваем массой n-й гирьки.
Выясняем, что в узел N можно попасть исключительно из узлов N-2 и N-3.
Присваиваем узлу метрику S "сумма", вычисляемую как стоимость самого дорогого пути в узел.

Итеративно эта метрика определяется как max(S n-2 , S n-3 )+стоимость перехода.
Отсюда на линейном (O(N) по времени) проходе нужно помнить 4 суммы (O(1) по памяти) и вернуть самую дорогую из двух самых "свежих":
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
declare
  v sys.odcinumberlist := sys.odcinumberlist(5,3,7,9,1); -- исходный набор
    function max_sum(i_v in out nocopy sys.odcinumberlist) return number is
      s sys.odcinumberlist := sys.odcinumberlist(0,0,0,0);
      procedure shift is
      begin
        for i in 1..3 loop s(i) := s(i+1); end loop;
      end;
    begin
      for i in 1..i_v.count loop
        shift;
        s(4) := greatest(s(1), s(2)) + i_v(i);
      end loop;
      return greatest(s(3),s(4));
    end;
begin
  dbms_output.put_line(max_sum(v));
end;
/
 
14
 
PL/SQL procedure successfully completed
 
SQL> 

...
Рейтинг: 0 / 0
339 сообщений из 339, показаны все 14 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Относительно простые задачки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]