Gdy edytujesz post w SE, wszelkie dalsze zmiany w ciągu 5 minutowego okresu karencji są z nim scalane. Biorąc pod uwagę listę razy, gdy edytujesz wpis, policz zmiany, które nie były w okresie karencji.
Załóżmy, że edytujesz w ciągu kilku minut [0,3,4,7,9,10,11,12]
. Powoduje to 3 edycje czasami [0,7,12]
, a reszta dzieje się w okresach karencji.
0: [3,4]
7: [9,10,11]
12: []
- Pierwsza edycja następuje w minucie 0. Zmiany w minutach 3 i 4 mieszczą się w 5-minutowym okresie karencji, więc nie licz.
- Druga edycja następuje w 7. minucie. Zmiany w minutach 9, 10, 11 mieszczą się w okresie karencji.
- Trzecia edycja w minucie 12 jest tuż poza 5-minutowym okresem karencji rozpoczynającym się w 7 minucie.
Zatem wynik wynosi 3.
Lista czasów w minutach będzie listą rosnących liczb całkowitych. Pierwszy numer zawsze będzie wynosił 0 dla początkowego wpisu, który liczymy jako edycję.
Przypadki testowe:
[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]
Wyjścia:
1
2
3
3
3
3
4
5
5
6
Aby ułatwić kopiowanie, oto pary danych wejściowych, wyjściowych i wejściowych / wyjściowych:
[[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)]
Tabela liderów:
code-golf
sequence
counting
subsequence
code-golf
arithmetic
code-golf
string
interpreter
code-golf
number
sequence
code-golf
quine
code-golf
sequence
code-golf
ascii-art
kolmogorov-complexity
alphabet
code-golf
kolmogorov-complexity
code-golf
string
code-golf
string
kolmogorov-complexity
xnor
źródło
źródło
Odpowiedzi:
JavaScript, 36 bajtów
Wypróbuj online!
Jak to działa
W każdym wywołaniu rekurencyjnym usuwamy wszystkie elementy z tablicy, które są oddalone o więcej niż 4 minuty od pierwszego elementu.
Jest mała sztuczka ze zmienną nazwą
$
. Kontrola$>f
najpierw konwertuje tablicę na ciąg znaków, a następnie porównuje ją z reprezentacją ciągu funkcji,f
a następnie porównuje je leksykograficznie. Pierwszym znakiem tablicy łańcuchowej jest cyfra, a zatem jest tylko nazwa zmiennej jednoznakowej, której indeks ascii jest mniejszy niż indeksy wszystkich cyfr$
. Zastąpienie$
inną nazwą zmiennej zawsze będzie zwracanefalse
.źródło
Mathematica,
46403733 bajtówWyjaśnienie
Ustaw
i
na1
ij
na0
.Odwzoruj na wszystkie elementy danych wejściowych ...
Jeśli
(element) - j < 5
jest fałszem, zwiększi
i ustawj
element (ocena zwarcia).Wyjście
i
.źródło
Łuska , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 , 58 bajtów
Wypróbuj online!
49 bajtów
Korzystanie z metody rekurencyjnej pokazanej w rozwiązaniu @ ThePirateBay .
Wypróbuj online!
źródło
and 1+f(...)
można zastąpić przezand-~f(...)
49 bajtówx=a[:1]
jest równoważnex=[0]
, ponieważ pytanie wyraźnie stwierdza, że pierwszym elementem jest zawsze0
( 62 bajty )J , 20 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
MATLAB, 34 bajty
Anonimowa funkcja, która wprowadza tablicę i wyprowadza liczbę.
Wykorzystuje to
uniquetol
funkcję, a konkretnie jej formęy = uniquetol(x, t)
, która dajey
zawieranie unikalnych elementówx
z tolerancjąt
. W ten sposób funkcja wydaje się podążać podejście „leniwe” sortx
, wybrać swój pierwszy wpis, a zachować wpisy pomijanie tak długo, jak są one w granicach tolerancji najnowszej odebrał wpisu. Właśnie to jest potrzebne tutaj.uniquetol
Funkcja automatycznego wagi określonej tolerancji przez maksymalną wartość bezwzględnych wa
. Dlatego potrzebujemy tutaj podziału.x+1
jest używany zamiast,x
aby uniknąć dzielenia przez 0.Weryfikacja przypadków testowych:
źródło
uniquetol
... Wprowadzono w R2015a . Mam R2014b :( Ładna odpowiedź :)05AB1E ,
201918151411 bajtówWyjaśnienie:
Wypróbuj online!
Edytować
źródło
¼4¹vDy‹i¼y4+}}¾
v®y‹iy4+©\¼
Łuska, 6 bajtów
Wypróbuj online!
źródło
ü
działa tak! To bardzo przydatne.ġ
ale to nie działa, natomiast Haskell zagroupBy
prac:length.groupBy((>).(+5))
. Potem znalazłemü
co prowadzi również do krótszy odpowiednik Haskell:nubBy
.Haskell ,
3130 bajtówWypróbuj online!
Zaoszczędzony 1 bajt dzięki Zgarbowi
źródło
z-4>x
powinien zapisać bajt.05AB1E , 14 bajtów
Wypróbuj online!
źródło
æ
na superset, to świetna sztuczka!æ
oznacza „powerset”.MATL ,
1312 bajtówWypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Pyth , 14 bajtów
To jest funkcja rekurencyjna. Zadzwoń za pomocą
y[0 1 2 3 4 5 6 7 8)
, gdzie[...)
jest twoja lista.Alternatywnie, wypróbuj tutaj! lub Zweryfikuj wszystkie przypadki testowe.
Wyjaśnienie
Jest to mniej więcej odpowiednik rozwiązania Python. Tłumaczenie dałoby następujące wyniki:
Podział kodu
źródło
.U
. Sugestie są mile widzianeJava 8,
7861605956 bajtówPort odpowiedzi @ JungHwanMin
Wypróbuj online!
źródło
a->{int i=0;for(int l:a)if(l-a[i]>4)a[++i]=l;return-~i;}
C # .NET, 63 bajty
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Perl 5 , 54 bajtów
52 bajty kodu +2 dla
-ap
Wypróbuj online!
źródło
Pyth, 25 bajtów
Wypróbuj tutaj: http://pyth.herokuapp.com
źródło
Proton , 40 bajtów
Mocno zainspirowany rozwiązaniem Python .
Wypróbuj online!
źródło
Ly , 29 bajtów
Wypróbuj online!
Dotarcie tutaj zajęło dużo czasu.
źródło
Siatkówka ,
3226 bajtówWypróbuj online! Wyjaśnienie:
Konwertuj na unary, ale dodaj 1, ponieważ 0 to trudna koncepcja w Retinie.
Policz liczbę edycji, ale dołącz wszystkie edycje dodatkowe w każdym dopasowaniu.
źródło
Kotlin, 52 bajty
Publikowanie jako funkcja, jeśli nie jest to dopuszczalne, zmienię to na metodę
Uległość
Upiększony
Test
TryItOnline
źródło
PowerShell , 74 bajty
Iteracyjne rozwiązanie. Długa z powodu słupka ogrodzeniowego na
for
pętli wymagającego dodatkowej kontroli na końcu. Sugestie dotyczące gry w golfa mile widziane.Bierzemy dane wejściowe
$args[0]
jako tablicę literalną, odklejamy pierwszy element do,$x
a resztę do$y
. Następnie, dopóki są jeszcze elementy$y
, pętlujemy.W każdej iteracji sprawdzamy, czy bieżący znacznik czasu
$x
znajduje się w5
większej odległości od$l
znacznika czasu edycji ast. Jeśli tak, zwiększamy nasz licznik$i++
i ustawiamy nasz znacznik czasu na aktualny. Następnie, podczas iteracji pętli, odklejamy następny element$x
i pozostawiamy pozostałe$y
.Gdy jesteśmy poza pętlą, generujemy dane wyjściowe
$i
plus1
dla początkowej edycji, a także czy ostateczny znacznik czasu znajduje się w odległości większej niż pięć od ostatniej edycji (z wartością logiczną domyślnie rzutowaną na liczbę całkowitą). Ten wynik pozostaje w potoku, a dane wyjściowe są niejawne.Wypróbuj online!
źródło
R , 52 bajty
Wypróbuj online!
Prosta anonimowa funkcja, która iteracyjnie usuwa elementy z listy oddalone od pierwszego elementu o mniej niż 5, aż lista będzie pusta, a następnie zwraca licznik.
źródło
Clojure, 53 bajty
Śledzi to „edycję czasów rozpoczęcia”, a następnie zwraca ich odrębną liczbę.
źródło
Japt , 14 bajtów
Spróbuj
Wyjaśnienie
Domniemane wejście tablicy
U
Uzyskaj długość
U
.Logiczne AND (
&&
) - wykonaj następujące czynności tylko, jeśliÊ
jest zgodne z prawdą (niezerowe).Połączenie rekurencyjne.
Filtruj (
f
)U
przepuszczając każdy element przez funkcję.Uzyskaj różnicę (
a
) między bieżącym elementem a pierwszym elementem (g
) zU
.Więcej niż 4?
Dodaj
1
.Wyjściowa wartość wynikowa liczby całkowitej.
źródło
Galaretka , 11 bajtów
Wypróbuj online!
Wyjaśnienie
12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło