Hapus setiap N-th N

41

Tugas

Dalam tantangan ini, input Anda adalah daftar bilangan bulat positif yang tidak kosong, diberikan dalam format asli bahasa Anda. Output Anda adalah daftar yang sama, dalam format yang sama, dengan beberapa elemen dihapus. Anda harus menghapus setiap kemunculan 1, setiap kemunculan kedua 2, setiap kemunculan ketiga 3, dan sebagainya. Secara umum, untuk setiap bilangan bulat positif N, Anda harus menghapus setiap Nkemunculan dari Ndaftar, dimulai dengan Nkemunculan th.

Contoh

Pertimbangkan daftar input

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

Pertama, kami menghapus setiap kejadian dari 1:

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

Kemudian setiap detik terjadi 2:

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

Kemudian setiap kejadian ketiga 3:

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

Angka-angka 4dan 5tidak terjadi dalam input, sehingga dapat dilewati. Selanjutnya, kami menghapus setiap kejadian keenam 6:

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

Hanya ada satu kejadian 7, sehingga bisa dilewati juga. Dengan demikian output yang benar adalah

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

Aturan dan penilaian

Anda dapat menulis program lengkap atau fungsi. Hitungan byte terendah menang, dan celah standar tidak diizinkan.

Uji kasus

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

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa. Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka di tajuk Anda, pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

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

Zgarb
sumber

Jawaban:

15

Jelly , 10 8 byte

=;\S€%af

Terima kasih kepada @ Sp3000 untuk bermain golf 2 byte!

Cobalah online!

Bagaimana itu bekerja

=;\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.
Dennis
sumber
bagaimana langkah perbandingan itu bekerja? dan merupakan awalan dari [5,4,3,2,1] [[5], [5,4], [5,4,3], [5,4,3,2], [5,4, 3,2,1]] atau [[1], [2,1], [3,2,1], [4,3,2,1], [5,4,3,2,1]]?
kuintopia
@quintopia Jelly dari kiri ke kanan, jadi ini yang pertama. =membandingkan bilangan bulat. Misalnya, [3,2,1]=;\membandingkan 3dengan unsur [3], 2dengan orang-orang dari [3, 2]dan 1dengan orang-orang [3, 2, 1], memberikan [1, [0, 1], [0, 0, 1]].
Dennis
Ah saya tidak ada yang membandingkan daftar dengan daftar elemen-oleh-daftar.
kuintopia
34

awk, 10 byte

Input diharapkan pada STDIN, satu nomor per baris.

++a[$1]%$1

Penjelasan

Menyimpan penghitung untuk setiap angka dalam array asosiatif, mencetak hanya jika modulo nilai penghitung ntidak nol. Pencetakan tersirat. Versi panjang:

++a[$1]%$1{print $0}
Rainer P.
sumber
19

Pyth, 18 15 14 10 9 byte

f%/aYTTTQ

Saya pikir ini adalah kode pertama yang saya tulis yang memiliki lima referensi variabel berturut-turut dalam sembilan byte.

Saya berharap solusi manipulasi array ( u.DG%HgxHGH{QQ14 byte) tidak terlalu lama.

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.

Coba di sini .

lirtosiast
sumber
9

Python, 57 byte

lambda l:[n for i,n in enumerate(l)if l[:i+1].count(n)%n]
Tidak
sumber
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
}

Pemakaian:

# 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

Periksa kembali apakah elemen yang benar sedang dibuang

# 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)
Brad Gilbert b2gills
sumber
7

Serius, 22 17 byte

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

Hex Dump:

6bbb2c3b603b3bbd6f3bbb6325604d40b0

Cobalah secara Online

Penjelasan:

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
kuintopia
sumber
10
Bahasa ini ...
Nico
6

JavaScript ES6, 34 byte

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

Ternyata sama dengan algoritma Perl Brad.

Sunting: Disimpan 2 byte berkat @ edc65.

