El desafío es identificar el número que falta en una cadena de enteros no delimitados.
Se le da una cadena de dígitos (la entrada válida coincidirá con la expresión regular ^[1-9][0-9]+$
). La cadena representa una secuencia de enteros. Por ejemplo, 1234567891011
. Todos los números en la secuencia están en el rango de 1
e 2147483647
inclusive.
La secuencia es una serie de números donde cada número es uno mayor que su predecesor. Sin embargo, esta secuencia puede contener uno y solo un número faltante de la secuencia. Es posible que una cadena dada tampoco contenga números faltantes de la secuencia. La cadena siempre contendrá al menos dos números de la secuencia.
El código debe generar o devolver el valor faltante, o 0
(esto es un 0
- no un valor falso) en el caso de que no se hayan encontrado valores faltantes.
Las siguientes son entradas válidas y su salida / 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
Si bien todo esto se describe como una 'cadena' como entrada, si el lenguaje es capaz de manejar números arbitrariamente grandes ( dc
y mathematica
, los estoy mirando a ustedes dos), la entrada puede ser un número arbitrariamente grande en lugar de una cadena si eso hace El código más fácil.
Como referencia, esto se inspiró en la pregunta de Programmers.SE: Encuentra el número faltante en secuencia en la cadena
Respuestas:
Haskell,
115112 bytesLa primera línea es una definición de función auxiliar, la segunda es la función principal anónima. Verifique los casos de prueba (tuve que ejecutar pruebas más cortas debido a restricciones de tiempo).
Explicación
Esta es una solución de fuerza bruta: divida la cadena en palabras de todas las formas posibles, analice las palabras en enteros, vea si es un rango con un elemento faltante (devuelve ese elemento y, de lo
0
contrario), y tome el máximo sobre todas las divisiones. La verificación de rango con elemento faltante se realiza en la función auxiliarg
, que toma una listab
y devuelve el único elemento en el rango[head of b..last of b]
que no estáb
, o0
si no existe.fuente
JavaScript (ES6), 117 bytes
Explicación
Enfoque bastante eficiente. Termina instantáneamente para todos los casos de prueba.
Obtiene cada subcadena desde el comienzo de la cadena de entrada como un número
n
y inicializa el número que faltam
a0
. Luego elimina repetidamenten
desde el inicio de la cadena, incrementan
y busca la cadena. Siindex of n != 0
, lo compruebam
. Sim == 0
, establecem = n
y continúa, si no, faltan varios números, así que deja de verificar desde esta subcadena. Este proceso continúa hasta que se haya eliminado toda la cadena.fuente
JavaScript (ES6) 114
Menos golf y explicado
Prueba
fuente
C,
183168166163 bytesSin golf
fuente
891112
donde los números tienen diferentes longitudes?sprintf
llamada devuelve la longitud del número faltante, independientemente de si es más largo que el anterior o no.