As crianças que estão aprendendo a contar costumam saber séries de números, mas parecem não conseguir montar essas séries adequadamente.
Por exemplo, eles podem dizer:
1,2,3,4,7,8,9,10
Às vezes, as crianças percebem que pularam alguns números e voltam:
1,2,3,4,7,8,5,6,7,8,9,10
Este é claramente o padrão superior. Precisamos identificá-los.
Para identificar essas listas:
Identificamos o mínimo
M
e o máximoN
da listaPercorremos a lista. Se o número atual for maior ou igual a qualquer membro da lista à direita, removeremos o número atual.
Se a lista restante contém todos os números de
M
atéN
, retornamos um valor verdadeiro.
Você pode assumir que sua lista de entrada conterá pelo menos 1 elemento. Você pode assumir que todos os números inteiros serão não negativos.
Casos de teste:
Verdade:
0
10
0 0 0
1 0 1
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 0 1 2 3
0 1 2 3 4 5 5
0 1 1 2 2 3
0 3 6 1 4 7 2 5 8 3 4 5 6 7 8
1 3 5 7 2 3 4 5 6 7
5 6 0 1 2 3 6 7 4 5 6 7
5 6 7 8
5 5 6 7 8
4 6 7 8 3 4 5 6 7 8
Falsy:
1 0
4 3 2 1
1 2 3 7 8 9
0 1 2 3 1 3
0 1 2 3 1 3 4
0 1 2 3 1 3 2 4
0 1 2 3 1 3 2 4 3
1 3 5 7 2 4 6 8
0 1 2 1 3 4 5 6
4 5 6 3 4 5
Isso é código-golfe , então faça suas respostas o mais curto possível!
1
mais adiante). Você também removeria todos os outros elementos (exceto o último 1), para acabar com o0 1
que não é0 1 2 3 4 5
Respostas:
05AB1E , 5 bytes
Não tenho 100% de certeza de que isso funcione, mas ele passa em todos os casos de teste e não consegui encontrar nenhuma situação em que falhe.
Experimente online!
fonte
Geléia ,
109 bytesExperimente online!
Como funciona
fonte
ɓ
um recurso relativamente novo?«\
na minha opinião.Ruby ,
59 5441 bytesExperimente online!
fonte
Python 2 , 81 bytes
Experimente online!
fonte
PHP ,
148130 bytes-18 bytes, obrigado @Christoph
Experimente online!
fonte
$argn
é sempre uma stringforeach
que não funciona nela. Você pode usar$argv
para obter uma matriz como entrada, mas tome cuidado para que ela sempre contenha o nome do arquivo como primeiro elemento. Você usa$m
e$n
apenas uma vez para que você pode salvar um monte de bytes criando$b
anteriormente:$b=range(min($a),max($a));
. O elenco(bool)
é completamente desnecessário.if($k>=$a[$s])$a[$i]=null;
para$k<$a[$s]?:$a[$i]=-1;
. Usando referência, podemos fazer isso:foreach($a as$i=>&$k)
(+1 byte) e$a[$i]
to$k
(-4 byte). Além disso, isso nos deixa cair$s=$i
porque podemos iterar$i
diretamente agora.$a=$argn;$b=range(min($a),max($a));foreach($a as$i=>&$k)for(;++$i<count($a);)$k<$a[$i]?:$k=-1;echo!array_diff($b,$a);
(117 bytes). Mas ainda usa$argn
da maneira errada.$a=explode(' ',$argn);
corrigiria isso por 13 bytes adicionais.$_GET
como array de entrada? Neste caso, não há necessidade de usarexplode
additonal -6 Bytes para usar e não a$b
variável~
Experimente online!Java 8,
264262 bytesExplicação:
Experimente aqui.
fonte
R,
8885 bytesProvavelmente isso pode ser ainda mais diminuído. Loops sobre os elementos de
x
, verifica se todos os valores futuros são maiores e, somente então, mantém esse elemento. Após o loop, ele cria uma sequência demin(x)
paramax(x)
e verifica%in%
se todos os valores estão incluídos na versão removida dex
.fonte
function(n)all(unique(cummin(rev(n)))==max(n):min(n))
JavaScript (ES6), 60 bytes
Ungolfed:
Este é um algoritmo mais simples:
Itere a matriz no sentido inverso e verifique se cada número (exceto o primeiro) é um menor ou igual a um número já visto.
Snippet:
Mostrar snippet de código
fonte
Haskell, 62 bytes
Experimente online!
Uma implementação direta da definição em que
g
remove os elementos se eles forem> = do que os elementos à sua direita.fonte
C #, 69 bytes
Resumindo:
s = a equação de entrada (s) é tirada
do elemento s, onde todos os itens após este (pular (I) ndex + 1 itens), o valor atual é maior,
conte-os e veja se o valor restante é igual ao valor esperado ((max) valor imum menos (min) imum) quantidade de números
Experimente online!
fonte
JavaScript (ES6),
82737270 bytesRetorna um booleano.
Quão?
Iteramos em cada elemento x de entrada do painel uma , mantendo um registo do valor máximo encontrado m e o número k de valores que não são maiores do que ou igual a qualquer membro a sua direita. Por definição, os valores válidos aparecem em ordem estritamente crescente.
Usamos, em
filter()
vez demap()
, para que todos os elementos sejam filtrados até que k fique negativo. Isso nos permite isolar o primeiro elemento válido, que também é garantido como o valor mínimo da matriz.Por fim, testamos se
minimum - (maximum + 1) == -number_of_valid_elements
:Casos de teste
Mostrar snippet de código
fonte