Neil
sumber
Baik! simpan 2 byte menghapus tanda kurung bagian dalama=>a.filter(v=>f[v]=-~f[v]%v,f=[])
edc65
5

Mathematica, 40 38 36 byte

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

Ini adalah fungsi tanpa nama untuk mengambil dan mengembalikan a List. Ini mendefinisikan fungsi bernama fketika dieksekusi (untuk melacak angka-angka), tetapi mengatur ulang definisi yang relevan dari fsebelumnya.

Penjelasan

Cara fungsi (atau definisi fungsi) bekerja di Mathematica sangat kuat. Seperti dalam Haskell (misalnya), fungsi tidak hanya kelebihan beban dan didefinisikan untuk tipe tertentu, tetapi juga untuk nilai individu (atau pola argumen arbitrer, sebenarnya). Tetapi bahkan lebih kuat daripada Haskell dalam hal a) nilai-nilai ini dapat didefinisikan sebagai efek samping selama aliran kontrol dan b) nilai-nilai juga dapat didefinisikan ulang kapan saja. Itu berarti fungsi sebenarnya adalah tabel pencarian yang cukup kuat (yang secara opsional dapat menghitung nilai yang dicari daripada hanya menyimpannya).

Jika kita menghapus golfitude dari kode itu akan terlihat seperti ini:

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

Jadi pertama-tama, kita mengulang input dan mendefinisikan f[x] = x, untuk semua yang ada xdi daftar. fpada akhirnya akan digunakan untuk melacak seberapa sering setiap nomor telah muncul dalam daftar. Mengapa kita tidak diperhitungkan 0? Loop atas daftar adalah a Map. Ekspresi f[x] = ykembali y(selain menyimpan definisi fungsi). Jadi dengan menyetel f[x]ke x, peta akan mengevaluasi ke daftar input itu sendiri. Itu menghemat dua byte karena kita tidak perlu menyediakan listlagi secara eksplisit Select. Mulai dari xbukannya 0tidak memengaruhi perhitungan sama sekali karena kami hanya tertarik Mod[f[x], x].

(Biasanya kita bisa menggunakan sesuatu seperti f[_] = 0sebagai definisi mundur untuk menghindari Map, tetapi kita tidak tahu apakah fungsi kita telah digunakan sebelumnya, yang akan membuat beberapa nilai sebelumnya didefinisikan yang akan mengacaukan penghitungan kita.)

Kemudian Selectfilter daftar dengan hanya menyimpan elemen-elemen di mana fungsi yang tidak disebutkan namanya lewat sebagai argumen kedua menghasilkan True. Fungsi itu pertama-tama menambah nilai f[x](di mana xelemen daftar saat ini), untuk menghitung kejadian, dan kemudian mengambil modulo hitungan yang dihasilkan x. Kami ingin membuang semua elemen tempat ini menghasilkan 0.

Martin Ender
sumber
5

CJam, 17 byte

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

Kalahkan saja ... J? Tidak yakin apa harapan saya untuk tantangan ini, sungguh. Perhatikan bahwa itu ""adalah representasi CJam dari array kosong.

Cobalah online | Test suite (case terakhir terlalu panjang untuk permalink)

Penjelasan

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
Sp3000
sumber
4

JavaScript ES6, 55 byte

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

Penjelasan

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.
Jrich
sumber
3

J, 18 byte

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

Pemakaian:

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

Metode yang cukup mudah. Kami menghitung kemunculan angka hingga itu dan memilih nomor hanya jika nomor membagi hitungan.

Penjelasan lebih lanjut datang kemudian.

Cobalah online di sini.

randomra
sumber
2

PowerShell, 56 byte

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

Menggunakan helper-array-trick yang sama dengan jawaban Rainer P , yang saya kembangkan secara independen tetapi saya ternyata mendapatkan FGITW.

