Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[Juego] Haz el programa lo más sencillo que puedas.

Estas en el tema de [Juego] Haz el programa lo más sencillo que puedas. en el foro de C/C++ en Foros del Web. ¡Hola a todos!, me gustaría proponer un juego donde cada 5 comentarios un usuario propone un enunciado sencillo, donde este mismo tiene que demostrar la ...
  #1 (permalink)  
Antiguo 05/04/2013, 05:57
Avatar de Doommarine_Maxi  
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 8 años, 5 meses
Puntos: 8
[Juego] Haz el programa lo más sencillo que puedas.

¡Hola a todos!, me gustaría proponer un juego donde cada 5 comentarios un usuario propone un enunciado sencillo, donde este mismo tiene que demostrar la solución de su enunciado en C/C++, y los usuarios que le siguen deben comentar su resolución, cuanto más sencilla mejor.

Este juego no es más que para poder divertirnos y, al mismo tiempo, admirar aquellas resoluciones de los usuarios con más experiencia y ver la elegancia de su código. Si han pasado más de 30 días desde el ultimo enunciado y todavía no se han llegado a los 5 comentarios de resolución de este mismo, se puede proponer uno nuevo.

Voy a empezar con un problema muy sencillo, donde el usuario tiene que lograr este patrón numérico hasta el numero 23, es obligatorio que el programa muestre en pantalla el resultado (admito, que este problema es de un curso de C++ que tengo, por eso mismo es bastante sencillo):

1, 5, 3, 7, 5, 9, etc...

Mi resolución es la siguiente:

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     int i=1;
  8.     bool sumar = true;
  9.     do
  10.     {
  11.         cout << i;
  12.         if (i >= 23) /* Si la variable alcanza un numero mayor o igual a veintitrés el bucle termina*/
  13.         {
  14.             cout << "." << endl;
  15.             break;
  16.         }
  17.         cout << ", ";
  18.         if (sumar)
  19.             i += 4;
  20.         else
  21.             i -= 2;
  22.         sumar = !sumar;
  23.     } while (1); // Bucle infinito
  24.     return 0;
  25. }

Última edición por Doommarine_Maxi; 05/04/2013 a las 05:59 Razón: Error de ortografía
  #2 (permalink)  
Antiguo 05/04/2013, 08:51
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: [Juego] Haz el programa lo más sencillo que puedas.

asi lo hice yo..

Código:
#include <iostream>
 
using namespace std;
 
int main()
{
    int i=1;
    do 
    {
        cout << i;
        cout << ", ";
            i += 4;
            cout << i;
            if(i == 23)
               {
                    cout << "." << endl;
                    break;
               }
            cout << ", ";
            i -= 2;
    } while (1); // Bucle infinito
    return 0;
}
__________________
Miguel0N
  #3 (permalink)  
Antiguo 05/04/2013, 09:09
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 7 años, 6 meses
Puntos: 46
Respuesta: [Juego] Haz el programa lo más sencillo que puedas.

La verdad es que me parece muy buena idea, yo lo he hecho en C y he sustituido el while por un for, aquí va:
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char* argv[])
  4. {
  5.     int a=1,b;
  6.     for(b=0;;b++)
  7.     {
  8.         printf("%d, ",a);
  9.         if(b%2 == 0) a+=4;
  10.         else a-=2;
  11.         if(a>= 23)
  12.         {
  13.                         printf("%d, ",a);
  14.                         break;
  15.         }
  16.     }
  17.     return 0;
  18. }
  #4 (permalink)  
Antiguo 05/04/2013, 12:03
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 9 años, 3 meses
Puntos: 228
Respuesta: [Juego] Haz el programa lo más sencillo que puedas.

Se que va a parecer un chiste, pero para mi es una enseñanza. Muchas veces por cuestiones de optimización es preferible calcular ciertas cosas en tiempo de compilación que en tiempo de ejecución. En este caso no se aprecia mucho pero es una idea que se vuelve útil en ciertas ocasiones.

