Índice del Foro DiosNosLibre.com DiosNosLibre.com
Foro para forros
 
 BuscarBuscar   Lista de MiembrosLista de Miembros   Grupos de UsuariosGrupos de Usuarios   RegístreseRegístrese 
 PerfilPerfil   Identifíquese para revisar sus mensajesIdentifíquese para revisar sus mensajes   ConectarseConectarse 

"99 Bottles of Beer on the wall" + Programación?

 
Este foro está bloqueado: no se puede publicar, responder, ni editar mensajes en este tema.   El tema está bloqueado: no pueden editarse ni agregar mensajes.    Índice del Foro DiosNosLibre.com -> Electrones y Pendorchos
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
z_killemall
Batido, no revuelto


Registrado: 06 Ene 2007
Mensajes: 1519
Ubicación: Sentado en una silla hamaca en la puerta de una cabaña en el bosque con una escopeta en la mano

MensajePublicado: Vie Ene 18, 2008 12:49 pm    Título del mensaje: "99 Bottles of Beer on the wall" + Programación? Responder citando

http://www.99-bottles-of-beer.net/
En fin, es una página en la que te muestran como escribir la clasica canción en 1150 lenguajes de programación. La verdá no sabía que hubiera tantos.
Ejemplos:

En C++:
Código:
#include <iostream>

using namespace std;

template<bool small, int I>
struct pretty_printer;

#define SMALL_PRETTY_PRINTER(num, string) \
template<>\
struct pretty_printer<true, num>\
{\
    static void print()\
    {\
        cout << string;\
    }\
};

SMALL_PRETTY_PRINTER(0, "No")
SMALL_PRETTY_PRINTER(1, "One")
SMALL_PRETTY_PRINTER(2, "Two")
SMALL_PRETTY_PRINTER(3, "Three")
SMALL_PRETTY_PRINTER(4, "Four")
SMALL_PRETTY_PRINTER(5, "Five")
SMALL_PRETTY_PRINTER(6, "Six")
SMALL_PRETTY_PRINTER(7, "Seven")
SMALL_PRETTY_PRINTER(8, "Eight")
SMALL_PRETTY_PRINTER(9, "Nine")
SMALL_PRETTY_PRINTER(10, "Ten")
SMALL_PRETTY_PRINTER(11, "Eleven")
SMALL_PRETTY_PRINTER(12, "Twelve")
SMALL_PRETTY_PRINTER(13, "Thirteen")
SMALL_PRETTY_PRINTER(14, "Fourteen")
SMALL_PRETTY_PRINTER(15, "Fifteen")
SMALL_PRETTY_PRINTER(16, "Sixteen")
SMALL_PRETTY_PRINTER(17, "Seventeen")
SMALL_PRETTY_PRINTER(18, "Eighteen")
SMALL_PRETTY_PRINTER(19, "Nineteen")

#undef SMALL_PRETTY_PRINTER

template<int ones>
inline void
print_ones();

#define ONES_PRINTER(ones, string) \
template<> \
inline void \
print_ones<ones>() \
{\
  cout << string;\
}

ONES_PRINTER(0, " ")
ONES_PRINTER(1, " one")
ONES_PRINTER(2, " two")
ONES_PRINTER(3, " three")
ONES_PRINTER(4, " four")
ONES_PRINTER(5, " five")
ONES_PRINTER(6, " six")
ONES_PRINTER(7, " seven")
ONES_PRINTER(8, " eight")
ONES_PRINTER(9, " nine")

#undef ONES_PRINTER

template<int tens>
inline void
print_tens();

#define TENS_PRINTER(tens, string) \
template<> \
inline void \
print_tens<tens>() \
{\
  cout << string;\
}

TENS_PRINTER(2, "Twenty")
TENS_PRINTER(3, "Thirty")
TENS_PRINTER(4, "Forty")
TENS_PRINTER(5, "Fifty")
TENS_PRINTER(6, "Sixty")
TENS_PRINTER(7, "Seventy")
TENS_PRINTER(8, "Eighty")
TENS_PRINTER(9, "Ninety")

