Her N-th N'yi çıkar


41

Görev

Bu zorlukta, girişiniz, kendi dilinizde yerel olarak verilen boş olmayan bir pozitif tamsayı listesidir. Çıktınız aynı liste, aynı biçimde, bazı öğeler kaldırılmış durumda. Her bir oluşumunu 1, her ikinci oluşumunu 2, her üç oluşumunu 3vb. Genel olarak, her pozitif tamsayı için N, listedeki her bir Noluşumunu, No Ninci oluşumundan başlayarak kaldıracaksınız .

Örnek

Giriş listesini göz önünde bulundurun

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

İlk önce, her oluşumunu kaldırırız 1:

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

Sonra her ikinci oluşumunda 2:

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

Sonra her üç olayda 3:

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

Sayılar 4ve 5girişte oluşmaz, bu yüzden atlanabilirler. Sonra, her altıncı oluşumunu kaldırırız 6:

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

Sadece bir tekrar oluşumu var 7, bu yüzden de atlanabilir. Böylece doğru çıktı

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

Kurallar ve puanlama

Tam bir program veya bir fonksiyon yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklar izin verilmez.

Test durumları

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

Liderler Sıralaması

Burada hem düzenli bir lider tablosu hem de kazananların dile göre genel bir bakış oluşturması için bir Stack Snippet'i var. Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden çok numara dahil etmek istiyorsanız, gerçek skorun başlığın içindeki son sayı olduğundan emin olun :

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

Dil adını, daha sonra büyük afiş snippet'inde görünecek bir bağlantı da yapabilirsiniz:

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

Yanıtlar:


15

Jöle , 10 8 bayt

=;\S€%af

2 baytlık golf oynamak için @ Sp3000'e teşekkürler!

Çevrimiçi deneyin!

Nasıl çalışır

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

Bu karşılaştırma adımı nasıl çalışır? ve [5,4,3,2,1] [[5], [5,4], [5,4,3], [5,4,3,2], [5,4] önekleridir. 3,2,1]] veya [[1], [2,1], [3,2,1], [4,3,2,1], [5,4,3,2,1]]?
quintopia

@quintopia Jelly soldan sağa, bu yüzden ilk. =tamsayıları karşılaştırır. Örneğin, [3,2,1]=;\karşılaştırır 3elemanı ile [3], 2olanlar ile [3, 2]ve 1kişilerce ile [3, 2, 1]vererek [1, [0, 1], [0, 0, 1]].
Dennis

Ah, bir listeyi bir liste-eleman listesiyle karşılaştırıyordu.
quintopia

34

awk, 10 bayt

Her satırda bir sayı olan STDIN'de giriş bekleniyor.

++a[$1]%$1

açıklama

İlişkili bir dizideki her numara için bir sayaç tutar, yalnızca sayaç değeri modulo nsıfır değilse yazdırır . Baskı çok açık. Uzun versiyon:

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

19

Pyth, 18 15 14 10 9 bayt

f%/aYTTTQ

Sanırım dokuz baytta beş ardışık değişken referansı olan ilk yazdığım kod.

