Удалить каждый N-й N


41

Задание

В этом задании ваш ввод представляет собой непустой список натуральных чисел, приведенный в родном формате вашего языка. Ваш вывод - тот же список, в том же формате, с некоторыми удаленными элементами. Вы должны удалить каждое вхождение 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

Ответы:


15

Желе , 10 8 байт

=;\S€%af

Спасибо @ Sp3000 за 2 байта в гольфе!

Попробуйте онлайн!

Как это работает

=;\S€%af    Main link. Input: A (list)

 ;\         Compute the cumulative concatenations of the elements of A, i.e., the
            list of A's prefixes.
=           Compare the elements of the nth prefix with the nth element of A.
   S€       Compute the sum of the resulting arrays.
     %      Take the nth sum modulo the nth element of A.
      a     Logical AND; replace the nth remainder with the nth element of A
            if the remainder is non-zero.
        f   Filter; remove the zeroes (which do not occur in A) from the result.

как работает этот шаг сравнения? и являются префиксами [5,4,3,2,1] [[5], [5,4], [5,4,3], [5,4,3,2], [5,4, 3,2,1]] или [[1], [2,1], [3,2,1], [4,3,2,1], [5,4,3,2,1]]?
Quintopia

@quintopia Желе слева направо, так что он первый. =сравнивает целые числа Например, [3,2,1]=;\сравнивается 3с элементом [3], 2с элементами [3, 2]и 1с элементами [3, 2, 1], дающими [1, [0, 1], [0, 0, 1]].
Деннис

Ах, мне не хватало того, что он сравнивал список со списком элемент за списком.
Quintopia

34

awk, 10 байт

Ввод ожидается на STDIN, по одному номеру в строке.

++a[$1]%$1

объяснение

Сохраняет счетчик для каждого числа в ассоциативном массиве, печатает, только если значение счетчика по модулю nне равно нулю. Печать неявная. Длинная версия:

++a[$1]%$1{print $0}

19

Pyth, 18 15 14 10 9 байт

f%/aYTTTQ

Я думаю, что это первый код, который я написал, который имеет пять последовательных ссылок на переменные в девяти байтах.

