Quando você edita uma postagem no SE, quaisquer outras edições dentro de um período de carência de 5 minutos são mescladas a ela. Dada uma lista de vezes que você edita uma postagem, conte as edições que não estão em um período de cortesia.
Digamos que você edite em minutos [0,3,4,7,9,10,11,12]
. Isso resulta em três edições às vezes [0,7,12]
, com o restante acontecendo nos períodos de carência.
0: [3,4]
7: [9,10,11]
12: []
- A primeira edição é no minuto 0. As edições nos minutos 3 e 4 estão dentro do período de carência de 5 minutos e, portanto, não contam.
- A segunda edição é no minuto 7. As edições nos minutos 9, 10, 11 estão dentro do período de cortesia.
- A terceira edição no minuto 12 está além do limite do período de carência de 5 minutos, começando no minuto 7.
Então, a saída é 3.
A lista de tempos em minutos será uma lista de números inteiros crescentes. O primeiro número será sempre 0 para a postagem inicial, que contamos como uma edição.
Casos de teste:
[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]
Saídas:
1
2
3
3
3
3
4
5
5
6
Para facilitar a cópia, aqui estão as entradas, saídas e pares de entrada / saída:
[[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)]
Entre os melhores:
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
fonte
fonte
Respostas:
JavaScript, 36 bytes
Experimente online!
Como funciona
Em cada chamada recursiva, excluímos todos os elementos da matriz que estão a mais de 4 minutos do primeiro elemento.
Há um pequeno truque com o nome da variável
$
. A verificação$>f
primeiro converte a matriz em uma sequência e, em seguida, compara-a com a representação de sequência da funçãof
e, em seguida, compara-as lexicograficamente. O primeiro caractere da matriz stringified é um dígito e, portanto, apenas o nome da variável de um caractere cujo índice ascii é menor que os índices de todos os dígitos$
. Substituir$
por qualquer outro nome de variável sempre retornaráfalse
.fonte
Mathematica,
46403733 bytesExplicação
Defina
i
como1
ej
para0
.Mapeie para todos os elementos da entrada ...
Se
(element) - j < 5
for falso, aumentei
e definaj
para o elemento (avaliação de curto-circuito).Saída
i
.fonte
Casca , 8 bytes
Experimente online!
Explicação
fonte
Python 2 , 58 bytes
Experimente online!
49 bytes
Usando o método recursivo mostrado na solução do @ ThePirateBay .
Experimente online!
fonte
and 1+f(...)
pode ser substituído porand-~f(...)
49 bytesx=a[:1]
é equivalentex=[0]
, uma vez que a questão refere explicitamente que o primeiro elemento é sempre0
( 62 bytes )J , 20 bytes
Experimente online!
Explicação
fonte
MATLAB, 34 bytes
Função anônima que insere uma matriz e gera um número.
Isso usa a
uniquetol
função, especificamente sua formay = uniquetol(x, t)
, que fornecey
elementos únicosx
com tolerânciat
. Ao fazer isso, a função parece seguir uma abordagem "lenta": classifiquex
, escolha sua primeira entrada e continue pulando as entradas enquanto elas estiverem dentro da tolerância da última entrada selecionada. É exatamente isso que é necessário aqui.A
uniquetol
função escala automaticamente a tolerância especificada pelo valor absoluto máximo ema
. É por isso que precisamos da divisão aqui.x+1
é usado em vez dex
evitar a divisão por 0.Verificação de casos de teste:
fonte
uniquetol
... Introduzido em R2015a . Eu tenho resposta R2014b :( agradável :)05AB1E ,
201918151411 bytesExplicação:
Experimente online!
Editar
fonte
¼4¹vDy‹i¼y4+}}¾
v®y‹iy4+©\¼
Casca, 6 bytes
Experimente online!
fonte
ü
funciona assim! Isso é muito útil.ġ
, mas ele não funciona, enquanto que de HaskellgroupBy
obras:length.groupBy((>).(+5))
. Então eu acheiü
que também leva a uma Haskell mais curto equivalentes:nubBy
.Haskell ,
3130 bytesExperimente online!
Guardado 1 byte graças a Zgarb
fonte
z-4>x
deve salvar um byte.05AB1E , 14 bytes
Experimente online!
fonte
æ
para o superconjunto, é um ótimo truque!æ
significa "conjunto de potência ".MATL ,
1312 bytesExperimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Pitão , 14 bytes
Esta é uma função recursiva. Chame-o com
y[0 1 2 3 4 5 6 7 8)
, onde[...)
está sua lista.Como alternativa, experimente aqui! ou Verifique todos os casos de teste.
Explicação
Isso é aproximadamente equivalente à solução Python. Uma tradução daria os seguintes resultados:
Repartição do código
fonte
.U
. Sugestões são bemJava 8,
7861605956 bytesPorto da resposta de @ JungHwanMin
Experimente online!
fonte
a->{int i=0;for(int l:a)if(l-a[i]>4)a[++i]=l;return-~i;}
C # .NET, 63 bytes
Explicação:
Experimente aqui.
fonte
Perl 5 , 54 bytes
52 bytes de código +2 para
-ap
Experimente online!
fonte
Pitão, 25 bytes
Experimente aqui: http://pyth.herokuapp.com
fonte
Próton , 40 bytes
Fortemente inspirado na solução Python .
Experimente online!
fonte
Ly , 29 bytes
Experimente online!
Demorou muito tempo para chegar aqui.
fonte
Retina ,
3226 bytesExperimente online! Explicação:
Converta para unário, mas adicione 1, porque 0 é um conceito complicado na Retina.
Conte o número de edições, mas inclua todas as edições gratuitas em cada partida.
fonte
Kotlin, 52 bytes
Publicando como uma função, se isso não for aceitável, mudarei para um método
Submissão
Embelezado
Teste
TryItOnline
fonte
PowerShell , 74 bytes
Solução iterativa. Longo por causa de uma vedação no
for
loop que requer uma verificação adicional no final.Sugestões de golfe são bem-vindas.Tomamos a entrada
$args[0]
como uma matriz literal, destacamos o primeiro elemento$x
e o restante em$y
. Então, desde que ainda haja elementos$y
, fazemos um loop.A cada iteração, verificamos se o registro de data
$x
e hora atual está5
ou mais distante do$l
registro de data e hora de edição ast. Nesse caso, incrementamos nosso contador$i++
e configuramos nosso carimbo de data / hora para ser atual. Então, na iteração do loop, separamos o próximo elemento para$x
e deixar o restante no$y
.Quando saímos do loop, produzimos
$i
, mais1
para a edição inicial, mais se o carimbo de data e hora final está a mais de cinco da última edição (com o valor booleano implicitamente convertido em número inteiro). Esse resultado é deixado no pipeline e a saída é implícita.Experimente online!
fonte
R , 52 bytes
Experimente online!
Função anônima simples que remove iterativamente os elementos da lista que estão a menos de 5 do primeiro elemento até que a lista esteja vazia e retorna o contador.
fonte
Clojure, 53 bytes
Isso controla os "horários de início da edição" e retorna sua contagem distinta.
fonte
Japonês , 14 bytes
Tente
Explicação
Entrada implícita da matriz
U
Obtenha o comprimento de
U
.AND lógico (
&&
) - execute apenas o seguinte seÊ
for verdade (diferente de zero).Chamada recursiva.
Filtre (
f
)U
passando cada elemento por uma função.Obtenha a diferença (
a
) entre o elemento atual e o primeiro elemento (g
) deU
.Maior que 4?
Adicionar
1
.Saída implícita do número inteiro resultante.
fonte
Gelatina , 11 bytes
Experimente online!
Explicação
12 bytes
Experimente online!
Explicação
fonte