2010
02.10

Leyendo el artículo enlazado de Barrapunto, titulado Reflexiones sobre la Confianza en la Confianza, me llamó la atención el párrafo que habla sobre los programas autorreplicantes. Ken Thompson, el autor del artículo, dice:

Para ser más exactos, el problema es escribir un programa fuente que, una vez compilado y ejecutado, produzca como salida una copia exacta de su código fuente. Si nunca lo has hecho, te animo a hacerlo. Descubrir cómo hacerlo es una revelación que supera de lejos a cualquier beneficio obtenido de contar cómo lo lograste.

Nunca he probado a programar tal cosa, así que me puse manos a la obra e intenté este ejercicio en python. Tras unos pocos minutos, di con esta solución. No es la más corta (especialmente teniendo en cuenta que reproduce las líneas shebang y de codificación), pero funciona. Como el Sr. Thomson dice, es un ejercicio muy interesante. Aquí está el código:

Guárdalo como prog1.py y luego ejecuta python prog1.py.
Mejor aún, puedes hacer python prog1.py > prog2.py y luego python prog2.py > prog3.py y así sucesivamente.

Share
  1. Eso no vale 😉
    Tiene que ser un programa completo. Si usas la fución print code, entonces tiene que imprimirse también. La idea es que la salida del programa sea el mismo programa completo.

    Like or Dislike: Thumb up 0 Thumb down 0

  2. Como funciono yo:
    1.- Busco una función print code
    2.- Encuentro tu trozo de código
    3.- Lo meto en una función
    4.- Llamo a la función

    Lo siento, pero la primera pirámide de 0s y 1s la hice utilizando printf por cada 0 y por cada 1.

    No he cambiado.

    Like or Dislike: Thumb up 0 Thumb down 0