Code Damage

En los viejos tiempos de la computación se coleccionaban parodias de canciones, evidentemente escritas tras largas horas sin dormir mientras se completaba algún proyecto. La barbaridad que están a punto de leer es mi humilde y delirante contribución al folklore hacker.

(original: Brain Damage, del DSotM)

The programmer is on the lab
The programmer is on the lab
Compiling games and profilers and hacks
Got to keep the froshies on the path

The programmer is on the hall
The programmers are on the hall    [[Seguir leyendo]]

Collatz en base 6

Un programa para operar sobre la conjetura de Collatz en base seis. No implementa la multiplicación por tres; en lugar de eso multiplica por seis y divide por dos. Un posible cambio podría ser retirar la división por dos y sustituirla por multiplicar por tres y dividir entre seis. Otra cosa que posiblemente hay que mejorar es retirar las colas de ceros que se acumulan; aunque el número de ceros puede dar información adicional.

Nótese que en ningún momento empleo números en el sentido convencional del término.

     [[Seguir leyendo]]

Tren Fantasma

Alrededor de las siete y media de la noche pasa a veces un tren vacío en Salto del Agua, se detiene como si fuera a abrir, pero nunca abre. A continuación, la única fotografía conocida del tren fantasma. Bueno, la única que yo conozco.

Analizando compilación con algoritmos genéticos

Esto no quedó como me hubiera gustado, pero lo pongo para lo que pueda servir. Para el proyecto final de Análisis de Algoritmos escribí un entorno muy básico que hace algo parecido a Acovea, nada más que hecho en poco más que un fin de semana. Tiene muchos errores de concepto y probablemente de implementación, y la conclusión posiblemente no sea válida.    [[Seguir leyendo]]

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:    [[Seguir leyendo]]

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)
   [[Seguir leyendo]]

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).    [[Seguir leyendo]]

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).    [[Seguir leyendo]]

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.    [[Seguir leyendo]]

Distribuir contenido
Powered by Drupal, an open source content management system