Ödemesiz dönem için muhasebe düzenlemeleri say


23

SE'deki bir yayını düzenlediğinizde, 5 dakikalık ödemesiz bir süre içinde yapılan diğer düzenlemeler de birleştirilir. Bir yayını düzenlediğiniz zamanların bir listesi göz önüne alındığında, ödemesiz süresi içinde olmayan düzenlemeleri sayın.

Dakikada düzenlediğinizi söyleyin [0,3,4,7,9,10,11,12]. Bu, zaman zaman 3 düzenleme ile sonuçlanır [0,7,12], gerisi zarafet dönemlerinde olur.

0:  [3,4]
7:  [9,10,11]
12: []
  • İlk düzenleme 0 dakikadır. 3. ve 4. dakikadaki düzenlemeler 5 dakikalık ödemesiz süresi içindedir ve bu nedenle sayılmaz.
  • İkinci düzenleme 7 dakikadır. 9, 10, 11 dakikadaki düzenlemeler ödemesiz süresi içindedir.
  • 12. dakikada üçüncü düzenleme, 7. dakikada başlayan 5 dakikalık ödemesiz sürenin kenarını geçiyor.

Yani, çıktı 3.

Dakika cinsinden sürelerin listesi, artan tam sayıların bir listesi olacaktır. İlk sayı, düzenleme olarak kabul ettiğimiz ilk kayıt için her zaman 0 olacaktır.

Test durumları:

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

Çıktılar:

1
2
3
3
3
3
4
5
5
6

Kopyalama kolaylığı için, girişler, çıkışlar ve giriş / çıkış çiftleri şunlardır:

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

Liderler Sıralaması:


O zaman baştan beri düzenlemek bu şekilde gerekiyordu sanki görünmesi için yeni ek süre kullanmak zorunda çünkü düzenleme, ödemesiz dönem yapmaz eğer gerçekten sinir bozucu olsa da ...
Neil

Yanıtlar:


20

JavaScript, 36 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

Her özyinelemeli çağrıda, ilk öğeden 4 dakikadan daha uzak olan dizideki tüm öğeleri sileriz.
Değişken adına sahip küçük bir numara var $. Kontrol $>fönce diziyi bir dizgeye dönüştürür, sonra onu işlevin diziliş gösterimi ile fkarşılaştırır ve sonra bunları sözlüksel olarak karşılaştırır. Yaylı dizinin ilk karakteri bir rakamdır ve bu nedenle ascii endeksi tüm rakamların indekslerinden küçük olan tek karakterli değişken ismidir $. $Başka bir değişken adıyla değiştirmek her zaman geri dönecektir false.


3
Bu siteyi bunun gibi cevaplar yüzünden seviyorum.
Cristian Lupascu

1
Çok güzel numara!
Arnauld,

1
Oh, şimdi, bu harika bir numara!
Shaggy

8

Mathematica, 46 40 37 33 bayt

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

açıklama

i=1;j=0

Set iiçin 1ve jiçin 0.

... /@#

Girişin tüm öğelerini haritalayın ...

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

Eğer (element) - j < 5daha sonra artış, yanlış ive set jelemanının (kısa devre değerlendirme).

;i

Çıktı i.


5

Kabuğu , 8 bayt

