elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 10:19  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Retos .Net
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Retos .Net  (Leído 4,675 veces)
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


Ver Perfil WWW
Retos .Net
« en: 8 Septiembre 2010, 18:44 »

Siguendo el legado de otros temas, como el de Retos C++ y Retos en Python, ahora tenemos Retos en .Net

Las reglas:
  • Cualquier lenguaje .Net es permitido.
  • Cualquier tipo de aplicación es permitida, pero solo en casos de necesitarlo, sino, Consola.
  • Solo está permitido usar la librería de clases de .Net.
  • Solo posteen Soluciones a codes, si tienen dudas comunicarse con el que creó el reto.
  • El que soluciona el reto, postea uno, así de simple.
  • El que deje morir este hilo no le hablo más xD
  • Cada reto nuevo debe incrementarse su dificultad.

RETO #1
Si listamos todos los números naturales por debajo del 10 que sean múltiplos de 3 o 5, obtendremos 3, 5, 6 y 9. La suma de dichos números es 23.

Encuentra la suma de todos los multiplos de 3 o 5 por debajo de 1000

Suerte!


En línea

madpitbull_99
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.897



Ver Perfil WWW
Re: Retos .Net
« Respuesta #1 en: 8 Septiembre 2010, 19:27 »

Solucion #Reto 1
Código
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Reto1_NET
{
   class Program
   {
       static void Main(string[] args)
       {
           const int numero = 1000;
           int suma = 0;
 
           Console.WriteLine("======================================================== ");
           Console.WriteLine("                      RETO #1                            ");
           Console.WriteLine("Suma de todos los multiplos de 3 y 5 por debajo de 1000  ");
           Console.WriteLine("======================================================== ");
 
           for (int i = 0; i < numero; i++)
               if ((i % 3 == 0) || (i % 5 == 0))
               {
                   Console.WriteLine(i);
                   suma = suma + i;
               }
           Console.WriteLine("La suma de los multiplos es : ");
           Console.WriteLine(suma);
           Console.ReadLine();
       }
   }
}

De momento no se me ocurre ningún reto, si alguien quiere poner algo : Que lo ponga xD


« Última modificación: 8 Septiembre 2010, 19:30 por madpitbull_99 » En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
criskapunk

Desconectado Desconectado

Mensajes: 255



Ver Perfil
Re: Retos .Net
« Respuesta #2 en: 8 Septiembre 2010, 19:33 »

Estaba esperando un post asi por aca ;D

Aca lo dejo en vb.net:

Código
Module Module1
 
   Dim i, acu As Integer
 
   Sub Main()
       For i = 1 To 1000
           If (i Mod 3 = 0) Or (i Mod 5 = 0) Then
               acu += i
           End If
       Next
       Console.WriteLine("La suma de los numeros es: ")
       Console.WriteLine(acu)
       Console.ReadLine()
   End Sub
 
End Module

Un saludo ;)
En línea
final_frontier
Wiki

Desconectado Desconectado

Mensajes: 574


WOLOLOOO! Deal with it x)


Ver Perfil
Re: Retos .Net
« Respuesta #3 en: 8 Septiembre 2010, 19:37 »

Código
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Reto1_Net
{
   class Program
   {
       static void Main(string[] args)
       {
           int suma = 0, i;
           for (i = 1; i < 1000; i++)
           {
               if (((i % 3) == 0) || ((i % 5) == 0))
               {
                   suma += i;
                   //Console.Write(i+" ");
                   //Por si queréis ver los números
               }
           }
 
           Console.WriteLine("El total de las sumas es: "+suma);
           Console.Read();
           //El resultado es 233168
       }
   }
}

Reto2: Teniendo los extremos de un intervalo, mostrar todos los números primos comprendidos entre ellos incluyendo dichos extremos
En línea

Sie ist der hellste Stern von allen und wird nie vom Himmel fallen...
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Retos .Net
« Respuesta #4 en: 8 Septiembre 2010, 20:12 »

Acá esta mi solución en F# para el Reto #2:
Código
let isPrime (n:int) =
  let bound = int (System.Math.Sqrt(float n))
  seq {2 .. bound} |> Seq.exists (fun x -> n % x = 0) |> not
 
let primes m n =
   seq {m .. n}
 
primes 53 1042
   |>  Seq.iter(fun x -> if isPrime x then printfn "%d" x)
 
System.Console.ReadKey();
 

Reto #3
145 es un numero curioso, es decir: 1! + 4! + 5! = 1 + 24 + 120 = 145  ;-)
Dado un intervalo, encuentra todos los números curiosos en el.


En línea

final_frontier
Wiki

Desconectado Desconectado

Mensajes: 574


WOLOLOOO! Deal with it x)


