Задание
В этом задании ваш ввод представляет собой непустой список натуральных чисел, приведенный в родном формате вашего языка. Ваш вывод - тот же список, в том же формате, с некоторыми удаленными элементами. Вы должны удалить каждое вхождение 1
, каждое второе вхождение 2
, каждое третье вхождение 3
и так далее. Как правило, для каждого положительного целого числа N
вы должны удалять каждое N
вхождение N
из списка, начиная с этого N
вхождения.
пример
Рассмотрим список ввода
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2]
Сначала мы удаляем каждое вхождение 1
:
[3,2,6, 6,2,3,2,6,6,6,6, 6,6,3,3,7,2]
Тогда каждое второе появление 2
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6,3,3,7 ]
Тогда каждое третье появление 3
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6, 3,7 ]
Числа 4
и 5
не встречаются на входе, поэтому их можно пропустить. Далее мы удаляем каждое шестое вхождение 6
:
[3,2,6, 6, 3,2,6,6,6, 6,6, 3,7 ]
Есть только один случай 7
, так что это можно пропустить. Таким образом, правильный вывод
[3,2,6,6,3,2,6,6,6,6,6,3,7]
Правила и оценки
Вы можете написать либо полную программу, либо функцию. Побеждает меньшее количество байтов, и стандартные лазейки запрещены.
Контрольные примеры
[1] -> []
[2] -> [2]
[1,1,1] -> []
[2,2,2] -> [2,2]
[1,1,2,2,2,3,3,3,3] -> [2,2,3,3,3]
[1,2,3,1,2,3,1,2,3,1,2,3] -> [2,3,3,2,3]
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2] -> [3,2,6,6,3,2,6,6,6,6,6,3,7]
[5,4,5,4,3,5,4,5,4,5,4,3,5,4,5,3,3,3,4,5,4,5,4,5,4,3,3,3,5,4] -> [5,4,5,4,3,5,4,5,4,3,5,4,5,3,3,4,5,5,4,4,3,3,5,4]
[6,4,5,8,2,9,3,1,8,5,3,5,5,6,3,5,1,2,3,9,3,5,8,7,5,9,1,3,4,8,2,3,4,7,8,5,8,5,3,1] -> [6,4,5,8,2,9,3,8,5,3,5,5,6,3,9,3,5,8,7,5,9,4,8,2,3,4,7,8,5,8,5,3]
[4,4,9,12,9,4,4,4,12,9,12,9,12,4,12,4,4,9,4,9,12,4,12,4,4,12,4,4,9,12,9,12,9,4,9,12,4,9,12,9,12,9,4,9,12,12,4,4,12,4] -> [4,4,9,12,9,4,4,12,9,12,9,12,4,12,4,9,4,9,12,4,12,4,12,4,4,9,12,9,12,4,9,12,9,9,12,9,4,9,12,12,4,4,12]
[2,2,11,11,11,11,6,2,2,6,6,2,2,2,2,6,11,6,11,11,2,11,2,6,6,11,2,11,6,2,6,6,6,6,6,11,2,11,11,6,6,6,11,6,2,6,2,6,6,2,11,2,2,11,11,11,11,2,6,2] -> [2,11,11,11,11,6,2,6,6,2,2,6,11,6,11,11,2,11,6,11,2,11,6,6,6,6,6,2,11,11,6,6,6,11,6,2,6,6,11,2,11,11,11,11,2,6]
[20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102] -> [20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,101,102,20,21,22,100,102,20,21,22,100,101,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102]
Leaderboard
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам. Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить несколько цифр в заголовок, убедитесь, что фактическая оценка является последней цифрой в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте списка лидеров:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
=
сравнивает целые числа Например,[3,2,1]=;\
сравнивается3
с элементом[3]
,2
с элементами[3, 2]
и1
с элементами[3, 2, 1]
, дающими[1, [0, 1], [0, 0, 1]]
.awk, 10 байт
Ввод ожидается на STDIN, по одному номеру в строке.
объяснение
Сохраняет счетчик для каждого числа в ассоциативном массиве, печатает, только если значение счетчика по модулю
n
не равно нулю. Печать неявная. Длинная версия:источник
Pyth,
181514109 байтЯ думаю, что это первый код, который я написал, который имеет пять последовательных ссылок на переменные в девяти байтах.
Я хотел бы, чтобы решение для манипулирования массивом (
u.DG%HgxHGH{QQ
14 байт) не было таким длиннымПопробуй это здесь .
источник
Python, 57 байт
источник
Perl 6 , 28 байт
Использование:
Дважды проверьте, что правильные элементы выбрасываются
источник
Серьезно,
2217 байтШестнадцатеричный дамп:
Попробуйте онлайн
Объяснение:
источник
JavaScript ES6, 34 байта
Оказалось, что это тот же алгоритм Perl Брэда.
Редактировать: Сохранено 2 байта благодаря @ edc65.
источник
a=>a.filter(v=>f[v]=-~f[v]%v,f=[])
Mathematica,
403836 байтЭто безымянная функция, принимающая и возвращающая
List
. Он определяет именованную функциюf
при выполнении (для отслеживания чисел), но заботится о сбросе соответствующих определенийf
заранее.объяснение
То, как функции (или определения функций) работают в Mathematica, действительно мощно. Как и в Haskell (например), функции могут быть перегружены и определены не только для определенных типов, но и для отдельных значений (или фактически произвольных шаблонов аргументов). Но он даже более мощный, чем Haskell в том, что а) эти значения могут быть определены как побочные эффекты во время потока управления и б) значения также могут быть переопределены в любое время. Это означает, что функции на самом деле являются довольно мощными поисковыми таблицами (которые могут опционально вычислять искомое значение, а не просто сохранять его).
Если мы удалим Golfitude из кода, это будет выглядеть примерно так:
Итак, сначала мы перебираем ввод и определяем
f[x] = x
для всехx
в списке.f
в конечном итоге будет использоваться для отслеживания того, как часто каждое число уже появилось в списке. Почему мы не считаем0
? Цикл по списку являетсяMap
. Выражениеf[x] = y
возвращаетy
(в дополнение к сохранению определения функции). Таким образом, установивf[x]
вx
, карта будет оценивать сам список ввода. Это экономит два байта, потому что тогда нам не нужноlist
явно предоставлять сноваSelect
. Начиная с,x
а0
не влияет на вычисления вообще, поскольку мы только когда-либо заинтересованыMod[f[x], x]
.(Обычно мы могли бы просто использовать что-то вроде
f[_] = 0
запасного определения, чтобы избежатьMap
, но мы не знаем, использовалась ли наша функция раньше, что оставило бы некоторые предыдущие значения, которые могли бы помешать нашему подсчету.)Затем
Select
фильтрует список, сохраняя только те элементы, в которых безымянная функция передается в качестве второго аргументаTrue
. Эта функция сначала увеличивает значениеf[x]
(гдеx
находится текущий элемент списка), чтобы подсчитать вхождения, а затем получает полученный результат по модулюx
. Мы хотим отбросить все элементы, где это дает0
.источник
CJam, 17 байт
Просто бить ... J? Не уверен, что мои ожидания от этого вызова, на самом деле. Обратите внимание, что
""
CJam представляет пустой массив.Попробуй это онлайн | Набор тестов (последний случай слишком длинный для постоянной ссылки)
объяснение
источник
JavaScript ES6, 55 байт
объяснение
источник
J, 18 байт
Использование:
Довольно простой метод. Мы подсчитываем вхождения числа до него и выбираем число, только если число делит счет.
Более подробное объяснение приходит позже.
Попробуйте это онлайн здесь.
источник
PowerShell, 56 байт
Использует тот же трюк вспомогательного массива, что и ответ Райнера Р , который я разработал самостоятельно, но, очевидно, получил FGITW.
Принимает ввод как массив с
param($a)
. Затем мы создаем наш вспомогательный массив$b
как массив с заполнением нулями, используя оператор запятой в сочетании с перегруженным оператором умножения. Это создает$b
быть равным@(0,0,0...0)
с$b.length
равным максимальному числу в$a
.(Быстрый плагин для моего ответа "Showcase your language", где я опишу это подробно)
Далее идет наш вывод. Мы зацикливаемся на каждом элементе нашего входного массива,
$a|%{...}
и каждый цикл проверяетif
оператор. Условное условие предварительно увеличивает значение в нашем вспомогательном массиве, которое соответствует текущему элементу, а затем проверяет, является ли оно кратным текущему элементу с помощью оператора по модулю. Если это кратно, то%
будет равно0
фальси, поэтомуif
не выполняется. В противном случае мы выводим текущий элемент.Использует неявное приведение типов для экономии на выходном форматировании. Если функция или программа возвращает несколько элементов и результаты сохраняются в переменной, PowerShell динамически создает эту переменную в виде массива. Пример:
источник
R,
110989992 байтаРедактировать полную ошибку исправлений переписать с помощью контрольного примера 2/3 Редактировать 2 Сохранить 7 байтов благодаря @ Alex-A
источник
function(a){for(i in 1:max(a))for(j in seq_along(b<-which(a==i)))if(j%%i<1)a[b[j]]=0;a[a>0]}
MATL , 20 байтов
Используется текущий выпуск (10.2.1) языка / компилятора.
Попробуйте онлайн!
объяснение
источник
R, 63 байта
источник
C #, 224 байта
Этот код использует рекурсию. С
using
операторами это 224 байта (160 для самого кода метода).Попробуйте онлайн.
источник
for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
System.Linq
то!l.Any()
короче, чемl.Count<1
короче, чемl.Count==0
.w != 0 && w !=1
наw > 1
.C # - 177 байт
Ungolfed
источник
Mathematica, 63 байта
Довольно интересно для гольфа! Проигнорируйте случайное сообщение, которое всплывает.
источник
Рубин, 120 байт
источник
TI-BASIC, 47 байтов
При этом используется тот факт, что на новом калькуляторе
L₁
инициализируется и очищается. Обратите внимание, что попытка отобразить пустой список в TI-BASIC приводит к ошибке.источник
APL, 16 символов
По-английски:
,\⍵
: вектор префиксов вектора до n-го элемента аргумента+/¨⍵=
: для каждого префиксного вектора подсчитайте, сколько равно самому n-му элементу×⍵|
: признаки мода (то есть: 0, если остаток от деления равен 0, 1 в противном случае)⍵/⍨
: аргумента оставьте только элемент, где мод равен 0источник
Ракетка 179 байт
Ungolfed:
Тестирование:
Выход:
источник