O desafio é identificar o número ausente em uma sequência de números inteiros não limitados.
Você recebe uma sequência de dígitos (a entrada válida corresponderá à expressão regular ^[1-9][0-9]+$
). A sequência representa uma sequência de números inteiros. Por exemplo 1234567891011
,. Todos os números na sequência estão no intervalo de 1
e 2147483647
inclusive.
A sequência é uma série de números em que cada número é um maior que seu antecessor. No entanto, essa sequência pode conter um e apenas um número ausente da sequência. É possível que uma determinada sequência também não contenha números ausentes da sequência. A string sempre conterá pelo menos dois números da sequência.
O código deve gerar ou retornar o valor ausente, ou 0
(este é um valor 0
- não um valor falso), caso os valores ausentes não tenham sido encontrados.
A seguir, são entradas válidas e sua saída / retorno:
input output actual sequence (for refrence)
123467 5 1 2 3 4 _ 6 7
911 10 9 __ 11
123125126 124 123 ___ 125 126
8632456863245786324598632460 8632458 8632456 8632457 _______ 8632459 8632460
123 0 1 2 3
8632456863245786324588632459 0 8632456 8632457 8632458 8632459
Embora tudo isso seja descrito como uma 'string' como entrada, se o idioma for capaz de manipular números arbitrariamente grandes ( dc
e mathematica
, estou olhando para vocês dois), a entrada pode ser um número arbitrariamente grande em vez de uma string, se isso permitir o código mais fácil.
Para referência, isso foi inspirado na pergunta Programmers.SE: Encontre o número ausente na sequência na sequência
Respostas:
Haskell,
115112 bytesA primeira linha é uma definição de função auxiliar, a segunda é a principal função anônima. Verifique os casos de teste (tive que executar testes mais curtos devido a restrições de tempo).
Explicação
Esta é uma solução de força bruta: divida a string em palavras de todas as maneiras possíveis, analise as palavras em números inteiros, verifique se é um intervalo com um elemento ausente (retornando esse elemento e
0
outros) e tire o máximo de todas as splitters. A verificação de intervalo com elemento ausente é feita na função auxiliarg
, que pega uma listab
e retorna o único elemento no intervalo[head of b..last of b]
que não estáb
ou0
se não existe.fonte
JavaScript (ES6), 117 bytes
Explicação
Abordagem bastante eficiente. Termina instantaneamente para todos os casos de teste.
Obtém cada substring do início da string de entrada como um número
n
e inicializa o número ausentem
para0
. Em seguida, ele remove repetidamenten
do início da sequência, incrementan
e pesquisa a sequência. Seindex of n != 0
, verificam
. Sem == 0
, definam = n
e continue, se não houver, há vários números ausentes, portanto pare de verificar a partir dessa substring. Esse processo continua até que toda a cadeia tenha sido removida.fonte
JavaScript (ES6) 114
Menos jogado e explicado
Teste
fonte
C,
183168166163 bytesUngolfed
fonte
891112
onde os números têm comprimentos diferentes?sprintf
chamada retorna o tamanho do número ausente, independentemente de ser mais longo que o anterior ou não.