Выведите эту двоичную последовательность длиной 1160:
-++-+--++-++-+--+--++-+--+--++-+--++-++-+-++--++-+---+-++-+--+--++++--+--++-+--++-++----++-++-+-++--++-+-+---++-+--++-++-+--++-+--+---+-++-+--++-++-+--+--++-++-+--++-+--+++-+-+----+++-+--+--+++---++-++-+--+--+++--+-+-+--+-+++-++-+--+--++-+--++-++-+--+--++--+++---+++-+---++-+--++--+-+--+-+++-+--++-++-+--++-+--+--++-+--++--+-++-+-+--+-+-++-+--++-+--+--++-+-+-++-+-+-++---+-+--++++--+---++-+-++-+--++-+--+--++-+--++++--+---+-++++--+--++-++-+--++-+--+--++-+--++-++-+--++-+--+--++-++-+----+++-+--++--+++---+-++-+--+-++---+-++-++-+--+--++--++++-+--+--+--++++--+--+++---++-++-+--++--+-+--+--++-++-+--+--+-+++-++-+--+--++--+-++-++-+--+--+--++-++-+--+++---++-+--++-++---+++---++-++----+++--+-++-+--+--++-+--++-++-+-++--++--++----+++-++--++----++-+++--++---+++----+-+-++-++-++-+-+----+++--++-+--++-++-+--+--+--++-+--++-++-+--++--+-+--+-+-+-++++---+-+-++--+--+-+-+-++-+-+++--+-+--+--+-+++--+-+++---++-+--+--++-++--++---++-+-++--++-+---+-++-+--+-++--++-+--++-+--+-+++-+--++--+-+-+++--+-+--++-++-+--+--+-++---+-++-+-++--++-+--+++-+----++--+-++-+-++--++-+--++-+-++--++-+---+-++-+--+++----+-+-++--++-+--++-++-++-+--+--+--++++---++---+-+-++-+-+++--+-++--+-+--+-+-++---+++-++
Последовательность
Эта конечная последовательность тесно структурирована таким образом, что, я надеюсь, предоставляет уникальные методы сжатия. Это происходит из-за проблемы несоответствия Эрда, которая была показана в предыдущем испытании .
Рассматривая термины как +1 и -1, это последовательность максимальной длины несоответствия 2, что означает, что:
Для каждого положительного размера шага
d
, если вы возьмете каждыйd
десятый член (начиная сd
четвертого), текущая сумма полученной последовательности останется между -2 и 2 включительно.
Если вы думаете, что каждый из них +
означает шаг вправо и -
шаг влево, это означает, что обход каждой d
й инструкции никогда не проходит более 2 шагов от начальной позиции.
Например, для d=3
, взяв каждый 3-й член, вы получите последовательность +-++--+--+-...
, чьи промежуточные суммы [1,0,1,2,1,0,1,0,-1,0,1,...]
никогда не достигают -3 или 3.
-++-+--++-++-+--+--++-+--+--++-+--+...
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
+ - + + - - + - - + -
1 0 1 2 1 0 1 0 -1 0 -1 ...
Эта последовательность была найдена в 2014 году с помощью компьютерного поиска. См. Этот документ , где последовательность воспроизведена в Приложении B. Поиск доказывает, что 1160 - это максимальная длина последовательности с расхождением-2, хотя существует более одной последовательности этой длины. Проблема расхождения Эрда, доказанная в 2015 году , говорит, что любая такая последовательность должна иметь конечную длину для любого максимального расхождения c
вместо 2.
Время требования
Ваш код должен завершиться в течение 5 секунд . Это для ограничения грубой силы.
Выходной формат
Вы можете использовать любые два фиксированные отдельные символы или значения +
и -
в любом список, как и нитевидный формате. Формат должен быть таким, чтобы 1160 битовых значений можно было непосредственно считывать, например, не кодируя их как число через его двоичное представление или строку через символьные значения. Для вывода строки допускается завершающий перевод строки.
Leaderboard
Ответы:
Желе , 149 байт
Существует некоторый шаблон, например, присутствует только 81 из 256 двоичных строк длиной 256, если кто-то разбивает последовательность на восемь, но я (по крайней мере, пока) не заметил какого-либо способа использовать любой из них для уменьшения количества байтов от этой прямой базы Сжатие 250 преобразуется в двоичный список.
Попробуйте онлайн! (нижний колонтитул форматирует двоичный список в строку для более простого прямого сравнения).
источник
Python 2 ,
269259256247245243 байтаПопробуйте онлайн!
источник
JavaScript (ES6),
263253252 байтаЯ старался использовать как можно меньше полезных данных. К сожалению - но не удивительно - для этого требуется довольно много декомпрессионного кода.
Сломать:
163153152 байтаНиже приведена отформатированная версия без данных. Необработанный код находится в демонстрационном фрагменте.
Как?
Мы отслеживаем текущие суммы a [i] каждого i-го слагаемого. Каждый раз, когда одна из этих сумм достигает нижней границы -2 , мы знаем, что следующий член должен быть + . Та же логика применима к верхней границе. Это полезно до i = 264 и не сохраняет никаких дополнительных байтов.
Это оставляет нам 599 терминов, которые невозможно угадать. Мы храним их как ⌈599 / 8⌉ = 75 байт, закодированные в 100-символьную строку Base64.
демонстрация
Показать фрагмент кода
источник
Желе ,
110109107 байтНа TIO это занимает слишком много времени, но на моем настольном компьютере это занимает менее 3 секунд.
Попробуйте онлайн!
источник
Желе ,
135133130129105104 байтаОсновываясь на предыдущих элементах последовательности, алгоритм делает обоснованное предположение, каким может быть следующий элемент. Это работает для всех элементов, кроме 99, индексы которых жестко закодированы, поэтому соответствующие элементы можно поменять местами.
Попробуйте онлайн!
источник
MATL , 224 байта
Выход имеет форму
1 0 0 1 0 ...
, где1
соответствует'-'
и0
соответствует'+'
.Попробуйте онлайн!
объяснение
Последовательность была закодирована по длине прогона. Все 720 трасс имеют длины 1, 2, 3 или 4, причем 3 или 4 менее распространены. Таким образом, каждая 3 была заменена на 2, 0, 1 (серия 2, затем серия 0 другого символа, затем серия 1 снова), и аналогично каждая 4 была заменена на 2, 0, 2. Это дает троичный массив длиной 862.
Этот массив преобразуется в кодировку base-94 и представляет собой длинную строку, показанную в коде (
'$Te...kG'
). В кодировке Base 94 используются все 95 печатаемых символов ASCII, за исключением одинарных кавычек (которые должны быть экранированы).Код преобразует эту строку из базы 94 в базу 3 и использует результат для декодирования символов по длине серии
[1 0 1 0 ... 0]
(массив длиной 862).источник
Желе , 95 байт
Средняя точка между моими двумя предыдущими подходами.
Код пытается угадать 842 элемента последовательности и жестко кодирует оставшиеся 318 элементов. 19 из догадок неверны и должны быть возвращены через список жестко закодированных индексов.
Попробуйте онлайн!
Как это устроено
©
B
Ḥ
C
⁽¡ɠ
Ḋ
источник
Древесный уголь , 150 байт
Попробуйте онлайн!
Использует встроенную компрессию струн Charcoal. Использует
.
для-
и!
для+
.источник
CJam, 153 байта
Использует
1
для-
и0
для+
.Содержит непечатные. Попробуйте онлайн!
Это довольно просто. Преобразует длинную последовательность из базы 256 в базу 2.
источник
Питон 3 ,
236232 байтаСпасибо Mego за сохранение 4 байта
Попробуйте онлайн!
Использует кодировку CP-437. Спасибо Деннису за указание на ошибку.
источник
437
это псевдоним дляcp437
, так что вы можете сбрить 4 байта, удаляяcp
биты оба раза, когда они происходят.Python 2 ,
364250 байтСпасибо Джонатану Аллану за сохранение 114 байтов.
Попробуйте онлайн!
источник
C # , 385 байт
Данные
String
Предполагаемый результат.Golfed
Ungolfed
Полный код
релизы
385 bytes
- Исходное решение.Примечания
источник
05AB1E , 149 байтов
Супер скучно Просто сжатый номер. Использует
1
для-
и0
для+
.Попробуйте онлайн!
источник
PHP, 276 байт
Попробуйте онлайн!
источник
Рубин , 245 байт
Выведите 0 для + и 1 для -.
Попробуйте онлайн!
источник
Perl, 164 байта
HexDump:
Очевидное, скучное решение: просто поместите все биты в двоичную строку, 8 бит на байт. Использует 0 для - и 1 для +. Я попробую сыграть в гольф еще.
источник
Сетчатка , 333 байта
Попробуйте онлайн!
источник