de Priyabrata Biswas

Cum să începeți programarea competitivă în JavaScript

Cum sa incepeti programarea competitiva in JavaScript
să U =? =>? ; U (M); / * M → ‘mathbaleu *

Dacă nu sunteți familiarizați cu programare competitivă, practic este un sport al minții cu scopul de a scrie cod pentru a rezolva problemele date. Am fost prezentat la el în primul an de vârstă. Începând cu această scriere, încă nu mă pricep la asta! Poate că se datorează faptului că nu-mi place să codez în C ++ sau poate sunt o persoană leneșă care nu-și va face timp să o învețe suficient de bine. Dar, îmi plac algoritmii și structurile de date la fel de mult cum îmi place JavaScript!

Așadar, gândul absurd a trecut prin mintea mea din nou și din nou. „Ce se întâmplă dacă începem să folosim JavaScript în arena competitivă?” Se pare că acest lucru nu pare teritoriul neexplorat pe care am crezut că ar fi. Multe platforme ca HackerRank, CodeChef, și Codeforces acceptă JavaScript.

Știu că C ++ este mult mai rapid în comparație cu JavaScript și poate aloca dinamic memorie. C și C ++ sunt destul de asemănătoare în ceea ce privește performanța, dar programatorii competitivi folosesc în cea mai mare parte C ++ din cauza acestuia Biblioteca de șabloane standard (sau STL). Oferă structuri comune de date de programare, cum ar fi listă, stivă, matrice, împreună cu clase de containere, algoritmi și iteratori scoși din cutie.

Dar, JavaScript oferă ceva care îi lipsește C ++:

Libertate!

Fiind un limbaj de script, JavaScript este în mod inerent lent. Dar totuși, este cel mai popular limbaj de acolo. Conform celor din 2018 Stack Overflow Developer Survey, 69,8% dintre respondenți folosesc JavaScript în scopul dezvoltării lor. Dar, în același timp, nu strălucește atât de bine în cazul programării competitive. Motivul este că pur și simplu nu a fost construit pentru asta!

În 1995, Brendan Eich a dezvoltat JavaScript numai pentru a adăuga interactivitate paginilor web, cum ar fi gestionarea unui clic de mouse.

Astăzi, putem crea servere, jocuri, aplicații mobile, aplicații IoT și chiar învățarea automată în browser este posibilă cu JavaScript. Deci, de ce să-ți fie rușine când îl folosești în programare competitivă?

„Orice aplicație care poate fi scrisă în JavaScript va fi în cele din urmă scrisă în JavaScript.” – Jeff Atwood

Îți amintești ce ți-am spus despre STL și trusa de instrumente pe care o oferă pentru programare competitivă? M-am gândit în sinea mea de ce nu TC 39 veniți cu ceva similar pentru JavaScript!

1611510606 428 Cum sa incepeti programarea competitiva in JavaScript
În cele din urmă, am avut o idee! ?

Ați auzit de „Node Package Manager” cunoscut și ca „npm‘?

Ei bine, este lumea cel mai mare registru de software cu peste 874.285 de pachete (începând cu această scriere) și este managerul de pachete implicit pentru Node.js.

Ideea este de a dezvolta un pachet npm la fel ca STL-ul lui C ++

Vă prezentăm Mathball

Mathball este un pachet npm pentru programare competitivă în JavaScript care implementează algoritmi optimizați pentru o execuție mai rapidă. Bine, acum exagerez! Adevărul este că acceptă doar 16 funcții de utilitate implementate abordări cu forță brută pana acum. Am realizat această mică bibliotecă de asistență pentru a ajuta oamenii în programarea competitivă.

Cum sa incepeti programarea competitiva in JavaScript
ce mai face logo-ul! ?

Puteți obține pachetul destul de ușor dacă aveți Node.js și npm instalate pe computerul dvs. tastând următoarea comandă în terminal:

npm install mathball

Puteți accesa toate utilitățile prin intermediul unui mathball obiect, M, ca astfel:

Din nou, doar obținerea unei funcții individuale este la fel de ușoară ca aceasta:

Oh, acum trebuie să te gândești –

Cum ar trebui să folosesc o bibliotecă terță parte pe o platformă precum HackerRank sau CodeChef?

Răspunsul este simplu, doar pachet aceasta! ?

Lasă-mă să explic la ce mă refer! Să presupunem că încercați să rezolvați această problemă specială pe HackerRank –

Simple Array Sum | HackerRank
Calculați suma numerelor întregi dintr-o matrice.www.hackerrank.com

Nu vă lăsați copleșiți de toate acele linii de cod. Dacă ați mai folosit HackerRank, atunci știți deja că este doar pentru gestionarea I / O.

Mai întâi, copiați și lipiți conținutul de mai sus într-un fișier, index.js. Apoi, în același director, deschideți terminalul și tastați:

npm install mathball

Apoi, în interiorul index.js fișier, modificați următoarele:

În cele din urmă, pentru a grupa totul într-un singur fișier, folosesc Webpack, dar sunteți liber să alegeți orice pachet de module CommonJS!

Deci, să creăm un webpack.config.js în același director cu următorul cod:

Dacă nu aveți deja instalat Webpack, vă rugăm să îl instalați astfel:

npm install -g webpack webpack-cli

În cele din urmă, tastați următoarele:

webpack --config ./webpack.config.js --mode=development

Acum, comanda de mai sus va crea un fișier numit bundle.js în același director. Deci, copiați și lipiți conținutul său pe HackerRank și apăsați *Trimiteți codul*. Asta e!

1611510607 611 Cum sa incepeti programarea competitiva in JavaScript
Bazinga! ?

Epilog

Nu are sens să treci prin toate acele prostii doar pentru a putea calcula suma unei matrice … nu? Deci, trebuie să mărturisesc că problemele legate de programarea competitivă tind să fie mult mai complicate decât aceasta.

Cred că programarea competitivă înseamnă mai mult să găsim modalități de a rezolva o problemă decât doar să le rezolvăm!

Odată ce vă dați seama de ce algoritm sau structură de date are nevoie problema dvs., codificarea devine destul de ușoară dacă aveți la dispoziție o bibliotecă precum Mathball. De asemenea, nu trebuie să parcurgeți toți acești pași pentru grupare de fiecare dată când codificați ceva. Este practic un proces de configurare unic. Doar codificați și grupați fișierele cu ultima comandă.

Fapt amuzant – poți folosi Mathball și în proiectul tău!

Voi îmbunătăți în permanență Mathball și vă salut sincer contribuția. Împreună, putem face ca Mathball să facă mult mai mult! Iată legătură pentru repo.

Scopul acestui articol a fost evanghelizarea importanței programării competitive în comunitatea JavaScript. Cred că algoritmii de învățare și structurile de date ne pregătesc să ne preocupăm mai mult de eficiența și complexitatea bazei noastre de cod. Ne face să căutăm de două ori eventualele scurgeri de memorie și, în general, ne ajută să devenim dezvoltatori mai buni.

Iată o listă de resurse care m-au inspirat să mă angajez în călătoria mea de a sprijini JavaScript în programarea competitivă:

  1. Pranay Dubey – JavaScript pentru programare competitivă
  2. JavaScript pentru programare algoritmică competitivă

Multumesc pentru timpul acordat! ✌️