¡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.