セットアップ
あなたは、与えられた簡単なWebページを 11個の要素と:
- 順番に
input
IDがi1
から10の要素i10
output
IDを持つ1つの要素out
input要素にはvalue
、HTMLソースで定義された属性があります。与えられた入力の値は、から0
までの整数10
です。
このWebページにはコアjQuery 1.10.1ライブラリ(フィドルで見られる)が装備されており、DOMが読み込まれるとすぐにコードブロックを実行します。
チャレンジ
6つの特定の課題を以下に示します。いずれの場合も、目的はの関数を計算しinput
、計算結果をの内部HTMLに配置することoutput
です。各課題は、他の課題から独立して解決されるべきです。課題の解決策は、計算/出力を実装するコードのブロックです(たとえば、フィドルの「Javascript」ウィンドウのコード)。ソリューションの長さは、このコードブロックの長さ(バイト単位)です。
これはすべて、かなり興味深い制限ではないとしても、非常に単純に思えます。
あなたのコードは...
jQuery関数
$()
を呼び出して引数を渡す変数を定義して使用する
使用する
this
任意のjQueryオブジェクトの任意のプロパティを読み取る(
.length
最も役立つ)関数/ラムダを定義します。これらは後で呼び出され、変数に格納され、引数として渡されます。関数は
return
、必要に応じて引数と値を受け入れることができます。jQuery DOMトラバーサルメソッドのいずれかを呼び出す
任意の呼び出しのjQuery DOM操作方法を、除いて
width
、height
、innerWidth
、innerHeight
、outerWidth
、outerHeight
、offset
、position
、replaceAll
、replaceWith
、scrollLeft
、scrollTop
、css
、prop
、removeProp
、呼び出されない可能性があります演算子を使用:オブジェクトの作成
{}
; 配列の作成/インデックス参照/フィールド参照[]
、関数/メソッドの呼び出し()
、文字列の連結+
、および割り当て=
文字列リテラルを使用する
あなたのコードは...
上記以外の演算子を使用する
使用任意の文字列リテラルではありませんリテラル
呼び出し任意の具体的に除外上記以外の関数/メソッド
使用任意の制御構造やキーワードを(例えば
for
、while
、try
、if
、with
、など)、除くthis
、var
、let
、関数やラムダでDOMを操作する任意のコードの注入の結果は(より下記参照)する方法
上記以外の非ユーザー定義変数または非ユーザー定義フィールド/プロパティにアクセスする
6つの課題
すべての
input
値の合計を計算し、結果をの内部HTMLに配置しoutput
ます。すべての
input
値の最大値を計算し、結果をの内部HTMLに配置しoutput
ます。すべての
input
値の積を計算し、<= 2
その結果をの内部HTMLに配置しoutput
ます。すべての入力値がある場合は> 2
、場所0
の内側のHTMLの中へoutput
。すべての
input
値のモーダル値(つまり、頻度が最も高い値)を計算し、結果をの内部HTMLに配置しoutput
ます。モーダル値が一意でない場合は、いずれかのモーダル値をの内部HTMLに配置しoutput
ます。させる
I1
入力の値もi1
、I2
入力の値もi2
入力値のシーケンスが場合など、I1
...I10
を形成フェンス付きのI1 < I2
ところ、"TRUE"
うち内側のHTMLへoutput
。それ以外の場合"FALSE"
は、出力の内部HTMLに配置します。具体的には、フェンスの条件はI1 < I2 > I3 < I4 > I5 < I6 > I7 < I8 > I9 < I10
です。input
昇順でソートされたすべての値のコンマ区切りリストを、の内部HTMLに配置しoutput
ます。
得点
コンテストの勝者は、最大数の課題に対する正しい解決策を提出するプログラマーです。同点の場合、勝者は、最小の総ソリューション長(すべてのソリューションの長さの合計)を持つプログラマーです。したがって、これはコードゴルフのマイナーバリアントです。
重要な注意事項
DOM inputs
の最終状態にoutput
ID out
と正しく計算された値を持つ要素が含まれている限り、ソリューションはDOMを壊してしまう可能性があります(削除、視覚的な破片として表示される新しい要素の作成など)。
ソリューションは、式を評価したりコードを実行したりする機能を除いて、高度なjQueryセレクターとCSS3を利用できます。
ソリューションは、ドキュメントのHTMLソースを変更できません。すべてのDOM操作は、jQueryを介してスクリプトで発生する必要があります。
ソリューションは、DOMトラバーサル/操作中に、いかなる種類のコードも挿入できません。これにはscript
、要素の書き出し、コードを含むイベント属性の書き出し、CSS3のexpression
(IE)またはcalc
機能の利用が含まれます(これらに限定されません)。この課題は、セットとツリーを使用した創造的な思考、およびjQueryの巧みな使用に関するものです。コードをDOMに忍び込むことや、オペレーターの制限を回避することではありません。私は、これに基づいてソリューションを失格にする権利を留保します。
すべてのソリューションは実現可能であり、それぞれ400バイト未満で実装できます。もちろん、ソリューションは400バイトを超えるか、400バイトよりはるかに短い場合があります。これは、6つの問題すべてが妥当な量のコードを使用して解決できるという私の基本的な保証にすぎません。
最後に:疑問がある場合は、質問してください。:)
例
仮想的な挑戦を考えてみましょう:「3つの以上の場合input
の値は、場所を5に等しい"TRUE"
の内側のHTMLの中にoutput
、それ以外の場合は配置"FALSE"
の内側のHTMLにoutput
。」
1つの有効なソリューションは次のとおりです。
F = () => $('body').append( '<a>TRUE</a>' );
$('input').each( F );
F();
$('a:lt(3)').html( 'FALSE' );
$('#out').html( $('a:eq(' + $('input[value="5"]').length + ')') );
最高のjQuerierが勝ちますように!;)
//La garantia soy yo
input
値は常に(の文字列表現)から整数になる0
まで10
包括します。整数として解釈される場合は、値の昇順でソートする必要があります。これは実際には辞書式ソートと同じ順序を生成しますが、後者の場合は10
直後に行わ1
れます。ここでは、そのようなことはありません。