Вызов
Получив список целых чисел, верните список этих целых чисел после многократного удаления всех пар смежных равных элементов.
Обратите внимание, что если у вас есть пробег нечетной длины равных чисел, один из них останется, не будучи частью пары.
Пример:
[0, 0, 0, 1, 2, 4, 4, 2, 1, 1, 0]
Во- первых, вы должны удалить 0, 0
, 4, 4
и 1, 1
получить:
[0, 1, 2, 2, 0]
Теперь вы должны удалить 2, 2
:
[0, 1, 0]
И это конечный результат.
Тестовые случаи
[] -> [] [1] -> [1] [1, 1] -> [] [1, 2] -> [1, 2] [11, 11, 11] -> [11] [1, 22, 1] -> [1, 22, 1] [-31, 46, -31, 46] -> [-31, 46, -31, 46] [1, 0, 0, 1] -> [] [5, 3, 10, 10, 5] -> [5, 3, 5] [5, 3, 3, 3, 5] -> [5, 3, 5] [0, -2, 4, 4, -2, 0] -> [] [0, 2, -14, -14, 2, 0, -1] -> [-1] [0, 0, 0, 1, 2, 4, 4, 2, 1, 1, 0] -> [0, 1, 0] [3, 5, 4, 4, 8, 26, 26, 8, 5] -> [3] [-89, 89, -87, -8, 8, 88] -> [-89, 89, -87, -8, 8, 88]
счет
Это код-гольф , поэтому выигрывает самый короткий ответ на каждом языке!
code-golf
array-manipulation
musicman523
источник
источник
[14, 14, 14]
рушится на[14]
1,2
,11,12
и т.д.)-89,89,-87,-8,-88
? И мое (неопубликованное) решение Japt и решение Retry Фрая терпят неудачу там, выводя--87,8
.Ответы:
Желе , 10 байт
Попробуйте онлайн!
Как это работает
источник
Ẏ
вместоF
заставит вас поддерживать списки в вашем списке тоже.œ^
используется продвижение от целого к массиву. Поскольку 1D-массивы не переводятся в 2D-массивы, он не будет работать ни для чего, кроме массива чисел.ŒgWẎ$œ^/$€ẎµÐL
... о, подождите, это слишком наивно. : PСетчатка ,
1715 байтПопробуйте онлайн!
Сохранено 2 байта благодаря Нейлу и Мартину!
Заменяет каждую пару чисел ничем. Этот процесс повторяется до тех пор, пока не будут внесены изменения.
источник
-89 89 -87 -88 -88
, какие выходы--87
._
для обозначения негативов, как это принято в некоторых языках._89 89 _87 _8 _88
сработает, выводя_89 89 _87 8
. Извините: \m
для превращения\b
s в^
и$
.Mathematica 29 байтов
Это многократно удаляет пары равных соседних элементов,
a_,a_
пока не останется ни одного.источник
Python 2 , 57 байт
Попробуйте онлайн!
Итеративно создает список вывода, добавляя следующий элемент, а затем обрезая конец, если добавляемый элемент равен предыдущему. Проверка второго по последнему элементу
r[-2:-1]!=[x]
оказывается неудобной, поскольку возможно, что список имеет длину только 1.источник
Желе , 15 байт
Попробуйте онлайн!
объяснение
-1 байт благодаря милям и исправлено :)
источник
ValueError: not enough values to unpack (expected 2, got 0)
для тестового случая[1,2,2,1]
. Также обратите внимание, что пустой вывод отличается от[]
и2
отличается от[2]
.Œr;ṪḂ$$€ŒṙµÐL
. Чтобы избежать ошибки, заменитеŒṙ
на,x/€F
так как декодирование длины выполнения выдает ошибку, когда дан пустой список. Чтобы увидеть вывод в виде списка, галочкаŒṘ
покажет его.ÇŒṘ
в нижнем колонтитуле для вызова последней ссылки (Ç
) и печати представления Python (ŒṘ
) , Однако ошибка может быть неприемлемой.JavaScript (ES6),
5453 байтаСохранено 1 байт благодаря @ThePirateBay
Наивное рекурсивное решение, может быть ненадежным.
источник
i=0
наi=-2
иi-1
наi
который будет -1 байт.i+1
? (Я пробовал это раньше с перемещением,++
и не мог понять это, хотя у меня было только около минуты, чтобы сделать это)Python 2 , 73 байта
Поскольку у меня недостаточно репутации, чтобы комментировать: я просто изменил ответ @officialaimm, чтобы использовать r! = [] Вместо len (r) для сохранения байта. Очень умное решение для вас, @officialaimm!
Попробуйте онлайн!
Опять слишком поздно ... почему я еще не сплю?
источник
Python,
6058 байтПопробуйте онлайн!
источник
[a[0]]
этоa[:1]
MATL , 7 байт
Для некоторых тестовых случаев, когда результат пуст, программа завершается с ошибкой, но в любом случае выдает правильный (пустой) вывод.
Попробуйте онлайн! Или проверьте контрольные примеры с непустым выводом .
объяснение
Рассмотрим вход
Каждая итерация удаляет пары последовательных пар. Первая итерация уменьшает массив до
Два значения
2
, которые теперь являются смежными, не были смежными в исходном массиве. Вот почему необходима вторая итерация, которая дает:Дальнейшие итерации оставят это без изменений. Количество требуемых итераций ограничено сверху входным размером.
Пустой промежуточный результат приводит
Y"
к ошибке в функции декодирования длин серий ( ) в текущей версии языка; но выходной сигнал пустой по мере необходимости.источник
Машинный код x86 (32-битный защищенный режим), 36 байт
Вышеуказанные байты машинного кода определяют функцию, которая принимает массив в качестве входных данных, сворачивает соседние дубликаты на месте и возвращает вызывающей стороне, не возвращая результат. Из этого следует,
__fastcall
соглашение о вызовах , передавая два параметра вECX
иEDX
регистрах, соответственно.Первый параметр (
ECX
) - это указатель на первый элемент в массиве 32-разрядных целых чисел (если массив пуст, он может указывать в любом месте памяти). Второй параметр (EDX
) - это указатель на 32-разрядное целое число, которое содержит длину массива.Функция при необходимости изменяет элементы массива на месте, а также обновляет длину, чтобы указать новую длину свернутого массива. Это немного необычный метод для ввода и возврата вывода, но у вас действительно нет другого выбора в языке ассемблера. Как и в C, массивы фактически представлены в языке как указатель на первый элемент и длину . Единственное, что немного странно, это взять длину по ссылке , но если бы мы этого не сделали, урезать массив было бы невозможно. Код работал бы нормально, но вывод содержал бы мусор, потому что вызывающая сторона не знала бы, где остановить печать элементов из свернутого массива.
Неуправляемая сборка мнемоники:
Реализация была вдохновлена моим ответом на C ++ 11 , но тщательно переписана на ассемблере с оптимизацией по размеру. Сборка - намного лучший язык для игры в гольф. :-)
Примечание. Поскольку этот код использует строковые инструкции, он предполагает, что флаг направления сброшен (
DF
== 0). Это разумное допущение в большинстве операционных сред, поскольку ABI обычно требует, чтобы DF был четким. Если это не может быть гарантировано, тогда 1-байтоваяCLD
инструкция (0xFC
) должна быть вставлена вверху кода.Он также, как отмечалось, предполагает 32-битный защищенный режим, в частности, «плоскую» модель памяти, где дополнительный сегмент (
ES
) совпадает с сегментом данных (DS
).источник
Пакет, 133 байта
Я установил s,
.
потому что Пакет запутывается, если есть только дубликаты. Я также должен использовать,shift/1
чтобы я мог%0%s:~1%
установить список аргументов для нового массива и цикла.источник
Желе , 12 байт
Монадическая ссылка, берущая и возвращающая списки чисел.
Попробуйте онлайн! или посмотрите набор тестов
Как?
источник
ṁLḂ$$€
эквивалентно тому,ḣLḂ$$€
что эквивалентно тому,ṫḊ¿€3$
что вы можете заменитьṫḊ¿€3
здесь, чтобы сформировать пару диад / нилад.Ḋ
вернется в[]
то время как , если Len (х) == 0Ḋ
будет возвращать0
, причем оба falsy значения. Входные данные,Ḋ
конечно, являются текущим значением иṫ
будут иметь текущее значение в качестве левого аргумента и3
в качестве правого. Если len (x) == 4, то это будет то же самое, чтоṫ3ṫ3
и уṫ5
вас[]
.x
действительно ли в вашем описании есть текущее значение? Попробуйте это для размера.Japt , 34 байта
Рекурсивно удаляет пары равных чисел, пока их не существует.
Попробуйте онлайн! с
-Q
флагом для форматирования выходного массива.Запустите все тестовые случаи, используя мой WIP CodePen.
источник
05AB1E , 15 байтов
Попробуйте онлайн!
объяснение
источник
05AB1E , 13 байтов
Попробуйте онлайн!
Объяснение:
источник
Haskell , 33 байта
Попробуйте онлайн!
источник
Python 2 ,
74 7066 байтr
вместо этогоlen(r)
достаточно проверить пустоту списка / стека.[i]==r[-1:]
Python 2 , 66 байт
Попробуйте онлайн!
источник
len(r)
состоит только в том, чтобы проверить, пуст ли список или нет, вы должны заменить его простоr
, я думаю?Clojure, 100 байт
Не уверен, что это максимально короткий вариант.
источник
Баш, 82 байта
Вероятно, есть выход из всего этого
cat
, но я этого не знаю.источник
Шелуха , 10 байт
Попробуйте онлайн!
объяснение
источник
PHP, 81 байт
функция, позвоните по ссылке или попробуйте онлайн .
сбой для пустого ввода; вставить
$i&&
или$a&&
прежде чем--$i
исправить.источник
V , 10 байт
Попробуйте онлайн!
Сжатый Regex:
:%s/\(.\+\)\n\1\n*
. Необязательный символ новой строки таков, что он работает и в конце файла. Если я предполагаю, что после конца строки есть новая строка, то это будет 8 байт ... но это кажется натяжкойисточник
постоянный ток ,
8478 байтПопробуйте онлайн!
Немного распаковал его, вышел из строя в какой-то попытке разобраться:
[0syzdsz1<Olydsx0<Alx1+lz>M]dsMxf
Основной макросM
сбрасывает счетчикy
на 0, извлекает количество элементов в стеке, сохраняет его в регистреz
, затем запускает макрос,O
если в стеке есть хотя бы два элемента. ПослеO
завершения он загружает счетчикy
и копирует его в регистрx
перед проверкой, чтобы убедиться, что он неy
равен нулю (то есть в стеке.
есть данные). Если это так, запускается макросA
. Наконец, он проверяет, больше ли исходный размер стека, чем текущий размер стека, и перезапускает себя, если это так. Как только это закончено, это печатает стек сf
.[dStrdStr!=Pz1<O]sO
МакросO
временно сохраняет два верхних элемента в стекеt
. Затем он сравнивает два верхних элемента и запускает макрос,P
если они не равны. Наконец, он проверяет, есть ли в стеке хотя бы два элемента, и запускается сам, если так.[LtLtS.ly1+sy]sP
МакросP
берет два элемента из стекаt
, помещает верхний элемент обратно в основной стек и помещает следующий элемент в стек.
. Затем он увеличивает счетчикy
.[L.ly1-dsy0<A]sA
МакросA
берет стек.
и превращает его обратно в основной стек. Он делает это, уменьшая счетчикy
до тех пор, пока больше нечего нажимать.Отредактированный для объяснения, и для гольфа от 6 байтов, поскольку я без необходимости сохранял размер стека.
источник
C ++ 11, 161 байт
Приведенный выше код определяет функцию,
f
которая принимаетstd::vector<int>
ссылку, модифицирует ее для свертывания смежных дубликатов в соответствии со спецификацией, а затем возвращает.Попробуйте онлайн!
До того, как я проверил количество байтов, я подумал, что это довольно красивый код. Более 150 байтов, однако, не так хорошо! Либо я не очень хорош в гольфе, либо C ++ не очень хороший язык для игры в гольф ...
Ungolfed:
источник
std::adjacent_find
! Интересно , если вы реализуете эту функцию самостоятельно , если она будет короче, так как вы можете удалить ,#include <algorithm>
а такжеstd::unique
чтобы делать то, что мне было нужно. Но для выполнения всей логики требуется много кода, и когда я столкнулся сstd::adjacent_find
этим, было совершенно очевидно, что это был победитель с точки зрения размера кода.PHP, 74 байта
Функция c вызывается по ссылке, чтобы уменьшить массив. Попробуйте онлайн .
Интересно, что это работает в Php5.6, но не 7.
источник
R ,
5754 байтаПопробуйте онлайн!
использует кодирование длин серий для удаления пар.
источник
J , 38 байт
Попробуйте онлайн!
источник
GNU sed , 19 + 1 = 20 байт
+1 байт за
-r
флаг.Попробуйте онлайн!
источник
Pyth, 10 байт
Немного опоздал на вечеринку.
Тестирование.
источник