Código C:
Ver original
  1. int main () {
  2.    printf("1, 5, 3, 7, 5, 9, 7, 11, 9, 13, 11, 15, 13, 17, 15, 19, 17, 21, 19, 23\n");
  3.    return 0;
  4. }

Saludos,
  #5 (permalink)  
Antiguo 05/04/2013, 15:48
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 6 años, 11 meses
Puntos: 83
Respuesta: [Juego] Haz el programa lo más sencillo que puedas.

"...lo más sencillo que puedas..."

sam90 ha dado en el clavo :) En videojuegos suelen hacerse esas tablas de datos precalculadas para ahorrar el mayor tiempo posible (esas tablas de datos pueden incluir cualquier cosa)

No obstante dejenme darle aun otro enfoque: apuesto por copiar el codigo de L3m0n (ojo, cualquier modelo del post sirve) en una libreria estatica y linkarla al programa para hacer el programa mas simple posible:

Primero la libreria estatica (series_doom.h + series_doom.c -> libreria libseriesdoom.a/.lib):

Código:
//series_doom.h
#ifndef SERIESDOOM
#define SERIESDOOM

/**
http://www.forosdelweb.com/f96/juego-haz-programa-mas-sencillo-que-puedas-1045352/
*/

#include <stdio.h>

void series_doom_modelo_a(int );

#endif
Código:
//series_doom.c
#include "series_doom.h"

void series_doom_modelo_a(int inicio) {
	int a = inicio, b;
    for(b=0; ; b++) {
        printf("%d, ", a);
        if(b%2 == 0) a += 4;
        else a -= 2;
        if(a >= 23) {
            printf("%d, ", a);
            break;
        }
    }
}
Con lo que obtengo el programa mas simple imposible :))

Código:
#include "series_doom.h"
//requiere linkar con libseriesdoom.a/.lib
int main() {
	series_doom_modelo_a(1);
	return 0;
}
Saludos
vosk
  #6 (permalink)  
Antiguo 05/04/2013, 18:14
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 16 años, 5 meses
Puntos: 22
Respuesta: [Juego] Haz el programa lo más sencillo que puedas.

Mi aportación simplificando el for:

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. int main(){
  6.     for(int i=5; i<=23; i+=2)cout << i-4 << "," << i << " ,"[i<23];
  7.     return 0;
  8. }

Para los que encuentran extraña la sintaxis de la última coma, es simple:

Si "ABC" representa un array de caracteres, entonces pueden utilizar los corchetes para acceder a sus elementos, por ejemplo:

El resultado de "ABC"[0] es 'A' y el resultado de "ABC"[2] es 'C'.

Ahora, aprovechando que un resultado booleano en realidad equivale a cero o uno, entonces:

" ,"[true] es equivalente a " ,"[1] que tiene como resultado ','.
" ,"[false] es equivalente a " ,"[0] que tiene como resultado ' '.

Por lo tanto " ,"[i<23] imprime ',' únicamente cuando i es menor a 23.

Saludos.
  #7 (permalink)  
Antiguo 05/04/2013, 19:25
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 9 años
Puntos: 13
Respuesta: [Juego] Haz el programa lo más sencillo que puedas.

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main (int argc, char **argv) {
  4.     int s = 1;
  5.     while ((s < 23) && (s += 4) && (printf("%i,%i,", s, s-2) && (s -= 2)));
  6.        
  7.     return 0;
  8. }

Estoy de acuerdo con el ejemplo de Sam, mas sencillo que su ejemplo no hay nada, para ganar optimización, mas cuando es un valor que tiene que ser, si, por que sí.

A mi parecer, mientra menos lineas y mas entendible, muchisimo mejor.

Saludos.

Última edición por guzzano; 06/04/2013 a las 03:05

Etiquetas: juego, resolución
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:24.