Rimuovi ogni N-esimo


41

L'obiettivo

In questa sfida, il tuo input è un elenco non vuoto di numeri interi positivi, fornito nel formato nativo della tua lingua. Il tuo output è lo stesso elenco, nello stesso formato, con alcuni elementi rimossi. Devi rimuovere ogni occorrenza di 1, ogni seconda occorrenza di 2, ogni terza occorrenza 3e così via. In generale, per ogni numero intero positivo N, è necessario rimuovere ogni Nricorrenza Ndall'elenco, iniziando con la Nricorrenza.

Esempio

Considera l'elenco di input

[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2]

Innanzitutto, rimuoviamo ogni ricorrenza di 1:

[3,2,6,    6,2,3,2,6,6,6,6,  6,6,3,3,7,2]

Quindi ogni secondo occorrenza di 2:

[3,2,6,    6,  3,2,6,6,6,6,  6,6,3,3,7  ]

Quindi ogni terza occorrenza di 3:

[3,2,6,    6,  3,2,6,6,6,6,  6,6,  3,7  ]

I numeri 4e 5non si verificano nell'input, quindi possono essere saltati. Successivamente, rimuoviamo ogni sesta occorrenza di 6:

[3,2,6,    6,  3,2,6,6,6,    6,6,  3,7  ]

C'è solo una ricorrenza di 7, quindi anche questa può essere saltata. Quindi l'output corretto è

[3,2,6,6,3,2,6,6,6,6,6,3,7]

Regole e punteggio

È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard.

Casi test

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

Classifica

Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua. Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

## Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Se si desidera includere più numeri nell'intestazione, assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

## Perl, 43 + 2 (-p flag) = 45 bytes

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet della classifica:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

Risposte:


15

Gelatina , 10 8 byte

=;\S€%af

Grazie a @ Sp3000 per giocare a golf con 2 byte!

Provalo online!

Come funziona

=;\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.

come funziona quella fase di confronto? e sono i prefissi di [5,4,3,2,1] [[5], [5,4], [5,4,3], [5,4,3,2], [5,4, 3,2,1]] o [[1], [2,1], [3,2,1], [4,3,2,1], [5,4,3,2,1]]?
Quintopia,

@quintopia Jelly è da sinistra a destra, quindi è la prima. =confronta numeri interi. Ad esempio, si [3,2,1]=;\confronta 3con l'elemento di [3], 2con quelli di [3, 2]e 1con quelli di [3, 2, 1], dare [1, [0, 1], [0, 0, 1]].
Dennis,

Ah, mi mancava che stava confrontando un elenco con un elenco elemento per elenco.
Quintopia,

34

awk, 10 byte

È previsto un input su STDIN, un numero per riga.

++a[$1]%$1

Spiegazione

Mantiene un contatore per ogni numero in un array associativo, stampa solo se il valore del contatore modulo nnon è zero. La stampa è implicita. Versione lunga:

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

19

Pyth, 18 15 14 10 9 byte

f%/aYTTTQ

Penso che questo sia il primo codice che ho scritto che ha cinque riferimenti variabili consecutivi in ​​nove byte.

Vorrei che la soluzione di manipolazione di array ( u.DG%HgxHGH{QQ, 14 byte) non fosse così lunga.

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.

Provalo qui .


9

Python, 57 byte

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

8

Perl 6 , 28 byte

{$_=$;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
}

Uso:

# 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

Ricontrolla che gli elementi corretti vengano eliminati

# 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

Scherzi a parte, 22 17 byte

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

Dump esadecimale:

6bbb2c3b603b3bbd6f3bbb6325604d40b0

Provalo online

Spiegazione:

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
Questa lingua ...
Nico,

6

JavaScript ES6, 34 byte

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

Si è rivelato essere lo stesso dell'algoritmo Perl di Brad.

Modifica: salvato 2 byte grazie a @ edc65.


Buono! salva 2 byte rimuovendo le parentesi internea=>a.filter(v=>f[v]=-~f[v]%v,f=[])
edc65

5

Mathematica, 40 38 36 byte

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

Questa è una funzione senza nome che accetta e restituisce a List. Definisce una funzione con nome fquando eseguita (per tenere traccia dei numeri), ma si occupa di ripristinare fpreventivamente le relative definizioni .

Spiegazione

Il modo in cui le funzioni (o le definizioni delle funzioni) funzionano in Mathematica è davvero potente. Come in Haskell (per esempio), le funzioni non possono solo essere sovraccaricate e definite per determinati tipi, ma anche per singoli valori (o modelli arbitrari di argomenti, in realtà). Ma è persino più potente di Haskell in quanto a) questi valori possono essere definiti come effetti collaterali durante il flusso di controllo eb) i valori possono anche essere ridefiniti in qualsiasi momento. Ciò significa che le funzioni sono in realtà tabelle di ricerca piuttosto potenti (che possono facoltativamente calcolare il valore cercato anziché semplicemente memorizzarlo).

Se rimuoviamo il golfitude dal codice sarebbe un po 'così:

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

Quindi, per prima cosa, eseguiamo il ciclo sull'input e definiamo f[x] = x, per tutti xnell'elenco. fverrà infine utilizzato per tenere traccia della frequenza con cui ciascun numero è già apparso nell'elenco. Perché non contiamo 0? Il ciclo sull'elenco è a Map. L'espressione f[x] = yrestituisce y(oltre a memorizzare la definizione della funzione). Quindi impostando f[x]su x, la mappa valuterà l'elenco di input stesso. Ciò consente di risparmiare due byte perché non è necessario fornire listnuovamente esplicitamente Select. A partire da xinvece di 0non influisce affatto sul calcolo poiché siamo sempre e solo interessatiMod[f[x], x] .