Γ(→₀f>+4

Çevrimiçi deneyin!

açıklama

Γ(→₀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 bayt

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

Çevrimiçi deneyin!

  • @Mr sayesinde 2 bayt kaydedildi. Xcoder.

49 bayt

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

@ ThePirateBay'in çözümünde gösterilen özyinelemeli yöntemi kullanma .

  • @Mr sayesinde bir bayt kaydedildi. Xcoder.
  • @Halvard Hummel sayesinde 2 bayt kaydedildi.

Çevrimiçi deneyin!


and 1+f(...)and-~f(...)49 bayt için değiştirilebilir
Mr. Xcoder

@ Mr.Xcoder Oh, tüm o bitsel numaralar unutamam.
mil

x=a[:1]eşdeğer olan x=[0]soru açıkça ilk öğe her zaman olduğunu belirten beri, 0( 62 bayt )
Sayın Xcoder


3

J , 20 bayt

[:#(,}.~5>(-{.))/@|.

Çevrimiçi deneyin!

açıklama

[:#(,}.~5>(-{.))/@|.  Input: array A
                  |.  Reverse
                /@    Reduce from right-to-left
            {.          Head of RHS
           -            Subtract with LHS
        5>              Less than 5
     }.~                Drop that many from
    ,                   Join
[:#                   Length

3

MATLAB, 34 bayt

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

Bir dizi giriş yapan ve bir sayı çıkaran isimsiz fonksiyon.

Bu kullanan uniquetolfonksiyonu, özel olarak şeklini y = uniquetol(x, t)verir, yeşsiz elementleri içeren xtoleransla t. Bunu yaparken, işlev "tembel" bir yaklaşımı takip ediyor gibi görünmektedir : sıralama x, ilk girişini seçin ve girişleri en son alınan girişin toleransı dahilinde olduğu sürece atlamaya devam edin. Burada tam olarak ihtiyaç duyulan şey budur.

uniquetolFonksiyonu otomatik olarak maksimum mutlak değeri ile belirtilen tolerans ölçekler a. Bu yüzden buradaki bölüme ihtiyacımız var. 0'a bölünmesini önlemek x+1yerine kullanılır x.

Test vakalarının doğrulanması:

>> 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
Hakkında TIL uniquetol... R2015a'da tanıtıldı . Ben R2014b var :( Güzel cevap :)
Stewie Griffin

@Stewie var olduğunu biliyordum, ama ilk kullandığımda bunun olduğunu düşünüyorum
Luis Mendo

2

05AB1E , 20 19 18 15 14 11 bayt

v®y‹iy4+©\¼

Açıklama:

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

Çevrimiçi deneyin!

Düzenle

  • Riley sayesinde -3 bayt ve counter_variable kullanımı
  • sonuçta counter_variable için gerek yok
  • Riley ve register_c kullanımı sayesinde tekrar -3 bayt

3 bayt'ı kaydetmek için counter değişkenini kullanabilirsiniz: ¼4¹vDy‹i¼y4+}}¾
Riley

oooooh, bir sayaç değişkeni var, bu kullanışlı! Teşekkür ederim!!
Cyril Gandon,

1
11 bayt: v®y‹iy4+©\¼
Riley

2

Kabuğu, 6 bayt

Lüo<+5

Çevrimiçi deneyin!

  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

Whoa, böyle üçalıştığını fark etmedim ! Bu çok kullanışlı.
Zgarb

@Zgarb: İlk çalıştı ġama Haskell'ın oysa çalışır değil groupByişlerin: length.groupBy((>).(+5)). Sonra buldum üda daha kısa bir Haskell eşdeğer açar: nubBy.
nimi



1

Matl , 13 12 bayt

`ttX<4+>)t}@

Çevrimiçi deneyin! Veya tüm test durumlarını doğrulayın .

açıklama

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

L&lbhyfg-Thb5b

Bu özyinelemeli bir fonksiyondur. Ara y[0 1 2 3 4 5 6 7 8), nereye[...) , listeniz ?

Alternatif olarak, burada deneyin! veya Tüm test durumlarını doğrulayın.


açıklama

Bu kabaca Python çözümüne eşdeğerdir. Bir çeviri aşağıdaki sonuçları verecektir:

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

Kod Dağılımı

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.

İle bir geçici çözüm bulmaya çalışıyorum .U. Önerilerinizi bekliyoruz
Mr. Xcoder


1

C # .NET, 63 bayt

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

Açıklama:

Burada dene.

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

Retina , 32 26 bayt

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

Çevrimiçi deneyin! Açıklama:

.+
$*11

Unary'e dönüştürün, ancak 1 ekleyin, çünkü 0 Retina'da zor bir kavramdır.

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

Düzenleme sayısını sayın, ancak her bir eşleşmeye tüm zarif düzenlemeleri ekleyin.


0

Kotlin, 52 bayt

Bir fonksiyon olarak gönderme, eğer bu kabul edilebilir değilse, onu bir metoda değiştireceğim

boyun eğme

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

Beautified

{
    // 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
}

Ölçek

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 bayt

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

Yinelemeli çözüm. Uçta forilave bir kontrol gerektiren döngüdeki esnetme nedeniyle uzun . Golf önerileri kabul edilir.

Biz girdi almak $args[0], bir hazır dizi olarak içine ilk elemanını kalkmasına $xve içine kalan $y. Sonra, hala içinde elementler olduğu sürece $y, döngü oluştururuz.

Her yineleme, mevcut zaman damgası olup olmadığını kontrol $xolduğunu 5ya da daha uzak $last düzenlemek zaman damgası. Öyleyse, sayacımızı artırır $i++ve zaman damgamızı güncel olmasını sağlar. Sonra, döngünün yinelemesinde, bir sonraki elementi soyun.$x ve kalanını bırakın.$y .

Biz olayın dışında konduktan sonra, çıkış $i, artı 1nihai damgası beşten fazla uzağa (örtük tamsayıya döküm Boole değeri ile) son düzenleme dan ilk düzenleme için artı olsun. Bu sonuç boru hattında bırakılır ve çıktı kesindir.

Çevrimiçi deneyin!


0

R , 52 bayt

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

Çevrimiçi deneyin!

Liste boş bırakılıncaya kadar listedeki ilk öğeden 5'ten daha az olan öğeleri yinelemeli olarak kaldıran basit adsız işlev, sonra sayacı döndürür.


0

Clojure, 53 bayt

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

Bu, "başlangıç ​​zamanlarını düzenle" yi izler ve farklı sayımlarını döndürür.


0

Japt , 14 bayt

Ê©1+ßUf_aUg)>4

Dene


açıklama

Dizinin örtük girişi U

Ê

Uzunluğu olsun U.

©

Mantıksal AND ( &&) - yalnızca Êtruthy (sıfır olmayan) ise aşağıdakileri uygulayın.

ß

Özyinelemeli arama.

Uf_

Her öğeyi bir işlevden geçirerek süzgeç ( f) U.

aUg

aGeçerli öğe ile ilk öğe ( g) arasındaki farkı ( ) alın U.

>4

4'ten büyük mü?

1+

Eklemek 1 .

Sonuç tamsayısının örtük çıktısı.


0

Jöle , 11 bayt

+4Ḣ<x@µÐĿL’

Çevrimiçi deneyin!

açıklama

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

;I4<1;x@;ð/L

Çevrimiçi deneyin!

açıklama

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