Не верю, что эта задача нерешаема

Тема в разделе "WASM.HEAP", создана пользователем Sharp, 6 авг 2007.

  1. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Я проводил две недели небольшое программерское соревнование, чисто для развлечения (http://esci.ru/kcc2), составил для него 7 задач, 5 из них — довольно стандартные задачи а ля Топкодер, максимально простые, доступные даже школьнику, одну — а ля Топкодер Марафон, на оптимизацию. И одну задачу дал довольно своеобразную, дано было несколько примеров некоторого пакета выдуманного протокола, нужно было сообразить, какая у него структура и написать парсер. Как это ни показалось мне удивительным, но эту задачу никто не смог сделать. Вот ее условие:

    Мне интересно узнать, действительно ли я дал нерешаемую задачу, и до формата этого пакета догадаться никак нельзя, или же форумчане wasm.ru все же догадливее участников?
     
  2. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
  3. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Издеваешься? Откуда можно узнать, можно ли в начале пакета писать MS маленькими буквами или нет? Можно ли дополнять пакет нулями или нет? Не говоря уж о том, что по двум правильным пакетам правильно угадать способ вычисления последовательности можно только чудом.
     
  4. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    Sharp

    Встречная задача: найди следующее число в последовательности 23, 59, 12, 86, 33, 82, ... Подсказка: оно положительное и меньше 100.

    Твоя задача имеет примерно такой же смысл. Можно без труда сочинить структуру, которая будет описывать все приведенные примеры, но практически наверняка свалится на следующем. Просто задача на "угадай мысли составителя" :) К сожалению многие олимпиадные задачи грешат этим.
     
  5. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Вот, что мне удалось распознать-

    4D, 53 - заголовок
    xx - если старший бит 1 - контрольная сумма + возможно еще что-то
    если старший бит 0 - количество следующих байт блока
    xx xx - какие-то коды (по два байта - слова)
    00 00 - конец пакета

    Далее
    1)по первому пакету видно, что после пропуска неизвестных 5 байт, коды "3" и "5" присутствуют в пакете. Но второй пакет, который выводит аж 900 чисел - рубит теорию на корню, о том что коды несиправных хабов передаются последовательно словами.
    2) третий пакет полностью соответсвует первому, за исключением числа "00 61" - что и привело к мысли, что первый байт последовательности включает контрольную сумму.
    3) самый маразматический пример - это четвертый пакет - не дает вообще никакой информации.

    Итак, подзадача -
    знаем, что 81 = 00 60 00 09
    и 81 <> 00 61 00 09
    напишите алгоритм расчета контрольной суммы :))))

    Так решение скажут? :)
     
  6. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    Ultrin Faern
    Думаю передаваться могут как исправные, так и неисправные, где-то в заголовке должен быть соответствующий бит. Во втором случае передаются исправные, а так как пакет пустой, значит все неисправны. В первом случае передаются два неисправных.
     
  7. Guest

    Guest Guest

    Публикаций:
    0
    Sharp
    Вот из-за подобных задач на олимпиадах заваливаются вполне нормальные программеры. Во вторых какое отношения эта задача имеет к программированию? - это мат. задача.
    По поводу задачи:
    Как сказал Ultrin Faern 4D, 53 - заголовок, вполне возможно, на ASCII пишется как "MS".
    1-й Пакет
    4D 53 05 81 00 60 00 09 00 05 00 03 00 00 - предположим, что в данном случае 05 (3 байт) - это смещение от данной позиции (3) к началу данных пакета. Тогда логично будет что 00 05, 00 03 - это номера сгоревших свитчей. 00 00 - окончание пакета, хотя это тупо. 00 60 и 00 09 - хз. судя по 3-му пакету какие-то важные значения, контрольная сумма, может быть и нет, но их изменение означает битый пакет.

    2-й Пакет, 900 сгоревших свитчей.
    4D 53 84 00 C0 00 00
    900 в HEX = 384h, число 900 с потолка не могло упасть и единственное что сдесь подходит это 4D 53 84 00 C0 00 00
    Что не очень сходится с предыдущими исследованиями, где 3 байт это смещение. Предположим что C0 - это сжатие, как в DNS, но там следующий байт - ссылка на смещение от начала, здесь идет конец пакета 00 00, допустим смещение это предыдущий байт перед C0 - 00, тогда всеравно узнать откуда смещение не получается т.к. тройка от 384 просто выдрана из половины байта заголовка, ничего другое здесь не подходит.
    3-й Пакет исключительно для сравнения с 1м.
    4-й Пакет убит насмерть =)

    P.S. Слишком замудренный протокол чтобы просто сообщить о сгоревших свитчах =)
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    im1111
    4D 53 05 81 00 60 00 09 00 05 00 03 00 00
     
  9. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    im1111
    Исходных данных тоже явно не хватает - приведены, так сказать, экстремальные случаи - 2 и 900, а вот как будет выглядеть дамп для 3, 4 и хотя бы 5, не сказано. С точки зрения математики, задача явно на мат. индукцию, тогда должно быть достаточное кол-во вариантов для однозначного решения.
    ЗЫ
    Интересно, как автор топика ее решает
     
  10. 737061

    737061 New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    74
    Я бы сказал что мы лишь можем подогнать под эти варианты и всё, и еслив мы угадаем это можно будет приравнять к чуду, даже имея бесконечно много пакетов на которые мы можем ваздействовать эта задача не тривиальна (попробуйте от какойнить игры сейфы разобрать), а вдруг там сжатие какоенибуть или зависит от преведущего пакета и т.п.
    ЗЫ я как рас с одним фарматом разбирался (верней прогу писал уже по разобранному), так там дафига полей unknown и я как бы посмотрел и понял что там не зря unknown хрен поймешь что делают, и это при том что есть доступ к отправителю пакетов, без сорцов конешно, но есть а тут что?
     
  11. 737061

    737061 New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    74
    А к чему фраза из 900 не выжел не один, скажу есчё что надо искать бит(байт, дворд) показывающий решим работы, например диапазон, перечисление.
     
  12. Guest

    Guest Guest

    Публикаций:
    0
    Про 900 свитчей всеже непонятно, может их вообще 900 в целом и C0 - означает что не один не найден, инфа на самом деле как сказал Stiver из разряда "угадай мысли составителя". Ну может тут еще htons/htonl применить надо, тогда с контрольными суммами непонятка получится и со всеми данными целиком, ибо узнать у какого поля какой размер не удастся.
     
  13. 737061

    737061 New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    74
  14. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    4D 53 05 84 00 C0 00 00 - может это версия протокола (в задании пропущена???) ?
    4D 53 = MS - сигнатура
    C0/60 - тип данных живой/мёртвый
    или может ошибка здесь 4D 53 00 84 00 C0 00 00 или 4D 53 84 00 00 C0 00 00
     
  15. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Мне показалось очевидным, что прежде всего в пакете следует искать какие-то данные, которые должны в нем присутствовать. Например, во втором пакете должно присутствовать количество свичей, 900 = 1110000100b. В каком виде логично встретить это число, учитывая, что число свичей не больше 50000? Ничего на ум логичнее little-endian word не приходит. Дальше подсказывать?
     
  16. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Насчет того, что если если кол-во свичей входит в word то нужно word и искать. Например почитайте формат формат obj (старший бит байта указывает на то, что это word), или например кодирование символов в utf-8 (специальная битовая последовательность в начале байта указывает на размер).

    Я уже начинаю думать, что последовательность "4D 53 84 00 C0 00 00"
    4D - все-таки заголовок
    5 - размер блока? тип блока? контрольня сумма?
    384 - число "900"
    00 - флаг, что не работает?
    C - тип блока?
    0 00 00 - конец последовательности?

    но это "раскодирование" не подходит для первого примера
     
  17. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Заголовок MS, по имени фирмы, не нужно усложнять задачу, посмотрите для примера на остальные.
     
  18. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Sharp
    Мне задачки Бильбо Бэггинса типа "Догадайтесь, что у меня в кармане" не шибко нравятся.
     
  19. Guest

    Guest Guest

    Публикаций:
    0
    Значит вот здесь "84 00 C0 00" кроется число 900, интересно как?
    P.S. Если бы это был "правильный протокол" то там было бы наподобе "84 03 С0 00" - вот это нормально, а тут 100% придется мат. функции применять лишние.
     
  20. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    00C0h * 4 + 0084h :)

    Но как это увязать с первым случаем? Чё эт там вдруг 05 появилось?