Беспамятство или жизнь после маразма
- Войдите на сайт для отправки комментариев
Это задача-шутка для тех, кто хочет пошутить с Ардуиной в руках. Не то, чтобы задача особо сложная, но и не так, чтобы тривиальная. Кто хочет попробовать, прошу. Обсудим решения.
Требуется написать программу, которая не использует статическую память от слова совсем – ни одного байта.
Задача:
Имеется Ардуино, подключённая через штатный USB разъём к компьютеру и ни к чему больше. Питание через USB. Ни к каким пинам ничего не подключено. Т.е. из периферии есть только штатный светодиод на пине LED_BUILTIN.
Написать скетч, который бы мигал светодиодом на пине LED_BUILTIN следующим образом:
- 20 периодов с частотой 20Гц
- 10 периодов с частотой 10Гц
- 5 периодов с частотой 5Гц
- 1 период с частотой 1Гц
- переход к п. 1 и так в бесконечном цикле.
При этом должны соблюдаться следующие условия:
- программа состоит из одного файла xxx.ino и не использует никаких скрытых, заранее скомпилированных или ещё каких кусков – просто один честный файл, который заливается из IDE обычным образом;
- в программе не используются никакие библиотеки, кроме тех, что входят в поставку Ардуино IDE «из коробки»;
- программа выполняется на Ардуине на базе AVR, кроме АТtiny (т.е. Uno, Nano, Mega и т.п.). На ARM тоже можно, но достаточно на AVR;
- в программе (в любом её месте) присутствуют не более одного вызова функции digitalWrite (или прямой вывод в порт). Т.е. либо Вы вывод в порт не используете вовсе, либо используете один раз.
- В программе нельзя использовать рекурсию и любые циклы и операторы перехода (типа goto). Разумеется, можно использовать тот факт, что функция loop вызывается в бесконечном цикле, но свои циклы (в том числе и замаскированные) использовать нельзя.
- Самое главное, в программе не должно выделяться ни одного байта под глобальные и статические переменные. Т.е. выдаваемое IDE после компиляции сообщение «Глобальные переменные используют Х байт (Y%) динамической памяти, оставляя Z байт для локальных переменных» должно содержать ровно те же самые числа, что и аналогичное сообщение после компиляции пустого скетча ( void setup(void) {} void loop(void) {} )
Успехов!
P.S. Материального приза не будет. Решаем для собственного удовольствия и за «почёт и уважуху».
Евгений, согласно правилам такие посты надо размещать в разделе "Ищу исполнителя".
Правило №4 обходится на раз. Достаточно написать функцию типа
И вызывать её сколько угодно раз. digitalWrite встречается только в одном месте - правило соблюдено.
Ну, а дальше просто. Все периоды одного прохода (с 20Гц по 1Гц) тупо линейно расписываются в loop со всеми необхожимыми делэями и переключениями, а о том, чтобы они бесконечно повторялись уже сам loop позаботится.
Решение?
простите! я не сумасшедший полуночник! :)) Просто спускался к собакам. Заметил эту прелесть. Не устоял!
с телефона, поэтому без оформления.
t=millis()/25;
s=(t/40) & 3;
if (t & (1 << s)) toggle();
s и t локальные .. можно и не писать. они только человеку-читателю нужны.
__________
Прости, Женя, если интригу испортил. :)))
Ну, Вы, блин, даёте!
Влад, пока спросонья не разобрался и не понял, попозжей посмотрю. Но идея понятна: есть же глобальная переменная - счётчик миллис, вот пусть в ней что надо и хранится :)
Володя, ну, блин, расписывать всё длинной портянкой - нелениво это как-то, не по-программистски. Хотя, да, решение, конечно :)
Кстати, Вы говорили, что "ворота" - погоняло по жизни и намекали на какую-то историю, можно услышать?
согласно правилам такие посты надо размещать в разделе "Ищу исполнителя".
Вот хотел же халяву срубить и надеялся, что никто не заметит :(
Красиво, но, увы, неправильно.
Предполагаю, что вместо:
следует читать:
Но и в этом случае есть, минимум 3 шероховатости (т.е. строго говоря, отклонения от ТЗ):
1. При s == 3 вместо заказанного 1 Гц получается 2.5 Гц.
2. IMHO по хорошему "сращивание" фрагментов с разной частотой должно сопровозжаться переключением, т.е. интервалы горения/негорения должны следовать примерно так: 20,20,20,20,10,10,10,10. А вместо этого наблюдается: 20,20,20,30,10,10,10.
3. Ну и не уверен, что примерно через 49 суток не наступит небольшой сбой в последовательности.
PS. В общем, остаюсь при своем мнении, высказанном в №1: задача (если ее сделать аккуратно) - не художественное творчество, а рутина.
Я когда придумывал задачу, имел в виду очень краткое и красивое решение, по мне - так искусство (может по-Вашему - мазня, не знаю - на вкус и цвет). Но раскрывать его пока не буду, т.к. на его идею пока что и намёка не было.
А так, да, каждый решает как умеет :)
Так! В ночном решении, конечно (!!!) есть ошибка. Я же не весь проснулся, только та часть, которая щенка пописать выпускала ;))).
-----------
Вот правильно е и проверенное:
С тоггле, ессно, не работает. Это помрачение ночное ;))). И последовательность не 1,2,4,8. Поэтому 1 Гц нужно обработать отдельно, а 20-10-5 - нормально по делению пополам идут.
НГу вот и всё. Можно записать в лдну строку.
Ща запишу, для смеха.
Женя! А твоё решение точно КОРОЧЕ?
Прям интрига сохраняется!
Нет, моё длинее, но мне там идея нравится. Хотя, у Вас идея тоже отличная - хранить всё, что нужно в естественно-доступной глобальной переменной - это сильно. Я своё выложу чуть позже, сейчас бежать надо.
Пока Женя не вернулся я тут пофилосовствую немного?
Возможно, что я неправильно понял задачу.
Если дать возможность запоминать хоть одно число, даже 1 бит достаточно, то можно реализовать ЛЮБОЙ конечный автомат (если есть миллис()).
Женя знает - как, остальным врядли интересно.
Поэтому я счел, что условие задачи - не запоминать ничего и нигде, даже в "пине" или в бесчисленных, ненужных для задачи регистрах контроллера. Следовательно единственный способ дифференцировать входы в луп - значение времени, переключения невозможны, так как, если мы не имеем права помнить даже бит (флаг), то мы не можем отличить первое попадание с этой временной меткой, от НЕ первого.
Ну а дальше - дело техники.
------
Поэтому мне очень интересно решение Евгения. Буду подождать! ;)))
Беспамятство - это когда очухиваешься и не знаешь сколько сейчас времени, который год и где находишься. А когда кто-то, сбоку лежащий, тебе может ответить, что уже 7-е января и ты находишься на квартире в Теплом Стане, то это уже перестает быть беспамятством. Просто за тебя помнит кто-то другой. Типа миллиса, который тоже является постоянно хранимой в памяти МК величиной.
Поэтому здесь существует определённый философский спор - является ли миллис сторэдж частью финальной программы или нет.
А унутре дилэя вообще цикл и еще и скрытый.
Так, ну в общем, из всего что я видел, лично мне самым прикольным показалось рещение Влада.
Моё было как раз на использовании пинов (там их свободных аж 18 штук) в качестве битов глобальной памяти, ну или, действительно регистров, одного таймера бы хватило.
Пины в качестве памяти однажды пришлось реально использовать в боротовом устройстве, когда буквально одного байта не хватало - отсюда и идея задачи.
Но с миллисом мне больше понравилось.
Евгений, Вы меня заинтриговали.
Вот насколько я понимаю, решение может быть получено либо на интуиции (озарении), либо чисто логически. Здесь, на мой взгляд, откровенно второй случай.
Действительно: для решения напрашивается автомат, значит, надо хранить состгояния, но собственные переменные для этого использовать нельзя. Можно, конечно, "незаконно присвоить" какую-нибудь ячейку памяти, находящейся в куче. И даже с точки зрения идеологии МК это не будет чем-то совершенно немыслимым, но все равно не красиво. Поэтому единственный вариант, который напрашивается - использовать в качестве переменных состояния то, что уже имеется в системе. А как раз переменная, которую возвращает millis для этого как нельзя лучше подходит.
Остается лишь аккуратно расписать все случаи, но это уже рутина, поэтому я и написал насчет разщдел "Ищу исполнителя". Ну еще можно использовать эту задачу на собеседовании при приеме программиста на работу - для подтверждения некоторой минимальной квалификации.
Влад затем предложил простое и красивое решение, но, увы, обладающее рядом недостатков. Но суть та же - в качестве переменной состояния использовать millis.
Другой вариант предложил Ворота. Там еще бОльшая рутина. В любом случае неэлегантно, но все равно - имеет право быть.
Лично я до третьего варианта додуматься не могу. Поэтому с нетерпением жду продолжения.
PS. Да, прочел сообщение, отправленное парой минут раньше, но уже после того, как я начал писать данное. Действительно, чисто МК-шное решение. Я, повторяю, не додумался, хотя даже подсказка была - в виде явнго сформулированного запрета что-то подключать к пинам, что явно намекало на использование внешней памяти.
PPS. Кстати, вопрос на засыпку: библиотека EEPROM ведь относится к стандартным библиотекам, т.е. допустима по условиям задачи?
Влад затем предложил простое и красивое решение, но, увы, обладающее рядом недостатков. Но суть та же - в качестве переменной состояния использовать millis.
Сережа! Прости мое занудство, но какие недостатки? Ошибки ночного поста я признал и исправил...
Так что я несколько в недоумении !!!!!!!?????????
С тоггле, ессно, не работает.
И, кстати, toggle в первом смысле (переключение) использует указанную Евгением идею - использование портов в качестве памяти, а во втором - нет, это чисто логическое решение без использования каких-либо физических свойств МК.
Влад затем предложил простое и красивое решение, но, увы, обладающее рядом недостатков. Но суть та же - в качестве переменной состояния использовать millis.
Сережа! Прости мое занудство, но какие недостатки? Ошибки ночного поста я признал и исправил...
Так что я несколько в недоумении !!!!!!!?????????
Исправлен п.1 и то, что я назвал "неправильно" в том же сообщении №6 (в начале сообщения). Остальное - осталось.
Влад затем предложил простое и красивое решение, но, увы, обладающее рядом недостатков. Но суть та же - в качестве переменной состояния использовать millis.
Сережа! Прости мое занудство, но какие недостатки? Ошибки ночного поста я признал и исправил...
Так что я несколько в недоумении !!!!!!!?????????
Ну а я, если ты будешь внимателен, написал, что ИСПРАВИЛ. Код приведен в №8, причем тут то, что ты написал в №6???
ОФФТОП:
Я поясню, почему занудствую:
почти 33 года назад, в 86-ом, я поступал на МехМат МГУ и получил ...2 на письменной математике.
Я пошел спорить, и объяснил где, как и почему задачи были решены. Я был ЕДИНСТВЕННЫЙ человек, который поступил после апелляции.
Спорить о своих решениях для меня не просто важно, а ПРЯМ_ПИПЕЦ_КАК_ВАЖНО!!! ;)))) Как-то так.
И, кстати, toggle в первом смысле (переключение) использует указанную Евгением идею - использование портов в качестве памяти
Сереж! Блин, вот уже начал доставать!
Toggle это PINB = (1<<n) в AVR процессорах.
I/O memory address locations are allocated for each port, one each for the Data Register – PORTx, Data
Direction Register – DDRx, and the Port Input Pins – PINx. The Port Input Pins I/O location is read only,
while the Data Register and the Data Direction Register are read/write. However, writing '1' to a bit in the
PINx Register will result in a toggle in the corresponding bit in the Data Register.
(стр. 97 даташита на 328-ой)
-------------------------
Нельзя отрывать слова от контекста! Смыслов каждом слове, тем более на другом языке, дохера и больше. Квалифицированный читатель должен уметь ограничивать семантическое поле слова текущим контекстом.
Ну еще можно использовать эту задачу на собеседовании при приеме программиста на работу - для подтверждения некоторой минимальной квалификации.
я при приеме на работу даю другую (прикладную) задачу - выдать график измерений наполнения бочки диаметром X высотой Y положенной на бок строко горизонтально через к примеру 5мм наполненности
Пока ни один из нововыпущенных прикладных математиков задачу в разумные сроки (10-20 минут) не решил )))
И, кстати, toggle в первом смысле (переключение) использует указанную Евгением идею - использование портов в качестве памяти
Сереж! Блин, вот уже начал доставать!
Toggle это PINB = (1<<n) в AVR процессорах.
I/O memory address locations are allocated for each port, one each for the Data Register – PORTx, Data
Direction Register – DDRx, and the Port Input Pins – PINx. The Port Input Pins I/O location is read only,
while the Data Register and the Data Direction Register are read/write. However, writing '1' to a bit in the
PINx Register will result in a toggle in the corresponding bit in the Data Register.
(стр. 97 даташита на 328-ой)
-------------------------
Нельзя отрывать слова от контекста! Смыслов каждом слове, тем более на другом языке, дохера и больше. Квалифицированный читатель должен уметь ограничивать семантическое поле слова текущим контекстом.
Третий абзац (цитата и дэйташита) отнюдь не определяет, как именно следует понимать слово toggle применительно к AVR процессорам, а лишь объясняет, как работает PINx. Поэтому в приведенном в третьем абзаце контексте toggle следует понимать как изменение состояния на противоположное, но из этого совершенно не следует, что слово toggle допустимо применять только в этом смысле.
Поэтому второй абзац содержит ложное утверждение.
Читайте то, что содержится в дэйташите, а не то, что Вам хотелось бы там видеть.
PS. Если уж мы ударились в мемуары, то когда я поступал в МФТИ, первым экзаменом традиционно проводилась письменная математика. Думаю, для оптимизации. Ибо более 50% абитуриентов сразу отсеивалось на первом экзамене. Лично я на этом экзамене получил 5 и, судя по набранным баллам, с большим запасом. Это к тому, что лучше сразу писать правильно, а не спорить потом, что тебя не так поняли.
PS. Да, проверил по последней версии кода, недостаток 2 там тоже устранен. До этого пнроверял по исходной с учетом правки по п.№6.
Остается 3, но это уже совсем другая история...
Впрочем, тут тоже IMHO есть тема для обсуждения. Например, учитывая, что наредко в Ардуино применяется керамика вместо кварцев, да и кварцы имеют погрешность (в моей практике был случай, когда погрешность задания частоты приводила к сбоям передачи по Serial - 0.7%), а также то, что millis все равно тикает неравномерно, можно предложить вариант исправления, в котором в секунде 1024 мс и, таким образом, сбой каждые 49 суток будет устранен.
Пока ни один из нововыпущенных прикладных математиков задачу в разумные сроки (10-20 минут) не решил )))
Была у меня начальница, которая при приёме на работу устроила психологический тест с рисованием какой-то хероты. Потом оказалось, что она ни в ворде работать не умеет, ни договор прочитать нормально, ни спецификацию понять, ни отвественность на себя взять... Да и стервь неуравновешенная по характеру. Зато на собеседовании умничала дайбох каждому.
Влад затем предложил простое и красивое решение, но, увы, обладающее рядом недостатков. Но суть та же - в качестве переменной состояния использовать millis.
Сережа! Прости мое занудство, но какие недостатки? Ошибки ночного поста я признал и исправил...
Так что я несколько в недоумении !!!!!!!?????????
Исправлен п.1 и то, что я назвал "неправильно" в том же сообщении №6 (в начале сообщения). Остальное - осталось.
Так ты уже успел поправить свое сообщение? ;))) ладно.
Тогда п2 - просто твоя вкусовщина, если б было правдой. В секунде четное число полупериодоа каждой частоты, что очевидно! Поэтому переходы фаз корректные 20>10>5>1.
Что легко проверяется, добавив пару статических переменный и вывод в сериал:
п3. Ну это полная чушь!!! После переполнения в счетчике все 1 сменяются на все 0. Ровно как и при инкременте.
То есть вообще никак нас не беспокоят.
---------------------------
ИТОГ: В этом замечании ты был очень похож на Архата. Тем, что тот тоже никогда не признавал своих оплошностей. Если бы не это, его терпели до сих пор.
Ты заметил ошибки в ночном посте - ОК, я тоже заметил и выложил исправленный вариант. Ну и написал бы, что ты принял это к сведению, ты же, со своим обычным высокомерием, заявил, что "ошибки в 1 2 и 3".
Притом, что
1.без детектирования первого вхождения НИКАК нельзя использовать "тоггле", а не как у тебя написано.
2. Пункт 2 - твоя невнимательность.
3. Пункт 3 - ну просто безграмотная чушь.
-------------------
Короче, мне бы очень хотелось извинений.
Поэтому здесь существует определённый философский спор - является ли миллис сторэдж частью финальной программы или нет.
я при приеме на работу даю другую (прикладную) задачу - выдать график измерений наполнения бочки диаметром X высотой Y положенной на бок строко горизонтально через к примеру 5мм наполненности
Пока ни один из нововыпущенных прикладных математиков задачу в разумные сроки (10-20 минут) не решил )))
по мне так вот эта оговорка, автоматически отправляет к чипу с 2-мя длинными таймерами
и реализовать все можно в паре прерываний от таймеров, в секундном таймере идет только перезагрузка другого таймера, а в другом прерывании только вывод с инверсией текущего состояния пин13. т.е. никаких переменных там нет вообще.
т.е. первое прерывание выглядит как
а второе
не стал писать ночью, решил глянуть на ход мыслей других участников
Поэтому здесь существует определённый философский спор - является ли миллис сторэдж частью финальной программы или нет.
Однако, на мой взгляд, это вступает в противоречие с основной идеей - неиспользовании статической памяти совсем.
я при приеме на работу даю другую (прикладную) задачу - выдать график измерений наполнения бочки диаметром X высотой Y положенной на бок строко горизонтально через к примеру 5мм наполненности
Пока ни один из нововыпущенных прикладных математиков задачу в разумные сроки (10-20 минут) не решил )))
В чем проявляется неадекватность? Замер жидкости в таких цистернах ежедневно делается мерной линейкой и сравнивается с таблицами, неадекватность в умении программиста реализовать такие таблицы?
Простая прикладная задача
Некорректность заключается в требовании знать конкретный технологический процесс от человека, изучавшего математическую теорию и попавшему впервые на это предприятие. По мне так.
Не знаю, как в столицах, но на периферии давно уже не учат применять знания в жизни. Преподаватель заменился лектором.
Ты заметил ошибки в ночном посте - ОК, я тоже заметил и выложил исправленный вариант. Ну и написал бы, что ты принял это к сведению, ты же, со своим обычным высокомерием, заявил, что "ошибки в 1 2 и 3".
Притом, что
1.без детектирования первого вхождения НИКАК нельзя использовать "тоггле", а не как у тебя написано.
2. Пункт 2 - твоя невнимательность.
3. Пункт 3 - ну просто безграмотная чушь.
-------------------
Короче, мне бы очень хотелось извинений.
1. По поводу toggle я уже писал: так, как предложил ты - да, нельзя. А как можно - написал я в посте №6/
2. Признаю. Моя невнимательность. Отреагировал с запозданием и не на тот пост.
3. Пока это для меня неочевидно. Мы делим 0xFFFFFFFF на 25 и получаем 0xA3D70A3. Где тут 4 единицы в конце?
Да, приношу извинения за запоздалую реакцию на п.1 (по поводу трактовки слова toggle остаюсь при своем мнении) и за невнимательность по п.2.
п.3 в состоянии обсуждения. Убедишь - тоже принесу извинения.
Однако, на мой взгляд, это вступает в противоречие с основной идеей - неиспользовании статической памяти совсем.
Если исключения прямо прописаны в условии (п.6), начит, они имеют место быть. В конце концов, порты они тоже содержатся в общем адресном пространстве и ведут себя как ячейки памяти. Получается, что в рамках "строгих ограничений" вариант Петровича тоже не проходит.
В чем проявляется неадекватность?
Думаю, что тут пора призывать в пост кампутерного юриста для толкования формулировок и иерархии требований ))
В чем проявляется неадекватность?
действующий программист решил задачу за пяток минут, это просто говорит о качестве образования...
вуз один и тот же )))
Токарь с пятнадцатилетним стажем изготавливает 30 деталей в час, а выпускник ПТУ портит четыре резца за смену. Удивительно, правда? Ведь по всей приведенной выше логике опыт никак не влияет на выработку.
Токарь с пятнадцатилетним стажем изготавливает 30 деталей в час, а выпускник ПТУ портит четыре резца за смену. Удивительно, правда? Ведь по всей приведенной выше логике опыт никак не влияет на выработку.
Вы в вопросе увидели, что-то сложнее курса геометрии 7 класса?
Вам же "по таблицам" надо решить, как я понял. Так что тут вопрос не математический, а технологический.
действующий программист решил задачу за пяток минут
Исходя из предложенной формулировки я бы заключил, что речь идет, скорее, об аналитическом решении.
В противном случае прикинем: загрузка ОС - 2.5 мин, загрузка IDE - еще 0.5 мин, мастер нового проекта - еще 1.0 мин. Итого, на написание и отладку текста - 1 минута. Хороший у вас программист. Лично я всегда сталкиваюсь с тем, что задача на пару минут выливается, минимум, минут в 10.
Евгений Петрович, в очередной раз высказываю Вам свое восхищение!
Сколько разных вариантов решения такой, казалось бы, совершенно очевидной задачи вдруг было выявлено.
Я вот действительно поначалу решил, что ничего интересного тут быть не может (о чем и свидетельствует пост №1), ан вон оно как вышло!
действующий программист решил задачу за пяток минут
Исходя из предложенной формулировки я бы заключил, что речь идет, скорее, об аналитическом решении.
В противном случае прикинем: загрузка ОС - 2.5 мин, загрузка IDE - еще 0.5 мин, мастер нового проекта - еще 1.0 мин. Итого, на написание и отладку текста - 1 минута. Хороший у вас программист. Лично я всегда сталкиваюсь с тем, что задача на пару минут выливается, минимум, минут в 10.
Система всегда загружена и под рукой, язык - интерпретатор (Инфо-Бухгалтер) )))
Он то и по бухучету работал, суть аналитики - определение площади сегмента, на это ушло минута - две
Площадь сегмента - жутко неудобный тест!!! Потому, что участвует и угол и его синус.
Итоговая формула - совершенно зубодробительна, даже для математика, потому, как нифига не красивая:
<Объем в %> = ( 2*acos(1-h/R) - sin( 2*acos(1-h/R))) * 50 / 3.14
Вот это ты хочешь получить от вчерашнего студента? Да, тригонометрия там не за 7, но ... когда теперь синусы и сектора-сегменты проходят? - в 9ом вроде.
ИМХО - тест неприятный, так как не "олимпиадный", то есть не на остроумие, а просто на память... Мне - не понравился.
1. По поводу toggle я уже писал: так, как предложил ты - да, нельзя. А как можно - написал я в посте №6/
2. Признаю. Моя невнимательность. Отреагировал с запозданием и не на тот пост.
3. Пока это для меня неочевидно. Мы делим 0xFFFFFFFF на 25 и получаем 0xA3D70A3. Где тут 4 единицы в конце?
Да, приношу извинения за запоздалую реакцию на п.1 (по поводу трактовки слова toggle остаюсь при своем мнении) и за невнимательность по п.2.
п.3 в состоянии обсуждения. Убедишь - тоже принесу извинения.
Спасибо, что понял меня. Я благодарен.
1. Про тоггле я не о том, а про то, что его НИКАК не получится применить, без дополнительной памяти.
2. Ок.
3. Ты прав, моя вина, что в голове были тики, а не мс! В переполнении тики пойдут 0,1,2,3,0,1... то есть удлиннится фаза 0 на третьем бите, т.е. частоте 5Гц. Не всегда, а может и никогда... но ответ на это вопрос требует внимательного учета всех тиков третьей секудны... а ну его в баню!!! ;))) Я был неправ, даже если и не влияет, то это неочевидно.
по мне так вот эта оговорка, автоматически отправляет к чипу с 2-мя длинными таймерами
У Конецкого есть описание его встречи с Пикассо. Дело было на выставке. Все пялились на картину, на которой был изображён мужик падающий в море и до хрипоты спорили что это: низвержение Вельзевула или падение Икара, а автор набрался наглости и спросил у самого Пикассо. Тот ответил, "Вы только не говорите эстетатм, но я просто хотел изобразить ныряльщика" :)
Так и здесь. Когда я писал, я имел в виду использование пинов. У 328 их 20 - 13-ый и - Rx от греха подальше = 18 свободных пинов. Можно организовать три шестибитовых числа (== три глобальные переменные по шесть бит), что "выше крыши" для данной задачи. Имея такие переменные, она программируется в лоб безо всяких хитростей. А у тинек пинов поменьше будет :(
Кстати, Вы говорили, что "ворота" - погоняло по жизни и намекали на какую-то историю, можно услышать?
А чего лично не спросишь? Только не говори, что до сих пор не вычислил меня - не поверю.
А "Ворота", таки да - по жизни. Мы когда из училища выпустились, с несколькими сокурсниками попали в одну дивизию и там продолжали общаться, когда пересекались. Из всех наших я первым получил роту, ну, и собрались отметить, а то как же. Поначалу пили за "Вовку - ротного", потом, когда языки стали заплетаться - за "воротного", так к утру я "воротами" и стал. С тех пор они (и многие с их подачи) так меня и зовут. Уже солидные мужики, жизнь раскидала, один так даже до генерала дослужился, а молодость - её же хрен забудешь.
А задачка забавная, но как-то сложно и длинно сформулирована. Надо бы стараться попроще. Вот, взять проблему Коллатца - уж насколько простая формулировка - все старшекласники тут же кидаются "решить за полчаса":)
Могу добавить задачку, на которой я "сломался", до неё считавший себя почти Б..ом! ;)))
......
Пусть дан алфавит, без ограничения общности, из двух букв a и b.
Рассмотрим множество всех возможных слов в этом алфавите.
Пусть дана пара конкретных слов A и B.
Определим элементарную операцию замены:
Если A - подслово более длинного слова, то можно заменить A на B и наоборот.
Два слова называются эквивалентными, если можно преобразовать одно в другое конечной последовательностью элементарных замен.
------------------
Выяснить (проблема Туэ, её кусочек ;) ): Разрешима ли алгоритмически проблема эквивалентности.
========================
Ну ... в общем это как-бы "Теорема Ферма", только в теории вычислимости. Вроде - проще некуда? Вот и я так думал... чуть к добрым людям в белых халатах не угодил! ;)))) Давно это было...
Только не говори, что до сих пор не вычислил меня - не поверю.
Вычислил, но были сомнения. Теперь - нет.
А пьянка за "Вовку ротного", это в Афгане, что ли?
Да, граф, задачки у Вас!
Кстати, граф, Вы тут как-то за Шабат говорили. У нас тут нынче стока снега с утра навалило, что я так долго и тоскливо смотрел на него, а потом запустил жене - слушай, мож мне в евреи податься, вот что-то есть в этом иудаизме! Но ни фига - она мне приземлённо так - бери мол лопату, топай во двор, там и поразмышляешь об иудаизме. Так и пришлось сегодня полдня с лопатой в руках о Шабате философствовать :)
что же, значит звезды так сошлись, что количество многих пинов и длинныых таймеров скоррелировало
в Афгане, что ли?