Dizi işleme çözümü ( u.DG%HgxHGH{QQ, 14 bayt) çok uzun olmasaydı keşke .

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.

Burada dene .


9

Python, 57 bayt

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

8

Perl 6 , 28 bayt

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

Kullanımı:

# 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

Doğru öğelerin atıldığını bir kez daha kontrol edin

# 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

Cidden, 22 17 bayt

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

Hex Dump:

6bbb2c3b603b3bbd6f3bbb6325604d40b0

Çevrimiçi Deneyin

Açıklama:

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
Bu dil ...
Nico

6

JavaScript ES6, 34 bayt

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

Brad'in Perl algoritmasıyla aynı olduğu ortaya çıktı.

Düzenleme: @ edc65 sayesinde 2 bayt kaydedildi.


İyi! iç parantezleri kaldırarak 2 bayt kaydeta=>a.filter(v=>f[v]=-~f[v]%v,f=[])
edc65

5

Mathematica, 40 38 36 bayt

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

Bu, a alan ve dönen bir isimsiz fonksiyondur List. Çalıştırıldığında adlandırılmış bir işlev tanımlar f(sayıları takip etmek için), ancak fönceden ilgili tanımlarını sıfırlamakla ilgilenir .

açıklama

Mathematica'da fonksiyonların (veya fonksiyon tanımlarının) çalışma şekli gerçekten güçlüdür. Haskell'de olduğu gibi (örneğin), işlevler yalnızca belirli türler için aşırı yüklenemez ve tanımlanamaz, ayrıca bireysel değerler için de (veya aslında argüman argüman kalıpları için) tanımlanır. Ancak Haskell'den bile daha güçlüdür a) bu değerler kontrol akışı sırasında yan etkiler olarak tanımlanabilir ve b) değerler herhangi bir zamanda yeniden tanımlanabilir. Bu, işlevlerin aslında oldukça güçlü arama tabloları olduğu anlamına gelir (isteğe bağlı olarak yalnızca depolamak yerine aranan değeri hesaplayabilir ).

Golfitude'i koddan kaldırırsak, biraz şuna benzer:

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

İlk önce, listedeki f[x] = xherkes için girdiyi tanımlayıp tanımlarız x. fsonuçta listede her bir numaranın ne sıklıkla göründüğünü takip etmek için kullanılacaktır. Neden sayılmaz 0? Listenin üzerindeki döngü a'dır Map. İfade f[x] = ydöner y(işlev tanımını kaydetmeye ek olarak). Yani ayarlayarak f[x]için x, harita giriş listesinin kendisine değerlendirecektir. Bu, iki bayttan tasarruf sağlar çünkü o zaman listaçıkça tekrar sağlamak zorunda değiliz Select. xBunun yerine başlamak, 0yalnızca ilgilendiğimiz için hesaplamayı etkilemez Mod[f[x], x].

(Normalde f[_] = 0önlemek için geri dönüş tanımı gibi bir şey kullanabiliriz Map, ancak fonksiyonumuzun daha önce kullanılıp kullanılmadığını bilmiyoruz, bu sayılan sayıları önleyecek bazı eski değerleri bırakacaktır.)

Ardından Select, listeyi yalnızca adsız fonksiyonun ikinci argüman olarak vereceği şekilde geçtiği öğeleri koruyarak filtreler True. Bu işlev ilk önce oluşumları saymak için f[x]( xgeçerli liste öğesinin bulunduğu yer) değerini artırır ve ardından sonuç sayı modülünü alır x. Bunun getirdiği tüm öğeleri atmak istiyoruz 0.


5

CJam, 17 bayt

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

Sadece yen ... J? Bu meydan okuma için beklentilerimin ne olduğundan emin değilim, gerçekten. ""CJam'ın boş bir diziyi temsil ettiğini unutmayın .

Çevrimiçi deneyin | Test paketi (son durum permalink için çok uzun)

açıklama

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 bayt

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

açıklama

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 bayt

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

Kullanımı:

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

Oldukça basit bir yöntem. Bir sayının oluşumunu sayar ve sayı sayıyı böldüğünde sayıyı seçeriz.

Daha fazla açıklama sonra gelir.

Burada çevrimiçi deneyin.


2

PowerShell, 56 bayt

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

Bağımsız bir şekilde geliştirdiğim Rainer P'nin cevabına benzer bir yardımcı-dizi-numarası kullanıyor , ancak görünüşe göre FGITW'd.

Girdiyi bir dizi olarak alır param($a). Daha sonra, yardımcı $bdizimizi, aşırı yüklü çarpma operatörüyle birleştirilmiş virgül operatörünü kullanarak, sıfırlarla doldurulmuş bir dizi olarak oluşturuyoruz . Bu yaratır $beşit olacak şekilde @(0,0,0...0)birlikte $b.lengthmaksimal sayısına eşit $a.
("Dilinizi sergileyin" cevabım için hızlı bağlantı , bunu ayrıntılı olarak açıkladığım yer)

Sıradaki çıktımız. Girdi dizimizin her elemanı üzerinde döngü yapıyoruz $a|%{...}ve her döngü bir ifcümleyi kontrol ediyor . Koşullu, yardımcı dizideki mevcut öğeye karşılık gelen değeri artırır, daha sonra modulo işleci ile mevcut öğenin bir katı olup olmadığını kontrol eder. Eğer bir çoklu ise, falsey olan %irade eşittir 0, bu nedenle ifçalıştırılmaz. Aksi takdirde, şu anki elemanı çıkarıyoruz.

Çıktı biçimlendirmesinde tasarruf etmek için örtük tip tahmininden yararlanır. Bir işlev veya program birden fazla öğe döndürürse ve sonuçları bir değişkene kaydederseniz, PowerShell bu değişkeni dinamik olarak bir dizi olarak oluşturur. Örnek:

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 Bayt

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

Düzeltme işleminin tamamını yeniden düzenleyin hatayı sınama durumu ile düzeltin 2/3 Düzenle 2 @ Alex-A sayesinde 7 bayt kazanın


1
92 bayt: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 bayt

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

Bu kullanır , dilin / derleyicinin geçerli sürümünü (10.2.1) .

Çevrimiçi deneyin!

açıklama

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 bayt

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

Bu kod özyineleme kullanır. İleusing ifadeleri o 224 bayt (yöntem kodu kendisi için 160) bulunuyor.

Çevrimiçi deneyin.

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

Maintain deyimini kaldırarak bir kaç karakter kaydedebilmelisiniz. Gibi bir şey (denenmemiş)for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
Peter Taylor

@ peter-taylor, haklısın, teşekkürler. Ayrıca, bir hatayı düzeltmek için bazı kod eklemek zorunda kaldı.
Dmitry Stepanov

İçe aktardıysanız, System.Linqbundan !l.Any()daha kısa l.Count<1, hangisinden daha kısa l.Count==0.
Peter Taylor,

@ Peter-Taylor sayesinde, ayrıca ikame w != 0 && w !=1ile w > 1.
Dmitry Stepanov,

diziler çok iyi olmalı ve [] R (int [] l, int n = 1) biraz daha kısa int olur
raggy

0

177 bayt

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
Kullanım ifadelerini saymanız gerektiğine inanıyorum, bu durumda bu 241 bayt olacaktır.
LegionMammal978

0

Mathematica, 63 bayt

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

Golf için oldukça ilginç! Açılan ara sıra gelen mesajı dikkate almayın.


0

Ruby, 120 bayt

->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 bayt

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

Bu, yeni bir hesap makinesinde L₁başlatılmış ve silinmiş olduğu gerçeğini kullanır . TI-BASIC'te boş bir liste göstermeye çalışmanın bir hata attığını unutmayın.


0

APL, 16 karakter

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

İngilizcede:

  • ,\⍵: vektörün vektörü argümanın nth elemanına kadar ön ekler
  • +/¨⍵=: önek başına vektör, n'inci öğenin kendisine ne kadar eşittir sayılır
  • ×⍵|: modun işaretleri (eğer: bölümün geri kalanı 0 ise 1 ise 0)
  • ⍵/⍨: argüman sadece modun 0 olduğu elementi tutar

0

Raket 179 bayt

(λ(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 yapmak:

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

Çıktı:

'()
'(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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.