Ir al contenido principal

This is my blog, more about me at marianoguerra.github.io

🦋 @marianoguerra.org 🐘 @marianoguerra@hachyderm.io 🐦 @warianoguerra

project euler - problema 2

La diferencia es que en python lo hice con generadores ya que queda mas prolijo, hasta donde se no hay generadores en los otros.

Python

# Each new term in the Fibonacci sequence is generated by adding the previous
# two terms. By starting with 1 and 2, the first 10 terms will be:
# 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
# Find the sum of all the even-valued terms in the sequence which do not
# exceed four million.

def fibonacci():
one = 0
two = 1
step = 1

while True:
one, two = two, one + two
yield two
step += 1

def calculate(limit):
result = 0
for value in fibonacci():
if value > limit:
break

if value % 2 == 0:
result += value

return result

def print_result():
print calculate(4000000)

if __name__ == '__main__':
print_result()



Erlang

-module(ej_002).
-compile(export_all).
%-export([calculate/1, print_result/0]).

fibonacci_step(First, Second) -> {Second, First + Second}.

calculate(First, Second, Limit) -> calculate(First, Second, Limit, 0).

calculate(_First, Second, Limit, Accum) when Second > Limit -> Accum;
calculate(First, Second, Limit, Accum) ->
{NewFirst, NewSecond} = fibonacci_step(First, Second),

case NewSecond rem 2 of
0 -> NewAccum = Accum + NewSecond;
1 -> NewAccum = Accum
end,

calculate(NewFirst, NewSecond, Limit, NewAccum).

calculate(Limit) -> calculate(0, 1, Limit).

print_result() -> io:format("~w~n", [calculate(4000000)]).


Lisp (note que los paréntesis dejan de molestar y si lo tabulas de una forma particular se parece mucho a python :D)

(defun fibonacci-step (one two)
(list two (+ one two)))

(defun calculate-helper (one two limit accum)
(cond ((> two limit) accum)
(T (let ((result (fibonacci-step one two)))
(let ((new-one (car result))
(new-two (cadr result)))

(if (eq (rem new-two 2) 0)
(calculate-helper new-one new-two limit (+ accum new-two))
(calculate-helper new-one new-two limit accum)))))))

(defun calculate (limit) (calculate-helper 0 1 limit 0))

(defun print-result () (print (calculate 4000000)))

project euler - problema 1

me cree una cuenta en project euler para aprender bien erlang y lisp, voy a intentar resolver todos los problemas en esos lenguajes y en python como lenguaje conocido para comparar los resultados. Obviamente esto es algo que voy a abandonar, la pregunta es cuando :D

No necesariamente voy a usar la misma forma, porque a veces no se puede o no la se, por ahora con tal que ande esta todo bien.

aca va el resultado del primer problema

python

# Add all the natural numbers below one thousand that are multiples of 3 or 5.

# If we list all the natural numbers below 10 that are multiples of 3 or 5,
# we get 3, 5, 6 and 9. The sum of these multiples is 23.
# Find the sum of all the multiples of 3 or 5 below 1000.

def calculate():
return sum(x for x in xrange(1000) if x % 3 == 0 or x % 5 == 0)

def print_result():
print calculate()

if __name__ == '__main__':
print_result()


en erlang

-module(ej_001).
-export([calculate/0, print_result/0]).

calculate() -> lists:sum([X || X <- lists:seq(0, 1000), X rem 3 == 0 orelse X rem 5 == 0]).

print_result() -> io:format("~w~n", [calculate()]).


en lisp

(defun multiple-of-3-or-5 (value)
(or (eq (rem value 3) 0)
(eq (rem value 5) 0))
)

(defun calculate-helper (value accum limit)
(cond ((= value limit)
accum)
((multiple-of-3-or-5 value)
(calculate-helper (+ value 1) (+ accum value) limit))
(T
(calculate-helper (+ value 1) accum limit))
)
)

(defun calculate () (calculate-helper 0 0 1000))

(defun print-result ()
(print (calculate)))

(print-result)

Llega un momento en la vida de todo hombre...

en la que uno crea una distribución live basada en ubuntu

mi primer distro live, creada para probar y para ayudar a pyar en su proyecto de difusión del lenguaje, contiene un escritorio liviano (openbox + fbpanel) y un conjunto de herramientas para el desarrollo del lenguaje, entre ellas:

Interpretes

  • python 2.4
  • python 2.5
  • python 3.0
  • ipython
Editores
  • gedit
  • vim
  • emacs
  • scribes
IDEs

  • Geany
  • Glade-3 (no es una ide del todo)
Otros

  • gnome-terminal
  • thunar
  • obconf (para configurar openbox)
  • openbox
  • fbpanel
  • sqlite3
  • NetworkManager
  • firefox
cosas que le faltan

  • agregarle localización a español
  • agregarle una pagina de inicio a firefox con links a la documentación local
  • la documentación local
  • frameworks web
la iso pesa en este momento 387 MB así que hay bastante espacio para seguir poniendo cosas.

como siempre, acá van los screenshots:





recien arrancado


todos los interpretes


todos los editores


geany + documentacion



Thunar, firefox y la configuracion de open box


glade-3

Quotes

PHP is a minor evil perpetrated and created by incompetent amateurs, whereas Perl is a great and insidious evil perpetrated by skilled but perverted professionals.

Engineers are all basically high-functioning autistics who have no idea how normal people do stuff.

