Video podcast de ViveCodigo 00x12 - 2do. Coding Dojo
"En esta emisión del podcast convocamos a la comunidad de desarrolladores a asistir al 2do. Coding Dojo de ViveCodigo.org, en donde les pusimos un par de retos a implementar: #7 Project Euler y Roman Numerals
Es interesante ver las respuestas de todos pues se utilizaron varios lenguajes y las soluciones incluso entre mismos lenguajes difieren en su implementación.
Les recomendamos leer el post del Dojo en ViveCodigo.org, pues encontrarán las referencias a las respuestas que se desarrollaron y en la mayoría de los casos los asistentes mejoraron sus soluciones.
Que lo disfruten tanto como nosotros..."
- neodevelop's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Primos en JavaScript
Jajaja parece que andaba drogado. Pues como me da penita, hice el primer ejercicio pero con JavaScript y sin jQuery porque no fue necesario.
Saludos y muchas Gracias ViveCodigo : )
var isPrime = function(n){
if(n <= 1){ return false}
if(n <= 3){ return true }
if(n%2 == 0){ return false}
var lim = Math.sqrt(n)
for(var i = 3; i <= lim; i++){
if(n%i == 0){
return false;
}
}
return true;
};
var getSolution = function(n){
var index = 0;
while(n!=0){
if(isPrime(++index)){
n--
}
}
return index;
};
/*TEST*/
var assert = function(fun){
if(fun) ; else throw 'error assert!!!';
};
assert( isPrime(-1) == false );
assert( isPrime(0) == false );
assert( isPrime(1) == false );
assert( isPrime(2) == true );
assert( isPrime(3) == true );
assert( isPrime(4) == false );
assert( isPrime(5) == true );
assert( isPrime(6) == false );
assert( isPrime(7) == true );
assert( isPrime(8) == false );
assert( isPrime(9) == false );
assert( isPrime(10) == false );
assert( isPrime(11) == true );
assert( isPrime(12) == false );
assert( isPrime(13) == true );
assert( isPrime(14) == false );
assert( isPrime(15) == false );
assert( isPrime(16) == false );
assert( isPrime(17) == true );
assert( isPrime(18) == false );
assert( isPrime(19) == true );
assert( isPrime(20) == false );
assert( isPrime(21) == false );
assert( isPrime(22) == false );
assert( isPrime(23) == true );
assert( isPrime(24) == false );
assert( isPrime(25) == false );
assert( getSolution(2) == 3 );
assert( getSolution(3) == 5 );
assert( getSolution(6) == 13 );
assert( getSolution(10001) == 104743 );
</script>
Rompe el ciclo antes
Rodrigo: Para hace rmas rápida la ejecucion de tu codigo podrias romper el ciclo antes. Cuando haces esto:
// is = false;
return false; // asi pienso que seria mas rapidito
}
en ves de establecer el valor a false mejor retornalo. Ya que sabes que no es primo no tienes nada mas que validar.a ver pruebalo y nos compartes el resultado.
Gracias Gera…
Gracias Gera… ya actualice el código : )
En clojure
Primos
(= (mod n m) 0))
(defn primo?[x]
(cond (= x 2) true
(or (< x 2) (div? x 2)) false
true (empty? (for [r (range 3 (+ (Math/sqrt x) 1) 2)
:when (div? x r)] [r]))))
(defn primo-nth[n]
(last (take n (filter primo? (range)))))
(println (primo-nth 10001))
Romanos
(def romdec ["" "X" "XX" "XXX" "XL" "L" "LX" "LXX" "LXXX" "XC"] )
(def romcen ["" "C" "CC" "CCC" "DC" "D" "DC" "DCC" "DCCC" "CM"])
(def rommi ["" "M" "MM" "MMM"])
(def romanos [romuni romdec romcen rommi])
(defn dig [n] ;; Descompone un numero en sus digitos
(cond (zero? n) nil
true (cons (mod n 10) (dig (quot n 10)))))
;; Convierte decimal a romano.
;; Parte un numero ejem: 3999.
;; ( 9 9 9 3)
;; Lo asocia cada numero con su representacion en romano (IX XC CM MMM)
;; Une la lista anterior en una cadena MMMCMXCIX.
(defn dectorom[n]
(reduce #(str %2 %1 ) "" (map #(%2 %1) (dig n) romanos)))
(println (dectorom 3999))
Excelente !!
Muy buen vídeo.
Se ve que estuvo muy entretenida la reunión. Me gustó que usarán más de un lenguaje para resolver los ejercicios.
0_o
(Excelente BT(En clojure))
Te quedo muy bien tus soluciones, de hecho me gustaron mucho. Mi amigo Alcides Flores resolvió de esta manera el ejercicio de los números romanos http://pastebin.com/WALgBxxb en Lisp
Un saludo a @alcidesfp y a todos los demás tambien un saludos : )
Muy buenas soluciones en Clojure BT
Me parece excelente el enfoque orientadas a las listas (o sequiencias/iterables/whatever) en contraposición a las soluciones más procedurales que hemos visto hasta ahora. Enhorabuena por una solución compacta, eficiente Y elegante.
Primos en JavaScript (Rodrigo)
jajaja... ya ve como a todos se nos puede llegar a dormir el gallo en alguna ocasión?
Cuando comencé a escribir mi solución en javascript (https://gist.github.com/1714307), no sé qué me pasó pero no pude escribir getNthPrime hasta el 6o o 7o intento y solo usando yield (que hasta lo que sé, solo funciona en mozilla/firefox)
Creo que programar en .NET nos está comenzando a hacer daño, no? =)