La puesta en marcha
Se le proporciona una página web simple con 11 elementos:
- 10
inputelementos con ID ai1travési10, en orden - un
outputelemento con IDout
Los elementos de entrada tienen valueatributos definidos en la fuente HTML. El valor de cualquier entrada dada puede ser cualquier número entero desde 0hasta 10inclusivo.
La página web está equipada con la biblioteca central jQuery 1.10.1 (como se ve en el violín) y ejecuta un bloque de código tan pronto como se carga el DOM.
El reto
Seis desafíos específicos se presentan a continuación. En cada caso, el objetivo es calcular alguna función de la inputsy colocar el resultado del cálculo en el HTML interno de output. Cada desafío debe resolverse independientemente de los demás. La solución a un desafío es el bloque de código que implementa el cálculo / salida (por ejemplo, el código en la ventana "Javascript" en el violín). La longitud de una solución es la longitud (en bytes) de este bloque de código.
Todo esto parecería muy simple, si no fuera por algunas restricciones bastante interesantes.
Tu código puede ...
invoque la función jQuery
$()y pase argumentosdefinir y usar variables
utilizar
thisleer cualquier propiedad de cualquier objeto jQuery (
.lengthsiendo el más útil)definir funciones / lambdas, que posteriormente pueden invocarse, almacenarse en variables y pasarse como argumentos. Las funciones pueden aceptar argumentos y
returnvalores si es necesario.invocar cualquiera de los métodos transversales de jQuery DOM
invocar cualquiera de los métodos de manipulación jQuery DOM , exceptuando
width,height,innerWidth,innerHeight,outerWidth,outerHeight,offset,position,replaceAll,replaceWith,scrollLeft,scrollTop,css,prop,removeProp, que puede no ser invocadausar los operadores: creación de objetos
{}; creación de matriz / referencia de índice / referencia de campo[], invocación de función / método(), concatenación de cadenas+y asignación=usar literales de cadena
Su código no puede ...
use cualquier operador excepto los enumerados anteriormente
utilizar cualquier literales que no son literales de cadena
invocar cualquier función / método que no sean los específicamente exceptuados anteriormente
utilizar cualquier estructura de control o una palabra clave (por ejemplo
for,while,try,if,with, etc.), con excepción dethis,var,let, funciones y lambdasmanipule el DOM de cualquier manera que resulte en la inyección de código (vea más abajo)
acceder a cualquier variable no definida por el usuario o campo / propiedad no definido por el usuario, excepto los enumerados anteriormente
Los 6 desafíos
Calcule la suma de todos los
inputvalores que son pares, colocando el resultado en el HTML interno deoutput.Calcule el máximo de todos los
inputvalores, colocando el resultado en el HTML interno deoutput.Calcule el producto de todos los
inputvalores<= 2, colocando el resultado en el HTML interno deoutput. Si todos los valores de entrada son> 2, colóquelos0en el HTML interno deoutput.Calcule el valor modal (es decir, el valor con mayor frecuencia) de todos los
inputvalores, colocando el resultado en el HTML interno deoutput. Si el valor modal no es único, coloque cualquiera de los valores modales en el HTML interno deoutput.Sea
I1el valor de entradai1,I2sea el valor de entradai2, etc. Si la secuencia de valores de entradaI1...I10forma una cerca conI1 < I2, coloque"TRUE"en el HTML interno fuera deloutput; de lo contrario, colóquelo"FALSE"en el HTML interno de la salida. Específicamente, la condición de la cerca esI1 < I2 > I3 < I4 > I5 < I6 > I7 < I8 > I9 < I10.Coloque una lista separada por comas de todos los
inputvalores, ordenados en orden ascendente, en el HTML interno deoutput.
Puntuación
El ganador del concurso es el programador que presenta soluciones correctas para la mayor cantidad de desafíos. En caso de empate, el ganador es el programador con la menor longitud total de la solución (la suma de las longitudes de todas las soluciones). Por lo tanto, esta es una variante menor del código de golf.
Notas importantes
Las soluciones pueden destrozar el DOM (por ejemplo inputs, eliminar , crear nuevos elementos que aparecen como detritos visuales) siempre que el estado final del DOM contenga un outputelemento con ID outy el valor calculado correctamente.
Las soluciones pueden hacer uso de cualquier selector avanzado de jQuery y CSS3, a excepción de las características que evalúan expresiones o ejecutan código.
Las soluciones no pueden modificar la fuente HTML del documento. Toda manipulación DOM debe ocurrir en el script a través de jQuery.
Las soluciones no pueden inyectar código de ningún tipo durante el recorrido / manipulación DOM. Esto incluye (pero no se limita a) escribir scriptelementos, escribir atributos de eventos que contengan código o explotar el expression(IE) o las calccaracterísticas de CSS3. Este desafío es sobre el pensamiento creativo usando conjuntos y árboles, y el uso magistral de jQuery; no se trata de infiltrar código en el DOM o realizar ejecuciones finales en torno a las restricciones del operador. Me reservo el derecho de descalificar cualquier solución sobre esta base.
Todas las soluciones son realizables y cada una puede implementarse en menos de 400 bytes. Por supuesto, sus soluciones pueden superar los 400 bytes o ser mucho más cortas que 400 bytes. Esta es solo mi garantía básica de que los 6 problemas se pueden resolver utilizando una cantidad de código razonablemente pequeña.
Finalmente: en caso de duda, por favor pregunte. :)
Ejemplo
Considere el desafío hipotético: "Si 3 o más inputvalores equivalen a 5, colóquelos "TRUE"en el HTML interno del output; de lo contrario, colóquelos "FALSE"en el HTML interno del output".
Una solución válida es:
F = () => $('body').append( '<a>TRUE</a>' );
$('input').each( F );
F();
$('a:lt(3)').html( 'FALSE' );
$('#out').html( $('a:eq(' + $('input[value="5"]').length + ')') );
¡Que gane el mejor jQuerier! ;)
//La garantia soy yo
inputvalores serán siempre (las representaciones de cadena de números enteros) desde 0a 10ambos inclusive. Deben clasificarse en orden de sus valores ascendentes cuando se interpretan como enteros. En realidad, esto produciría el mismo orden que un tipo lexicográfico, con la excepción que 10vendría inmediatamente después 1en este último. Ese no debería ser el caso para un tipo aquí.