(Normalmente potremmo semplicemente usare qualcosa come f[_] = 0una definizione di fallback per evitare il Map, ma non sappiamo se la nostra funzione è stata utilizzata in precedenza, il che lascerebbe alcuni valori precedenti definiti che potrebbero rovinare il nostro conteggio.)

Quindi Selectfiltra l'elenco mantenendo solo quegli elementi in cui la funzione senza nome è passata mentre il secondo argomento produce True. Quella funzione incrementa prima il valore di f[x](dove si xtrova l'elemento dell'elenco corrente), al fine di contare le occorrenze, quindi prende il modulo di conteggio risultante x. Vogliamo scartare tutti gli elementi in cui ciò produce 0.


5

CJam, 17 byte

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

Basta battere ... J? Non sono sicuro di quali siano le mie aspettative per questa sfida, davvero. Si noti che ""è la rappresentazione di CJam di un array vuoto.

Provalo online | Test suite (l'ultimo caso è troppo lungo per il permalink)

Spiegazione

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 byte

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

Spiegazione

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 byte

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

Uso:

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

Metodo abbastanza semplice. Contiamo le occorrenze di un numero fino ad esso e selezioniamo il numero solo se il numero divide il conteggio.

Altre spiegazioni verranno dopo.

Provalo online qui.


2

PowerShell, 56 byte

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

Utilizza un simile trucco di supporto come la risposta di Rainer P , che ho sviluppato indipendentemente ma a quanto pare ho ottenuto FGITW.

Accetta input come un array con param($a). Quindi creiamo il nostro array di helper $bcome un array popolato con zero utilizzando l'operatore virgola associato all'operatore di moltiplicazione sovraccarico. Questo crea $bper essere uguale a @(0,0,0...0)con $b.lengthuguale al numero massimo in $a.
(Spina rapida per la mia risposta "Mostra la tua lingua" dove descrivo questo in dettaglio)

Il prossimo è il nostro output. Passiamo in rassegna ogni elemento del nostro array di input $a|%{...}e ogni loop verifica ifun'istruzione. Il condizionale pre-incrementa il valore nel nostro array di helper che corrisponde all'elemento corrente, quindi controlla se si tratta di un multiplo dell'elemento corrente con l'operatore modulo. Se è un multiplo, la %volontà sarà uguale a 0falsa, quindi ifnon verrà eseguita. Altrimenti, produciamo l'elemento corrente.

Sfrutta il typecasting implicito per risparmiare sulla formattazione dell'output. Se una funzione o un programma restituisce più elementi e si salvano i risultati in una variabile, PowerShell creerà dinamicamente quella variabile come matrice. Esempio:

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 byte

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

Modifica completa riscrittura correzioni bug con test case 2/3 Modifica 2 Salva 7 byte grazie a @ Alex-A


1
92 byte: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]}
Alex A.

1

MATL , 20 byte

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

Questo utilizza l' attuale versione (10.2.1) del linguaggio / compilatore.

Provalo online!

Spiegazione

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 byte

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

Questo codice utilizza la ricorsione. Conusing istruzioni che sono 224 byte (160 per il codice del metodo stesso).

Provalo online.

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

Dovresti essere in grado di salvare alcuni caratteri rimuovendo l'istruzione continue. Qualcosa di simile (non testato)for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
Peter Taylor

@ peter-taylor, hai ragione, grazie. Inoltre, ho dovuto aggiungere del codice per correggere un bug.
Dmitry Stepanov,

Se hai importato, System.Linqallora !l.Any()è più corto di l.Count<1, che è più corto di l.Count==0.
Peter Taylor,

@ peter-taylor grazie, ho anche sostituito w != 0 && w !=1con w > 1.
Dmitry Stepanov il

anche gli array dovrebbero essere buoni e sarebbero un po 'più brevi int [] R (int [] l, int n = 1)
raggy

0

C # - 177 byte

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
Credo che dovresti contare le istruzioni using, nel qual caso questo sarebbe lungo 241 byte.
LegionMammal978,

0

Mathematica, 63 byte

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

Abbastanza interessante per il golf! Ignora il messaggio occasionale che si apre.


0

Rubino, 120 byte

->a{1.upto(a.max).each{|i|k=0;a.length.times.each{|j|k+=1if a[j]==i;a[j]=''if k%i==0&&a[j]==i;a[j]}};a.select{|i|i!=''}}

0

TI-BASIC, 47 byte

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

Questo utilizza il fatto che, su un nuovo calcolatore, L₁viene inizializzato e cancellato. Si noti che il tentativo di visualizzare un elenco vuoto in TI-BASIC genera un errore.


0

APL, 16 caratteri

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

In inglese:

  • ,\⍵: vettore dei prefissi vettoriali fino all'ennesimo elemento dell'argomento
  • +/¨⍵=: per ogni prefisso vettore, conta quanti sono uguali all'n-esimo elemento stesso
  • ×⍵|: segni del mod (ovvero: 0 se il resto della divisione è 0, 1 altrimenti)
  • ⍵/⍨: dell'argomento mantiene solo l'elemento in cui la mod è 0

0

Racchetta 179 byte

(λ(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
          ))))

test:

(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])

Produzione:

'()
'(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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.