A Instalação
Você recebe uma página da web simples com 11 elementos:
- 10
inputelementos com IDsi1atravessei10, em ordem - um
outputelemento com IDout
Os elementos de entrada têm valueatributos definidos na fonte HTML. O valor de qualquer entrada fornecida pode ser qualquer número inteiro de 0até 10inclusivo.
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 inpute 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
thisleia qualquer propriedade de qualquer objeto jQuery (
.lengthsendo 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
returnvalores, 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
inputvalores pares, colocando o resultado no HTML interno dooutput.Calcule o máximo de todos os
inputvalores, colocando o resultado no HTML interno dooutput.Calcule o produto de todos os
inputvalores<= 2, colocando o resultado no HTML interno dooutput. Se todos os valores de entrada forem> 2, coloque0no HTML interno do arquivooutput.Calcule o valor modal (ou seja, o valor com maior frequência) de todos os
inputvalores, 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
I1o valor da entradai1,I2seja o valor da entradai2, etc. Se a sequência de valores de entradaI1..I10formar 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
inputvalores, 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 outputelemento com ID oute 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 scriptelementos, a gravação de atributos de eventos contendo código ou a exploração do expression(IE) ou calcrecursos 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 inputvalores 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
inputvalores sempre serão (as representações de string de) números inteiros de 0até 10inclusivos. 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 10viria imediatamente depois 1no último. Esse não deve ser o caso de uma espécie aqui.