นับการแก้ไขการบัญชีสำหรับช่วงเวลาผ่อนผัน


23

เมื่อคุณแก้ไขโพสต์ใน SE การแก้ไขเพิ่มเติมใด ๆ ภายในระยะเวลาผ่อนผัน 5 นาทีจะถูกรวมเข้าไปด้วย ระบุจำนวนครั้งที่คุณแก้ไขโพสต์นับการแก้ไขที่ไม่อยู่ในช่วงผ่อนผัน

[0,3,4,7,9,10,11,12]สมมติว่าคุณแก้ไขในนาที ผลลัพธ์นี้มีการแก้ไข 3 ครั้ง[0,7,12]พร้อมกับส่วนที่เหลือเกิดขึ้นในช่วงเวลาผ่อนผัน

0:  [3,4]
7:  [9,10,11]
12: []
  • การแก้ไขครั้งแรกคือเวลา 0 การแก้ไขที่ 3 และ 4 อยู่ภายในระยะเวลาผ่อนผัน 5 นาทีและไม่ต้องนับ
  • การแก้ไขที่สองคือที่นาทีที่ 7 การแก้ไขที่นาทีที่ 9, 10, 11 อยู่ในระยะเวลาผ่อนผัน
  • การแก้ไขที่สามในเวลา 12 นาทีผ่านพ้นช่วงเวลาผ่อนผัน 5 นาทีเริ่มต้นที่นาทีที่ 7

ดังนั้นผลลัพธ์คือ 3

รายการเวลาในหน่วยนาทีจะเป็นรายการจำนวนเต็มที่เพิ่มขึ้น หมายเลขแรกจะเป็น 0 เสมอสำหรับการโพสต์ครั้งแรกซึ่งเรานับเป็นการแก้ไข

กรณีทดสอบ:

[0]
[0,3,5,7]
[0,3,4,7,9,10,11,12]
[0,30,120]
[0,4,8,12,16]
[0,4,8,12,16,20]
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
[0,5,10,15,20]
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
[0,1,4,5,9,11,12,14,16,18,23,24,26,28,29,30]

ขาออก:

1
2
3
3
3
3
4
5
5
6

เพื่อความสะดวกในการคัดลอกต่อไปนี้คืออินพุตเอาต์พุตและคู่อินพุต / เอาต์พุต:

[[0], [0, 3, 5, 7], [0, 3, 4, 7, 9, 10, 11, 12], [0, 30, 120], [0, 4, 8, 12, 16], [0, 4, 8, 12, 16, 20], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [0, 5, 10, 15, 20], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [0, 1, 4, 5, 9, 11, 12, 14, 16, 18, 23, 24, 26, 28, 29, 30]]
[1, 2, 3, 3, 3, 3, 4, 5, 5, 6]
[([0], 1), ([0, 3, 5, 7], 2), ([0, 3, 4, 7, 9, 10, 11, 12], 3), ([0, 30, 120], 3), ([0, 4, 8, 12, 16], 3), ([0, 4, 8, 12, 16, 20], 3), ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 4), ([0, 5, 10, 15, 20], 5), ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 5), ([0, 1, 4, 5, 9, 11, 12, 14, 16, 18, 23, 24, 26, 28, 29, 30], 6)]

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


แม้ว่าจะเป็นเรื่องที่น่ารำคาญมากหากการแก้ไขของคุณไม่ทำให้ช่วงเวลาผ่อนผันเพราะคุณจะต้องใช้ระยะเวลาผ่อนผันใหม่เพื่อให้ดูเหมือนว่าคุณต้องการแก้ไขมันตลอดเวลา ...
Neil

คำตอบ:


20

JavaScript ขนาด 36 ไบต์

f=$=>$>f&&1+f($.filter(b=>b-$[0]>4))

ลองออนไลน์!

มันทำงานอย่างไร

