સ્પર્ધાત્મક પ્રોગ્રામિંગ

સ્પર્ધાત્મક પ્રોગ્રામિંગ એક માનસિક રમત છે જે સામાન્ય રીતે ઈન્ટરનેટ અથવા સ્થાનિક નેટવર્ક પર યોજાય છે, જેમાં સ્પર્ધકોને આપેલ શરતો (કે વર્ણન) મુજબનો પ્રોગ્રામ બનાવવાનો હોય છે. આ સ્પર્ધકોને રમતવી11ર પ્રોગ્રામર કહે છે. Google,"Google Code Jam" . google.com. "TCO12 Sponsor: Google - TCO 12". topcoder.com.  Facebook"Facebook Hacker Cup".  and IBM જેવી ઘણી બહુરાષ્ટ્રીય સોફ્ટવેર અને ઈન્ટરનેટ કંપનીઓ દ્વારા સ્પર્ધાત્મક પ્રોગ્રામિંગને ઓળખવામાં આવે છે અને આધાર આપવામાં આવે છે. ઘણી સંસ્થાઓ (વેબસાઈટો) નિયમિતપણે આવી પ્રોગ્રામિંગ સ્પર્ધાઓ યોજે છે.

પ્રોગ્રામિંગ સ્પર્ધામાં સામાન્ય રીતે યજમાન તાર્કિક કે ગાણિતિક કોયડાઓ સ્પર્ધકો (જેમની સંખ્યા ૧૦થી હજારો હોઈ શકે) સમક્ષ રજુ કરે છે, અને સ્પર્ધકોએ દરેક કોયડો ઉકેલી શકતો કમ્પ્યુટર પ્રોગ્રામ લખવાનો હોય છે. તેમાં ઉકેલેલ કોયડાઓની સંખ્યા અને સફળ ઉકેલ લખવામાં લાગેલા સમય પરથી સામાન્ય રીતે ચુકાદો અપાય છે, પરંતુ ક્યારેક અન્ય પરીબળ (જેમ કે આઉટપૂટની ગુણવત્તા, પ્રોગ્રામને ચાલવામાં લાગેલો સમય, પ્રોગ્રામનું કદ વગેરે)ને પણ ધ્યાનમાં લેવાતાં હોય છે.

 ઈતિહાસ 
સૌથી જૂની જ્ઞાત સ્પર્ધાઓમાં એક ACM ICPC છે જે ૧૯૭૦ના દાયકામાં શરુ થઇ હતી, અને ૨૦૧૧ સુધીમાં ૮૮ દેશોમાં પ્રસરી છે. ઈ.સ. ૨૦૦૦ની સાલથી સ્પર્ધાત્મક પ્રોગ્રામિંગમાં રસ દાખવવાનું વલણ બહુ વધ્યું છે, જેનો ઈન્ટરનેટના વિકાસ સાથે ઊંડો સંબંધ છે, જે ભૌગોલિક પ્રશ્નોને દૂર કરીને, ઓનલાઈન આંતરરાષ્ટ્રીય સ્પર્ધાઓ ગોઠવવામાં મદદરૂપ થાય છે.

 સામાન્ય પરિચય 
સ્પર્ધાત્મક પ્રોગ્રામિંગનો ધ્યેય, આપેલા કોયડાઓને ઉકેલી શકે તેવા કમ્પ્યુટર પ્રોગ્રામનો સોર્સ કોડ લખવાનો હોય છે. પ્રોગ્રામિંગ સ્પર્ધાઓમાં આવતાં કોયડાઓ માંથી મોટા ભાગના કોયડાઓ (સ્વભાવે) ગાણિતિક કે તાર્કિક હોય છે. તેવા કોયડાઓ લાક્ષણિક રીતે નીચેનામાંથી કોઈ એક વર્ગના હોય છે: ક્રમચય-સંચયનું વિજ્ઞાન, અંક સિદ્ધાંત, ગ્રાફ સિદ્ધાંત,  ભૂમિતિ, લખાણ (સ્ટ્રીંગ)નું વિશ્લેષણ and માહિતી માળખાં . કેટલીક સ્પર્ધાઓમાં કૃત્રિમ બુદ્ધિમત્તાને લગતાં કોયડા પણ પ્રચલિત છે.

કોયડાના પ્રકાર (વર્ગ)થી નિરપેક્ષ રીતે, કોયડા ઉકેલવાની પ્રક્રિયા મુખ્યત્વે બે ભાગોમાં વિભાજીત કરી શકાય, ૧) એક કાર્યક્ષમ અલગોરિધમની રચના, અને ૨) તે અલગોરિધમને કોઈ એક અનુકુળ પ્રોગ્રામિંગ ભાષામાં અમલમાં મૂકવો. (જૂદી જૂદી સ્પર્ધાઓમાં જૂદી જૂદી પ્રોગ્રામિંગ ભાષાઓ માન્ય હોય છે.) આ બે સ્કીલ્સ પ્રોગ્રામિંગ સ્પર્ધાઓમાં સર્વસામાન્ય રીતે ચકાસાતી હોય છે.

મોટાભાગની સ્પર્ધાઓમાં યોજનાર કમ્પ્યુટર (સર્વર) (જેમને જજ કહે છે) દ્વારા સ્વયંસંચાલિત રીતે નિર્ણયો અપાય છે. સ્પર્ધક દ્વારા અપાયેલ દરેક ઉકેલને જજ વિવિધ (સામાન્ય રીતે ગુપ્ત) 'ચકાસણી કેસ' માટે ચકાસે છે. સામાન્ય રીતે, સ્પર્ધાઓમાં બધા-અથવા-એકે નહી ગુણ-પ્રણાલિ હોય છે, એટલે કે કોઈ ઉકેલ તો જ "સ્વીકાર" થાય છે જો તે જજ દ્વારા ચલાવતાં બધા જ test કેસમાં સાચો ઉત્તર આપે, અન્યથા તે ઉકેલ ખોટો ગણાય છે. પરંતુ, કેટલીક સ્પર્ધાઓમાં આંશિક ગુણ માન્ય હોય છે, જેના માટે પાસ કરેલ test કેસની સંખ્યા, પરિણામોની ગુણવત્તા, અથવા અન્ય કોઈ ખાસ માપદંડ હોય છે. કેટલીક સ્પર્ધાઓમાં સ્પર્ધકે માત્ર આપેલ ઈનપુટ માહિતીને અનુરૂપ આઉટ્પુટ માહિતી આપવાની હોય છે, જેમાં જજ માત્ર આઉટ્પુટ માહિતી જ ચકાસે છે.

 નોંધપાત્ર સ્પર્ધાઓ 
સ્પર્ધાઓ બે પ્રકારની હોય છે: ટૂંકાગાળાની અને લાંબાગાળાની. ટુંકા ગાળાની સ્પર્ધાઓનો પ્રત્યેક રાઉન્ડ ૧-૩ કલાકનો હોય છે. લાંબા ગાળાની સ્પર્ધાઓ થોડા દિવસોથી માંડીને થોડા મહિનાઓ સુધી ચાલતી હોય છે.

 ટુંકા ગાળાની સ્પર્ધાઓ 
 ACM ICPC - વિશ્વની સૌથી જૂની સ્પર્ધાઓમાંની એક, જે કૉલેજના વિદ્યાર્થીઓના માટે હોય છે, અને તેમાં ૩ના ગ્રુપમાં ભાગ લઇ શકાય છે. આ સ્પર્ધાની પુરસ્કર્તા IBM કંપની છે.
 ACSL -  માધ્યમિક કે ઉચ્ચતર માધ્યમિક શાળાના વિદ્યાર્થીઓ માટેની કમ્પ્યુટર વિજ્ઞાન સ્પર્ધા, જેમાં લેખિત અને પ્રોગ્રામિંગ વિભાગો હોય છે.
 CodeChef Cook-Off"COMPETE - CodeChef". codechef.com.  - ACM ICPC જેવી પ્રોગ્રામીંગ સ્પર્ધા, જે દર મહિનાના છેલ્લેથી બીજા રવિવારે હોય છે.
 CodeChef LunchTime"COMPETE - CodeChef". codechef.com.  - એક જુનિયર પ્રોગ્રામિંગ શ્રેણી (સ્પર્ધા) જે દર મહિનાના છેલ્લા રવિવારે હોય છે, જે માધ્યમિક કે ઉચ્ચતર માધ્યમિક શાળાના વિદ્યાર્થીઓ માટે હોય છે.
 CodeChef SnackDown"Snackdown Home - CodeChef". codechef.com.  - CodeChef દ્વારા યોજાતી વાર્ષિક બહુ-રાઉન્ડ, વૈશ્વિક પ્રોગ્રામિંગ સ્પર્ધા
 Facebook Hacker Cup - 2011થી યોજાતી વાર્ષિક સ્પર્ધા, જેની યોજનાર અને પુરસ્કર્તા Facebook કમ્પની છે.
 Google Code Jam - 2003થી યોજાતી સ્પર્ધા, જેનું યોજનાર અને પુરસ્કર્તા Google છે.
 HackerRank Ad Infinitum"Programming problems and Competitions :: HackerRank".  - HackerRank દ્વારા આયોજિત ગણિત પ્રોગ્રામિંગ સ્પર્ધા
 HackerRank Week of Code"Programming problems and Competitions :: HackerRank".  - HackerRank દ્વારા આયોજિત ૭ દિવસની સ્પર્ધા
 ICFP Programming Contest - 1998 થી આંતરરાષ્ટ્રીય ઉપયોગી પ્રોગ્રામીંગ સભા (the International Conference on Functional Programming) દ્વારા યોજાતી સ્પર્ધા. 
 IEEEXtreme Programming Competition - 2006 થી IEEE દ્વારા યોજાતી સ્પર્ધા
 IOI - માધ્યમિક શાળાઓના વિદ્યાર્થીઓ માટે યોજાતી સૌથી જૂની સ્પર્ધાઓમાંની એક.
 TopCoder Open - Algorithm - TopCoder દ્વારા ૨૦૦૪થી યોજાતી સ્પર્ધા.
મોટા ભાગની ઉપર્યુક્ત સ્પર્ધાઓમાં સ્પર્ધકોની સંખ્યા બહુ મોટી હોવાથી, સ્પર્ધા સામાન્ય રીતે ઘણા રાઉન્ડમાં યોજાય છે. તેમાં છેલ્લા રાઉન્ડ સિવાયના બધા જ રાઉન્ડ ઓનલાઈન હોય છે, જ્યારે છેલ્લો રાઉન્ડ ઓફલાઈન હોય છે. આમાં એક અપવાદ IEEEXtreme છે, જે એક વાર્ષિક, 24-કલાકની ઓનલાઈન સ્પર્ધા છે. IOI અને ACM ICPC ના વિજેતાઓને સ્વર્ણ, રજત અને કાંસ્ય ચંદ્રક મળે છે, જ્યારે અન્ય સ્પર્ધાઓમાં વિજેતાઓને રોકડ ઇનામ અપાય છે. વધુમાં, આવી સ્પર્ધાઓના સ્કોર ટેબલમાં ઉચ્ચ સ્થાન મેળવવાથી ઘણી સોફ્ટવેર અને ઈન્ટરનેટ કંપનીઓનું ધ્યાન આકર્ષિત કરી શકાય છે.

 લાંબા-ગાળાની સ્પર્ધાઓ 
 CodeChef Long Challenges"COMPETE - CodeChef". codechef.com. 
 Google AI Challenge
 Kaggle
 TopCoder Marathon matches

 ઓનલાઇન સ્પર્ધાઓ અને તાલીમ મેળવવાના સ્ત્રોતો 
જગતભરના પ્રોગ્રામરોનો સમૂહ સ્પર્ધાત્મક પ્રોગ્રામિંગને સમર્પિત ઘણા ઈન્ટરનેટ-સ્રોતો (વેબ્સાઈટો) સર્જ્યા છે અને જાળવે છે. તેઓ નાના ઇનામો વાળી કે ઇનામ વિનાની છૂટક સ્પર્ધાઓ યોજે છે. વધુમાં, સ્પર્ધાત્મક પ્રોગ્રામિંગની તાલીમ માટેનો એક પ્રચલિત સ્રોત જૂના કોયડાઓનો સંગ્રહ પણ હોય છે. તેમાં નીચેનાનો સમાવેશ થાય છે:
 similarweb અનુસાર ક્રમાંક નામ વર્ણનACM/ICPC 5808"Security Screen". www.similarweb.com. HackerRank (હેકર-રેન્ક)  "સૌથી વધુ સર્જનશીલ" સ્પર્ધાત્મક પ્રોગ્રામિંગ વેબ્સાઈટ. તે 2012માં શરુ કરાઈ હતી, અને સંગણક વિજ્ઞાનના જૂદા જૂદા ક્ષેત્રોમાં કોયડાઓ ધરાવે છે. તે વાર્ષિક Codesprints પણ યોજે છે, જેનાથી પ્રોગ્રામરો સીધા સીલીકોન વેલીની નવ-પ્રારંભ કંપનીઓ (સ્ટાર્ટ-અપ) સાથે જોડાઈ શકે.  12181"Security Screen". www.similarweb.com. GeeksforGeeks (ગીક્સ ફોર ગીક્સ)  લેખો અને મહાવરા માટે પ્લેટફોર્મ ધરાવતી એક વેબસાઈટ. આ સાઈટ મુખ્યત્વે પ્રોગ્રામિંગ મૌખિક પરીક્ષા(ઇન્ટરવ્યુ)ની તૈયારી માટે છે. તે 2009માં શરુ થઇ હતી અને તેમાં સ્પર્ધાત્મક પ્રોગ્રામિંગ પ્લેટફોર્મ 2015 માં શરુ કરાયું હતું.  17667"Security Screen". www.similarweb.com. Codeforces (કોડ-ફોર્સીસ)  રશિયન સ્ત્રોત, સરતોવ રાજ્ય વિદ્યાપીઠ (Saratov State University) દ્વારા સંચાલિત, જે નિયમિત રીતે (દર અઠવાડિયે ૨ વખત) ટૂકી સ્પર્ધાઓ પૂરી પાડે છે. વિશેષ ખૂબીઓ: અન્ય સ્પર્ધકોના ઉકેલોની સત્યતા "કોડીંગ સમયે" ચકાસી શકાય, આભાસી સ્પર્ધાઓ, તાલીમ  વગેરે.  27074"Security Screen". www.similarweb.com. CodeChef (કોડ-શેફ)  Directi દ્વારા સંચાલિત, જે એક 10-દિવસ-લાંબી સ્પર્ધા અને ૨ ટૂંકી સ્પર્ધાઓ દર મહીને યોજે છે (એક IOI જેવી અને બીજી ACM ICPC જેવી), અને શૈક્ષણિક સંસ્થાઓને મફતમાં સ્પર્ધા યોજવાનું પ્લેટફોર્મ પૂરું પાડે છે. લાંબી સ્પર્ધાના ટોપ બે વિજેતાઓને રોકડ ઇનામ જ્યારે વૈશ્વિક ટોપ ૧૦ ને ટીશર્ટ અપાય છે.     28109"Security Screen". www.similarweb.com. TopCoder (ટોપ-કોડર)  અમેરિકાનો સ્ત્રોત અને કમ્પની, જે સ્પર્ધાઓ યોજે છે અને free-lance નોકરી તરીકે ઔદ્યોગિક પ્રશ્નો પણ પૂરા પાડે છે; તે ડઝનો ટૂકી સ્પર્ધાઓ અને ઘણી લાંબી ("મેરાથોન") સ્પર્ધાઓ દર વર્ષે યોજે છે. ખાસ ખૂબીઓ - અન્ય સ્પર્ધકોના ઉકેલોની સત્યતા કોડીંગ પછી અને અંતિમ સ્વયંસંચાલિત ચકાસણી (ચેલેન્જ ફેઝ) પૂર્વે ચકાસી શકાય.  31587"Security Screen" . www.similarweb.com. Project Euler (પ્રોજેક્ટ યુલર)  ગણતરીવાળા ગણિત કોયડાઓનો મોટો સંગ્રહ (એટલે કે પ્રોગ્રામિંગ સાથે સીધું જ સંલગ્ન નથી, પણ ઘણે ભાગે પ્રોગ્રામિંગની જરૂર પડે છે). 37853"Security Screen" . www.similarweb.com.  CodinGame (fr
શ્રેણી:કોમ્પ્યુટર
) (કોડીન્ગેમ) કોયડાઓ (વધતી જટિલતાવાળા), કોડ ગોલ્ફ. નિયમિત રીતે ઓનલાઈન સ્પર્ધાઓ યોજે છે (કૃત્રિમ બુદ્ધિમત્તાના પ્રશ્નો, ઇષ્ટતમ બનાવવાના (ઓપ્ટીમાઈઝેશનના) પ્રશ્નો)  32843"Security Screen" . www.similarweb.com. HackerEarth (હેકર-અર્થ)  Bangalore, India સ્થિત કંપની જે ઓનલાઈન સ્પર્ધા જેવું વાતાવરણ, નોકરીએ રાખવાની કસોટી માટેના હેતુથી પૂરું પાડે છે.   45824"Security Screen" . www.similarweb.com. SPOJ (સ્પોજ)પોલેન્ડની ઓનલાઈન જજ પ્રણાલિ જે તાલીમ માટે ઘણા પ્રશ્નો પૂરા પાડે છે, અને અન્ય આયોજકોને તેમની પ્રોગ્રામિંગ સ્પર્ધા યોજવા માટે આધાર પૂરો પાડે છે. 49763"Security Screen" . www.similarweb.com. POJ (પોજ)ACM/ICPC માટે પેકિંગ વિશ્વવિદ્યાલય (Peking University)નું ઓનલાઈન જજ, જે Ying Fuchen, Xu Pengcheng અને Xie Di એ બનાવ્યું હતું. 3,055 કોયડાઓ ધરાવે છે. 125102UVa Online Judge (યુવા ઓનલાઈન જજ)  મહાવરા માટે ૩૫૦૦+ કોયડા ધરાવે છે. નિયમિત રીતે ઓનલાઈન સ્પર્ધાઓ યોજે છે.  172157Coderbyte (કોડર-બાઈટ)  પ્રોગ્રામિંગ કોયડા ધરાવે છે, જે તમે એક ઓનલાઈન એડિટરમાં ૯ પ્રોગ્રામિંગ ભાષાઓમાંથી કોઈ એકમાં લખી શકો. એ ઉપરાંત અલગોરિધમ ના શૈક્ષણિક વિડીઓ, પ્રાથમિક JavaScript કોર્ષ, વિડીઓ ટુટોરીયલ્સ, અને નોકરી માટેની મૌખિક કસોટીની તૈયારી કરવાના મટીરીયલ. 

 આ પણ જૂઓ: 
 કોડ ગોલ્ફ

 References 

 બાહ્ય કડીઓ 
 સ્પર્ધાઓ યોજવા માટે મુક્ત-સ્ત્રોત સોફ્ટવેર
 Contest Management System Open-source tool in Python to run and manage a programming contest on a server IOI 2012 and IOI 2013.