Ver Perfil
Re: Retos .Net
« Respuesta #5 en: 8 Septiembre 2010, 21:10 »

Quiero que sepas que te odio por estos ejercicios raros :xD

Código
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Reto3_Net
{
   class Program
   {
       static void Main(string[] args)
       {
           curious obj = new curious();
           int a, b, aux;
 
           try
           {
               Console.Write("Número 1: ");
               a = Convert.ToInt32(Console.ReadLine());
 
               Console.Write("Número 2: ");
               b = Convert.ToInt32(Console.ReadLine());
 
               if (a > b)
               {
                   aux = a;
                   a = b;
                   b = aux;
               }
 
               for (aux = a; aux <= b; aux++)
                   if (obj.curioso(aux))
                       Console.Write(aux + " ");
           }
           catch(Exception e)
           {
               Console.WriteLine(e.Message);
           }
           Console.Read();
       }
   }
 
   class curious
   {
       private int num(char a)
       {
           int b = 0;
           switch (a)
           {
               case '0': b = 0;
                   break;
 
               case '1': b = 1;
                   break;
 
               case '2': b = 2;
                   break;
 
               case '3': b = 3;
                   break;
 
               case '4': b = 4;
                   break;
 
               case '5': b = 5;
                   break;
 
               case '6': b = 6;
                   break;
 
               case '7': b = 7;
                   break;
 
               case '8': b = 8;
                   break;
 
               case '9': b = 9;
                   break;
           }
 
           return b;
       }
       public bool curioso(int a)
       {
           int aux = 0;
           String cad = a.ToString();
           for (int i = 0; i < cad.Length; i++)
               aux += factorial(num(cad[i]));
 
           if (aux == a)
               return true;
 
           else
               return false;
       }
       public int factorial(int a)
       {
           if (a <= 1)
               return 1;
           else
               return a * factorial(a - 1);
       }
   }
}

Si al comprobarlo ves que no es un FAIL, me mandas un mp y pongo el cuarto reto :B
En línea

Sie ist der hellste Stern von allen und wird nie vom Himmel fallen...
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Retos .Net
« Respuesta #6 en: 8 Septiembre 2010, 21:45 »

Si está bien , pero ehm, bueno, creo que no es la mejor forma de hacerlo xD, esperemos que alguien postee una CON RETO INCLUIDO! xD
« Última modificación: 8 Septiembre 2010, 22:06 por [D4N93R] » En línea

carlitos_jajajajaja

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: Retos .Net
« Respuesta #7 en: 9 Septiembre 2010, 06:31 »

Esta forma es mas eficiente ya que solo calcula los factoriales 10 veces,
faltaria implementar factorial de manera no recursiva...

Tambien le falta agragar un poco de elegancia al codigo, no me gusta tanto el hecho de que Program.Fact sea static, deberia inclurilo dentro de una clase curious como el codigo anterior, pero eso ya no lo hago yo :P

El codigo esta en c#:

Código
using System;
 
namespace Problema2Mejorado
{
   class Program
   {
       static Factorial fact = new Factorial(10);
       static void Main(string[] args)
       {
           int inicio, final;
           Console.WriteLine("Introduzca el primer numero del intervalo");
           inicio = int.Parse(Console.ReadLine());
           Console.WriteLine("Introduzca el ultimo numero del intervalo");
           final = int.Parse(Console.ReadLine());
           for (int probar = inicio; probar <= final; probar++)
           {
               if (EsCurioso(probar))
                   Console.WriteLine("{0}, ", probar);
           }
           Console.ReadKey();
       }
       //Para omitir conversiones inutiles recibo el numero como string ya q necesito analizar sus digitos
       static bool EsCurioso(int Numero)
       {
           string Num = Numero.ToString();
           int sumador = 0;
           foreach (char digito in Num)
           {
               //Con esto me ahorro todo el switch case del otro codigo :p
               int ValorDigito = int.Parse(digito.ToString());
               sumador += fact[ValorDigito];
           }
           if (sumador == int.Parse(Num))
               return true;
           else
               return false;
       }
   }
 
   class Factorial
   {
       //En este arreglo guardaremos los factoriales de 0 hasta 9, para q solo tengan q ser calculados una vez :)
       private int[] factoriales;
       public Factorial(int rango)
       {
           factoriales = new int[rango];
           for (int i = 0; i < rango; i++)
           {
               factoriales[i] = CalcularFactorial(i);
           }
       }
       int CalcularFactorial(int n)
       {
           if (n <= 1)
               return 1;
           else
               return n * CalcularFactorial(n - 1);
       }
       //Y de manera muy limpia obtenemos el factorial de un numero con el operador []
       public int this[int i]
       {
           get
           {
               return factoriales[i];
           }
       }
   }
}
 
 



