Alba on Tech

Talking about technology

Kata: Intercambio de variables

Es de sobra conocido el mito de que las personas ciegas agudizan el resto de sentidos para compensar su ceguera. En realidad, el resto de sus sentidos no están más agudizados. Simplemente, les prestan mayor atención, trabajan más con ellos, y los exprimen al máximo. Eso mismo ocurre en muchos aspectos de la vida. Cuando tenemos una carencia, optimizamos los recursos que tenemos. En nuestra profesión nos encontramos con carencias con frecuencia: consumo de memoria, velocidad de procesador, transmisión de datos… Hay muchos aspectos que pueden provocar un problema, y nos vemos forzados con frecuencia a utilizar el ingenio para solventarlos. Un ejemplo que me gusta mucho es este artículo: 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond, donde explican como solventaron los problemas de sincronización del juego Age of Empires frente a las carencias de red. Es largo, pero merece la pena, os lo recomiendo.

Así que, para aguzar un poco nuestro ingenio, os propongo una Kata con una carencia artificial. Es un problema clásico, así que puede que ya lo conozcáis. Se trata de intercambiar dos variables. Lo habitual es hacer esto de la siguiente forma:

a = 2
b = 3
temp = a
a = b
b = temp

Lo que os propongo es que penséis la forma de conseguir esto mismo, pero sin usar ninguna variable adicional. En los comentarios pondré las dos soluciones que conozco, pero seguro que hay más. ¿Se te ocurre alguna?

Y recuerda, no se trata de un concurso. Se trata de una kata. Practica y mejora. Siempre

22 October, 2013 Posted by | Kata | 3 Comments

Kata: Media inversa

Todo el mundo sabe hacer una media. Es uno de los primeros ejercicios de programación que se hacen. Pero en un caso real he tenido que calcular una media inversa, y me ha parecido muy interesante para plantearlo aquí como kata.
Continue reading

25 June, 2012 Posted by | Kata, Programación | 17 Comments

Kata: Ordenar un array ¡sin bibliotecas ni internet!

Hoy en día estamos muy acostumbrados a contar con infinidad de bibliotecas que nos ofrecen soluciones a muchos de los problemas de programación más comunes. Esto es algo maravilloso, que permite centrar el desarrollo en los problemas específicos de una aplicación, y no tener que reinventar la rueda. Pero ¿por culpa de estas facilidades hemos olvidado cómo hacer las cosas nosotros mismos?.
Continue reading

23 February, 2012 Posted by | Kata, Programación | 8 Comments

Kata: Conoce tu lenguaje: Excepciones

Voy a proponeros una Kata, pero antes tengo que poner el contexto.

Una de las cosas más importantes para escribir código eficiente, es conocer bien el lenguaje que estamos utilizando. Esto parece muy obvio, pero no lo es tanto. Hay normativas de codificación que se dan por supuestas, y no necesariamente son iguales en todos los lenguajes.

Un ejemplo de esto es el tema de las excepciones. No voy a hablar de la horrible práctica de los catch vacíos. Voy a hablar de eficiencia.

Continue reading

20 January, 2012 Posted by | Kata, Programación | 1 Comment

Kata: add arrays

Now in english, thanks to Pablo Ruiz :)

Let’s start with something simple to loosen up the muscles.

Many times, when we code with a deadline and we need to solve problems with urge we don’t pay attention to performance. At most, we promise to refactorize later on if needed. It would be great to have some coding ruotines embedded in ourselves that will allow us to code in a more efficient way, without even thinking of it.

So the kata I’m proposing is the following:

We have ten large arrays, with 500 integers each. We want to obtain the number that results from adding each of those 10*500=5000 integers. Easy, right?

Choose your favourite programming language and think about two distinct ways of reaching that sum. For instance, you can sum each array separately and then add up the results. Or you can do partial sums between each array’s position. Or blend all arrays in one and then add up all the numbers. Or whichever way that comes to your mind (a recursive function would make sense?). Implement them.

Now, using a loop, measure the time it takes to execute 1000 iterations of each of them.

What are the results? The way you thought was the fastest, was it? Really?

Bonus I: Upon results, do you conceive a third way that could outmatch the performance?

Bonus II: Repeat the exercise in a language you’ve never coded in.

And remember, this isn’t about a competition. It’s a Kata. Practice and improve. Always.

30 October, 2011 Posted by | Kata | | Leave a comment

Kata: Sumar arrays

Empecemos con algo sencillo, para desentumecer los músculos.

Muchas veces, cuando programamos con una fecha límite, y tenemos que resolver los problemas con prisa, no nos preocupamos por el rendimiento. Como mucho, pensamos en refactorizar más adelante si hace falta. Sería muy bueno tener integradas ciertas rutinas de programación que nos permitan programar de forma más eficiente sin pensarlo.

A si que la kata que propongo es la siguiente:

Tenemos diez arrays largos, de 500 enteros cada uno.  Queremos obtener el número que obtenemos al sumar cada uno de esos 10*500=5000 enteros. Sencillo, ¿verdad?

Elige tu lenguaje de programación preferido. Y piensa dos formas distintas de obtener la suma. Por ejemplo, puedes sumar cada uno de los arrays por separado, y luego sumar los resultados. O puedes hacer sumas parciales de cada una de las posiciones de los arrays. O fundir los arrays en uno, y luego sumar todos los números. O cualquier otra forma que se te ocurra (¿una funcion recursiva tendría sentido?). Implementalas.

Ahora, mediante un bucle,  mide el tiempo que tarda en ejecutarse 1000 veces cada una de ellas.

¿Cuales son los resultados? ¿La forma que pensabas que sería más rápida, lo era de verdad?

Bonus I: A la vista de los resultados, ¿se te ocurre una tercera forma capaz de conseguir un mejor rendimiento?

Bonus II: Repite el ejercicio en un lenguaje en el que nunca hayas programado

Y recuerda,  no se trata de un concurso. Se trata de una kata. Practica y mejora. Siempre

27 October, 2011 Posted by | Kata | 6 Comments

   

Follow

Get every new post delivered to your Inbox.

Join 315 other followers