Mengambil input sebagai array dengan param($a). Kami kemudian membuat array pembantu kami $bsebagai array yang diisi-dengan-nol dengan menggunakan operator koma yang digabungkan dengan operator multiplikasi yang kelebihan beban. Ini menciptakan $bharus sama @(0,0,0...0)dengan $b.lengthsama dengan angka maksimal dalam $a.
(Sumbat cepat untuk jawaban "Tunjukkan bahasa Anda" di tempat saya menjelaskan ini secara terperinci)

Berikutnya adalah output kami. Kami mengulang setiap elemen dari array input kami $a|%{...}dan setiap loop memeriksa ifpernyataan. Persyaratan pra-kenaikan nilai dalam array penolong kami yang sesuai dengan elemen saat ini, kemudian memeriksa apakah itu kelipatan elemen saat ini dengan operator modulo. Jika multipel, %kemauan sama dengan 0yang falsey, sehingga iftidak mengeksekusi. Jika tidak, kami menampilkan elemen saat ini.

Mengambil keuntungan dari typecasting implisit untuk menghemat pemformatan output. Jika fungsi atau program mengembalikan beberapa elemen, dan Anda menyimpan hasilnya ke variabel, PowerShell akan secara dinamis membuat variabel itu sebagai array. Contoh:

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
AdmBorkBork
sumber
1

R, 110 98 99 92 Bytes

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

Edit bug perbaikan menulis ulang lengkap dengan test case 2/3 Edit 2 Simpan 7 byte berkat @ Alex-A

mnel
sumber
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)

Ini menggunakan rilis saat ini (10.2.1) dari bahasa / kompiler.

Cobalah online!

Penjelasan

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
Luis Mendo
sumber
1

R, 63 byte

f=function(z){n=seq(z);for(i in n)z[which(z==i)[n*i]]=0;z[z>0]}
lambruscoAcido
sumber
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);}

Kode ini menggunakan rekursi. Dengan usingpernyataan itu 224 byte (160 untuk kode metode itu sendiri).

Cobalah 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);
}
Dmitry Stepanov
sumber
Anda harus dapat menyimpan beberapa karakter dengan menghapus pernyataan melanjutkan. Sesuatu seperti (belum diuji)for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
Peter Taylor
@ peter-taylor, Anda benar, terima kasih. Juga, harus menambahkan beberapa kode untuk memperbaiki bug.
Dmitry Stepanov
Jika Anda mengimpor System.Linqmaka !l.Any()lebih pendek daripada l.Count<1, yang lebih pendek dari l.Count==0.
Peter Taylor
@ peter-taylor terima kasih, saya juga diganti w != 0 && w !=1dengan w > 1.
Dmitry Stepanov
array harus baik juga dan mereka akan menjadi sedikit lebih pendek int [] R (int [] l, int n = 1)
raggy
0

C # - 177 Bytes

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

Tidak disatukan

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));
}
Stephan Schinkel
sumber
4
Saya percaya Anda harus menghitung pernyataan menggunakan, dalam hal ini ini akan menjadi 241 byte.
LegionMammal978
0

Mathematica, 63 byte

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

Cukup menarik untuk bermain golf! Abaikan pesan sesekali yang muncul.

LegionMammal978
sumber
0

Ruby, 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!=''}}
Connor Clark
sumber
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₁

Ini menggunakan fakta bahwa, pada kalkulator baru, L₁diinisialisasi dan dihapus. Perhatikan bahwa mencoba menampilkan daftar kosong di TI-BASIC menimbulkan kesalahan.

lirtosiast
sumber
0

APL, 16 karakter

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

Dalam Bahasa Inggris:

  • ,\⍵: vektor prefiks vektor hingga elemen ke-n dari argumen
  • +/¨⍵=: per vektor awalan, hitung berapa banyak yang sama dengan elemen ke-n itu sendiri
  • ×⍵|: tanda-tanda mod (yaitu: 0 jika sisa divisi adalah 0, 1 sebaliknya)
  • ⍵/⍨: dari argumen tetap hanya elemen di mana mod adalah 0
lstefano
sumber
0

Racket 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))))

Tidak Disatukan:

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

Pengujian:

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

Keluaran:

'()
'(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)
juga
sumber