ในการเรียกซ้ำแต่ละครั้งเราจะลบองค์ประกอบทั้งหมดออกจากอาร์เรย์ซึ่งอยู่ห่างจากองค์ประกอบแรกนานกว่า 4 นาที
มีเคล็ดลับเล็ก ๆ น้อย ๆ $ที่มีชื่อตัวแปร การตรวจสอบ$>fก่อนจะแปลงอาร์เรย์เป็นสตริงจากนั้นเปรียบเทียบกับการแทนค่าสตริงของฟังก์ชันfแล้วเปรียบเทียบกับพจนานุกรม ตัวอักษรตัวแรกของอาร์เรย์ stringified เป็นหลักและดังนั้นจึงมีเพียงชื่อตัวแปรหนึ่งที่มีถ่านดัชนี ASCII $มีขนาดเล็กกว่าดัชนีของตัวเลขทั้งหมด แทนที่$ด้วยชื่อตัวแปรอื่น ๆ falseที่มักจะกลับ


3
ฉันรักไซต์นี้เพราะคำตอบเช่นนี้
Cristian Lupascu

1
เคล็ดลับดีมาก!
Arnauld

1
โอ้ตอนนี้เป็นเคล็ดลับที่ยอดเยี่ยม!
Shaggy

8

Mathematica, 46 40 37 33 ไบต์