Reto 3:

El usuario proporcionara un numero de pruebas p, y un numero de intervalos n

El programa debera generar p numeros aleatorios entre 1 y q (tal que q sea el menor numero divisible por n, pero mayor o igual a 100), y elaborar un reporte sobre que porcentaje de los numeros cayo en cada intervalo.

Si por ejemplo el numero de intervalos n es 4, se consideraran los intervalos 1-25, 26-50, 51-75 y 75-100.


No se si me deje entender, si no lo hice avisenme...
En línea

Merodeo los foros, esperando el momento de decir algo inteligente...

Se necesita paciencia
final_frontier
Wiki

Desconectado Desconectado

Mensajes: 574


WOLOLOOO! Deal with it x)


Ver Perfil
Re: Retos .Net
« Respuesta #8 en: 9 Septiembre 2010, 11:15 »

No sé si será esto lo que pides pero te muestro la salida del programa:

Código:
Números aleatorios: 2
Número de intervalos: 7
53 26 <-- Números aleatorios
Intervalos:
(1,15) (16,30) (31,45) (46,60) (61,75) (76,90) (91,105)

Código
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Reto4_Net
{
   class Program
   {
       static void Main(string[] args)
       {
           //----------------------------------//
 
           Random obj = new Random();
           int n, p, q = 100, i, j;
           int[] intervalos;
 
           //----------------------------------//
           Console.Write("Números aleatorios: ");
           p = Convert.ToInt32(Console.ReadLine());
 
           Console.Write("Número de intervalos: ");
           n = Convert.ToInt32(Console.ReadLine());
 
           intervalos = new int[p];
 
           while ((q % n) != 0)
               q++;
 
           for (i = 0; i < p; i++)
           {
               intervalos[i] = obj.Next(q);
               Console.Write(intervalos[i]+" ");
           }
           Console.Write("\nIntervalos: \n");
           j = q / n;
 
           for (i = 0; i < n; i++)
               Console.Write("("+((i*j)+1)+","+((i+1)*j)+") ");
           Console.Read();
       }
   }
}

Reto #5 (Corrección por amenaza de D4N93R :xD)

Tenemos un pequeño programa que almacena el registro de algunos alumnos que han hecho matrícula, con un máximo de 10 matriculados.

Crear dos tablas, una con los candidatos y otra con los admitidos, si la lista de admitidos esta llena, a la hora de insertar uno nuevo hay que comprobar la nota de corte (digamos un 5)

Ordenar de manera ascendente los usuarios por nota
« Última modificación: 9 Septiembre 2010, 15:21 por final_frontier » En línea

Sie ist der hellste Stern von allen und wird nie vom Himmel fallen...
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Retos .Net
« Respuesta #9 en: 11 Septiembre 2010, 16:56 »

Código
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Reto5
{
   public class Student
   {
       public byte Score { get; set; }
       public string Name { get; set; }
 
       public Student(string input)
       {
           Score = Convert.ToByte(input.Substring(0, 2));
           Name = input.Substring(3);
       }
       public override string ToString()
       {
           return string.Format("Score: {0:00}, Name = {1}", Score, Name);
       }
   }
   static class Program
   {
       static int Main()
       {
           byte scoreLine = 5, capacity = 3;
 
           List<Student> students = new List<Student>();
 
           Console.WriteLine("Ingrese alumnos, formato: NN NOMBRE en donde NN es la nota.");
           string input = string.Empty;
 
           while (!string.IsNullOrEmpty(input = Console.ReadLine()))
           {
               students.Add(new Student(input));
           }
 
           if(students.Count <= capacity)
               ShowList(students);
           else
           {
               var query = (from s in students
                           where s.Score > scoreLine
                           orderby s.Score descending
                           select s).Where((s, index) => index < capacity);
               ShowList(query);
           }
           Console.ReadKey();
           return 0;
       }
 
       private static void ShowList(IEnumerable<Student> students)
       {
           foreach (var s in students)
               Console.WriteLine(s.ToString());
       }
   }
}

Reto #6

Una lista/array/vector/queue o lo que quieran, debe contener una cantidad de palabras. El reto consiste en comparar esas palabras para conseguir posibles anagramas.
Ejm: si tengo el array: "arroz", "zorra" la aplicación debe mostrar que esos dos son anagramas.

:P

EDIT: El array debe ser más o menos grande, o permitir la adición de elementos por parte del usuario, como quieran, pero no solamente arroz y zorra  :¬¬
EDIT2: No solo es palíndromo, sino que también en forma de anagrama, por ejemplo: ROMA - AMOR - OMAR - MORA - RAMO  :¬¬
« Última modificación: 11 Septiembre 2010, 17:21 por [D4N93R] » En línea

