null

mayo 20, 2010

Curso libre de Ciencias de la Computación – Videos

Archivado en: Programación — diegolog @ 7:35 pm

Sólo quería dejar un enlace a un curso de Ciencias de la Computación de la MIT (Instituto Tecnológico de Massachusett). Va desde la introducción al tema, donde se asume apenas un conocimiento básico de programación hasta temas avanzados, algoritmos de búsqueda, algoritmo de Monte Carlo, complejidad, etc.
Si bien se utiliza Python para mostrar los códigos se puede seguir con cualquier lenguaje. Tranquilamente se pueden ver por separados sólo los temas de interés.

Saludos.

mayo 18, 2010

Cantidad de dígitos de un factorial – Usando Stirling

Archivado en: Math, Programación — diegolog @ 11:23 pm

Lo primero que tenemos que tener en cuenta es que la cantidad de dígitos de un entero positivo x es:

\displaystyle \lfloor\log_{10}(x)\rfloor + 1

Si queremos saber la cantidad de dígitos de un factorial sin calcularlo, podemos utilizar la aproximación de Stirling:

\sqrt{\left(2\;\pi\;n\right)}\left(\dfrac{n}{e}\right)^n \le n! \le \sqrt{\left(2\;\pi\;n\right)} \left(\dfrac{n}{e}\right)^n \left(1+\dfrac{1}{12\;n-1}\right)

Aplicamos la primer fórmula al límite inferior y al límite superior, si obtenemos la misma cantidad de dígitos para ambos, esa es la cantidad de dígitos de n!.

Saludos, Diego.

Cálculo de divisores – Algoritmos

Archivado en: Math, Programación — diegolog @ 10:16 pm

Aquí voy a mostrar métodos eficientes para obtener la cantidad de divisores de un número entero positivo, y también para obtener una lista de éstos divisores.

Lo primero que hay que saber y muy importante es:

Sea n un número entero positivo, entonces por cada divisor que exista hasta la raíz cuadrada de n, hay otro divisor por encima de la raíz cuadrada de n.

Supongamos que existe un número x tal que es divisible por n, y x > sqrt(n), entonces y es un número entero tal que: (más…)

Mouseless Browsing – Vimperator – ¡Más teclado y menos mouse!

Archivado en: Software libre — diegolog @ 4:04 pm

Una herramienta muy útil para navegar sin mouse es Vimperator, una extensión para el Firefox. A los usuarios de Vim seguramente se les viene a la mente el nombre, puesto que Vimperator está basado en Vim para la navegación, “browsing the Vim-way”.

Vimperator is a Firefox browser extension with strong inspiration from the Vim text editor, with a mind towards faster and more efficient browsing.

(más…)

Mouseless Linux – ¡Más teclado y menos mouse!

Archivado en: Linux, Software libre — diegolog @ 3:36 pm

Lo primero que necesitamos para ir mouseless es una tiling window manager, estos gestores de ventanas nos permiten navegar entre las diferentes ventanas que tenemos abiertas sin usar el mouse, así como cambiarles el tamaño y modificar el layout o disposición de las ventanas. La mayoría soportan “tags” que son como los workspaces, diferentes espacios de trabajo donde en cada uno puede tener diferentes ventanas abiertas y cada una con la disposición (tamaño y posición) que querramos. La diferencia entre los tags y los workspaces es que podemos tener una misma ventana en diferentes tags.
Todas son configurables (algunas más que otras) y todas te acomodan las ventanas de un modo que se maximiza el uso del monitor.
Aún así te permiten entrar en modo “flotante”, donde podemos sobreponer ventanas, útil para reproductores de videos o ventanas de diálogos, por ejemplo.

Veamos algunas de ellas:
wmii: busca de mantenerse mínima pero aún así proveer un método práctico de configuración (soporta python y ruby).
Wmii
(más…)

mayo 15, 2010

Más magia con map en Haskell – Problema de ProjectEuler

Archivado en: Programación — diegolog @ 8:20 pm

Esta vez se trata del problema 56, nos pide que hallemos el número de la forma a^b tal que la suma de sus dígitos sea la máxima, donde 0 < a < 100 y 0 < b < 100.
Lo resolví por fuerza bruta, y la verdad que la velocidad con que obtuvo la respuesta me sorprende (~1 segundo).
El código es:

maximum (map (sum) (map (map digitToInt) (map (show) ([a^b | a <- [1..99], b <- [1..99]]))))

(más…)

