Никаких архивирований, допускаются произвольные последовательности состояний.
Может я и ошибаюсь, но вот ход моих мыслей:
1. Очевидно, что для кодирования 6 состояний светофора необходимо 3 бита.
2. 3 бита кодируют вообще-то 8 состояний. Следовательно, любые два "лишних состояния" составляют как раз 1 дополнительный бит.
3. Закодировав 3 последовательных положения светофора, у нас накопится три "лишних" бита, а это - еще одно положение светофора!
4. Т.е. вместо 300 бит/100 положений мы получили 225 бит.
5. Смотрим далее. 3 "лишних" бита точно так же кодируют 8 вместо необходимых нам 6 состояний.
6. Следовательно, каждые 3*3 положения светофора получаем еще один лишний бит.
7. И так далее, пока кол-во необходимых положений для кодировки нового, бонусного положения, светофора не перерастет общее кол-во необходимых положений. Т.е. на 3*3*3*3 остановимся, получив 194 бита(!) на 100 положений светофора.
8. Результат можно еще улучшить, если не просто отбрасывать непарные 3-м бонусные биты, а учитывать их. Если непонятно, приведу вычисления.
Вообще-то, это в принципе и есть архивирование
.
Учитывать размер архиватора в битах? Нуну. Тогда уж приплюсуйте к результату 38 байт размер функции, вытаскивающей упакованные в байты полезные биты и т.п.
А вот как вы получили 33 байта, я то-то не пойму