(i=1;j=0;#-j<5||(i++;j=#)&/@#;i)&

คำอธิบาย

i=1;j=0

ตั้งค่าiการ1และการj0

... /@#

แม็พกับองค์ประกอบทั้งหมดของอินพุต ...

#-j<5||(i++;j=#)&

หาก(element) - j < 5เป็นเท็จให้เพิ่มiและตั้งค่าjเป็นองค์ประกอบ

;i

iเอาท์พุต


5

Husk , 8 ไบต์

Γ(→₀f>+4

ลองออนไลน์!

คำอธิบาย

Γ(→₀f>+4  Implicit input, a list of numbers.
Γ(        Deconstruct into head n and tail x (if empty, return 0).
    f>+4  Keep those elements of x that are greater than n+4.
   ₀      Call main function recursively on the result.
  →       Increment.

5

Python 2 , 58 ไบต์

a=input()
x=[0]
for k in a:x+=[k]*(k-x[-1]>4)
print len(x)

ลองออนไลน์!

  • บันทึก 2 ไบต์ขอบคุณ @Mr Xcoder

49 ไบต์

f=lambda a:a>[]and-~f([x for x in a if x-a[0]>4])

โดยใช้วิธีการเวียนเกิดที่แสดงใน @ thepiratebay ของการแก้ปัญหา

  • บันทึกเป็นไบต์ด้วย @Mr Xcoder
  • บันทึก 2 ไบต์ขอบคุณ @Halvard Hummel

ลองออนไลน์!


and 1+f(...)สามารถแทนที่ด้วยand-~f(...)ขนาด 49 ไบต์
Mr. Xcoder

@ Mr.Xcoder โอ้ไม่สามารถลืมกลอุบาย bitwise ทั้งหมดได้
ไมล์

x=a[:1]มีค่าเท่ากับx=[0]เนื่องจากคำถามระบุอย่างชัดเจนว่าองค์ประกอบแรกนั้นเสมอ0( 62 ไบต์ )
Mr. Xcoder



3

MATLAB, 34 ไบต์

@(x)nnz(uniquetol(x+1,4/max(x+1)))

ฟังก์ชั่นไม่ระบุชื่อที่ป้อนอาร์เรย์และส่งออกตัวเลข

นี้ใช้uniquetolฟังก์ชั่นโดยเฉพาะรูปแบบy = uniquetol(x, t)ซึ่งจะช่วยให้yมีองค์ประกอบที่เป็นเอกลักษณ์ของที่มีความอดทนx tในการทำเช่นนั้นฟังก์ชั่นดูเหมือนจะทำตามวิธี "ขี้เกียจ": เรียงลำดับxเลือกรายการแรกและเก็บข้ามรายการตราบเท่าที่พวกเขาอยู่ในความอดทนของรายการที่เลือกล่าสุด นั่นคือสิ่งที่ต้องการตรงนี้

ฟังก์ชั่นเครื่องชั่งน้ำหนักความอดทนที่ระบุโดยค่าสัมบูรณ์สูงสุดโดยอัตโนมัติuniquetol aนี่คือเหตุผลที่เราต้องการหารที่นี่ x+1ถูกใช้แทนxเพื่อหลีกเลี่ยงการหารด้วย 0

การตรวจสอบกรณีทดสอบ:

>> f = @(x)nnz(uniquetol(x+1,4/max(x+1)));
>> inputs = {...
       [0] ...
       [0,3,5,7] ...
       [0,3,4,7,9,10,11,12] ...
       [0,30,120] ...
       [0,4,8,12,16] ...
       [0,4,8,12,16,20] ...
       [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19] ...
       [0,5,10,15,20] ...
       [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] ...
       [0,1,4,5,9,11,12,14,16,18,23,24,26,28,29,30] ...
   };
>> outputs = cellfun(f, inputs)
outputs =
     1     2     3     3     3     3     4     5     5     6

1
TIL เกี่ยวกับuniquetol... แนะนำใน R2015a ฉันมี R2014b :( คำตอบที่ดี :)
Stewie Griffin

@Stewie ฉันรู้ว่ามันมีอยู่จริง แต่ฉันคิดว่านี่เป็นครั้งแรกที่ฉันใช้มัน
Luis Mendo

2

05AB1E , 20 19 18 15 14 11 ไบต์

v®y‹iy4+©\¼

คำอธิบาย:

v          # loop on input
 ®          # push register_c, start at -1
  y‹i         # if current item greater than last item
   y4+         # push new max on stack
    ©\          # push new max on register_c, and pop it from stack
     ¼           # increment counter_variable
                  # implicit print of counter_variable

ลองออนไลน์!

แก้ไข

  • -3 ไบต์ขอขอบคุณRileyและการใช้งาน counter_variable
  • ไม่จำเป็นต้องมี counter_variable หลังจากทั้งหมด
  • -3 ไบต์อีกครั้งต้องขอบคุณRileyและการใช้ register_c

คุณสามารถใช้ตัวแปรตัวนับเพื่อบันทึก 3 ไบต์:¼4¹vDy‹i¼y4+}}¾
Riley

oooooh มีตัวแปรตัวนับว่ามีประโยชน์! ขอขอบคุณ!!
Cyril Gandon

1
11 ไบต์:v®y‹iy4+©\¼
Riley

2

Husk, 6 ไบต์

Lüo<+5

ลองออนไลน์!

  o<+5        a function that takes two arguments and checks if
              the second is less than the the first plus 5
 ü            remove equal elements from the input list using the above
              function as the equality test
L             return the length of the remaining list

โอ้โหฉันไม่ได้ตระหนักถึงüผลงานเช่นนั้น! มันมีประโยชน์มาก
Zgarb

@Zgarb: แรกที่ฉันพยายามġแต่มันไม่ทำงานขณะ Haskell ของงาน:groupBy length.groupBy((>).(+5))จากนั้นฉันก็พบว่าüสิ่งใดที่นำไปสู่การเทียบเท่า Haskell ที่สั้นลง: nubBy.
Nimi



1

MATL , 13 12 ไบต์

`ttX<4+>)t}@

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมดตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

`        % Do..while
  t      %   Duplicate. Takes input (implicitly) the first time
  tX<    %   Duplicate and get minimum, i.e the first entry
  4+     %   Add 4
  >      %   Greater than? Element-wise
  )      %   Keep entries that fulfill that
  t      %   Duplicate. This is used as loop condition
}        % Finally (execute at the end of the loop)
  @      %   Push number of iterations. This is the output
         % End (implicit). A new iteration is run if top of the stack is truthy

1

Pyth , 14 ไบต์

L&lbhyfg-Thb5b