Я хотел бы, чтобы решение для манипулирования массивом ( u.DG%HgxHGH{QQ14 байт) не было таким длинным

f%/aYTTTQ       Implicit: Q=input
                 lambda T:
    Y              Variable: starts as empty list.
   a T             Append T to Y. Mutates Y.
  /   T           Number of elts of Y that equal T.
 %     T         Modulo by T
f       Q       Filter that lambda over Q.

Попробуй это здесь .



8

Perl 6 , 28 байт

{$_=$;grep {++.{$^n}%$n},@_} # 28 bytes
{
  $_=$;        # put $_ in a clean state
  grep {
    ++.{$^n}   # increment $_{ $n } and declare $n as an argument
    % $n       # check if the count is not divisible by $n
  }, @_        # the input
}

Использование:

# give it a lexical name for ease of use
my &code = {...}

sub check ( @a, @b ){
  say try { so all code(@a) »==« @b } // False
}

check [1], []; # True
check [2], [2]; # True
check [1,1,1], []; # True
check [2,2,2], [2,2]; # True
check [1,1,2,2,2,3,3,3,3], [2,2,3,3,3]; # True
check [1,2,3,1,2,3,1,2,3,1,2,3], [2,3,3,2,3]; # True
check [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]; # True

Дважды проверьте, что правильные элементы выбрасываются

# have to change it to a pure number
# when checking $_         V
my &code = {$_=$;grep {++.{+$^n}%$n},@_}
# only matters here because we are using
# a subclass of Int but want it to use
# the same key as a normal Int

sub F ( Int $v ) { IntStr.new: $v, "Fail($v)" }
# prove that it passes through unchanged
say [F(2)];
# (Fail(2))

say code [3,2,6,F(1),F(1),6,F(2),3,2,6,6,6,F(6),F(1),6,6,F(3),3,7,F(2)];
# (3 2 6 6 3 2 6 6 6 6 6 3 7)

7

Серьезно, 22 17 байт

k╗,;`;;╜o;╗c%`M@░

Шестнадцатеричный дамп:

6bbb2c3b603b3bbd6f3bbb6325604d40b0

Попробуйте онлайн

Объяснение:

k╗                                Put empty list in reg0
  ,;                              Two copies of input
    `        `M                   Map over the list
     ;;                           Make 2 extra copies of n
       ╜o                         Load reg0 and push the n onto it
         ;╗                       Put a copy back in reg0
           c                      Count the number of copies of n in the list
            %                     Take the result modulo n
               @░                 Filter the original list with the resulting list

10
Этот язык ...
Нико

6

JavaScript ES6, 34 байта

a=>a.filter(v=>f[v]=-~f[v]%v,f=[])

Оказалось, что это тот же алгоритм Perl Брэда.

Редактировать: Сохранено 2 байта благодаря @ edc65.


Хорошо! сохраните 2 байта, удалив внутренние скобкиa=>a.filter(v=>f[v]=-~f[v]%v,f=[])
edc65

5

Mathematica, 40 38 36 байт

Select[(f@#=#)&/@#,++f[#]~Mod~#>0&]&

Это безымянная функция, принимающая и возвращающая List. Он определяет именованную функцию fпри выполнении (для отслеживания чисел), но заботится о сбросе соответствующих определений fзаранее.

объяснение

То, как функции (или определения функций) работают в Mathematica, действительно мощно. Как и в Haskell (например), функции могут быть перегружены и определены не только для определенных типов, но и для отдельных значений (или фактически произвольных шаблонов аргументов). Но он даже более мощный, чем Haskell в том, что а) эти значения могут быть определены как побочные эффекты во время потока управления и б) значения также могут быть переопределены в любое время. Это означает, что функции на самом деле являются довольно мощными поисковыми таблицами (которые могут опционально вычислять искомое значение, а не просто сохранять его).

Если мы удалим Golfitude из кода, это будет выглядеть примерно так:

g[list_] := (
  Map[
    (f[#] = #) &,
    list
  ];
  Select[
    list,
    Mod[++f[#], #] > 0 &
  ]
)

Итак, сначала мы перебираем ввод и определяем 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.


5

CJam, 17 байт

Lq~{:X+_Xe=X%},p;

Просто бить ... J? Не уверен, что мои ожидания от этого вызова, на самом деле. Обратите внимание, что ""CJam представляет пустой массив.

Попробуй это онлайн | Набор тестов (последний случай слишком длинный для постоянной ссылки)

объяснение

L                     Push empty array (let's call it L)
 q~                   Push input and evaluate

   {         },       Filter the array elements by...
    :X                   Save number to variable X
      +                  Append to L

       _                 Duplicate
        Xe=              Count occurences of X
           X%            Take modulo X

                      The top element is popped to determine whether or not to keep that
                      element, with the updated L kept on the stack for the next iteration

               p      Print the resulting filtered array
                ;     Pop L, which is now equal to the input array

4

JavaScript ES6, 55 байт

a=>a.filter((v,i)=>a.filter((w,j)=>j<=i&v==w).length%v)

объяснение

a=>                            //a -> input array
 a.filter(                     //filter array. only keep elements if inside function returns truthy
      (v,i)=>                  //inside function to decide whether to keep items. v -> item; i -> index
           a.filter((w,j)=>    //get all ocurrences of v that occur before index i
                j<=i&v==w      //(this is done by keeping all items w at index j, if j <= i and v == w
           ).length%v          //get length (count ocurrences), and mod v.
                               //this will only be falsy if the number of ocurrences of v up to this index is divisible by v. (0 -> falsy, positive -> truthy) 
 )                             //so, we don't keep every second 2, every third 3, etc.

3

J, 18 байт

#~((0<]|+/@:=){:)\

Использование:

   (#~((0<]|+/@:=){:)\) 1 2 3 1 2 3 1 2 3 1 2 3
2 3 3 2 3

Довольно простой метод. Мы подсчитываем вхождения числа до него и выбираем число, только если число делит счет.

Более подробное объяснение приходит позже.

Попробуйте это онлайн здесь.


2

PowerShell, 56 байт

param($a)$b=,0*($a|sort)[-1];$a|%{if(++$b[$_-1]%$_){$_}}

Использует тот же трюк вспомогательного массива, что и ответ Райнера Р , который я разработал самостоятельно, но, очевидно, получил FGITW.

Принимает ввод как массив с param($a). Затем мы создаем наш вспомогательный массив $bкак массив с заполнением нулями, используя оператор запятой в сочетании с перегруженным оператором умножения. Это создает $bбыть равным @(0,0,0...0)с $b.lengthравным максимальному числу в $a.
(Быстрый плагин для моего ответа "Showcase your language", где я опишу это подробно)

Далее идет наш вывод. Мы зацикливаемся на каждом элементе нашего входного массива, $a|%{...}и каждый цикл проверяет ifоператор. Условное условие предварительно увеличивает значение в нашем вспомогательном массиве, которое соответствует текущему элементу, а затем проверяет, является ли оно кратным текущему элементу с помощью оператора по модулю. Если это кратно, то %будет равно 0фальси, поэтому ifне выполняется. В противном случае мы выводим текущий элемент.

Использует неявное приведение типов для экономии на выходном форматировании. Если функция или программа возвращает несколько элементов и результаты сохраняются в переменной, PowerShell динамически создает эту переменную в виде массива. Пример:

PS C:\Tools\Scripts\golfing> $testc = .\remove-every-nth-n.ps1 @(2,2,2)

PS C:\Tools\Scripts\golfing> $testc
2
2

PS C:\Tools\Scripts\golfing> $testc.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------             
True     True     Object[]                                 System.Array

1

R, 110 98 99 92 байта

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]}

Редактировать полную ошибку исправлений переписать с помощью контрольного примера 2/3 Редактировать 2 Сохранить 7 байтов благодаря @ Alex-A


1
92 байта: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]}
Алекс А.

1

MATL , 20 байтов

tu"t@=f@@h0h)0w(]tg)

Используется текущий выпуск (10.2.1) языка / компилятора.

Попробуйте онлайн!

объяснение

tu        % implicitly input array. Duplicate and get unique elements
"         % for each unique element, say "i"
  t       % duplicate
  @=f     % indices of occurrences of i
  @@h0h   % build index representing i-th occurrences (Matlab's i:i:end)
  )       % keep only indices of i-th occurrences
  0w(     % set those entries to 0
]         % end for loop
tg)       % keep nonzeros only. Implicit display


1

C #, 224 байта

List<int>R(List<int>l,int n=1){l=l.Where(w=>w!=0&&w!=1).ToList();for(int i=0,t=0;i<l.Count;i++){if(l[i]==n&&++t==n){l[i]=0;t=0;}}return !l.Any()||n>l.Max()?l:R(l,++n);}

Этот код использует рекурсию. С usingоператорами это 224 байта (160 для самого кода метода).

Попробуйте онлайн.

List <int> R(List <int> l, int n = 1)
{
    l = l.Where(w => w > 1).ToList();
    for (int i = 0, t = 0; i < l.Count; i++)
    {
        if (l[i] == n && ++t == n)
        {
            l[i] = 0;
            t = 0;
        }
    }
    return !l.Any() || n > l.Max() ? l : R(l, ++n);
}

Вы сможете сохранить несколько символов, удалив оператор continue. Нечто подобное (непроверенное)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.
Дмитрий Степанов

массивы тоже должны быть хорошими, и они будут немного короче int [] R (int [] l, int n = 1)
рэгги

0

C # - 177 байт

void r(List<int> i){for(int c=1,k=1,m=i.Max();k<=m;k++){var n=new List<int>();foreach(var o in i)if(o==k&&c++==k)c = 1;else n.Add(o);i=n;}Console.WriteLine(string.Join(" ",i));}

Ungolfed

void r(List<int> i)
{
    for (int c = 1, k = 1, m = i.Max(); k <= m; k++)
    {
        var n = new List<int>();
        foreach (var o in i)
            if (o == k && c++ == k)
                c = 1;
            else
                n.Add(o);
        i = n;
    }
    Console.WriteLine(string.Join(" ", i));
}

4
Я полагаю, что вы должны были бы посчитать операторы использования, и в этом случае это будет 241 байт.
LegionMammal978

0

Mathematica, 63 байта

Fold[Delete[#,Position[#,#2][[#2;;;;#2]]~Check~{}]&,#,Union@#]&

Довольно интересно для гольфа! Проигнорируйте случайное сообщение, которое всплывает.



0

TI-BASIC, 47 байтов

Input X
For(I,1,dim(∟X
∟X(I
If fPart(sum(∟X=Ans),1,I)/Ans
Ans→L₁(1+dim(L₁
End
L₁

При этом используется тот факт, что на новом калькуляторе L₁инициализируется и очищается. Обратите внимание, что попытка отобразить пустой список в TI-BASIC приводит к ошибке.


0

APL, 16 символов

{⍵/⍨×⍵|+/¨⍵=,\⍵}

По-английски:

  • ,\⍵: вектор префиксов вектора до n-го элемента аргумента
  • +/¨⍵=: для каждого префиксного вектора подсчитайте, сколько равно самому n-му элементу
  • ×⍵|: признаки мода (то есть: 0, если остаток от деления равен 0, 1 в противном случае)
  • ⍵/⍨: аргумента оставьте только элемент, где мод равен 0

0

Ракетка 179 байт

(λ(l)(define m(apply max l))(let g((n 1)(c 0))(set! l(for/list((i l))(if(= i n)(begin 
(set! c(+ 1 c))(if(= 0(modulo c n))0 i))i)))(if(< n m)(g(+ 1 n)0)(filter(λ(x)(> x 0))l))))

Ungolfed:

(define f
  (λ(l)
    (define m (apply max l))
    (let loop ((n 1) (c 0))
      (set! l (for/list ((i l))
                (if (= i n)
                    (begin
                      (set! c (+ 1 c))
                      (if (= 0 (modulo c n))
                          0 i ))                  ; replace by 0
                    i )))
      (if (< n m)
          (loop (+ 1 n) 0)
          (filter (λ(x)(> x 0)) l)                ; remove all 0s
          ))))

Тестирование:

(f '[1]) 
(f '[2]) 
(f '[1 1 1]) 
(f '[2 2 2]) 
(f '[1 1 2 2 2 3 3 3 3])
(f '[1 2 3 1 2 3 1 2 3 1 2 3]) 
(f '[3 2 6 1 1 6 2 3 2 6 6 6 6 1 6 6 3 3 7 2])

Выход:

'()
'(2)
'()
'(2 2)
'(2 2 3 3 3)
'(2 3 3 2 3)
'(3 2 6 6 3 2 6 6 6 6 6 3 7)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.