The same thing we do every night, Pinky

El bug que paralizó al Zune 30

--- Cause of Zune 30 leapyear problem ISOLATED!

El 31 de diciembre toda la primera generación de dispositivos Zune 30 se congeló simultáneamente. La razón:

while (days > 365)
{
    if (IsLeapYear(year))
    {
        if (days > 366) /* <------- !!! */
        {
            days -= 366;
            year += 1;
        }
    }
    else
    {
        days -= 365;
        year += 1;
    }
}

¿Quién maneja el caso 'days == 366' en año bisiesto? Como no está manejado, cuando se presentó puso al 'while' en ciclo infinito.

Möbius, permutaciones y el orden lexicográfico

El algoritmo de orden lexicográfico es una función "sucesor" tal que define orden total en una lista. Si se comienza con una lista ordenada y se le aplica la función sucesor ((length lista)! - 1) veces se llega a la lista original en orden inverso, habiendo pasado por todas las permutaciones.

Si se toma un "extremo" de la "cinta" formada por la lista de permutaciones, se invierte, y se pega con el otro extremo, se produce una banda de Möbius de permutaciones.

Collatz, revisado

Variante a la conjetura de Collatz.

Los siguientes números tienen una propiedad: la cantidad de pasos que requieren (en versión 'económica', hacer par y dividir por 2 es un solo paso) para llegar a 1 es mayor que el número.

A simple vista (machacando números) parece que son todos los enteros positivos que cumplen con esa propiedad. ¿Será eso cierto?

1,3,7,9,27,31,41,47,54,55,62,63

Actualización: Si se toma 'mayor o igual' en lugar que 'mayor' la lista es:

1,3,6,7,9,27,31,41,47,54,55,62,63,73

El código en Haskell que estoy usando es el siguiente:

Fortune

Todas las frases giratorias en formato BSD Fortune.

Generador de Primos

Código en Haskell para generar una lista infinita de primos. Relativamente rápido. Escrito al final de la parte Haskell (primer mes) del curso de Lenguajes de Programación. Copiar y pegar en un archivo .hs, cargar en hugs o ghci y correr 'primos ([ ],2)'; o hacer un corte con 'primos ([ ],2) !! 1024' para encontrar el primo número 1024 (siendo 2 el primo número cero).

-- Generador de primos. Jaime Soffer, Mayo 2007.
-------------------------------------------------------------
 
-- Raí­z cuadrada para enteros (composición de funciones)

Algoritmo booleano para Collatz

Para determinar si un entero positivo n finaliza empleando las reglas de la conjetura de Collatz se pueden aprovechar algunas propiedades de los números binarios; y los binarios tienen equivalencias con los booleanos. Por lo tanto parece de lo más natural intentar aplicar directamente operaciones lógicas como reglas.

El conjunto de reglas requiere tres operaciones básicas: (\ x -> x+1), (\ x -> x/2), y (\ x -> 3*x).

Ordenamiento Gnomo

Gnome Sort es un algoritmo de ordenamiento relativamente ineficiente (comparable con bubblesort, similar pero algo peor que insertion sort) pero es muy fácil de implementar y ocupa n espacio en memoria (y en esta implementación tres registros de 16 bit; dos índices y uno general).

Proyecto terminal

Versión oficial:

Políticas de gestión de memoria para una aplicación de gráficas

1. Introducción

En un sistema de cómputo, cada tipo de memoria se puede caracterizar por su velocidad de acceso, su capacidad y su costo por bit. Generalmente, las memorias de mayor velocidad de acceso son las más costosas y las más pequeñas, mientras que las más lentas y de mayor capacidad tienen un menor precio.

Uso interesante de macros

Un lenguaje de macros es un metalenguaje que generalmente se usa en otro lenguaje para generar código; en lugar de escribir una función, se escribe un miniprograma ("macro") que escribe la función. En lenguajes como Lisp es un mecanismo realmente poderoso (y no demasiado difícil de usar, aunque tampoco trivial) que permite integrar compiladores a la medida dentro de cualquier programa, porque el lenguaje de macro es el mismo Lisp. En C es simplemente el preprocesador que ejecuta instrucciones #define, #include, etc.

Simulador de máquina de Turing en Haskell

Máquina de Turing
------------------------------

Compilar con '-package parsec'; ejemplo de compilación: ' $ ghc -package parsec -o turing turing.lhs '

El ejecutable recibe como primer argumento la descripción de una máquina de Turing, y como segundo argumento una cadena inicial para la cinta.

Distribuir contenido