Encontrar la suma de los dígitos del factorial de 100 – Haskell

Archivado en: Programación — diegolog @ 12:12 am

Estoy aprendiendo Haskell así que me puse a resolver algunos problemas de Project Euler que ya había resuelto en Lua y la verdad que Haskell es un lenguaje muy interesante.

El problema en particular es el 20, nos dice que obtengamos la suma de los dígitos de 100!.

El código en Haskell que resuelve el problema es el siguiente:

factorial 0 = 1
factorial n = n * factorial(n-1)

sum (map digitToInt(show (factorial 100)))

A ver, explico un poco el código. Las dos primeras líneas definen el factorial, me parece que no podría ser más intuitivo!. Primero definimos el factorial de 0 como 1, y seguido el factorial de n como n por el factorial de (n-1).

La parte donde se realiza la suma de los dígitos es un poco más rebuscada, veamos que hice (desde dentro hacia afuera).
·factorial 100 es totalmente intuitivo, obtenemos el factorial de 100 según nuestra definición anterior.
·show convierte el número obtenido (el factorial) en un string.
·digitToInt es una función que convierte un caracter (’0′..’9′) a un entero, pero como nosotros tenemos un string usamos map para ejecutar la función a cada elemento del string y obtener una lista a partir de esos elementos.
·sum simplemente suma todos los elementos de la lista.

Y listo! Ya tenemos el resultado, qué lindo no? :D

mayo 14, 2010

Capturar SIGINT (señal de interrupción – Ctrl+C) C/C++

Archivado en: Linux, Programación — diegolog @ 10:25 pm

Si en el shell presionamos Ctrl+C (se puede configurar para que sea otra) mientras tenemos algún programa en ejecución lo que hacemos es enviar una señal de interrupción (SIGINT) al programa en ejecución, dicho programa podrá atrapar (catch) la señal para ejecutar alguna función de último momento (liberar memoria por ejemplo). Lo que vamos a ver ahora es como hacer un programa en C/C++ para poder atrapar la SIGINT y hacer algo antes de que sea cerrado.

Las señales y las funciones para trabajar con ellas están en el header “signal.h”, hay muchas cosas que se pueden hacer con las señales, pero acá vamos a ver sólo como ejecutar una función cuando se obtiene una señal determinada.
Lo único que necesitamos usar es la función “signal”, que toma como primer parámetro la interrupción que queremos atrapar (en nuestro caso SIGINT, ver más abajo para una lista de las señales), y como segundo parámetro una función que toma como parámetro un int (la señal).

(más…)

Jobs control – Ctrl+Z en el shell

Archivado en: Linux — diegolog @ 10:18 pm

Cuando estamos trabajando desde la línea de comando, podemos pausar/suspender un programa que estamos corriendo para volver después. A esto nos referimos con “Job control”. Si ejecutamos algún programa interactivo en la línea de comandos y durante su ejecución presionamos Ctrl+Z el programa será suspendido y recuperaremos control del shell. Si ejecutamos:
$ jobs
Nos mostrará todos los jobs que tenemos en el shell con su respecto estado, por ejemplo:

$ ping google.com
PING google.com (209.85.195.104) 56(84) bytes of data.
64 bytes from eze03s01-in-f104.1e100.net (209.85.195.104): icmp_seq=1 ttl=55 time=36.7 ms
^Z
[1]+ Stopped ping google.com
$ lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> ^Z
[2]+ Stopped lua
$ jobs
[1]- Stopped ping google.com
[2]+ Stopped lua
$

Lo que hice acá es ejecutar un ping, suspenderlo, ejecutar Lua y suspenderlo. Luego con jobs obtengo ambos jobs con sus respectivos ids.
Podemos usar el comando fg job_id para poner en “foreground” el job indicado, esto es, volver al modo interactivo del job. También podemos usar bg job_id para ponerlo en “background”, o sea, seguirá corriendo pero sin interrumpir nuestro shell. Para matarlo usamos kill %job_id (usar el %).

mayo 13, 2010

Animaciones con GNU Octave – Gif y Videos

Archivado en: Math, Programación, Software libre — diegolog @ 4:37 pm

Cómo hacer animaciones gif y videos a partir de ploteos realizados con GNU Octave. Utilizando además ImageMagick para hacer los gifs y ffmpeg para los videos.
Gráfica con Octave

(más…)

Entradas más antiguas »

Tema WordPress Classic. Blog de WordPress.com.

Seguir

Get every new post delivered to your Inbox.