Foros del Web » Programando para Internet » Javascript »

Javascript Quiz

Estas en el tema de Javascript Quiz en el foro de Javascript en Foros del Web. Si bien se que no responde al público general de este subforo, creo que a algunos usuarios más experimentados les puede llegar a gustar. Recopilé ...
  #1 (permalink)  
Antiguo 31/08/2011, 17:51
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Sonrisa Javascript Quiz

Si bien se que no responde al público general de este subforo, creo que a algunos usuarios más experimentados les puede llegar a gustar.

Recopilé en una entrada, 3 "problemas" a resolver utilizando JavaScript, los valientes que quieren intentarlo pueden pegarle un vistazo:

Desafios en JavaScript, ronda 1.

Cualquier duda que tengan, no duden en hacerla saber.

Saludos.
__________________
blog | @aijoona
  #2 (permalink)  
Antiguo 31/08/2011, 18:47
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Javascript Quiz

hola @aijoona,
no se como haran para que cada cual que quiera participar, no lea accidentalmente la solucion que otros publiquen. de todos modos, esta es mi solucion para el segundo reto.
Código:
function concat(str){
return function fn(s){
if(s){ str += s; return fn; }
else return str;
};
}

// test;
concat('Problema ')('2: concatenar string')() + concat(' en multiples invocaciones.')();
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 31/08/2011 a las 18:58
  #3 (permalink)  
Antiguo 31/08/2011, 19:14
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Respuesta: Javascript Quiz

Le falta el tag [SPOILER] al foro
__________________
blog | @aijoona
  #4 (permalink)  
Antiguo 31/08/2011, 19:41
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Javascript Quiz

mi próxima función para el tercer desafio: obtener el valor máximo. en el desafio la función muestra dos argumentos pero despues que pense en la idea, determine que puede aceptar multiples argumentos.
Código:
function max(){
return [].pop.call([].sort.call(arguments, function(a, b){ return a - b;}));
}

max(23, 50); // 50;
max(8, 23, 1); // 23;
@edit,
solución al primer desafio: contar hasta 100 con una funcion autoejecutable. de todos, este me costo algo de trabajo pensar la idea. no obstante, me he fijado que no es óptimo; bastante notable si se indica un número alto. o no se si es la consola de chrome que se ralentiza cuando tiene muchos logs.

Código:
(function(limit){
var counter = 0, conditional = {
true: function(){ console.log(counter); return counter; },
false: function(){
console.log(counter++);
conditional[limit == counter]();
}}; // conditional;
conditional[limit == counter]();
})(100);
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 31/08/2011 a las 21:06 Razón: agregar solucion al problema 1
  #5 (permalink)  
Antiguo 31/08/2011, 22:11
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Javascript Quiz

Para el de la serie, esto haría yo:
Código PHP:
<script type="text/javascript">
(function(
o){var n=0;function f(){++n;console.log(n);clearInterval(o[n]);}o[100]=setInterval(f,100);})(new Array(100));
</script> 
  #6 (permalink)  
Antiguo 31/08/2011, 22:40
Avatar de laratik  
Fecha de Ingreso: mayo-2010
Ubicación: Cali
Mensajes: 317
Antigüedad: 14 años, 5 meses
Puntos: 63
Respuesta: Javascript Quiz

Para el primer desafió haría esto:

Código Javascript:
Ver original
  1. (function () {
  2.     console.log("1");
  3.     console.log("2");
  4.     console.log("3");
  5.     console.log("4");
  6.     console.log("5");
  7.     console.log("6");
  8.     console.log("7");
  9.     console.log("8");
  10.     console.log("9");
  11.     console.log("10");
  12.     console.log("11");
  13.     console.log("12");
  14.     console.log("13");
  15.     console.log("14");
  16.     console.log("15");
  17.     console.log("16");
  18.     console.log("17");
  19.     console.log("18");
  20.     console.log("19");
  21.     console.log("20");
  22.     console.log("21");
  23.     console.log("22");
  24.     console.log("23");
  25.     console.log("24");
  26.     console.log("25");
  27.     console.log("26");
  28.     console.log("27");
  29.     console.log("28");
  30.     console.log("29");
  31.     console.log("20");
  32.     console.log("31");
  33.     console.log("32");
  34.     console.log("33");
  35.     console.log("34");
  36.     console.log("35");
  37.     console.log("36");
  38.     console.log("37");
  39.     console.log("38");
  40.     console.log("39");
  41.     console.log("40");
  42.     console.log("41");
  43.     console.log("42");
  44.     console.log("43");
  45.     console.log("44");
  46.     console.log("45");
  47.     console.log("46");
  48.     console.log("47");
  49.     console.log("48");
  50.     console.log("49");
  51.     console.log("50");
  52.     console.log("51");
  53.     console.log("52");
  54.     console.log("53");
  55.     console.log("54");
  56.     console.log("55");
  57.     console.log("56");
  58.     console.log("57");
  59.     console.log("58");
  60.     console.log("59");
  61.     console.log("60");
  62.     console.log("61");
  63.     console.log("62");
  64.     console.log("63");
  65.     console.log("64");
  66.     console.log("65");
  67.     console.log("66");
  68.     console.log("67");
  69.     console.log("68");
  70.     console.log("69");
  71.     console.log("70");
  72.     console.log("71");
  73.     console.log("72");
  74.     console.log("73");
  75.     console.log("74");
  76.     console.log("75");
  77.     console.log("76");
  78.     console.log("77");
  79.     console.log("78");
  80.     console.log("79");
  81.     console.log("80");
  82.     console.log("81");
  83.     console.log("82");
  84.     console.log("83");
  85.     console.log("84");
  86.     console.log("85");
  87.     console.log("86");
  88.     console.log("87");
  89.     console.log("88");
  90.     console.log("89");
  91.     console.log("90");
  92.     console.log("91");
  93.     console.log("92");
  94.     console.log("93");
  95.     console.log("94");
  96.     console.log("95");
  97.     console.log("96");
  98.     console.log("97");
  99.     console.log("98");
  100.     console.log("99");
  101.     console.log("100");
  102. })();

