Die Einrichtung
Sie erhalten eine einfache Webseite mit 11 Elementen:
- 10
input
Elemente mit IDsi1
durchi10
, in der Reihenfolge - ein
output
Element mit IDout
Die Eingabeelemente haben value
Attribute, die in der HTML-Quelle definiert sind. Der Wert einer bestimmten Eingabe kann eine beliebige Ganzzahl von 0
bis 10
einschließ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 input
s 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
this
Lesen Sie eine beliebige Eigenschaft eines jQuery-Objekts (wobei
.length
dies 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
return
bei 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
input
geraden Werte und platzieren Sie das Ergebnis im inneren HTML desoutput
.Berechnen Sie das Maximum aller
input
Werte und platzieren Sie das Ergebnis im inneren HTML desoutput
.Berechnen Sie das Produkt aller
input
Werte<= 2
und platzieren Sie das Ergebnis im inneren HTML desoutput
. Wenn alle Eingabewerte vorhanden sind> 2
, platzieren Sie sie0
im inneren HTML-Code desoutput
.Berechnen Sie den Modalwert (dh den Wert mit der größten Häufigkeit) aller
input
Werte 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
I1
den Wert eingegeben wirdi1
,I2
wird der Wert des Eingangsi2
, usw. Wenn die Sequenzwerte von EingangI1
..I10
einen 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
input
Werte 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 output
Element mit der ID out
und 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 script
Elementen, das Ausschreiben von Ereignisattributen, die Code enthalten, oder das Ausnutzen des expression
(IE) oder der calc
Funktionen 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 input
Werte 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
input
Werte sind immer (die Zeichenfolgendarstellungen von) Ganzzahlen von 0
bis 10
einschließ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 10
unmittelbar danach kommen würde 1
. Das sollte hier bei einer Sorte nicht der Fall sein.