Чередующиеся массивы
Переменный массив представляет собой список любой длины , в которых два (не обязательно различные) значения переменные. То есть все элементы с четным индексом равны, а все элементы с нечетным индексом равны.
Ваша задача - написать программу или функцию, которая при наличии списка натуральных чисел выводит / возвращает, truthy
если он чередуется, и falsy
наоборот.
Это код-гольф , поэтому выигрывает самый короткий код (в байтах)!
Краевые случаи:
[] -> True
[1] -> True
[1,1] -> True
[1,2,1] -> True
Другие тестовые случаи:
[1,2,1,2] -> True
[3,4,3] -> True
[10,5,10,5,10] -> True
[10,11] -> True
[9,9,9,9,9] -> True
[5,4,3,5,4,3] -> False
[3,2,1,2,1,2] -> False
[1,2,1,2,1,1,2] -> False
[2,2,3,3] -> False
[2,3,3,2] -> False
пример
Вот пример, на котором вы можете протестировать свое решение, написанное на Python 3 (не игра в гольф):
def is_alternating(array):
for i in range(len(array)):
if array[i] != array[i%2]:
return False
return True
Ответы:
Желе , 4 байта
Попробуйте онлайн!
Как это работает
источник
2
другие номера сразу обобщает вызов!Ɲ
не было на момент публикации запроса.мозговой трах, 34 байта
Принимает массив как байтовые значения в строке и выводит значения
\x00
false и\x01
true.Попробуйте онлайн.
Это поддерживает структуру
a b 1 c
на ленте, где
c
текущий символ,b
предыдущий символ иa
предыдущий предыдущий символ, пока массив чередуется. Если обнаружено несоответствие, указатель перемещается влево так, чтоa
,b
и1
флаг становятся равными нулю, и эта ситуация будет продолжаться до тех пор, пока не будут использованы все входные данные.источник
R,
2423 байтаСчитывает вектор в STDIN, берет первые два элемента этого вектора и проверяет равенство. Если длины
a[1:2]
и a не совпадают, R будет проходить циклически,a[1:2]
чтобы соответствовать длине a. Это даст предупреждение об этом, но это будет работать.Удивительно, но это работает даже при пустом вводе, не знаю почему, но я с этим справлюсь.
Сохранено 1 байт благодаря @MickyT
источник
all((a=scan())==a[1:2])
MATL ,
76 байтДля чередующихся массивов это выводит непустую матрицу единиц, которая является правдой. Для не чередующихся массивов матрица содержит по крайней мере один ноль и, таким образом, является ложной (см. Здесь ).
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Давайте возьмем в
[1 2 1 2]
качестве примера ввод.источник
JavaScript (ES6), 27 байт
Контрольные примеры
Показать фрагмент кода
источник
Сетчатка , 25 байт
Попробуйте онлайн!
Вместо того, чтобы сопоставлять входные данные с чередующимися значениями (что приводит к некоторым раздражающим краевым эффектам в регулярном выражении), я сопоставляю входные данные, которые не являются допустимыми, и затем аннулирую результат впоследствии.
Преимущество сопоставления неверного ввода состоит в том, что это свойство может быть проверено локально, и ему не нужно специально обрабатывать пустой или короткий ввод: любой ввод недопустим, если он содержит два различных значения, которые находятся на расстоянии друг от друга.
Таким образом, первая ступень подсчитывает количество совпадений, из
\b(\d+),\d+,(?!\1\b)
которых совпадает и захватывает одно значение, затем сопоставляет следующее значение, а затем утверждает, что третье значение в последовательности отличается. Это дает ноль для правильных входных данных и что-то положительное для недопустимых значений.Второй этап просто подсчитывает количество совпадений
^0
,1
если первый этап возвращен,0
и в1
противном случае.источник
Mathematica, 29 байт
Порт алгоритма MATL Луиса Мендо. Безымянная функция, принимающая список чисел (или даже более общие объекты) и возвращающая
True
илиFalse
. Проверяет, равны ли суммы последовательных элементов. К сожалениюMost
иRest
задохнуться в пустом списке, так что это должно быть проверено отдельно.Mathematica, 33 байта
Безымянная функция, принимающая список чисел (или даже более общие объекты) и возвращающая
True
илиFalse
. ФункцияDifferences[#,1,2]
принимает различия не последовательных пар целых чисел, а пар целых чисел на расстоянии два друг от друга. Затем мы просто проверяем, есть ли в результирующем списке ничего кроме нулей.В качестве бонуса, в течение еще одного байта (изменить
2
к#2
), мы получаем функцию , которая вводит список целых чисел и другое положительного целое число#2
, и проверяет , является ли список ввода является результатом перемежения#2
последовательностей константных периодически друг с другом. Например,оценивает до
True
.источник
Haskell,
2726 байтовЭто оценивает анонимную функцию, которая решает проблему. Идея состоит в том, чтобы убрать первые два числа из списка, заархивировать исходный список, используя равенство, и проверить, что результат содержит только
True
s. Попробуйте онлайн!Спасибо Ними за 1 байт!
источник
and.(zipWith(==)=<<drop 2)
сохраняет байт.Сетчатка ,
393228 байтПопробуйте онлайн!
Сэкономили 7 байтов благодаря Мартину ! Сохранено еще 3 благодаря Коби ! И Критикси за идею для другого 1.
При желании мы можем сопоставить число, которое занимает весь ввод, любую пару чисел или любую пару чисел, за которыми следует одна и та же пара любое количество раз и, необязательно, не включая второе число в самом конце. Может сохранить 2 байта, если вход был в унарном.
источник
^(\d+)?(.\d+)?(.\1\2)*(.\1)?$
29-байтовая альтернатива. Это не соответствует,1,,1
.Pyth, 9 байт
объяснение
источник
Q
s в код. Я добавил их в объяснение, чтобы было яснее, что происходит, но на самом деле их нет в коде.Брахилог , 15 байт
Попробуйте онлайн!
объяснение
источник
APL, 7 байт
Объяснение:
2⍴⊢
: изменить массив ввода на 2⍴⍴
: изменить результат в соответствии с исходным размером ввода, повторяя элементы⊢≡
: посмотреть, если результат этого равен исходному вводуТестовые случаи:
источник
Java 8, 63 байта
Это лямбда-выражение для
Predicate< int[ ] >
Объяснение: инициализировать результат равным 0. Для каждого элемента Biteise ИЛИ результат с разницей между текущим элементом и элементом 2 указывает раньше. вернуть,
true
если результат равен 0. В противном случае вернутьfalse
источник
Perl 6 ,
49 4342 байтаПопытайся
Попытайся
Попытайся
Expanded:
источник
$_[1]
может быть на один байт короче.[1]
. Тело внутренней лямбды может быть на один байт короче{.[0]!=a||.[1]!=b}
..[1]
. Кроме того,!=
кажется, не работать , если она не сопровождается пробелом. Я думаю, что-то вроде$_!=3
разбирается, как если бы это было написано как!( $_ = 3 )
Python 2 , 35 байт
Попробуйте онлайн!
источник
J, 8 байт
объяснение
Контрольные примеры
источник
{.
Take с$
Shape.Haskell ,
3332 байтаПопробуйте онлайн! или Проверьте тестовые случаи. -1 байт благодаря Згарбу.
источник
[]
, но по какой-то причине ghc не может определить правильный тип для[]
. Он работает, если тестируется вместе с другим тестовым примером, см. Проверкаf(a:x@(_:b:_))=a==b&&f x
bash,
565438 байтСохраните это как скрипт и передайте список чисел в качестве аргументов (для списка из n элементов вы передадите n аргументов). Вывод является кодом выхода: 0 (для истины), если список чередуется, и 1 (для ложи) в противном случае.
(Возвращение вывода в коде выхода разрешено в стандартных методах ввода / вывода PPCG.)
Это работает рекурсивно:
источник
Python 2.7, 38 байт
Тестовые случаи:
источник
Пайк, 6 байт, неконкурентный
Попробуй это здесь!
Разрешить узлу изменения формы принимать список, а также строку
источник
Шензен И.О. (Ассемблер),
8376 байт, неконкурентоспособенShenzen io - игра-головоломка, в которой вы можете кодировать свой код на специальном языке ассемблера.
К сожалению, вы можете использовать только целые числа от -999 до 999 в качестве входов или выходов, и нет никакого способа узнать, закончился ли массив. Поэтому я предположил, что массив был написан на ПЗУ, которое оборачивается после чтения последней ячейки. Это означает, что могут использоваться только четные массивы, что является причиной его неконкурентоспособности.
Код:
Объяснение:
Извините, если что-то из этого сбивает с толку, это мой первый код-гольф-ответ.
РЕДАКТИРОВАТЬ: удалил 7 байтов, заменив циклы на один раз выполнения кода
источник
Рубин, 23 байта
источник
Рубин,
131119 байтЛямбда
a
ожидает массивx
и возвращает истину, если для нечетных индексированных элементов есть 0 или 1 уникальных значений и для четных индексированных элементов в массиве 0 или 1.Известные байты
def
!arr[1]
противarr.length < 2
&
против&&
Контрольные примеры
источник
Дротик, 46 байт
Бежать с:
источник
C #, 54 байта
Фильтруйте массив, чтобы показать значения, которые не соответствуют первому значению для четных значений и 2-му значению для вероятностей. Если результатов нет, верните true.
источник
Japt,
76 байтПопробуйте или запустите все тесты
источник
C #, 66 байт
Анонимная функция, которая получает массив целых чисел и возвращает 1, если массив чередуется, и 0 в противном случае.
Полная программа с функцией ungolfed и контрольными примерами:
источник
Октава, 51 байт
Входные данные - это массив ячеек положительных чисел.
Попробуйте онлайн!
источник
Clojure, 70 байт
Проверяет, что счетчик каждого второго элемента равен 1, и обрабатывает пустые коллекции как особый случай. Также перепробовал много подходов, основанных
reduce
и,group-by
но не очень, удачи там.источник
Другой вариант с R: 36 байтов.
И я думаю, что я нашел гораздо более короткую версию: 15 байтов
источник