diff --git a/WeeklyChallenge2022.playground/Pages/Challenge34.xcplaygroundpage/Contents.swift b/WeeklyChallenge2022.playground/Pages/Challenge34.xcplaygroundpage/Contents.swift index 93dcaea..8be0532 100644 --- a/WeeklyChallenge2022.playground/Pages/Challenge34.xcplaygroundpage/Contents.swift +++ b/WeeklyChallenge2022.playground/Pages/Challenge34.xcplaygroundpage/Contents.swift @@ -15,3 +15,47 @@ import Foundation * - Tienes toda la información sobre los retos semanales en https://retosdeprogramacion.com/semanales2022. * */ + +/* Enunciado: Dado un array de enteros ordenado y sin repetidos, crea una función que calcule y retorne todos los que faltan entre el mayor y el menor. +* - Lanza un error si el array de entrada no es correcto.*/ + + +let missing = NumbersMissing([1,2,10,3,]); + +console.log(missing); + +function NumbersMissing(numbers: Array) : Array | string { + if (!IsOrdered(numbers) || !IsUnique(numbers)){ + return "Error"; + } + let missingNumbers : Array=[]; + for (let index = 1; index < numbers.length; index++) { + if(numbers[index - 1] + 1!= numbers[index]){ + missingNumbers.push(numbers[index - 1] + 1); + numbers.splice(index, 0,numbers[index - 1] + 1); + } + } + + return missingNumbers; +} + +function IsOrdered(numbers: Array) : boolean { + + for (let index = 1; index < numbers.length; index++) { + + if(numbers[index] < numbers[index - 1]) return false; + } + return true; +} + +function IsUnique(numbers: Array) : boolean { + let aux : Array = []; + + for (let index = 0; index < numbers.length; index++) { + if(aux.find((n) => n === numbers[index]) != null){ + return false; + } + aux.push(numbers[index]); + } + return true; +}