-
Notifications
You must be signed in to change notification settings - Fork 0
/
firstDuplicate.html
103 lines (84 loc) · 2.82 KB
/
firstDuplicate.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!--
Dado un arreglo que contiene solo números, en el rango de 1 a una longitud (mínimo 2),
encuentre el primer número duplicado para el que la segunda aparición tiene el índice mínimo.
Si hay más de un número duplicado, devuelve el número para el que la segunda aparición
tiene un índice más pequeño que la segunda aparición del otro número.
Ejemplo:
Para a = [2, 1, 3, 5, 3, 2], la salida debe ser: firstDuplicate(a) = 3
Hay dos duplicados, los números 2 y 3.
La segunda aparición de 2 tiene un índice más grande [5] que
la segunda aparición de 3 [4], por lo que la respuesta es 3.
Para a = [2, 2], la salida debe ser firstDuplicate(a) = 2
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>First Duplicate</title>
</head>
<body>
<h1>ALGORITMO QUE DEVUELVE LA PRIMERA APARICIÓN DE UN NÚMERO DUPLICADO DE UN ARREGLO</h1>
<script>
// Funciones para escribir en el documento
function saltarLinea(saltos){
for(var i=0; i<saltos; i++){
document.write("<br>");
}
}
function imprimir(frase){
document.write(frase);
saltarLinea(2);
}
// Función para validar si es número
function esNumero(num){
return !isNaN(parseFloat(num)) && isFinite(num);
}
// Función que retorna el primer duplicado
function firstDuplicate(a) {
let duplicates = [];
let firstD;
// Recorre el arreglo y encuentra los duplicados, introduciendo los índices a un nuevo arreglo
for(let i=0; i<a.length; i++){
for(let j=i+1; j<a.length; j++){
if (a[i]===a[j]) {
duplicates.push(j);
}
}
}
console.log(`Duplicates: ${duplicates}`);
if (duplicates.length == 0) {
return "No se encontraron duplicados"
} else {
firstD = duplicates[0];
for (let i=1; i<duplicates.length; i++) {
if (duplicates[i]<firstD) {
firstD = duplicates[i];
}
}
return `El primer número duplicado es: ${a[firstD]}`
}
}
// Definición de variables
let aLongitud;
let aNumeros = [];
let resultado;
// Solicitar datos al usuario
do{
aLongitud = parseInt(prompt("Ingresa la longitud del arreglo (entre 2 y 20)"));
} while(esNumero(aLongitud)!=true || aLongitud<2 || aLongitud>20);
for(let i=0; i<aLongitud; i++) {
let numero;
do{
numero = parseFloat(prompt("Ingresa un número"));
} while(esNumero(numero)!=true);
aNumeros.push(numero);
}
// Realizar cálculos
resultado = firstDuplicate(aNumeros);
// Presentar resultado
imprimir(`Los números ingresados son: ${aNumeros}`);
imprimir(resultado);
</script>
</body>
</html>