Die Einrichtung
Sie erhalten eine einfache Webseite mit 11 Elementen:
- 10
inputElemente mit IDsi1durchi10, in der Reihenfolge - ein
outputElement mit IDout
Die Eingabeelemente haben valueAttribute, die in der HTML-Quelle definiert sind. Der Wert einer bestimmten Eingabe kann eine beliebige Ganzzahl von 0bis 10einschließlich sein.
Die Webseite ist mit der Kernbibliothek jQuery 1.10.1 (wie in der Geige dargestellt) ausgestattet und führt einen Codeblock aus, sobald das DOM geladen wird.
Die Herausforderung
Im Folgenden werden sechs spezifische Herausforderungen vorgestellt. In jedem Fall besteht das Ziel darin, eine Funktion des inputs zu berechnen und das Berechnungsergebnis in den inneren HTML- Code des s zu platzieren output. Jede Herausforderung sollte unabhängig von den anderen gelöst werden. Die Lösung für eine Herausforderung ist der Codeblock, der die Berechnung / Ausgabe implementiert (z. B. der Code im Fenster "Javascript" in der Geige). Die Länge einer Lösung ist die Länge (in Bytes) dieses Codeblocks.
All dies scheint sehr einfach zu sein, wenn nicht einige interessante Einschränkungen.
Ihr Code kann ...
Rufen Sie die jQuery-Funktion auf
$()und übergeben Sie ArgumenteVariablen definieren und verwenden
verwenden
thisLesen Sie eine beliebige Eigenschaft eines jQuery-Objekts (wobei
.lengthdies die nützlichste ist).Definieren Sie Funktionen / Lambdas, die anschließend aufgerufen, in Variablen gespeichert und als Argumente übergeben werden können. Funktionen können
returnbei Bedarf Argumente und Werte akzeptieren .Rufen Sie eine der jQuery DOM-Traversal-Methoden auf
Aufrufe jeden der jQuery DOM Manipulationsmethoden , mit der Ausnahme
width,height,innerWidth,innerHeight,outerWidth,outerHeight,offset,position,replaceAll,replaceWith,scrollLeft,scrollTop,css,prop,removeProp, die möglicherweise nicht aufgerufenVerwenden Sie die Operatoren: Objekterstellung
{}; Array-Erstellung / Indexreferenz / Feldreferenz[], Funktions- / Methodenaufruf(), Verkettung von Zeichenfolgen+und Zuweisung=Verwenden Sie String-Literale
Ihr Code kann nicht ...
Verwenden Sie alle Operatoren außer den oben aufgeführten
Verwenden Sie alle Literale, die keine String-Literale sind
Rufen Sie eine andere Funktion / Methode als die oben ausdrücklich genannten auf
verwenden , jede Steuerstruktur oder ein Schlüsselwort (z
for,while,try,if,with, etc.), mit Ausnahme vonthis,var,let, Funktionen und Lambdasmanipuliert das DOM in irgendeiner Art und Weise , dass die Ergebnisse in der Injektion von Code (mehr unten)
Zugriff auf alle nicht benutzerdefinierten Variablen oder nicht benutzerdefinierten Felder / Eigenschaften mit Ausnahme der oben aufgeführten
Die 6 Herausforderungen
Berechnen Sie die Summe aller
inputgeraden Werte und platzieren Sie das Ergebnis im inneren HTML desoutput.Berechnen Sie das Maximum aller
inputWerte und platzieren Sie das Ergebnis im inneren HTML desoutput.Berechnen Sie das Produkt aller
inputWerte<= 2und platzieren Sie das Ergebnis im inneren HTML desoutput. Wenn alle Eingabewerte vorhanden sind> 2, platzieren Sie sie0im inneren HTML-Code desoutput.Berechnen Sie den Modalwert (dh den Wert mit der größten Häufigkeit) aller
inputWerte und platzieren Sie das Ergebnis im inneren HTML desoutput. Wenn der Modalwert nicht eindeutig ist, platzieren Sie einen der Modalwerte im inneren HTML desoutput.Lassen Sie
I1den Wert eingegeben wirdi1,I2wird der Wert des Eingangsi2, usw. Wenn die Sequenzwerte von EingangI1..I10einen bilden Zaun mitI1 < I2, Platz"TRUE"in den inneren HTML aus demoutput; Andernfalls"FALSE"in den inneren HTML-Code der Ausgabe einfügen. Insbesondere ist der ZaunzustandI1 < I2 > I3 < I4 > I5 < I6 > I7 < I8 > I9 < I10.Fügen Sie eine durch Kommas getrennte Liste aller
inputWerte in aufsteigender Reihenfolge in den inneren HTML-Code von einoutput.
Wertung
Der Gewinner des Wettbewerbs ist der Programmierer, der korrekte Lösungen für die meisten Herausforderungen einreicht. Bei einem Unentschieden gewinnt der Programmierer mit der niedrigsten Gesamtlösungslänge (der Summe der Längen aller Lösungen). Daher ist dies eine geringfügige Variante des Code-Golfs.
Wichtige Notizen
Lösungen können das DOM beschädigen (z. B. löschen inputs, neue Elemente erstellen, die als visueller Abfall erscheinen), solange der Endzustand des DOM ein outputElement mit der ID outund dem korrekt berechneten Wert enthält.
Lösungen können erweiterte jQuery-Selektoren und CSS3 verwenden, mit Ausnahme von Funktionen, die Ausdrücke auswerten oder Code ausführen.
Lösungen können die HTML-Quelle des Dokuments möglicherweise nicht ändern. Alle DOM-Manipulationen müssen im Skript über jQuery erfolgen.
Lösungen dürfen während der DOM-Durchquerung / Manipulation keinerlei Code einfügen. Dies umfasst (ohne darauf beschränkt zu sein) das Ausschreiben von scriptElementen, das Ausschreiben von Ereignisattributen, die Code enthalten, oder das Ausnutzen des expression(IE) oder der calcFunktionen von CSS3. Bei dieser Herausforderung geht es um kreatives Denken mit Sets und Bäumen sowie um den meisterhaften Einsatz von jQuery. Es geht nicht darum, Code in das DOM zu schleichen oder die Operator-Einschränkungen zu umgehen. Ich behalte mir das Recht vor, Lösungen auf dieser Grundlage zu disqualifizieren.
Alle Lösungen sind realisierbar und können in weniger als 400 Bytes implementiert werden. Ihre Lösungen können natürlich 400 Byte überschreiten oder weit kürzer als 400 Byte sein. Dies ist nur meine grundlegende Garantie dafür, dass alle 6 Probleme mit einer relativ kleinen Menge Code lösbar sind.
Zum Schluss: Im Zweifelsfall bitte fragen. :) :)
Beispiel
Betrachten Sie die hypothetische Herausforderung: "Wenn 3 oder mehr inputWerte gleich 5 sind, platzieren Sie sie "TRUE"in den inneren HTML-Code von output; andernfalls platzieren Sie sie "FALSE"in den inneren HTML-Code von output."
Eine gültige Lösung ist:
F = () => $('body').append( '<a>TRUE</a>' );
$('input').each( F );
F();
$('a:lt(3)').html( 'FALSE' );
$('#out').html( $('a:eq(' + $('input[value="5"]').length + ')') );
Möge der beste jQuerier gewinnen! ;)
//La garantia soy yo
inputWerte sind immer (die Zeichenfolgendarstellungen von) Ganzzahlen von 0bis 10einschließlich. Sie sollten in der Reihenfolge ihrer aufsteigenden Werte sortiert werden, wenn sie als Ganzzahlen interpretiert werden. Dies würde tatsächlich die gleiche Reihenfolge wie eine lexikografische Sortierung erzeugen, mit der Ausnahme, dass in letzterer 10unmittelbar danach kommen würde 1. Das sollte hier bei einer Sorte nicht der Fall sein.