Pengaturan
Anda diberi halaman web sederhana dengan 11 elemen:
- 10
inputelemen dengan IDi1melaluii10, dalam rangka - satu
outputelemen dengan IDout
Elemen input memiliki valueatribut yang ditentukan dalam sumber HTML. Nilai dari setiap masukan yang diberikan dapat berupa bilangan bulat dari 0ke 10inklusif.
Halaman web ini dilengkapi dengan pustaka inti jQuery 1.10.1 (seperti yang terlihat di biola), dan mengeksekusi blok kode segera setelah DOM dimuat.
Tantangan
Enam tantangan spesifik disajikan di bawah ini. Dalam setiap kasus tujuannya adalah untuk menghitung beberapa fungsi dari inputdan menempatkan hasil perhitungan ke dalam HTML bagian dalam output. Setiap tantangan harus diselesaikan secara independen dari yang lain. Solusi untuk tantangan adalah blok kode yang mengimplementasikan perhitungan / keluaran (mis. Kode di jendela "Javascript" di biola). Panjang solusi adalah panjang (dalam byte) dari blok kode ini.
Semua ini akan tampak sangat sederhana, jika bukan karena pembatasan yang agak menarik.
Kode Anda Mungkin ...
aktifkan fungsi jQuery
$()dan berikan argumenmendefinisikan dan menggunakan variabel
menggunakan
thismembaca properti apa pun dari objek jQuery (dengan
.lengthmenjadi yang paling berguna)mendefinisikan fungsi / lambdas, yang selanjutnya dapat dipanggil, disimpan dalam variabel, dan diteruskan sebagai argumen. Fungsi dapat menerima argumen dan
returnnilai jika diperlukan.aktifkan metode traversal jQuery DOM
memanggil salah satu metode manipulasi jQuery DOM , kecuali
width,height,innerWidth,innerHeight,outerWidth,outerHeight,offset,position,replaceAll,replaceWith,scrollLeft,scrollTop,css,prop,removeProp, yang mungkin tidak dipanggilgunakan operator: pembuatan objek
{}; pembuatan array / referensi indeks / referensi bidang[], pemanggilan fungsi / metode(), penggabungan string+, dan penugasan=gunakan string literal
Kode Anda Mungkin Tidak ...
gunakan operator apa pun kecuali yang terdaftar di atas
gunakan literal apa pun yang bukan string literal
meminta fungsi / metode apa pun selain yang secara khusus dikecualikan di atas
menggunakan setiap struktur pengendalian atau kata kunci (misalnya
for,while,try,if,with, dll), kecualithis,var,let, fungsi dan lambdasmemanipulasi DOM dengan cara apa pun yang menghasilkan injeksi kode (lihat lebih lanjut di bawah)
akses setiap variabel non-pengguna ditentukan atau non-pengguna didefinisikan bidang / properti kecuali yang tercantum di atas
6 Tantangan
Hitung jumlah semua
inputnilai yang genap, dengan menempatkan hasilnya di HTML bagian dalamoutput.Hitung maksimum semua
inputnilai, menempatkan hasilnya dalam HTML bagian dalamoutput.Hitung produk dari semua
inputnilai<= 2, letakkan hasilnya dalam HTML bagian dalamoutput. Jika semua nilai input> 2, tempatkan0ke dalam HTML bagian dalamoutput.Hitung nilai modal (yaitu nilai dengan frekuensi terbesar) dari semua
inputnilai, dengan menempatkan hasilnya dalam HTML bagian dalamoutput. Jika nilai modal tidak unik, tempatkan salah satu nilai modal dalam HTML bagian dalamoutput.Membiarkan
I1menjadi nilai inputi1,I2menjadi nilai inputi2, dll. Jika urutan nilai inputI1..I10membentuk pagar denganI1 < I2, tempatkan"TRUE"ke dalam HTML bagian dalamoutput; jika tidak, tempatkan"FALSE"ke HTML bagian dalam output. Secara khusus, kondisi pagar adalahI1 < I2 > I3 < I4 > I5 < I6 > I7 < I8 > I9 < I10.Tempatkan daftar semua
inputnilai yang dipisahkan koma , diurutkan dalam urutan naik, ke dalam HTML bagian dalamoutput.
Mencetak gol
Pemenang kontes adalah programmer yang mengirimkan solusi yang benar ke sejumlah tantangan terbesar. Dalam hal seri, pemenangnya adalah programmer dengan total panjang solusi terendah (jumlah dari semua solusi). Karenanya ini adalah varian kecil dari kode golf.
Catatan penting
Solusi dapat memotong DOM (misalnya menghapus inputs, membuat elemen baru yang tampak sebagai visual detritus) selama kondisi akhir DOM berisi outputelemen dengan ID outdan nilai yang dihitung dengan benar.
Solusi dapat menggunakan penyeleksi jQuery dan CSS3 canggih, kecuali fitur yang mengevaluasi ekspresi atau mengeksekusi kode.
Solusi mungkin tidak mengubah sumber HTML dokumen. Semua manipulasi DOM harus terjadi dalam skrip melalui jQuery.
Solusi tidak boleh menyuntikkan kode apa pun selama traversal / manipulasi DOM. Ini termasuk (tetapi tidak terbatas pada) menulis scriptelemen, menuliskan atribut event yang berisi kode, atau mengeksploitasi expression(IE) atau calcfitur-fitur CSS3. Tantangan ini adalah tentang berpikir kreatif menggunakan set dan pohon, dan penggunaan jQuery yang luar biasa; ini bukan tentang menyelinap kode ke DOM atau membuat akhir berjalan di sekitar pembatasan operator. Saya berhak untuk mendiskualifikasi solusi apa pun atas dasar ini.
Semua solusi dapat direalisasikan, dan masing-masing dapat diimplementasikan dalam waktu kurang dari 400 byte. Solusi Anda tentu saja dapat melebihi 400 byte atau jauh lebih pendek dari 400 byte. Ini hanya jaminan dasar saya bahwa semua 6 masalah dapat dipecahkan menggunakan sejumlah kode yang cukup kecil.
Akhirnya: Jika ragu, harap tanyakan. :)
Contoh
Pertimbangkan tantangan hipotetis: "Jika 3 atau lebih inputnilai sama dengan 5, tempatkan "TRUE"ke HTML bagian dalam output; jika tidak, tempatkan "FALSE"ke HTML bagian dalam output."
Salah satu solusi yang valid adalah:
F = () => $('body').append( '<a>TRUE</a>' );
$('input').each( F );
F();
$('a:lt(3)').html( 'FALSE' );
$('#out').html( $('a:eq(' + $('input[value="5"]').length + ')') );
Semoga jQuerier terbaik menang! ;)
//La garantia soy yo
inputNilai - nilai akan selalu (representasi string) dari integer 0ke 10inklusif. Mereka harus disortir dalam urutan nilai naik ketika ditafsirkan sebagai bilangan bulat. Ini sebenarnya akan menghasilkan urutan yang sama dengan jenis leksikografis, dengan pengecualian yang 10akan muncul segera setelah 1yang terakhir. Seharusnya bukan itu yang terjadi di sini.