Мы все знаем, что многие упражнения затрагивают только половину вашего тела, поэтому вам нужно выполнять их дважды, по одному для каждой стороны. Такие упражнения имеют два аналога, один для левой стороны и один для правой. Однако нет необходимости выполнять два экземпляра последовательно, если упражнения для обеих сторон находятся в одном и том же порядке. Вы можете также переключаться между сторонами в своей программе упражнений, но не имеет смысла начинать некоторые упражнения с одной стороны, а некоторые с другой.
Вызов
Упражнение часть представляет собой список ненулевых целых чисел, где его вторая половина состоит из чисел первой половины отрицается и в том же порядке, и знаки чисел на каждой половине равны. Признак первой половины части упражнения - ее ведущая сторона. .
Набор упражнений равен нулю или больше упражнений частей с одной и той же ведущей стороне объединяются вместе.
Учитывая список ненулевых целых чисел в качестве входных данных, определите, является ли это набор упражнений. Целые числа не обязательно уникальны. Длина списка не обязательно четная.
Ваше решение не может использовать какие-либо стандартные лазейки . Вы можете использовать любые два различных последовательных значения для вывода. Это код-гольф , поэтому выигрывает самое короткое решение.
Примеры
[-5, -1, -7, -6, -5, 5, 1, 7, 6, 5]
пример части упражнения. Первая половина есть [-5, -1, -7, -6, -5]
, а последняя половина [5, 1, 7, 6, 5]
- каждое целое число в первой половине отрицается. Кроме того, целые числа первой половины имеют одинаковый знак. Ведущая сторона этой части упражнения-1
.
[3, 6, 5, -3, -6, -5, 1, 6, 4, 3, -1, -6, -4, -3]
пример набора упражнений Его отдельные части упражнения [3, 6, 5, -3, -6, -5]
и [1, 6, 4, 3, -1, -6, -4, -3]
, и они оба имеют ведущую сторону1
.
[4, -4, -5, 5]
Несмотря на то, что он состоит только из допустимых частей упражнения, он не является набором упражнений, поскольку первая часть [4, -4]
имеет ведущую сторону 1
, а вторая часть [-5, 5]
имеет ведущую сторону -1
.
Контрольные примеры
Допустимые тестовые случаи:
[]
[1, -1]
[1, -1, 1, -1]
[-6, 6, -5, -4, -3, 5, 4, 3]
[-1, -5, -8, 1, 5, 8, -7, -6, -5, -3, 7, 6, 5, 3]
[-1, -5, -8, 1, 5, 8, -1, 1]
Неверные тестовые случаи:
[1]
[1, -2]
[1, 2, -3, -1, -2, 3]
[1, 2, 3, -3, -1, -2]
[-1, -5, -8, 1, 5, 8, 7, 6, 5, 3, -7, -6, -5, -3]
[1, 2, 3, 5, 1, 2, 3, 5]
[1, 2, -5, 4, -6, 5, 5, -6]
[1, 2, -1, 3, -2, -3]
[1, -2, 1]
[-1, -1, 1]
[1, -1, 1]
источник
Ответы:
Python 2 ,
6967 байтПопробуйте онлайн!
источник
Желе , 10 байт
Попробуйте онлайн!
источник
Ява 8,
186183185 байт+2 байта из-за исправления ошибки для тестовых случаев размера 3 (почти все перестановки
1
и-1
в конце моей TIO-ссылки).Определенно можно сыграть в гольф ... Задача выглядит точно, но ее довольно сложно реализовать. Особенно контрольный пример
[4,-4,-5,5]
надоедало исправлять .. Но теперь это работает. Будет ли это в гольф отсюда.Попробуйте онлайн.
Объяснение:
источник
р , 91 байт
Вводит разделенный пробелами вектор чисел. Выходы
FALSE
для действительных иTRUE
для недействительных.rle
дает кодирование длины серии, в данном случае последовательности положительных и отрицательных значений.Полностью и совершенно несправедливо пустой крайний случай;) добавляет колоссальные 15 байт.
@Giuseppe сбрасывает много байтов.
Вот 92-байтовая версия, выраженная как функция, которая лучше подходит для тестирования:
Попробуйте онлайн!
источник
JavaScript (ES6), 54 байта
Оптимизированная версия, вдохновленная ответом Денниса на Python .
Возвращает 0 или 1 .
Попробуйте онлайн!
Оригинальная версия, 74 байта
Попробуйте онлайн!
Как?
Мы сохраняем первые половины всех частей упражнения в b [0], а вторые половины в b [1] , переключаясь между b [0] и b [1] каждый раз, когда меняется знак. Записи возводятся в квадрат, чтобы избавиться от знака. Мы ставим каждую запись перед запятой и суффикс каждой части 0 .
Есть некоторая дополнительная логика для обработки крайнего случая «пустой ввод» практически без затрат (см. Комментарий в конце исходного кода).
источник
Python 2 ,
147130113112106 байтПопробуйте онлайн!
Добавлено:
источник
lambda n:cmp(n,0)
может стать0 .__cmp__
.all(a==b for a,b in zip(l[::2],l[1::2]))
может статьl[:-1:2]==l[1::2]
.Сетчатка 0.8.2 , 57 байт
Попробуйте онлайн! Принимает ввод через запятую, но ссылка содержит заголовок, который обрабатывает контрольные примеры. Объяснение:
Вставьте маркер перед каждым положительным целым числом.
Замените запятые между целыми числами одного знака на подчеркивание.
Удалить оставшиеся знаки.
Добавьте запятую, если ввод не пустой.
Убедитесь, что строка состоит из пар серий одинаковых целых чисел.
источник
Python 2 , 111 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) , 155 байт
Попробуйте онлайн!
Вдохновение было ответом @ KevinCruijssen
Также спасибо ему за исправление 2 моих тестовых случаев
источник
r=0<i
чтобыr=i%2
, так как тестовых случаев[1,-1,1]
и[-1,1,-1]
не удается в данный момент. Число байтов остается тем же для JS, хотя.Stax , 13 байт
Запустите и отладьте его
источник
Брахилог ,
1814 байтПопробуйте онлайн!
Сохранено 4 байта благодаря @ErikTheOutgolfer.
объяснение
источник
APL (Dyalog Classic) , 48 байтов
Попробуйте онлайн!
источник