ACMدر واقع یک انجمن علمی است که برای علوم کامپیوتر به وجود آمد همانند IEEE برای رشته ی الکترونیکacm .مخفف Association for Computing Machinery می باشد که هر ساله کنفرانس های معتبری را در مورد علوم کامپیوتر برگزار می نماید. از جمله فعالیت های این انجمن می توان به برگزاری مسابقات برنامه نویسی icpc که مخفف International Collegiate Programming Contest است و حمایت مالی از برگزاری مسابقه ی شطرنج بین کاسپارف و کامپیوتر IBM Deep Blue اشاره کرد. از جمله مقالات معروف این انجمن می توان به مقاله ی معروف دانشمند بزرگ دنیای کامپیوتر پروفسور دایکسترا(Dijkstra) در مورد مضرات استفاده از دستور goto اشاره کرد. این انجمن در سال 1947 تآسیس شد و به همین علت است که در اسم آن از کلمه ی machinery استفاده شده است چون در آن زمان کامپیوترها آن قدر بزرگ بودند که به آن ها ماشین آلات می گفتند. از مؤسسان این انجمن می توان به Edmud Berkeley و Richard Hamming اشاره کرد. هر دوی آن ها فعالیت های بسیاری در دنیای کامپیوتر داشته اند. یکی از جنجالی ترین پروژه های پروفسور Hamming برنامه نویسی برای کامپیوتری بود که وظیفه داشت جواب یک معادله ی فیزیکی را تعیین کند که این جواب مشخص می کرد آیا انفجار بمب اتم باعث آتش گرفتن اتمسفر زمین می شود یا خیر. این کامپیوتر با حل این معادله تعیین کرد که انفحار بمب باعث آتش سوزی نمی شود و این باعث شد که دولت امریکا در جنگ جهانی از بمب اتم علیه هیروشیما و ناکازاکی استفاده نماید.
مسابقات برنامه نويسي ACM يكسري مسابقات برنامه نويسي است كه در آن تيم هايي 3 نفره در زماني مشخص به حل تعدادي سوال محاسباتي و الگوريتمي مشخص مي پردازند. اين مسابقات همه ساله به صورت جهاني به ميزباني كشورهاي مختلف برگزار مي شود كه در آن 100 تيم برتر از دانشگاه هاي مختلف جهان شركت مي كنند. براي انتخاب اين 100 تيم برتر همه ساله مسابقات منطقه اي در نقاط مختلف جهان برگزار مي شود كه با تلاش دانشگاه شريف، مسابقات منطقه ي ايران هم همه ساله قبل از مسابقات جهاني در اين دانشگاه برگزار مي شود.
هر منطقه بسته به نتايجي كه تيم هاي منتخب آن در مسابقه هاي جهاني سال هاي قبل كسب كرده اند، سهميه اي براي فرستادن تيم هاي برتر خود به مسابقات جهاني دارد كه اين سهميه براي منطقه ي ايران در حدود 2 تا 3 تيم منتخب است. نكته ي جالب اينجاست كه در مسابقات منطقه اي تيم هاي منتخب از ميان دانشگاه هاي مختلف انتخاب مي شوند و يك دانشگاه نمي تواند بيش از يك تيم را به مسابقات جهاني بفرستد، گرچه همه ي تيمهاي آن دانشگاه از تيم هاي ديگر برتر باشند! اين نكته روزنه ي اميدي براي تيم هاي غيرشريفي است، زيرا دانشگاه شريف تنها مي تواند يك تيم را به مسابقات جهاني بفرستد و گرچه تيم هاي ديگر دانشگاه شريف اكثرا متشكل از افراد المپيادي است و معمولا در مقام 2 و 3 قرار مي گيرند، ولي نمي توانند به مسابقات جهاني راه يابند
هدف:
سوال اصلي در هر كاري اين است كه ما چرا بايد در آن كار شركت كنيم؟
اين سوال در مورد ACM به طور جدي تري مطرح است، زيرا يك مسئله ي فوق برنامه در دوران دانشجويي محسوب مي شود كه مي تواند وقت و انرژي دانشجو را نيز بگيرد.آيا ما تنها به خاطر مزيت هاي پيروزي در مسابقاتACM در آن شركت مي كنيم؟ در اين صورت فرقACM با المپياد كامپيوتر چيست؟ و اگر ما در اين مسابقات پيروز نشويم، چه چيزهايي بدست آورده ايم و چيزهايي از دست داده ايم؟ و مهم تر از آن در هدف اكثر تيم هاي شركت كننده وجود دارد.برخلاف مسابقات المپياد كامپيوتر كه در آن هدف تنها استفاده از مزيت هاي پيروزي در اين مسابقات است و در صورت باخت در آن جز اندكي علم خاص، چيز ديگري براي ما باقي نمي ماند، در مسابقاتACM هدف خود مسابقات است و نه پيروزي در آن! اين بدان معنا است كه شما در مسابقات ACM برخلاف المپياد، بايد از خود مسابقات لذت ببريد، از كد زدن لذت ببريد و از فكري كه پشت اين كدها است؛ نه تنها براي پيروزي در اين مسابقات و درج اين پيروزي در رزومه ي خود. گرچهACM مزيت هاي قراردادي زيادي دارد، ولي هدف اصلي آن اين مزيت فلسفي و ذاتي آن است.
فوايد ذاتي ACM:
اين ها همان فوايدي هستند كه شما چه در صورت پيروزي و چه در صورت شكست از آنها بهره مند مي شويد:
1) تفريح و لذت: برخلاف المپياد هاي دانش آموزي كه در چند سال اخير تنها به وسيله و هدفي براي عبور از كنكور تبديل شده اند و لذت از المپياد جاي خود را به جو پراسترس و سخته كنكورواري داده است، مسابقات ACM اصلاً اينگونه نيست. براساس فلسفه ي تشكيل مسابقات ACM از مهم ترين دلايل برگزاري اين مسابقات، ايجاد فضايي شاد و پرنشاط است؛ به همين منظور در مسابقات جهاني و منطقه ايACM همواره از بادكنك هاي رنگي براي نمايش امتياز افراد استفاده مي شود. حتي در مسابقات جهاني چندين مراسم قبل و بعد از مسابقه برگزار مي شود كه در آن موسيقي هاي متنوع و نمايش هاي مختلف اجرا مي شود.
2) پشتوانه ي برنامه نويسي و الگوريتمي: جداي از شكست و پيروزي، شما در صورت تمرين براي مسابقات ACM در 2 زمينه مهارت پيدا خواهيد كرد: الف- برنامه نويسي و كد زدن (سريع) ب- الگوريتم
اين دو مهارت در آينده ي هر برنامه نويس و طراح نرم افزار بسيار كاربرد خواهد داشت و او را به شخصي قوي در زمينه ي رشته ي كامپيوتر تبديل مي كند. در نتيجه كسي كه مي خواهد در اين مسابقات شركت كند بايد به اين دو مهارت كامپيوتري علاقه داشته باشد و بداند كه در اين مسابقات تنها با اين 2 مقوله سر و كار دارد و تيم هايي به مراحل بالاتر مي روند كه در مجموع اين دو مهارت از بقيه قوي تر باشند.
فوايد قراردادي ACM:
اين مزيت ها، تنها در صورت پيروزي در مراحل مختلفACM ازجمله مسابقات جهاني بدست مي آيند.
1) يك پوئن مثبت در رزومه ي علمي: همانند هر مسابقه ي جهاني ديگري ( همچون المپياد) مسابقاتACM هم مزيت بسيار خوبي در رزومه ي فرد مي تواند داشته باشد؛ علي الخصوص اگر فرد ( به عنوان نماينده اي از كشورش) در مسابقات جهاني شركت كرده باشد. داشتن رتبه در مسابقات جهانيACM شانس فرد را براي ادامه ي تحصيل در دانشگاه هاي معتبر جهاني به صورت چشمگيري افزايش مي دهد و حتي دانشگاه هاي معتبر دنيا و يا شركت هاي معتبري(چون گوگل وIBM) هم ممكن است از افراد تيم هاي برتر در مسابقات جهانيACMدعوت به عمل آورند.از اين لحاظ اين مسابقات از جايگاه مهمي در سطح جهان (و نه فقط ايران) برخوردار است.
2) مزيت هاي ملي اضافي: در كشور ما هر از چند گاهي، بسته به شرايط زمانه، ممكن است مزايا و امتيازاتي به تيم هاي شركت كننده در مسابقات جهاني داده شود. معمولا افراد اين تيم ها بايد به عضويت انجمن نخبگان درآيند. همچنين اگر تيمي در مسابقات بين المللي مقام اول تا سوم ( و يا مدال طلا تا برنز) كسب كند، به احتمال زياد، افراد تيم از معافيت سربازي بهره مند خواهند شد. احتمال دادن پول هاي مختلف به افراد تيم هاي جهاني نيز بعيد نيست!
3) كار گروهي: از جمله مزيت هاي ديگر اين مسابقات در برابر مسابقات ديگر مثل المپياد، كارگروهي دراين مسابقات است. شما در ACM بايد در گروه هاي 3 نفري مسابقه دهيد و همچنين 1 كامپيوتر نيز بيشتر نداريد. پس مديريت گروه در اين مواقع بسيار حائز اهميت مي شود و تيم بايد به خوبي به تقسيم كار بپردازد؛ همچنين به هيچ عنوان نبايد درگيري يا جدلي ايجاد شود و گرنه ممكن است همه چيز از دست برود. در نتيجهACM تمرين خوبي براي كار گروهي خواهد بود.
آشنایی با برخی قوانین مسابقات :
موضوع این مسابقات برنامه نویسی و طراحی الگوریتم بهینه است. تیمها شامل 3 دانشجو و یک سرپرست (coach) هستند و باید به سوالاتی که پاسخ آنها کدهای برنامه نویسی هستند جواب دهند. هدف در این مسابقات یافتن استعدادهای برتر برنامه نویسی است که عموماً توسط شرکت های بزرگ به کار گرفته می شوند. همانطور که عنوان شد تیمهای شرکت کننده در این مسابقات از سه عضو تشکیل می شود که بنابر یک قانون نانوشته اما ضروری باید واجد شرایط خاصی باشند. از جمله اینکه:
1- باید به یکی از زبانهای برنامه نویسی متداول و اعلام شده توسط کمیته اجرایی مسابقات تسلط کامل داشته باشند. این زبانها عموما C++ ، Cو یا جاوا می باشند.
2- اعضای تیم باید تسلط کافی بر مفاهیم طراحی الگوریتم ، بهینه سازی الگوریتم ، پیچیدگی الگوریتم ، ساختمان داده ها و ... داشته باشند.
3- حداقل یکی از اعضای تیم باید تسلط کامل بر زبان انگلیسی داشته باشد تا بتواند سوالات را به زبان مادری ترجمه و در اختیار سایر اعضای گروه قرار دهد. ( سوالات این مسابقات در تمامی مراحل به زبان انگلیسی طرح می شود.)
شرح مسابقه
موضوع این مسابقات برنامه نویسی و طراحی الگوریتم های بهینه است. تیم ها شامل ۳ دانشجو با شرایط قابل قبولو یک سرپرست(Coach) هستند و باید به سوالاتی که پاسخ آنها کدهای برنامه نویسی هستند، جواب دهند. تبدیل الگوریتم ها به کد خود یک مهارت بزرگ است که در واقع عامل اصلی طبقه بندی تیم ها در مسابقات این چنینی محسوب می شود. در زمان مسابقه یک سیستم در اختیار هر تیم قرار می گیرد که این سه دانشجو به طور مشترک با این سیستم شروع به حل مسئله می کنند. هدف در این مسابقات یافتن استعداد های برتر برنامه نویسی است که عموما توسط شرکت های بزرگ به کار گرفته می شوند. مدت زمان مسابقه حدود ۵ ساعت است و حداقل ۸ سوال در اختیار شرکت کنندگان قرار می گیرد.
بادکنک یکی از عناصر این مسابقات و نماد حل سوال است. در این مسابقات به هر سوال یک رنگ مجزا اختصاص داده می شود که از قبل مشخص است. در صورت حل هر یک از سوالات، یک بادکنک به رنگ همان سوال به تیم حل کننده سوال داده می شود تا به اطلاع دیگر تیم های شرکت کننده در مسابقه برسد.
پاسخ دادن به هر سوال در حقیقت نوشتن یک برنامه است. به عبارت دیگر در صورت مسئله از شرکت کنندگان خواسته می شود تا برنامه ای بنویسند که اطلاعات مشخصی را از فایل ورودی خوانده و پس از انجام پردازش های خاصی که در متن سوال آمده، نتیجه را در فایل خروجی یا خروجی استاندارد (مانیتور) چاپ کنند. سپس برنامه نوشته شده توسط شرکت کنندگان به داور فرستاده می شود Submitتا عمل قضاوت (Judge) روی آن انجام گیرد. در این مرحله برنامه فرستاده شده به داوران توسط نرم افزاری به نام PC2 اجرا شده و تست های آزمون (Test-Case) به برنامه داده می شود. اگر برنامه قادر به ارائه پاسخ صحیح نباشد، ٢٠ دقیقه جریمه برای تیم ارسال کننده جواب منظور و به آن تیم اطلاع داده می شود تا به تصحیح آن بپردازد، و اگر برنامه پاسخ صحیح را تولید نماید، زمان حل آن سوال (که برابر است زمان صرف شده تا ارائه پاسخ صحیح بعلاوه جریمه های منظور شده به ازای هر تلاش ناموفق) محاسبه شده و یک بادکنک دریافت می کند.
برنده نهایی تیمی است که بیشترین تعداد سوال را حل کرده باشد. اگر تیم ها به تعداد مساوی سوال حل کرده باشند، تیمی که در زمان کم تری به سوالات پاسخ داده باشد، در جدول رده بندی بالاتر از دیگر تیم ها قرار می گیرد.