ลบทุก N-th 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]

ลีดเดอร์บอร์ด

นี่คือ Stack Snippet เพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต 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

@quintopia Jelly เป็นจากซ้ายไปขวาจึงเป็นครั้งแรก =เปรียบเทียบจำนวนเต็ม ยกตัวอย่างเช่นการ[3,2,1]=;\เปรียบเทียบ3กับองค์ประกอบของ[3], 2กับคนของ[3, 2]และ1กับผู้ให้[3, 2, 1] [1, [0, 1], [0, 0, 1]]
Dennis

อาฉันหายไปว่ามันกำลังเปรียบเทียบรายการกับรายการองค์ประกอบโดยรายการ
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{QQ, 14 ไบต์) ไม่นาน

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 โดยที่ a) ค่าเหล่านี้สามารถกำหนดเป็นผลข้างเคียงในระหว่างโฟลว์การควบคุมและ b) ค่าเหล่านี้สามารถนิยามใหม่ได้ตลอดเวลา นั่นหมายถึงฟังก์ชั่นเป็นตารางการค้นหาที่ทรงพลังจริง ๆ (ซึ่งสามารถคำนวณค่าการค้นหาแทนการเก็บไว้)

ถ้าเราลบ 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แทนไม่ได้ส่งผลกระทบต่อการคำนวณที่ทุกคนตั้งแต่เราสนใจเท่านั้นที่เคยอยู่ใน0Mod[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

param($a)จะเข้าเป็นอาร์เรย์ที่มี จากนั้นเราสร้างอาร์เรย์ตัวช่วยของเรา$bเป็นอาร์เรย์ที่มีค่าศูนย์ด้วยการใช้ตัวดำเนินการเครื่องหมายจุลภาคควบคู่กับตัวดำเนินการคูณที่มากเกินไป นี้จะสร้าง$bให้เท่ากับ@(0,0,0...0)กับเท่ากับจำนวนสูงสุดใน$b.length (เสียบด่วนสำหรับ "แสดงภาษาของคุณ" ตอบที่ฉันอธิบายในรายละเอียด)$a

ต่อไปคือผลลัพธ์ของเรา เราวนรอบองค์ประกอบของอาร์เรย์อินพุตของเรา$a|%{...}และตรวจสอบifคำสั่งวนซ้ำ เงื่อนไขเพิ่มมูลค่าล่วงหน้าในอาร์เรย์ผู้ช่วยของเราที่สอดคล้องกับองค์ประกอบปัจจุบันจากนั้นตรวจสอบว่ามันเป็นองค์ประกอบหลายรายการในปัจจุบันที่มีผู้ประกอบการโมดูโล หากเป็นพหุคูณพจน์%จะเท่ากัน0ดังนั้นจึงifไม่ดำเนินการ มิฉะนั้นเราจะเอาท์พุทองค์ประกอบปัจจุบัน

ใช้ประโยชน์จาก typecasting โดยนัยเพื่อบันทึกในการจัดรูปแบบเอาต์พุต หากฟังก์ชั่นหรือโปรแกรมส่งคืนองค์ประกอบหลายรายการและคุณบันทึกผลลัพธ์ไปยังตัวแปร 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]}
Alex A.

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;
Peter Taylor

@ peter-taylor คุณพูดถูกขอบคุณ ยังต้องเพิ่มรหัสเพื่อแก้ไขข้อผิดพลาด
Dmitry Stepanov

หากคุณได้นำเข้าSystem.Linqแล้ว!l.Any()จะสั้นกว่าที่สั้นกว่าl.Count<1 l.Count==0
ปีเตอร์เทย์เลอร์

@ ปีเตอร์เทย์เลอร์ขอบคุณฉันยังถูกแทนที่ด้วยw != 0 && w !=1 w > 1
Dmitry Stepanov

อาร์เรย์ควรจะดีเช่นกันและพวกเขาจะสั้นลงเล็กน้อย 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));}

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 ตัวอักษร

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

เป็นภาษาอังกฤษ:

  • ,\⍵: vector ของส่วนนำหน้าของเวกเตอร์จนถึงองค์ประกอบที่ n ของอาร์กิวเมนต์
  • +/¨⍵=: ต่อเวกเตอร์คำนำหน้าให้นับจำนวนเท่ากันกับองค์ประกอบที่ n
  • ×⍵|: สัญญาณของ mod (นั่นคือ: 0 ถ้าส่วนที่เหลือของการหารคือ 0, 1 เป็นอย่างอื่น)
  • ⍵/⍨: ของอาร์กิวเมนต์เก็บเฉพาะองค์ประกอบที่ mod เป็น 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.