Видаліть кожен 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]

Таблиця лідерів

Ось фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою. Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

## 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 Jelly - зліва направо, тож вона перша. =порівнює цілі числа. Наприклад, [3,2,1]=;\порівнюється 3з елементом [3], 2з тими [3, 2]і 1з тими [3, 2, 1], що дають [1, [0, 1], [0, 0, 1]].
Денніс

Ах, мені не вистачало, щоб він порівнював список зі списком по списку.
Кінтопія

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.

Спробуйте тут .


9

Пітон, 57 байт

lambda l:[n for i,n in enumerate(l)if l[:i+1].count(n)%n]

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

Математика, 40 38 36 байт

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

Це неназвана функція приймання та повернення a List. Він визначає названу функцію fпри виконанні (для відстеження чисел), але попередньо скидає відповідні визначення fзаздалегідь.

Пояснення

Те, як функції (або визначення функцій) працюють у Mathematica, справді потужне. Як і в Haskell (наприклад), функції не можуть бути перевантажені та визначені лише для певних типів, але й для окремих значень (або фактично довільних зразків аргументів). Але він навіть більш потужний, ніж Haskell в тому, що: a) ці значення можна визначити як побічні ефекти під час контрольного потоку; b) значення також можуть бути переосмислені в будь-який час. Це означає, що функції насправді є досить потужними таблицями пошуку (які необов'язково можуть обчислити шукане значення, а не просто зберігати його).

Якщо ми видалимо гольф з коду, він виглядав би приблизно так:

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

Отже, спочатку перебираємо вхід і визначаємо f[x] = xдля всіх xу списку. fв кінцевому рахунку буде використовуватися для відстеження того, як часто кожне число вже з’явилося в списку. Чому ми не рахуємо 0? Цикл над списком - a 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]%$_){$_}}

Використовує аналогічний трюк допоміжної масиви, як відповідь Rainer P , яку я розробив самостійно, але я, мабуть, отримав FGITW'd.

Приймає вхід як масив з param($a). Потім ми створюємо наш помічник$b вигляді , заповненого нулями, використовуючи оператор комах у поєднанні з перевантаженим оператором множення. Це створює $bрівний @(0,0,0...0)з $b.lengthрівним числу максимального в $a.
(Швидкий плагін для мого «Вітрини мови» відповіді , де я описую це в деталях)

Далі - наш вихід. Ми переносимо цикл на кожен елемент нашого вхідного масиву $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);
}

Ви маєте змогу зберегти кілька символів, видаливши оператор «продовження». Щось на кшталт (неперевірене)for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
Пітер Тейлор

@ peter-Taylor, ти маєш рацію, дякую. Крім того, довелося додати якийсь код, щоб виправити помилку.
Дмитро Степанов

Якщо ви імпортуєте, System.Linqто !l.Any()він коротший, ніж l.Count<1коротший l.Count==0.
Пітер Тейлор

@ peter-taylor спасибі, я також замінив w != 0 && w !=1на w > 1.
Дмитро Степанов

масиви теж повинні бути хорошими, і вони будуть трохи коротшими int [] R (int [] l, int n = 1)
raggy

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));}

Безумовно

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

Математика, 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))))

Безголовки:

(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.