#undef TENS_PRINTER

template<int I>
struct pretty_printer<false, I>
{
    static void print(){
        print_tens<(I - I%10)/10>();
        print_ones<(I%10)>();
    }
};

template<int I>
void pretty_print()
{
    pretty_printer<(I<20), I>::print();
}

template<int I>
inline void
BottlesOfBeer()
{
    pretty_print<I>();
    cout << " bottles of beer" ;
}

template<>
inline void
BottlesOfBeer<1>()
{
    pretty_print<1>();
    cout << " bottle of beer" ;
}

template<int I>
inline void
BottlesOfBeerOnTheWall()
{
    BottlesOfBeer<I>();
    cout << " on the wall";
}

template<int I>
inline void stanza()
{
    BottlesOfBeerOnTheWall<I>();
    cout << ",\n";
    BottlesOfBeer<I>();
    cout <<",\n";
}

template<int I>
inline void bridge()
{
    cout   << "Take one down, pass it around," << endl;
    BottlesOfBeerOnTheWall<I-1>();
    cout <<",\n";
}

template<>
inline void bridge<0>()
{
    cout << "Go to the store and buy some more," << endl;
    BottlesOfBeerOnTheWall<99>();
}

template<int I>
inline void verse()
{
    stanza<I>();
    bridge<I>();
}

template<int I>
inline void sing ()
{
    verse<I>();
    cout << endl;
    sing<I-1>();
}


template<>
inline void sing<0> ()
{
    verse<0>();   
}

int main () {
  sing<99>();
}


En PHP:
Código:
<?php

/**
 * One bottle left exception
 *
 * @author Dave Marshal
 * @since 22/09/2005
 * @package Bottles
 */
class LastBottleException extends Exception {}

/**
 * Out of bottles exception
 *
 * @author Dave Marshal
 * @since 22/09/2005
 * @package Bottles
 */
class OutOfBottlesException extends Exception {}

/**
 * Wall Class
 *
 * @author Dave Marshal
 * @since 22/09/2005
 * @package Bottles
 */
class Wall {

   /**
    * Collection of Bottles
    */
   private $bottle = array();

   /**
    * Wall Constructor
    *
    * @param int $numberOfBottles The number of bottles on this wall
    */
   public function __construct($numberOfBottles=99)
   {
      $this->addBottles($numberOfBottles);
   }

   /**
    * Wall Desctructor
    */
   public function __Destruct() {}

   /**
    * Get next bottle
    *
    * @param boolean $force Force the function to return the last bottle
    * @returns Bottle
    * @throws OutOfBeerException
    */
   public function getNextBottle($force = FALSE)
   {
      if (count($this->bottle) > 1) return array_pop($this->bottle);
      else if (count($this->bottle)==1)
      {
         if ($force) return array_pop($this->bottle);
         else throw new LastBottleException();
      }
      else throw new OutOfBottlesException();
   }

   /**
    * Get number of beers left on the wall
    *
    * @return int
    */
   public function getNumberOfBottles()
   {
      return count($this->bottle);
   }

   /**
    * Add more bottles
    *
    * @param int $numberOfBottles
    */
   public function addBottles($numberOfBottles)
   {
      for ($i=0;$i<$numberOfBottles;$i++)
      {
         $this->bottle[] = new Bottle();
      }
   }
}

/**
 * Bottle Class
 *
 * @author Dave Marshal
 * @since 22/09/2005
 * @package Bottles
 */
class Bottle {
   
   /**
    * Bottle Constructor
    */
   public function __construct() {}

   /**
    * Bottle Destructor
    */
   public function __destruct() {}

}

$wall = new Wall(99);

$continue = TRUE;