... Ahora si en serio:

Código Javascript:
Ver original
  1. (function contar(n) {
  2.     try {
  3.         var r = new Array(n);
  4.         r.length;
  5.         console.log((n-100)*-1);
  6.         contar(n-1);
  7.     } catch(e) {
  8.     }
  9. })(99);
__________________
Programar apasiona y lo que apasiona es un arte, por lo tanto programar es un arte.

Quiero karma para en mi próxima vida ser un billonario bien dotado con alas.
  #7 (permalink)  
Antiguo 31/08/2011, 22:52
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Javascript Quiz

laratik:
Cita:
**Consideramos condicional a las sentencias operadores booleanos, if, switch, operador ternario, try/catch.
  #8 (permalink)  
Antiguo 01/09/2011, 00:22
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Javascript Quiz

El getMax creo que podría ser así:
Código PHP:
function getMax(x,y){
    return  
^ ((y) & - ~~(x));

  #9 (permalink)  
Antiguo 01/09/2011, 00:54
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Javascript Quiz

@panino, tendrás que revisar el script porque tal parece que no funciona como esperabas. por ejemplo, getMax(1, 33) devuelve 1, y getMax(2,33) devuelve 34. tal parece que dependiendo el orden en que pases los valores devuelve una cosa u otra.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 01/09/2011, 01:00
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Javascript Quiz

Sí, también falla con negativos. Tengo que revisarlo
La idea original es esta:
Código:
function getMax(x,y){
	return  x ^ ((x ^ y) & -(x<y));
}
Sólo tengo que ver cómo no usar el signo <

Última edición por Panino5001; 01/09/2011 a las 01:09
  #11 (permalink)  
Antiguo 01/09/2011, 04:49
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Javascript Quiz

Ahora sí:
Código PHP:
function getMax(x,y){
       return ((
x-y) & (~(x-y)) >> 31)+y;

  #12 (permalink)  
Antiguo 01/09/2011, 05:06
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Respuesta: Javascript Quiz

Bueno, me alegra ver que tuvo convocatoria.

Cuando llegue al trabajo empiezo a espiar las soluciones.
__________________
blog | @aijoona
  #13 (permalink)  
Antiguo 01/09/2011, 06:24
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Javascript Quiz

La modificación de la primera versión podría ser así:
Código PHP:
function getMax(x,y){
    return  
^ ((y) & -((~(y-x)>>31)&1));

Igualmente, pasado un límite numérico todas estas versiones con operadores de bits empiezan a fallar.
  #14 (permalink)  
Antiguo 01/09/2011, 08:08
Avatar de laratik  
Fecha de Ingreso: mayo-2010
Ubicación: Cali
Mensajes: 317
Antigüedad: 14 años, 5 meses
Puntos: 63
Respuesta: Javascript Quiz

Eso me pasa por no leer bien las reglas, aunque funciona igual sin try/catch:

Código Javascript:
Ver original
  1. (function contar(n) {
  2.     var r = new Array(n);
  3.     r.length;
  4.     console.log((n-100)*-1);
  5.     contar(n-1);
  6. })(99);

Lo único es que de esa manera no oculto la hermosa excepción que hace que el script se detenga, tambien se puede realizar de la siguiente manera:

Código Javascript:
Ver original
  1. (function(){
  2.     var n=1;
  3.     function fn() {
  4.         console.log(n);
  5.         n++;
  6.     }
  7.     var c = setInterval(fn,100);
  8.     setTimeout(function(){
  9.         clearInterval(c);
  10.     },10120);
  11. })();

De esta manera si no salgo de la ejecución con una excepción. Lo único que me alegra es que no han cuestionado mi primer método .
__________________
Programar apasiona y lo que apasiona es un arte, por lo tanto programar es un arte.

Quiero karma para en mi próxima vida ser un billonario bien dotado con alas.
  #15 (permalink)  
Antiguo 01/09/2011, 11:06
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Respuesta: Javascript Quiz

La solución de los 100 console logs es la que gana en pragmatismo sin duda alguna
__________________
blog | @aijoona
  #16 (permalink)  
Antiguo 01/09/2011, 13:57
Avatar de laratik  
Fecha de Ingreso: mayo-2010
Ubicación: Cali
Mensajes: 317
Antigüedad: 14 años, 5 meses
Puntos: 63
Respuesta: Javascript Quiz

Tratando de hacer el segundo desafió me salio esto:

Código Javascript:
Ver original
  1. function f(string) {
  2.     return function fn(str) {
  3.         if(str) {
  4.             string += str;
  5.             return fn;
  6.         } else {
  7.             return string
  8.         }
  9.     }
  10. }

Pero me di de cuenta que es muy parecido, si no idéntico al código de @zerokilled, así que ni modo

El tercer desafió lo resolví, pero en ningún método pude llegar al segundo nivel:

Código Javascript:
Ver original
  1. function getMayor(m,n) {
  2.     var r = m-n;
  3.     var res = r+Math.abs(r);
  4.     return res?m:n;
  5. }

Código Javascript:
Ver original
  1. function getMayor(m,n) {
  2.     try {
  3.         var r = new Array(m-n);
  4.         return m;
  5.     } catch(e) {
  6.         return n;
  7.     }
  8. }

Tal vez después se me ocurra algo más.. pero por ahora hasta acá llego. SALUDOS
__________________
Programar apasiona y lo que apasiona es un arte, por lo tanto programar es un arte.

Quiero karma para en mi próxima vida ser un billonario bien dotado con alas.
  #17 (permalink)  
Antiguo 01/09/2011, 16:14
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Respuesta: Javascript Quiz

Con sus respuestas podemos agregar una nueva familia de soluciones (timers) al problema 1
__________________
blog | @aijoona
  #18 (permalink)  
Antiguo 01/09/2011, 16:35
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Javascript Quiz

Pues aquí van mis aportes, he intentado no leer las demás soluciones hasta ahora pero al final son muy parecidas
Código Javascript:
Ver original
  1. // Muestra en la consola los números del 1 al 100
  2. (function(min, max){
  3.     var arr = [function(){}, console.log];
  4.     (function l(n){
  5.         arr[Math.ceil((max - n + 1) / max)](n);
  6.         l(n + 1);
  7.     })(min);
  8. })(1, 100);
  9.  
  10. // f('This ')('i')('s a sentence')() + f('123')() == 'This is a sentence123'
  11. function f(str){
  12.     if(str){
  13.         'str' in f || (f.str = '');
  14.         f.str += str;
  15.         return f;
  16.     }
  17.     return f.str;
  18. }
  19.  
  20. // Devuelve el mayor número
  21. var getMax = function(a, b){
  22.     return [a, b].sort(function(x, y){
  23.         return y - x;
  24.     })[0];
  25. }
Para la primera, por lo menos a mí, me da error en Chrome, pero en FF5 funciona bien.
Y el 2º nivel de la tercera prueba lo veo complicado, voy a ver qué se puede hacer XD
Saludos :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #19 (permalink)  
Antiguo 01/09/2011, 17:57
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Respuesta: Javascript Quiz

Bueno, a modo de feedback y como información para alguna futura recopilación, que tan dificiles les parecieron cada uno de los problemas?
__________________
blog | @aijoona
  #20 (permalink)  
Antiguo 01/09/2011, 20:55
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Javascript Quiz

Antes de nada, felicito a Valentín por la iniciativa. Las restricciones son interesantes porque nos obligan a salir de nuestros esquemas habituales de razonamiento, generalmente más orientados a la productividad que a la creatividad, y eso supone un reto tentador.
La dificultad, en los problemas que tuve tiempo de encarar, estuvo principalmente en buscar soluciones alternativas a las que ya había visto. También me vi obligado a recordar cómo trabajar con operadores de bits, que uso muy pocas veces.
Algo muy digno de destacar es lo mucho que se aprende de las soluciones que otros proponen: uno no deja de sorprenderse de la imaginación y los conocimientos de varios colegas y amigos.
En resumen, muy buena iniciativa y es alentador que sea la "ronda 1", porque significa que habrá más.
  #21 (permalink)  
Antiguo 05/09/2011, 20:03
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Respuesta: Javascript Quiz

Gracias Panino, ya tengo un par vistos para la proxima tanda, lo que se hace dificil es mantener la dificultad, ya que muchas veces son los mismos trucos

Hice una pequeña entrada a modo de resumen sobre las soluciones dadas: http://blog.aijoona.com/2011/09/06/d...-1-soluciones/
__________________
blog | @aijoona

Etiquetas: desafios, quiz
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 5 personas




La zona horaria es GMT -6. Ahora son las 16:47.