La puesta en marcha
Se le proporciona una página web simple con 11 elementos:
- 10
input
elementos con ID ai1
travési10
, en orden - un
output
elemento con IDout
Los elementos de entrada tienen value
atributos definidos en la fuente HTML. El valor de cualquier entrada dada puede ser cualquier número entero desde 0
hasta 10
inclusivo.
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 input
sy 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
this
leer cualquier propiedad de cualquier objeto jQuery (
.length
siendo el más útil)definir funciones / lambdas, que posteriormente pueden invocarse, almacenarse en variables y pasarse como argumentos. Las funciones pueden aceptar argumentos y
return
valores 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
input
valores que son pares, colocando el resultado en el HTML interno deoutput
.Calcule el máximo de todos los
input
valores, colocando el resultado en el HTML interno deoutput
.Calcule el producto de todos los
input
valores<= 2
, colocando el resultado en el HTML interno deoutput
. Si todos los valores de entrada son> 2
, colóquelos0
en el HTML interno deoutput
.Calcule el valor modal (es decir, el valor con mayor frecuencia) de todos los
input
valores, 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
I1
el valor de entradai1
,I2
sea el valor de entradai2
, etc. Si la secuencia de valores de entradaI1
...I10
forma 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
input
valores, 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 output
elemento con ID out
y 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 script
elementos, escribir atributos de eventos que contengan código o explotar el expression
(IE) o las calc
caracterí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 input
valores 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
input
valores serán siempre (las representaciones de cadena de números enteros) desde 0
a 10
ambos 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 10
vendría inmediatamente después 1
en este último. Ese no debería ser el caso para un tipo aquí.