セットアップ
あなたは、与えられた簡単なWebページを 11個の要素と:
- 順番に
inputIDがi1から10の要素i10 outputIDを持つ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の最終状態にoutputID 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れます。ここでは、そのようなことはありません。