นี่คือฟังก์ชั่นวนซ้ำ เรียกว่าด้วยรายการของคุณอยู่y[0 1 2 3 4 5 6 7 8)ที่ไหน[...)

หรือลองที่นี่! หรือตรวจสอบกรณีทดสอบทั้งหมด


คำอธิบาย

สิ่งนี้เทียบเท่ากับโซลูชัน Python การแปลจะให้ผลลัพธ์ดังต่อไปนี้:

def y(b):
 return (len(b) and y(filter(lambda T:T>=b[0]+5,b)) + 1)

การแยกรหัส

L&lbhyfg-Thb5b   - Function called y that accepts a list parameter b.

L                - Define the function.
  lb             - The length of b...
 &               - ... Logical AND ...
    h            - Increment by 1.
     y           - The result given by calling the function recursively on the following:
      f      b     - b filtered...
        -Thb       - ... For the elements whose difference compared to the first element...
       g    5      - ... Is greater than or equal to 5.

.Uฉันกำลังพยายามที่จะหาวิธีแก้ปัญหาด้วย ข้อเสนอแนะยินดีต้อนรับ
Mr. Xcoder


1

C # .NET, 63 ไบต์

a=>{int e=0;foreach(int l in a)if(l-a[e]>4)a[++e]=l;return-~e;}

คำอธิบาย:

ลองที่นี่

a=>{                   // Method with integer-array parameter and integer return-type
  int e=0;             //  Amount of edits (starting at 0)
  foreach(int l in a)  //  Loop over the input-array
    if(l-a[e]>4)       //   If the current value minus the current edit is larger than 4:
      a[++e]=l;        //    Raise the edit-count by 1 first,
                       //    and set the current value to this next current edit
                       //  End of loop (implicit / single-line body)
  return-~e;           //  Return the amount of edits + 1
}                      // End of method





0

เรติน่า32 32ไบต์

.+
$*11
(1+)(¶1{1,4}\1)*\b

ลองออนไลน์! คำอธิบาย:

.+
$*11

แปลงเป็น unary แต่เพิ่ม 1 เนื่องจาก 0 เป็นแนวคิดที่ซับซ้อนใน Retina

(1+)(¶1{1,4}\1)*\b

นับจำนวนการแก้ไข แต่รวมการแก้ไขทั้งหมดในการแข่งขันแต่ละนัด


0

Kotlin, 52 ไบต์

โพสต์เป็นฟังก์ชั่นหากไม่เป็นที่ยอมรับฉันจะเปลี่ยนเป็นวิธีการ

ส่ง

{var x=it[0]
var o=1
it.map{if(it>x+4){o++
x=it}}
o}

เชิดชู

{
    // Last counted edit
    var x=it[0]
    // Current edit total
    var o = 1
    // For each edit
    it.map{
        // If it was 5 or more minutes ago
        if (it>x+4) {
            // Increase edit count
            o++
            // Make it the last counted edit
            x=it
        }
    }
    // Return the edit count
    o
}

ทดสอบ

var r:(IntArray)->Int=
{var x=it[0]
var o=1
it.map{if(it>x+4){o++
x=it}}
o}

fun main(args: Array<String>) {
    println(r(intArrayOf(0)))
    println(r(intArrayOf(0,3,5,7)))
    println(r(intArrayOf(0,3,4,7,9,10,11,12)))
    println(r(intArrayOf(0,30,120)))
    println(r(intArrayOf(0,4,8,12,16)))
    println(r(intArrayOf(0,4,8,12,16,20)))
    println(r(intArrayOf(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)))
    println(r(intArrayOf(0,5,10,15,20)))
    println(r(intArrayOf(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)))
    println(r(intArrayOf(0,1,4,5,9,11,12,14,16,18,23,24,26,28,29,30)))
}

TryItOnline


0

PowerShell , 74 ไบต์

for($x,$y=$args[0];$y;$x,$y=$y){if($l-le$x-5){$i++;$l=$x}}$i+1+($l-le$x-5)

