A Instalação
Você recebe uma página da web simples com 11 elementos:
- 10
input
elementos com IDsi1
atravessei10
, em ordem - um
output
elemento com IDout
Os elementos de entrada têm value
atributos definidos na fonte HTML. O valor de qualquer entrada fornecida pode ser qualquer número inteiro de 0
até 10
inclusivo.
A página da Web está equipada com a biblioteca principal do jQuery 1.10.1 (como vista no violino) e executa um bloco de código assim que o DOM é carregado.
O desafio
Seis desafios específicos são apresentados abaixo. Em cada caso, o objetivo é calcular alguma função dos input
e colocar o resultado da computação no HTML interno do output
. Cada desafio deve ser resolvido independentemente dos outros. A solução para um desafio é o bloco de código que implementa a computação / saída (por exemplo, o código na janela "Javascript" no violino). O comprimento de uma solução é o comprimento (em bytes) desse bloco de código.
Tudo isso parece muito simples, se não por algumas restrições bastante interessantes.
Seu código pode ...
invocar a função jQuery
$()
e passar argumentosdefinir e usar variáveis
usar
this
leia qualquer propriedade de qualquer objeto jQuery (
.length
sendo o mais útil)defina funções / lambdas, que podem ser invocadas posteriormente, armazenadas em variáveis e passadas como argumentos. Funções podem aceitar argumentos e
return
valores, se necessário.invocar qualquer um dos métodos transversais do jQuery DOM
invocar qualquer um dos métodos de manipulação jQuery DOM , com excepção
width
,height
,innerWidth
,innerHeight
,outerWidth
,outerHeight
,offset
,position
,replaceAll
,replaceWith
,scrollLeft
,scrollTop
,css
,prop
,removeProp
, que não podem ser invocadasuse os operadores: criação de objeto
{}
; criação de matriz / referência de índice / referência de campo[]
, chamada de função / método()
, concatenação de strings+
e atribuição=
use literais de string
Seu código pode não ...
use quaisquer operadores, exceto os listados acima
usar qualquer literais que não são strings literais
invocar qualquer função / método que não aqueles especificamente excetuados acima
utilizar qualquer estrutura de controle ou palavra-chave (por exemplo
for
,while
,try
,if
,with
, etc.), com excepçãothis
,var
,let
, funções e lambdasmanipular o DOM de qualquer maneira que resulte na injeção de código (veja mais abaixo)
acessar qualquer variável não definida pelo usuário ou campo / propriedade não definida pelo usuário, exceto as listadas acima
Os 6 desafios
Calcule a soma de todos os
input
valores pares, colocando o resultado no HTML interno dooutput
.Calcule o máximo de todos os
input
valores, colocando o resultado no HTML interno dooutput
.Calcule o produto de todos os
input
valores<= 2
, colocando o resultado no HTML interno dooutput
. Se todos os valores de entrada forem> 2
, coloque0
no HTML interno do arquivooutput
.Calcule o valor modal (ou seja, o valor com maior frequência) de todos os
input
valores, colocando o resultado no HTML interno dooutput
. Se o valor modal não for exclusivo, coloque qualquer um dos valores modais no HTML interno dooutput
.Seja
I1
o valor da entradai1
,I2
seja o valor da entradai2
, etc. Se a sequência de valores de entradaI1
..I10
formar uma cerca comI1 < I2
, coloque"TRUE"
no HTML interno a saídaoutput
; caso contrário, coloque"FALSE"
no HTML interno da saída. Especificamente, a condição da cerca éI1 < I2 > I3 < I4 > I5 < I6 > I7 < I8 > I9 < I10
.Coloque uma lista separada por vírgula de todos os
input
valores, classificados em ordem crescente, no HTML interno dooutput
.
Pontuação
O vencedor do concurso é o programador que envia soluções corretas para o maior número de desafios. Em caso de empate, o vencedor é o programador com o menor comprimento total da solução (a soma dos comprimentos de todas as soluções). Portanto, essa é uma variante menor do código de golfe.
Anotações importantes
As soluções podem alterar o DOM (por exemplo inputs
, excluir , criar novos elementos que aparecem como detritos visuais), desde que o estado final do DOM contenha um output
elemento com ID out
e o valor calculado corretamente.
As soluções podem fazer uso de qualquer seletor jQuery avançado e CSS3, exceto os recursos que avaliam expressões ou executam código.
As soluções não podem modificar a fonte HTML do documento. Toda manipulação do DOM deve ocorrer no script através do jQuery.
As soluções não podem injetar código de qualquer tipo durante a travessia / manipulação do DOM. Isso inclui (mas não está limitado a) a gravação de script
elementos, a gravação de atributos de eventos contendo código ou a exploração do expression
(IE) ou calc
recursos do CSS3. Esse desafio é sobre o pensamento criativo usando conjuntos e árvores e o uso magistral do jQuery; não se trata de introduzir código no DOM ou executar execuções finais em torno das restrições do operador. Reservo-me o direito de desqualificar qualquer solução nessa base.
Todas as soluções são realizáveis e cada uma pode ser implementada em menos de 400 bytes. Suas soluções podem, obviamente, exceder 400 bytes ou ser muito menores que 400 bytes. Esta é apenas a minha garantia básica de que todos os 6 problemas são solucionáveis usando uma quantidade razoavelmente pequena de código.
Finalmente: em caso de dúvida, pergunte. :)
Exemplo
Considere o desafio hipotético: "Se 3 ou mais input
valores forem iguais a 5, coloque "TRUE"
no HTML interno do output
; caso contrário, coloque "FALSE"
no HTML interno do output
."
Uma solução válida é:
F = () => $('body').append( '<a>TRUE</a>' );
$('input').each( F );
F();
$('a:lt(3)').html( 'FALSE' );
$('#out').html( $('a:eq(' + $('input[value="5"]').length + ')') );
Que vença o melhor jQuerier! ;)
//La garantia soy yo
input
valores sempre serão (as representações de string de) números inteiros de 0
até 10
inclusivos. Eles devem ser classificados na ordem de seus valores ascendentes quando interpretados como números inteiros. Na verdade, isso produziria a mesma ordem que um tipo lexicográfico, com a exceção que 10
viria imediatamente depois 1
no último. Esse não deve ser o caso de uma espécie aqui.