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

thumb|યાન્ડેક્સ પર Algorithm નામની એક ઓપન હરીફાઈ. ઓગસ્ટ 22, 2013.
**સ્પર્ધાત્મક પ્રોગ્રામિંગ** એક માનસિક રમત છે જે સામાન્ય રીતે ઈન્ટરનેટ અથવા સ્થાનિક નેટવર્ક પર યોજાય છે, જેમાં સ્પર્ધકોને આપેલ શરતો (કે વર્ણન) મુજબનો પ્રોગ્રામ બનાવવાનો હોય છે. આ સ્પર્ધકોને રમતવી11ર પ્રોગ્રામર કહે છે. Google, Facebook and IBM જેવી ઘણી બહુરાષ્ટ્રીય સોફ્ટવેર અને ઈન્ટરનેટ કંપનીઓ દ્વારા સ્પર્ધાત્મક પ્રોગ્રામિંગને ઓળખવામાં આવે છે અને આધાર આપવામાં આવે છે. ઘણી સંસ્થાઓ (વેબસાઈટો) નિયમિતપણે આવી પ્રોગ્રામિંગ સ્પર્ધાઓ યોજે છે.

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

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

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

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

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

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

### ટુંકા ગાળાની સ્પર્ધાઓ 
* ACM ICPC - વિશ્વની સૌથી જૂની સ્પર્ધાઓમાંની એક, જે કૉલેજના વિદ્યાર્થીઓના માટે હોય છે, અને તેમાં ૩ના ગ્રુપમાં ભાગ લઇ શકાય છે. આ સ્પર્ધાની પુરસ્કર્તા IBM કંપની છે.
* ACSL -  માધ્યમિક કે ઉચ્ચતર માધ્યમિક શાળાના વિદ્યાર્થીઓ માટેની કમ્પ્યુટર વિજ્ઞાન સ્પર્ધા, જેમાં લેખિત અને પ્રોગ્રામિંગ વિભાગો હોય છે.
* CodeChef Cook-Off - ACM ICPC જેવી પ્રોગ્રામીંગ સ્પર્ધા, જે દર મહિનાના છેલ્લેથી બીજા રવિવારે હોય છે.
* CodeChef LunchTime - એક જુનિયર પ્રોગ્રામિંગ શ્રેણી (સ્પર્ધા) જે દર મહિનાના છેલ્લા રવિવારે હોય છે, જે માધ્યમિક કે ઉચ્ચતર માધ્યમિક શાળાના વિદ્યાર્થીઓ માટે હોય છે.
* CodeChef SnackDown - CodeChef દ્વારા યોજાતી વાર્ષિક બહુ-રાઉન્ડ, વૈશ્વિક પ્રોગ્રામિંગ સ્પર્ધા
* Facebook Hacker Cup - 2011થી યોજાતી વાર્ષિક સ્પર્ધા, જેની યોજનાર અને પુરસ્કર્તા Facebook કમ્પની છે.
* Google Code Jam - 2003થી યોજાતી સ્પર્ધા, જેનું યોજનાર અને પુરસ્કર્તા Google છે.
* HackerRank Ad Infinitum - HackerRank દ્વારા આયોજિત ગણિત પ્રોગ્રામિંગ સ્પર્ધા
* HackerRank Week of Code - 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
* Google AI Challenge
* Kaggle
* TopCoder Marathon matches

## ઓનલાઇન સ્પર્ધાઓ અને તાલીમ મેળવવાના સ્ત્રોતો 
જગતભરના પ્રોગ્રામરોનો સમૂહ સ્પર્ધાત્મક પ્રોગ્રામિંગને સમર્પિત ઘણા ઈન્ટરનેટ-સ્રોતો (વેબ્સાઈટો) સર્જ્યા છે અને જાળવે છે. તેઓ નાના ઇનામો વાળી કે ઇનામ વિનાની છૂટક સ્પર્ધાઓ યોજે છે. વધુમાં, સ્પર્ધાત્મક પ્રોગ્રામિંગની તાલીમ માટેનો એક પ્રચલિત સ્રોત જૂના કોયડાઓનો સંગ્રહ પણ હોય છે. તેમાં નીચેનાનો સમાવેશ થાય છે:

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

## References 

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