I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.

he idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.

Never trust a programmer in a suit.


E E E E Enterprise!

  • Estas parseando metadatos de imagenes en tu super enterprise entorno java
  • le tiras un XPath al Nodo de los metadatos que te devuelve la API y no te devuelve nada
  • pensas "debe estar mal la query XPath"
  • lo probas en un debugger de XPath y anda
  • le das mil vueltas y sigue sin andar
  • probas con DOM a mano (que es una API horrenda) y anda
  • pero te negas a hacerlo en DOM pelado
  • seguis probando
  • "no puede ser que la API esta mal" pensas
  • ya te rendis y le preguntas a google
  • "This class is not intended to be used for general XML processing. In particular, Element nodes created within the Image I/O API are not compatible with those created by Sun's standard implementation of the org.w3.dom API. In particular, the implementation is tuned for simple uses and may not perform well for intensive processing."
  • Intensive processing? no responde a los queries XPath, eso no es intensive, eso es mal implementado!
  • lo siguiente lo dijo mejor este vago que lo que podria escribir yo asi que lo cito
"I can understand that IIOMetadataNode may be a subset of what is
possible in a org.w3.dom.Node, but that does not mean it should
actually be wrong. Since javax.imageio.metadata.IIOMetadata.
getAsTree() returns an org.w3.dom.Node, I believe that compliance
with the contract for org.w3.dom.Node is required.

In the case of the JPEG 2000 metadata accessed using this method,
I have observed Nodes of type Element with Values set, which is
illegal.

If Element nodes are not going to have Text children in your model,
then they should have Attribute children with the Attribute name
being "value", and I don't think the JPEG 2000 metadata is doing
that (unlike the standard metadata which does use Attributes).

Also, it is all very well to say that the IIOMetadataNode is not
a "real" Node, but the point of choosing this methodology was so
as to allow the use of "ordinary" style DOM accessors, at least
that is how I remember the decision in the JSR 015 Expert Group
discussions. It is presumably the point of the existence of the
getAsTree() method.

To that end, if an ordinary Transformer cannot render the structure
returned by getAsTree() as XML without losing information, and if
XPath cannot query it, then I would argue that the implementation
of getAsTree() is broken, not just limited.

The "ability to store an Object reference within a node" is all
very well in special circumstances, but should NOT in my opinion,
be abused just to point to a scalar type, for example. This begs
the question of what the behavior is supposed to be, or defined
to be, for javax.imageio.metadata.IIOMetadata.getAsTree() in
such circumstances. Not that I have looked into the detail of
how this is implemented, just wondering theoretically how such
an Object reference would be correctly used and under what use
cases it is required."

http://forums.java.net/jive/thread.jspa?messageID=255691

y el problema es que esto ya me paso antes, en la api del widget para mostrar Rich Text en swing no hay forma en la api para obtener el offset del cursor contando el HTML que esta por detras, solo te da el offset del texto que esta en pantalla, por lo tanto hay muchas acciones que se re complican, buscando en los foros por esa epoca habia respuestas como "si, sabemos que esta mal pero no lo vamos a arreglar por X o por Y".

muy enterprise..

Edit 1:

  • por que no puedo iterar sobre un NodeList en ese pseudo foreach que tienen? es un iterable despues de todo no?
  • porque Vector no tiene una api para hacer slicing?
  • porque Vector, LinkedList y ArrayList son implementaciones de List? no podrian esconder los detalles de implementacion al usuario y hacerles pensar que estan eligiendo mal cada vez que eligen uno por sobre el otro?
  • Porque Vector es thread safe y LinkedList y ArrayList no?
  • La version limitada de Node que me devuelve la metadata de la imagen no me deja hacer getElementByTagName, asi que no puedo hacer mas que iterar por todos los childs buscando el que me hace falta ya que por suerte en la implementacion se mueve de posicion.
  • size() length() getLength() getSize(), no se ponen de acuerdo en eso no?
demasiado por hoy

Igualdad

La igualdad entre el hombre y la mujer sera un hecho el día que las mujeres entiendan y admitan que el molinete en el metegol va en contra del sacrosanto deporte y dejen de ejercerlo por propia voluntad.

maldito burgues


Lo mas extremo que hice esta semana fue correr el bondi una cuadra escuchando fun people




ya que estamos les dejo una canción y una letra de fun people.

(noten la capacidad del vago para meter esa letra en ese ritmo)

Imposible es rescatar volver a vivir ciertos momentos si por un desengaño juntaste mucha bronca y si por
un desengaño juntaste mucha rabia pero vamos que nada es para tanto y tanto no lo es todo, ante todo con
firmeza mantiene tu espiritu con humor vence tus tabues deja atras tu timidez si en verdad lo nesesitas ve a
buscar lo que te gusta no te engañes no te mientas que nada es para tanto y tanto no lo es todo ante todo y
con firmeza mantiene tu espiritu con humor.


Quote

“The next big thing is the one that
makes the last big thing usable.”
Blake Ross

X=?

El X supone la defensa radical y consecuente de la libertad. El X correctamente entendido es equivalente al liberalismo. La sociedad libre y ética es la basada en la propiedad privada y los contratos, donde ninguna persona o grupo de personas está legitimado para agredir a otros. La sociedad no tiene derecho a forzar a los individuos.

X es una de las palabras mas mal usadas que conozco.

me gusto esa definición.