¡Llegó el momento!. Me alegra observar que la participación ha sido considerable en este primer reto de programación que planteé. Si no habías oído hablar de él no leas las soluciones aún, no seas tonto y aventúrate a conseguirlo por ti mismo.

Para ver algunas de las soluciones propuestas por los lectores (y un servidor) sigue leyendo…
Para pasar al siguiente reto ve aquí.
Para empezar, y como prometí, aquí publico mi solución (en Java). Posteo el método main completo, para que podais probarlo en vuestro PC con un simple copy-paste. Los elementos del array se pasan como argumentos, por linea de comandos, separados por espacios. Ahí va:
sgm (YakiBoo) – Lenguaje: Java
public static void main(String[] array) {
int a = 0, b = 1;
int longitud = array.length;
String repetido = "Ninguno";
int i;
for(i=0; i<longitud*longitud && a<longitud-1; i++){
if (a<longitud-2 && i!=0 && i%longitud==0){
a++;
b = a + 1;
}
if (array[a].equals(array[b])) {
i = longitud * longitud;
repetido = array[a];
}
if (b < longitud - 1) {
b++;
}
}
System.out.println("Repetido: " + repetido);
}
Ahora le toca a los lectores. Así que a continuación podrás encontrar las diferentes soluciones que me habeis enviado, junto al protagonista de cada fragmento de código:
-
Pablo – Lenguaje: PHP
<?php
$vector = array('Maria', 'Luis', 'Alberto2',
'Alberto', 'Cesar', 'Adriana',
'Cesar3', 'Adriana');
$temporal ="";
sort($vector);
while (list($i,$valor)=each($vector))
{
if($temporal==$valor) echo "Repetido: ". $valor;
$temporal=$valor;
}
?>
-
Rodrigo Testillano – Lenguaje: C
#include <stdio.h>
int main(int argc, char **args)
{
int a,b,n,i,longitud,aux,repe;
longitud = 5; /*vale cualquier longitud*/
int m[] = {1,2,4,0,3};
n = longitud;
a = 0;
b = a+1;
for(i=0; i<n; i++)
{
if(b==longitud){ a++; b = a+1; n--; i = 0;}
if(m[a]==m[b]){repe = m[a]; aux = 1; break; }
else b++;
}
if (aux != 1) printf("No hay repetidos\n");
else printf("%s%i\n", "Elemento repetido: ", repe);
return 0;
}
-
Maek – Lenguaje: Java
OBJETO array [];
OBJETO actual = null;
int posicion1 = 0;
int posicion2 = 1;
boolean repetido = false;
while (!repetido) {
actual = array[posicion1];
if (actual == array[posicion2]) {
repetido = true;
} else {
posicion2++;
}
if (posicion2 == array.length) {
posicion1++;
posicion2 = posicion1 + 1;
}
}
return posicion2;
-
Jose Luis Espinosa – Lenguaje: Matlab
for i=1:length(matriz)
b=find(matriz==matriz(i));
if length(b)>1
solucion=matriz(i);
end
end
Además, Jose Luis nos propuso otras soluciones: mediante recursividad y utilizando estructuras de datos.
Con recursividad:
int elemento_repetido(int[] matriz){
for(i=0;i<matriz.length;i++){
int encontrado=buscar(matriz[i],i+1,matriz);
if (encontrado==1) return a[i];
}
}
int encontrado(int buscado, int pos, int[] matriz){
if (pos==matriz.length) return 0;
if (buscado==matriz[pos]) return 1;
else return encontrado(buscado, pos+1, matriz);
}
Con estructuras de datos:
/*Usando árboles binarios (deberían estar implementados
algunos métodos get y set jeje)*/
int elemento_repetido(int[] matriz){
int[] matriz;
arbol_binario arbol;
for (int i=0;i<matriz.length;i++){
int result=arbol.insertar(matriz[i]);
if (result==1)
System.out.println("Repetido: "+matriz[i]);
}
}
public int insertar(int i){
int a=0;
if (this.nodo==i) a=1;
else{
if (i>this.nodo){
if(this.getder()==null)
this.setder(new arbol_binario(i));
else a=this.getder().insertar(i);
}
else{
if(this.getizq()==null)
this.setizq(new arbol_binario(i));
else a=this.getizq().insertar(i);
}
}
return a;
}
-
Lesthack – Lenguaje: Python
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
if __name__ == "__main__":
vector = [1,5,3,4,2,5]
while(len(vector)>0):
temp = vector.pop()
if temp in vector:
print "Elemento repetido:",temp
-
Gracias a todos los que habeis colaborado enviando vuestra solución. Esto motiva a proponer más retos. No os alejeis mucho de YakiBoo porque mañana o pasado mañana publicaré el “Segundo reto de programación” (promete ser curioso, aunque algo más complicado).
Un saludo.



Eso eso, uno más jodío jeje, así ya tengo excusa pa no ponerme a hacer las prácticas XD
[...] puedes ver aquí las soluciones y aquí el siguiente [...]
pseudocodigo
array(1,4,5,2,3,1,9,0)
create myarray[0..9]
set zero myarray
while not end of array do
get element in array
increment myarray[element]
if myarray[element] is greater than one then element is repeated, end; otherwise continue
Interesante solución!
Es perfectamente válida para un array de enteros. La única pega es si el array fuese de otros elementos…
Pero bien bien, gracias por la idea.
Un saludo.
Si, pero ya eso depende del lenguaje de prog que utilices; hay lenguajes que aceptan cadenas como indices de arreglos, entonces el arreglo ya no estaria restringido a los enteros.
Saludos, Atribute.