criskapunk

Desconectado Desconectado

Mensajes: 255



Ver Perfil
Re: Retos .Net
« Respuesta #10 en: 13 Septiembre 2010, 16:01 »

Como te odio [D4N93R] :¬¬ jaja

Reto #3

Código
Option Explicit On
 
Module Module1
 
   Dim n1, n2, longitud, num, f, resultado As Integer
   Dim strNum As String
   Dim i, j, k As Integer
 
   Sub Main()
 
       Console.WriteLine("Ingrese el primer valor del intervalo: ")
       n1 = Val(Console.ReadLine())
       Console.WriteLine("Ingrese el segundo valor del intervalo: ")
       n2 = Val(Console.ReadLine())
       For i = n1 To n2
           strNum = CStr(i)
           longitud = strNum.Length
           For j = 0 To (longitud - 1)
               num = CInt(CStr(strNum(j)))
               If (num = 0) Or (num = 1) Then
                   f = 1
               Else
                   For k = 1 To num
                       f *= k
                   Next
               End If
               resultado += f
               f = 1
           Next
           If i = resultado Then
               Console.WriteLine(i)
               Console.WriteLine("Es un numero curioso! :)")
           End If
           resultado = 0
       Next
       Console.ReadLine()
   End Sub
 
End Module

No se si puedo poner algun reto :P

Un saludo
En línea
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Retos .Net
« Respuesta #11 en: 15 Septiembre 2010, 05:02 »

Bueno cómo nadie resolvió el reto, voy a poner la solución:
Código
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Reto6
{
   class Program
   {
       static void Main(string[] args)
       {
           string[] words = { "programador", "framework", "zorra", "mora", "amor", "roma", "arroz" };
 
           var wordsOrdered = words.GroupBy(w => w.Trim(), new AnagramComparer());
 
           foreach (var a in wordsOrdered)
           {
               Console.WriteLine("**********************");
               foreach (var b in a)
               {
                   Console.WriteLine(b);
               }
           }
           Console.WriteLine("**********************");
       }
   }
}
 
 
public class AnagramComparer : IEqualityComparer<string>
{
   public bool Equals(string x, string y)
   {
       return getLetters(x) == getLetters(y);
   }
 
   public int GetHashCode(string obj)
   {
       return getLetters(obj).GetHashCode();
   }
 
   private string getLetters(string word)
   {
       char[] chars = word.ToCharArray();
       Array.Sort<char>(chars);
       return new string(chars);
   }
}
 

Reto #7
El número 197 es llamado primo circular porque todas las combinaciones de sus digitos son primos también.

Hay 13 primos por debajo de 100 que son circulares:  2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97.

El reto consiste en saber cuantos primos circulares hay por debajo de un millón.

Reto #8
El que haga este proceso en menos tiempo.. Así que a postear soluciones que yo les mido el rendimiento del método.

 ;-)
« Última modificación: 15 Septiembre 2010, 18:05 por [D4N93R] » En línea

carlitos_jajajajaja

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: Retos .Net
« Respuesta #12 en: 20 Septiembre 2010, 15:46 »

Cuanto tiempo mas o menos nos deberia tardar en calcular???
En línea

Merodeo los foros, esperando el momento de decir algo inteligente...

Se necesita paciencia
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Retos .Net
« Respuesta #13 en: 20 Septiembre 2010, 15:50 »

Ni idea, calculo unos 1-2 minutos. Supongo. Puede que más.. Puede que menos x) Si ya lo terminaste, postealo, y cualquier cosa lo vamos optimizando.
En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.507


El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Retos .Net
« Respuesta #14 en: 26 Septiembre 2010, 06:40 »

[D4N93R] creo que ambos cometimos un pequeño error... colocamos un reto que mato la idea de los ejercicios, que tal si cambias el ejercicio?
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Wargame] 23 Retos !! Sencillos y Medios !! -- 23 Retos !!
Desafíos - Wargames
niñoweb 7 4,133 Último mensaje 19 Marzo 2009, 14:43
por niñoweb
Retos
Desafíos - Wargames
Daemon Freedom 8 4,312 Último mensaje 13 Junio 2010, 04:24
por Daemon Freedom
Retos C/C++ « 1 2 ... 5 6 »
Ejercicios
[L]ord [R]NA 85 13,290 Último mensaje 3 Octubre 2010, 16:57
por Komodo
cuando consigo nuevos retos?
WarZone
Tyrz 11 1,531 Último mensaje 15 Junio 2011, 23:11
por [-Franko-]
Desarrollo de Retos Informaticos
Desarrollo Web
Sinedra 0 1,271 Último mensaje 23 Febrero 2011, 19:23
por Sinedra
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines