Saturday, July 17, 2010

Mini-Competencia de programación: Feudalismo

Hoy, volviendo de la facu, me quedé casi literalmente sin plata encima (tenía nada más ni nada menos que 15 centavos en la billetera), así que tuve que caminar desde el tren a casa en vez de tomarme el bondi. Durante esa caminata se me ocurrió hacer esta competencia.  Y quizá cada tanto organice más de estas mini-competencias, dependiendo de la respuesta que tenga.

Estuve pensando un rato los detalles del problema, pero lo que más tiempo me llevó es pensar cómo hacerla accesible a la mayor cantidad de gente posible. Al final se me ocurrió cómo hacerlo independiente del sistema operativo e independiente del lenguaje de programación. Casi lo limito a Java para hacerme la vida más fácil al evaluar soluciones, pero sabía que muchos iban a salir corriendo jaja. En fin, vamos al problema:



Supongamos que sos el jefe de una familia campesina en la edad feudal. Estás en una zona donde hay 2 castillos, pertenecientes a los señores feudales A y B. Ambos son señores feudales muy bondadosos, por lo que aceptan a cualquier familia que se quiera unir a su feudo, prometiendo pagarles a todas distribuyendo uniformemente una parte de sus ingresos. El señor feudal A gana 700 piezas de oro por año, y el B gana 300 piezas de oro por año. Esto es independiente de la cantidad de familias pertenecientes al feudo de cada señor. Al final de cada año, el señor feudal divide sus ganancias equitativamente entre todas las familias que le fueron leales ese año, y les da la opción de quedarse o de marcharse. 
Así, si hay 10 familias trabajando en el feudo del señor A y 3 en el feudo del señor B, a fin de año las que están con el señor A ganarán 70 piezas de oro cada una, y las que están con el señor B 100.
El objetivo es hacer un programa que decida a qué feudo ir cada año buscando maximizar las piezas de oro ganadas luego de 80 años. Los únicos datos con los que se cuenta en cada año es  la cantidad de familias en cada feudo del año pasado.

Especificación del programa a realizar:

  1. Se puede usar cualquier lenguaje de programación mientras se pueda compilar y correr en Linux.
  2. Para la simulación, las únicas familias participantes serán los programas que envíen los concursantes, por lo que la cantidad de familias se mantendrá constante durante los 80 años (lo que varía es en qué feudo está cada familia cada año).
  3. El programa debe respetar estrictamente un protocolo basado en entrada/salida. Al comenzar su corrida, debe imprimir en salida estándar una línea con un único carácter indicando en qué castillo se desea empezar(una ´A´ o una ´B´). Luego, sucesivamente, debe leer una línea de entrada estándar de la que recibirá los datos de la simulación y volver a outputtear una línea con un único carácter indicando la opción para el año siguiente. La línea de datos que recibirá serán 2 numeros enteros separados por un espacio que indican la cantidad de familias en el castillo de A y la cantidad de familias en el castillo de B, respectivamente.
  4. Notar que los intercambios input/output son en forma interactiva. El programa debe leer los datos, escribir su opción, luego vovler a leer los datos, y escribir su nueva opción, sucesivamente, hasta terminar los 80 años (no es necesario que el programa termine al pasar los 80 años).
  5. Ejemplo de intercambio input/output:
    A
    5 2
    A
    3 4
    B
    1 6
    A
    etc...
  6. Un programa simple en python que descarta los datos de la simulación y, empezando por el castillo A, va siempre cambiando de castillo, podría ser este: ver código. (sketch, sin testear)
  7. Para evitar problemas en la simulación, sería bueno que luego de imprimir a salida estándar cada línea con la decisión, el programa se ocupara de flushear el buffer de salida (en caso de existir). Notar que aunque el programa no usa los datos de la entrada, igualmente debe leerlos para respetar el protocolo input/output.
Bueno, creo que eso es todo. Espero que se haya entendido. Para participar manden su código fuente a feudalismo@7cerebros.com.ar. Cada participante puede mandar hasta 5 estrategias diferentes. En el mail incluir tu nombre, un nombre para la estrategia, y de ser necesario instrucciones para compilar y correr el programa, o cualquier aclaración que se crea necesaria. Si tenés ganas, también dejá un comentario en este post avisando que estás participando para que los demás lo sepan. 
Otra opción: si te da fiaca hacer el programa o no tenés conocimientos de programación, podés mandar por mail una explicación de la estrategia y yo hago el programa!

En una semana, el 24/7/2010, si se llega a una buena cantidad de estrategias participantes, voy a correr la simulación, y postear los resultados. El martes 27/07/2010 voy a correr la simulación y postear los resultados. La estrategia que consiga más monedas de oro luego de los 80 años se gana un gran aplauso (?). Gracias!

saludos,
Manu

pd: cualquier pregunta dejen un comentario así la aclaración le sirve a todos!

Tuesday, July 13, 2010

Sobre el matrimonio homosexual

Este post nació de un comentario que hice en el blog de mi amigo Esteban.

Hola, yo fui hoy a la marcha en favor del único matrimonio heterosexual en el Congreso.

Les pido paciencia para intentar entender porqué fui y porqué defiendo esta postura al parecer tan "retrógrada".

Antes que nada: esa carta que anda circulando más trucha no puede ser... dejen de ponerla sobre la mesa al discutir este tema.

Nadie niega la homosexualidad. Existe y cualquier persona razonable acepta que las uniones homosexuales tienen que tener amparo legal y se tienen que defender los derechos que dichas parejas buscan como ser herencia, seguro médico, jubilación y pensión, etc. Lo que fui a defender a la marcha es el derecho de los chicos que perdieron sus padres a recuperar eso que perdieron y no otra cosa. Todos los chicos nacen de un varón y una mujer. Su derecho, (y el estado tiene que garantizar ese derecho) es a volver a recuperar lo que perdieron. No algo que lo sustituya. La adopción no es un derecho de los que adoptan, sino del chico. Los padres que adoptan a un chico le hacen un favor, un bien, una entrega amorosa, no hacen valer un derecho que tienen. Nadie, sea heterosexual u homosexual tiene derecho a adoptar a nadie. Son los chicos los que tienen derecho a recuperar un padre y una madre.

Para mi es simple. Es un debate que no debería pasar de lo legal. No hay porqué sacarle este derecho a los chicos huérfanos o abandonados por mero capricho de una pareja que quiere cumplir su sueño de criar chicos. No niego que hayan muchísimas parejas homosexuales llenas de amor y buenas intenciones. Sin embargo, para que nazca un chico, se necesita un varón y una mujer. En una pareja homosexual esta condición no se da. Bueno, bánquensela. No van a tener hijos. Punto.


Puede ser que esté equivocado, pero yo no veo error en lo que digo. Y me da bronca que los que se perjudican acá son los que no pueden salir a defenderse porque ni siquiera entienden qué está en juego: los chicos. Por eso fui a la marcha.
Nada tiene que ver ni con la religión ni con Dios. Ni tengo nada en contra de los gays... de hecho apoyo totalmente que se legalicen sus uniones, y se le den derechos de herencia y demás que reclaman. Pero no se metan con los chicos.


Y ya estoy harto de escuchar personas que se hacen los "progres" y buena onda diciendo cosas como "Dejemos durante 20 años que las parejas gay adopten y hagamos un estudio psicológico sobre los chicos una vez crecidos y en sus veinti-tantos, que tengan ideas ya formadas, para ver qué pasa."  y  "es mejor que los chicos tengan dos papás o dos mamás antes que cero de cualquiera de los dos."

A lo primero: ¿querés experimentar con la vida de los chicos? ¿Vos pensaste lo que dijiste? Nadie es quién para proponer experimentar con la vida de nadie. Es muy fácil proponer cosas así desde una burbuja de comodidad intelectual, pero pensá que estás hablando de personas.
A lo segundo: Eso es verdadero, pero inútil a fines prácticos. Hay miles de parejas heterosexuales que hacen esfuerzos  ENORMES para adoptar. El proceso es larguísimo (conozco un caso de 7 años intentando adoptar) e involucra un juicio, y pruebas de infertilidad. De hecho es tan difícil adoptar que existe gente que trafica chicos a parejas desesperadas. Es triste pero es así. Lo que anda mal no es que falte gente que quiera adoptar. El sistema mismo es un asco y está lleno de corrupción, negligencia e intereses políticos (como casi todo en nuestro país). Dejar que adopten las parejas homosexuales no soluciona nada ni mejora en nada la situación deplorable de la adopción en nuestro país.

No me quiero extender mucho más, aunque da para mucho más, pero piensen que también si las parejas homosexuales pueden adoptar, va a ser muy dificil que les digan que NO (como es muy normal y esperado que pase con parejas heterosexuales, por no cumplir los requerimientos), porque al toque van a saltar con que los están discriminando, y que no les quieren dar el chico por ser gays, etc.



En fin. Espero sus respuestas. Realmente quiero que este tema se debata y se piense. También les pido que me hagan saber si creen que me equivoqué con algo que haya dicho. Pero siempre con respeto y con razones. Estoy abierto a escuchar opiniones diferentes o alineadas...

gracias!
Manuel