โซลูชั่นซ้ำ ความยาวเนื่องจากการโพสต์รั้วบนforลูปจำเป็นต้องมีการตรวจสอบเพิ่มเติมในตอนท้าย ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ

เราใช้การป้อนข้อมูล$args[0]เป็น array ตัวอักษรลอกออกองค์ประกอบแรกเข้าและส่วนที่เหลือลงไป$x $yจากนั้นตราบใดที่ยังมีองค์ประกอบอยู่$yเราก็จะวนซ้ำ

การวนซ้ำแต่ละครั้งเราตรวจสอบว่าการประทับเวลาปัจจุบัน$xนั้นอยู่5ห่างจากการ$lแก้ไขการประทับเวลา ast หรือไม่ ถ้าเป็นเช่นนั้นเราจะเพิ่มตัวนับ$i++และตั้งค่าการประทับเวลาให้เป็นปัจจุบัน จากนั้นในการวนซ้ำของวงเราลอกองค์ประกอบถัดไปออก$xและปล่อยส่วนที่เหลือเข้า$yและออกจากที่เหลืออยู่ใน

เมื่อเราออกจากลูปเราจะแสดงผล$iบวก1สำหรับการแก้ไขเริ่มต้นรวมทั้งการประทับเวลาสุดท้ายนั้นมากกว่าห้าครั้งจากการแก้ไขครั้งล่าสุด (ด้วยค่าบูลีนโดยปริยายเป็นจำนวนเต็ม) ผลลัพธ์นั้นจะถูกทิ้งไว้บนไพพ์ไลน์และเอาท์พุทก็เป็นนัย

ลองออนไลน์!


0

R , 52 ไบต์

function(l){while(sum(l|1)){l=l[l-l[1]>=5]
F=F+1}
F}

ลองออนไลน์!

ฟังก์ชั่นไม่ระบุชื่อแบบง่ายที่จะลบองค์ประกอบออกจากรายการที่น้อยกว่า 5 ห่างจากองค์ประกอบแรกจนกว่ารายการจะว่างเปล่าจากนั้นส่งคืนตัวนับ


0

Clojure 53 ไบต์

#(count(set(reductions(fn[r v](if(<(- v r)5)r v))%)))

วิธีนี้จะติดตาม "แก้ไขเวลาเริ่มต้น" แล้วส่งกลับจำนวนที่แตกต่าง


0

Japt , 14 ไบต์

Ê©1+ßUf_aUg)>4

ลองมัน


คำอธิบาย

อินพุตของอาร์เรย์โดยนัย U

Ê

Uได้รับความยาวของ

©

ตรรกะ AND ( &&) - ดำเนินการต่อไปนี้หากÊเป็นจริง (ไม่เป็นศูนย์)

ß

โทรซ้ำ

Uf_

ตัวกรอง ( f)Uโดยการส่งแต่ละองค์ประกอบผ่านฟังก์ชัน

aUg

รับความแตกต่าง ( a) ระหว่างองค์ประกอบปัจจุบันและองค์ประกอบแรก ( g) ของUของ

>4

มากกว่า 4?

1+

1เพิ่ม

เอาท์พุทโดยนัยของจำนวนเต็มผล


0

เยลลี่ 11 ไบต์

+4Ḣ<x@µÐĿL’

ลองออนไลน์!

คำอธิบาย

+4Ḣ<x@µÐĿL’  Input: array A
      µÐĿ    Repeat until the results converge
+4             Add 4
  Ḣ            Head
   <           Greater than
    x@         Copy only the true values
         L   Length
          ’  Decrement

12 ไบต์

;I4<1;x@;ð/L

ลองออนไลน์!

คำอธิบาย

;I4<1;x@;ð/L  Input: array A
         ð/   Reduce A from left-to-right using
;               Concatenate
 I              Increment
  4<            Greater than 4
    1;          Prepend 1
      x@        Times each of
        ;       Concatenate
           L  Length
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.