while ($continue)
{
   try {
      $bottlesLeftBefore = $wall->getNumberOfBottles();
      $bottle = $wall->getNextBottle();
      $bottlesLeftAfter = $wall->getNumberOfBottles();

      echo $bottlesLeftBefore." bottles of beer on the wall, ".$bottlesLeftBefore." bottles of
beer.\n";
      echo "Take one down and pass it around, ".$bottlesLeftAfter." bottles of beer on the wall.\n\n";
   }
   catch (LastBottleException $oneLeft)
   {
      $bottle = $wall->getNextBottle(TRUE);
      echo "1 bottle of beer on the wall, 1 bottle of beer.\n";
      echo "Take one down and pass it around, no more bottles of beer on the wall.\n\n";
   }
   catch (OutOfBottlesException $out)
   {
      echo "No more bottles of beer on the wall, no more bottles of beer.\n";
      echo "Go to the store and buy some more, ";
      $wall->addBottles(99);
      echo $wall->getNumberOfBottles()." bottles of beer on the wall.\n\n";
      $continue=FALSE;
   }
}

?>


En fin, se entiende lo que digo...
_________________
Volver arriba
Ver perfil del usuario
leoh
Ender el Genocida


Registrado: 31 Jul 2005
Mensajes: 3398
Ubicación: Montevideo, Uruguay

MensajePublicado: Vie Ene 18, 2008 2:50 pm    Título del mensaje: Re: "99 Bottles of Beer on the wall" + Programació Responder citando

z_killemall escribió:
En fin, se entiende lo que digo...

Ehh... no... no entendi un culo.

La página no anda, me da error 403 - Forbidden.
_________________
Me aburrió mi firma anterior. Ahora no tengo firma.
Volver arriba
Ver perfil del usuario
z_killemall
Batido, no revuelto


Registrado: 06 Ene 2007
Mensajes: 1519
Ubicación: Sentado en una silla hamaca en la puerta de una cabaña en el bosque con una escopeta en la mano

MensajePublicado: Vie Ene 18, 2008 4:03 pm    Título del mensaje: Responder citando

Eh? hace un par de horas andaba la página, me cagaron!!
Deben estar de actualizacion o algo por el estilo, probá mas tarde.

En fin, el rollo si no queda claro es el siguiente:
La canción "99 bottles on the wall" es como "un elefante se columpiaba sobre la tela de una araña" pero arranca en 99 y termina en el cero, en el que se vuelve al 99 y la cancion vuelve a empezar. Así una y otra vex hasta la eternidá.

Del 99 al 1 el asunto es asi:

<number> bottles of beer on the wall
<number> bottles of beer!
You take one down, and pass it around
<number - 1> bottles of beer on the wall!

Cuando llegás al 1 cambia la letra:

No bottles of beer on the wall!
No bottles of beer!
Go to the store and buy some more (or Go to the store and steal some more)
99 bottles of beer on the wall!


Y empieza todo de vuelta.

Como se imaginarán, escribir la cancion sería interminable, por eso la idea es escribir un programa que te muestre la interminable letra. La página trata de escribir el programa en la mayor cantidad de lenguajes de programación disponibles. Por el momento son 1150 y siguen creciendo.
_________________
Volver arriba
Ver perfil del usuario
leoh
Ender el Genocida


Registrado: 31 Jul 2005
Mensajes: 3398
Ubicación: Montevideo, Uruguay

MensajePublicado: Vie Ene 18, 2008 4:45 pm    Título del mensaje: Responder citando

apesta!
_________________
Me aburrió mi firma anterior. Ahora no tengo firma.
Volver arriba
Ver perfil del usuario
Ichigo
Ender el Genocida


Registrado: 05 Ago 2005
Mensajes: 3794
Ubicación: En una embarcacion oscura cerca de la costa con un rifle Sniper apuntando a la playa un 2 de Febrero

MensajePublicado: Vie Feb 01, 2008 7:38 am    Título del mensaje: Responder citando

topic al pedo.

LOCK
_________________
My name is God, James God.
Volver arriba
Ver perfil del usuario
Mostrar mensajes anteriores:   
Este foro está bloqueado: no se puede publicar, responder, ni editar mensajes en este tema.   El tema está bloqueado: no pueden editarse ni agregar mensajes.    Índice del Foro DiosNosLibre.com -> Electrones y Pendorchos Todas las horas están en GMT - 3 Horas
Página 1 de 1

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas


Powered by Tovvers