میں نے کمپیوٹنگ اولمپیاڈ میں 3 میں سے 4 گولڈ میڈل کیسے جیتے؟

میں نے کمپیوٹنگ اولمپیاڈ میں 3 میں سے 4 گولڈ میڈل کیسے جیتے؟

میں گوگل ہیش کوڈ ورلڈ چیمپیئن شپ فائنلز 2017 کی تیاری کر رہا تھا۔ یہ گوگل کے زیر اہتمام الگورتھمک مسائل کا سب سے بڑا مقابلہ ہے۔

میں نے نویں جماعت میں شروع سے C++ سیکھنا شروع کیا۔ میں پروگرامنگ، الگورتھم یا ڈیٹا ڈھانچے کے بارے میں کچھ نہیں جانتا تھا۔ کسی وقت میں نے کوڈ کی اپنی پہلی لائن لکھی۔ سات ماہ بعد، پروگرامنگ کا مقابلہ افق پر نظر آیا۔ میں یہ دیکھنا چاہتا تھا کہ پروگرامنگ سیکھنے کا میرا انداز کتنا اچھا کام کرتا ہے۔ یہ بہترین موقع تھا۔

دو دن کے مقابلے کے بعد نتیجہ آیا: میں نے گولڈ میڈل جیت لیا۔

میں چونک گیا۔ میں 5 سال کے تجربے کے ساتھ حریفوں سے آگے تھا۔ میں جانتا تھا کہ میں نے سخت محنت کی ہے، لیکن یہ کامیابی میری تمام توقعات سے بڑھ گئی۔ میں نے محسوس کیا کہ کھیلوں کی پروگرامنگ میرا موضوع ہے اور اس میں کبوتر شامل ہے۔

میں جانتا ہوں کہ کس چیز نے مجھے کامیابی تک پہنچایا اور میں اسے آپ کے ساتھ بانٹنا چاہتا ہوں۔

میں نے کمپیوٹنگ اولمپیاڈ میں 3 میں سے 4 گولڈ میڈل کیسے جیتے؟

مضمون کا ترجمہ EDISON سافٹ ویئر کے تعاون سے کیا گیا تھا، جو پروگرامرز کی صحت اور ان کے ناشتے کا خیال رکھتا ہے۔اور اپنی مرضی کے سافٹ ویئر تیار کرتا ہے۔.

کون سی پروگرامنگ زبان کا انتخاب کرنا ہے۔

  • C++ - انتہائی سفارش! وہ بہت تیز ہے۔ STL کی وجہ سے الگورتھم کے نفاذ میں بہت کم وقت لگتا ہے۔ C++ تمام مقابلوں میں قبول کیا جاتا ہے۔ میں نے کوڈ کی اپنی پہلی لائن C++ میں لکھی۔
  • C - STL کی وجہ سے C++ سیکھیں۔ اگر آپ C جانتے ہیں تو آپ C++ میں بھی پروگرام کر سکتے ہیں۔
  • جاوا ایک سست پروگرامنگ زبان ہے۔ اس میں بڑی عددی کلاس ہے، لیکن یہ آپ کی زیادہ مدد نہیں کرے گی۔ اگر کسی مقابلے کی ایک وقت کی حد ہے، جاوا کے ساتھ آپ یقیناً اس سے تجاوز کر جائیں گے۔ جاوا تمام مقابلوں میں قبول نہیں کیا جاتا ہے۔

آپ کہاں پریکٹس کر سکتے ہیں۔

میری سفارش ہے دائرہ آن لائن جج (SPOJ). یہ مقدار اور معیار کے لحاظ سے ایک موثر ذریعہ ہے۔ اگر آپ مسائل کو حل کرنے کے عمل میں پھنس جاتے ہیں تو ایڈیٹرز اور حل آن لائن دستیاب ہیں۔ اس سائٹ کے علاوہ میں تجویز کرتا ہوں۔ ایس پی او جے ٹول کٹ и SPOJ.pl کے لیے مسئلہ کی درجہ بندی کرنے والا.

سب سے پہلے، آپ کو بنیادی باتوں کے بارے میں اپنے علم کو بہتر بنانے کی ضرورت ہے۔

ایک بار جب آپ زبان کے نحو کے عادی ہو جائیں تو کچھ مسائل پر قابو پانا پڑتا ہے۔ سادہ مسائل کے ساتھ شروع کریں جو مشق کی ضرورت ہے. اس مرحلے پر، اہم چیز آپ کے پروگرامنگ کے انداز کا تعین کرنا ہے۔ ہوسکتا ہے کہ آپ کوڈ لکھنا پسند ہو جس میں بہت زیادہ وائٹ اسپیس ہو، شاید آپ ایسا نہ کریں۔ ہو سکتا ہے کہ آپ قوسین کو "اگر" کی طرح ایک ہی لائن پر لگا رہے ہوں، یا آپ انہیں الگ الگ لائنوں پر لگا رہے ہوں۔

آپ کو اپنا پروگرامنگ اسٹائل تلاش کرنا ہوگا کیونکہ یہ آپ کا اسٹائل ہے۔

جب آپ اسے تلاش کرتے ہیں، تو دو بنیادی اصول یاد رکھیں:

  • آپ کا کوڈ لاگو کرنا آسان ہونا چاہئے۔ آپ جس حل کے ساتھ آتے ہیں اسے نافذ کرنے میں آپ کو آرام محسوس کرنا چاہئے۔ کیوں؟ کیونکہ مقابلے کے دوران، آخری چیز جو آپ چاہتے ہیں وہ ہے اپنے کوڈ میں کھو جانا۔ کوڈ کے نفاذ کو آسان بنانے کے بارے میں سوچتے ہوئے مزید 5 منٹ صرف کرنا ہمیشہ بہتر ہوتا ہے بجائے اس کے کہ اس کا پتہ لگانے کی کوشش میں 10 منٹ گزاریں۔
  • آپ کا کوڈ پڑھنے میں آسان ہونا چاہیے۔ جب کوڈ پڑھنا آسان ہوتا ہے تو اسے ڈیبگ کرنا آسان ہوتا ہے۔ آئیے اس کا سامنا کریں — کیڑے ہر وقت ہوتے رہتے ہیں۔ آپ اس احساس کو جانتے ہیں جب آپ کے پاس 10 منٹ باقی ہیں اور آپ کو غلطی نہیں ملتی ہے؟ یقیناً آپ کرتے ہیں۔ اس صورت حال سے بچنے کے لیے، پڑھنے والا کوڈ لکھیں۔ ایک بار جب آپ اسے ڈیبگ کرنا شروع کر دیں تو، کوڈ قدرتی اور سمجھنے میں آسان لگے گا۔

یہاں میری ایک مثال ہے۔ پروگرامنگ سٹائل.

اپنی ترقی کی مہارت کو کیسے بہتر بنائیں

مشق، مشق اور مزید مشق۔ میں تجویز کرتا ہوں کہ آپ پہلے 250 انتہائی قابل حل مسائل پر کام کریں۔ ایس پی او جے. انہیں ترتیب سے حل کریں۔ ان میں سے ہر ایک کے حل کے بارے میں سوچتے ہوئے کم از کم ایک گھنٹہ گزاریں۔

یہ مت کہو: "یہ مسئلہ میرے لیے بہت مشکل ہے، میں اگلا حل کرنے کی کوشش کروں گا۔" ہارنے والے ایسے ہی سوچتے ہیں۔

کاغذ کا ایک ٹکڑا اور ایک پنسل لیں۔ اس کے بارے میں سوچیں. شاید آپ کو کوئی حل مل جائے، شاید نہیں۔ کم از کم، آپ الگورتھمک سوچ کو تیار کریں گے۔ اگر آپ ایک گھنٹے کے اندر کوئی حل نہیں نکال سکتے تو فورم پر یا آرٹیکلز میں تیار حل تلاش کریں۔

آپ اس نقطہ نظر سے کیا حاصل کریں گے؟ کوڈ کا استعمال کرتے ہوئے اپنے خیالات کو تیزی سے نافذ کرنا سیکھیں۔ اور کلاسیکی مسائل اور الگورتھم کا مطالعہ کریں۔

دوم، آپ کو الگورتھم اور ڈیٹا ڈھانچے میں مہارت حاصل کرنی چاہیے۔

درجہ بندی کے نقطہ نظر پر عمل کریں۔ کیا آپ چلنا جانے بغیر بھاگنے لگے؟ نہیں. کیا آپ بغیر کسی ٹھوس بنیاد کے فلک بوس عمارت بنا سکتے ہیں؟ پھر سے نہیں.

آپ سیکھنے کے راستے کے ساتھ قدموں کو نظر انداز نہیں کر سکتے ہیں. اگر آپ ان کو نظر انداز کرتے ہیں، تو آپ کو علم کے خلاء کے ساتھ چھوڑ دیا جائے گا. وقت گزرنے کے ساتھ وہ صرف بدتر ہوتے جائیں گے۔

بنیادی الگورتھم اور ڈیٹا ڈھانچے کے ساتھ شروع کریں۔

شروع کرنا مشکل ہے۔ شاید اس لیے کہ آپ نہیں جانتے کہ پہلے کیا پڑھنا ہے۔ اس لیے میں نے ایک ویڈیو کورس "الگورتھمز اور ڈیٹا سٹرکچرز" بنایا. یہ کورس بناتے وقت، میں نے اس کی بنیاد اس بات پر رکھی کہ میں کس طرح پڑھایا جانا چاہوں گا۔ ردعمل ناقابل یقین تھا! پہلے مہینے میں 3000 سے زیادہ ممالک کے 100 سے زیادہ طلباء نے کورس کے لیے سائن اپ کیا۔

اگر آپ آسان مسائل کو حل کرنے پر کام کرتے ہیں، تو آپ کبھی بھی بہتر نہیں ہوں گے۔

جسے آپ نہیں جانتے اسے سمجھنے کا سب سے مؤثر طریقہ یہ ہے کہ اس کا عملی طور پر تجربہ کیا جائے۔ اس طرح میں نے سیکھا۔ میں نے ایک مشکل کام کا انتخاب کرتے ہوئے بہت سی نئی تکنیکیں سیکھیں جن کے بارے میں میں نے پہلے کبھی نہیں سنا تھا۔

ہر تیسرا مسئلہ جس پر آپ کام کرتے ہیں وہ آپ کو کچھ نیا سکھاتا ہے۔ مسائل کا انتخاب کرتے وقت زیادہ محتاط رہیں۔ مزید مشکل مسائل کا انتخاب کریں!

ایک بار جب آپ SPOJ سے ان 250 مسائل کو مکمل کر لیتے ہیں، تو آپ کو کھیلوں کے پروگرامنگ کے بنیادی موضوعات کی بنیادی سمجھ حاصل ہو جائے گی۔ بنیادی الگورتھم کے پیچھے منطق کی گہری سمجھ کے ساتھ، اعلیٰ سطحی الگورتھم کم پیچیدہ معلوم ہوں گے۔ اس طرح آپ اپنے علم سے زیادہ سے زیادہ فائدہ اٹھا سکتے ہیں۔

ہر ایک مرکزی تھیم کی گہرائی میں کھودیں۔

یہاں ایک قیمتی وسیلہ ہے۔ بہت ساری معلومات کے ساتھ۔ وہاں آپ کو ہر موضوع کے لیے سرفہرست 10 الگورتھم اور ڈیٹا ڈھانچے ملیں گے۔ SPOJ کی طرف سے 250 مسائل کے بعد، آپ کو اس فہرست سے بہت کچھ معلوم ہو جائے گا۔ لیکن آپ کو بہت سی ایسی چیزوں سے بھی ٹھوکر لگے گی جن کے بارے میں آپ نے پہلے کبھی نہیں سنا ہوگا۔ اس لیے ان موضوعات کا صعودی ترتیب سے مطالعہ شروع کریں۔

اگر آپ کچھ نیا سیکھنے کے بعد اپنے علم کو مضبوط نہیں کرتے ہیں، تو آپ جلد ہی سب کچھ بھول جائیں گے۔
میں تجویز کرتا ہوں کہ ایک نیا الگورتھم سیکھنے کے بعد، اسے عملی طور پر استعمال کریں۔ اسے 2-3 کاموں کے ذریعے کام کریں۔ SPOJ میں الگورتھم ٹیگ تلاش کریں۔ وہاں آپ کو ایسے مسائل ملیں گے جنہیں حل کرنے کے لیے اس الگورتھم کی ضرورت ہے۔ پہلے ان مسائل کو حل کریں۔

ماسٹر ڈائنامک پروگرامنگ کیونکہ یہ آپ کو فتح کی طرف لے جائے گا۔
میرے تجربے سے، ہر مقابلہ میں کم از کم ایک مسئلہ ہوتا ہے۔ متحرک پروگرامنگ. بہت سے لوگوں کو "متحرک پروگرامنگ" کا جملہ سننے پر سر میں درد ہوتا ہے کیونکہ وہ اسے بالکل نہیں سمجھتے۔

اور یہ اچھی بات ہے۔ کیونکہ اگر آپ ڈائنامک پروگرامنگ کو سمجھتے ہیں تو آپ جیت جائیں گے۔

مجھے ڈائنامک پروگرامنگ پسند ہے، یہ میرا پسندیدہ موضوع ہے۔ متحرک پروگرامنگ کا راز صرف مقامی نہیں بلکہ عالمی سطح پر بہترین انتخاب کرنا ہے۔ آپ کو مسئلہ کو آسان ذیلی مسائل میں تقسیم کرنا چاہیے۔ ان ذیلی مسائل میں سے ہر ایک کو صرف ایک بار حل کریں۔ پھر ایک حل بنائیں جو حل شدہ ذیلی مسائل کو یکجا کرے۔ لالچی الگورتھم - متحرک پروگرامنگ کے برعکس۔ اسے ہر قدم پر مقامی طور پر بہترین انتخاب کرنے کی ضرورت ہوتی ہے۔ اور مقامی طور پر بہترین انتخاب ایک خراب عالمی حل کا باعث بن سکتا ہے۔

نئے تصورات سیکھنے کے دوران، چیک کریں ٹاپ کوڈر ٹیوٹوریلز. وہ بہت مفصل اور قابل فہم ہیں۔ ان کی بدولت میں سمجھ سکا بائنری انڈیکس شدہ درخت.

مشکل کام کرتے ہیں

کیا آپ نے کبھی ایسے ایتھلیٹس کے بارے میں سنا ہے جو برسوں کی مشق کے بغیر اولمپکس جیتتے ہیں؟ مجھے نہیں.

ہر سال کمپیوٹر اولمپیاڈ کی تیاریاں ستمبر میں شروع ہوتی تھیں اور اپریل میں ختم ہوتی تھیں۔

ان 8 مہینوں میں ہر روز میں نے 5 گھنٹے مشق کی۔

اور ہاں، میں نے یہ 5 گھنٹے صرف الگورتھمک مسائل کو حل کرنے میں گزارے۔ مجھے وہ دن یاد ہیں جب میں نے 8 اور یہاں تک کہ 10 گھنٹے تک مشق کی تھی۔ کیوں؟ کیونکہ مجھے یہ پسند آیا۔ ہر روز جب میں اسکول سے گھر لوٹتا تو سیدھا بیڈ روم میں جاتا، کمپیوٹر پر بیٹھ کر ایک نئے مسئلے کا تجزیہ کرنے لگتا۔ یا میں ایک نیا الگورتھم سیکھ رہا تھا جو مجھے اس مسئلے کو حل کرنے کے لیے جاننے کی ضرورت ہے۔

اگر آپ جیتنا چاہتے ہیں تو آپ کو بھی ایسا ہی کرنا ہوگا۔ ایک مسئلہ منتخب کریں اور اس پر قائم رہیں۔ سپر مارکیٹ میں چلتے وقت یا گاڑی چلاتے وقت اس کے بارے میں سوچیں۔

میں نے کمپیوٹنگ اولمپیاڈ میں 3 میں سے 4 گولڈ میڈل کیسے جیتے؟

کیا آپ جانتے ہیں کہ جب آپ سوتے ہیں تو آپ کا دماغ اس دن جمع کی گئی معلومات کو ڈیفراگمنٹ کرتا ہے؟ وہ کتابوں کی الماری پر حروف تہجی کے حساب سے کتابوں کا ڈھیر لگاتا دکھائی دیتا ہے۔ بنیادی طور پر، آپ کا دماغ ان مختلف مسائل کے بارے میں سوچتا ہے جن کا آپ سامنا کر رہے ہیں۔

یہ مہارت سے استعمال کیا جا سکتا ہے. سونے سے پہلے ایک مشکل مسئلہ پڑھیں اور یاد رکھیں کہ اس کے حل کے لیے کیا کرنا پڑتا ہے۔ اس مرحلے پر، آپ کو خود حل تلاش کرنے کی ضرورت نہیں ہے۔ بستر پر جاؤ. آپ کا دماغ اس مسئلے پر کارروائی کرنا شروع کر دے گا۔ جب آپ بیدار ہوں گے، تو آپ کو یہ جان کر حیرت ہوگی کہ آپ نے اس کا حل سوتے ہوئے ڈھونڈ لیا۔

خود کریں. یہ جادو کی طرح ہے۔

میں نے ایک ویڈیو بلاگ بنایا

میں نے کمپیوٹنگ اولمپیاڈ میں 3 میں سے 4 گولڈ میڈل کیسے جیتے؟

یہ مختصر پیراگراف کھیلوں کے پروگرامنگ سے متعلق نہیں ہے۔ اگر آپ بیس سال کے ہیں اور سوچ رہے ہیں کہ میں دنیا کو کیسے دیکھتا ہوں، تو آپ شاید چیک آؤٹ کرنا چاہیں۔ یوٹیوب پر میرا ویڈیو بلاگ. میں اس میں دنیا، زندگی اور کمپیوٹر سائنس کے بارے میں بات کرتا ہوں۔

ہوشیار کام کریں۔

یہی کامیابی کا راز ہے۔ آپ کو اہداف کی ضرورت ہے۔

ہم لوگ ہیں اور ہمیں یہ پسند ہے۔ تیار کرنا. ہم ہمیشہ اس کو روکنا چاہتے ہیں جو ابھی کرنے کی ضرورت ہے۔ متحرک پروگرامنگ کے مسائل سے نمٹنے کے مقابلے میں نیٹ فلکس دیکھنا ہمیشہ زیادہ خوشگوار ہوتا ہے۔ آپ یہ جانتے ہیں اور آپ کو اسے ٹھیک کرنے کی ضرورت ہے۔

تاخیر کو کیسے شکست دی جائے۔

اپنے آپ کو اہداف مقرر کریں۔ آپ کو ہمیشہ دلچسپ مسائل ملیں گے جن سے آپ کچھ نیا سیکھ سکتے ہیں (وہ وسائل دیکھیں جن کا میں نے اوپر ذکر کیا ہے)۔ لیکن ان مسائل کو حل کرنے کی ضرورت ہے، صرف پڑھنے کی نہیں۔

تو یہاں ہے کہ میں نے تاخیر پر کیسے قابو پایا۔ میں نے ایک کاغذی کیلنڈر شروع کیا اور ہر دن ان مسائل سے بھرا جو میں حل کرنا چاہتا تھا۔ میں نے ہمیشہ دو دن پہلے مسائل کو پُر کیا۔ لہذا میں جانتا تھا کہ اگلے دنوں میں اپنے وقت کا انتظام کیسے کرنا ہے۔

میں نے کمپیوٹنگ اولمپیاڈ میں 3 میں سے 4 گولڈ میڈل کیسے جیتے؟

لہذا میں ہمیشہ حوصلہ افزائی کرتا تھا. مجھے کیلنڈر پر اگلے دنوں کو بھرنے کے لیے کچھ مسائل حل کرنے اور نئے تلاش کرنے کی ضرورت تھی۔ حل شدہ مسائل کو عبور کرنا بہت اچھا لگتا ہے۔ میں جانتا ہوں کہ آپ کو بھی یہ پسند ہے۔

اپنا کاغذی کیلنڈر حاصل کریں۔ اپنے فون پر کسی اور کام کی فہرست نہ بنائیں جسے آپ کل بھول جائیں گے۔

مؤثر طریقے سے ڈیبگ کرنے کا طریقہ

کیا آپ پیشہ ور بننا چاہتے ہیں؟ اگر ہاں، تو آپ کو "اسے اپنے ذہن میں ڈیبگ" کرنے کی ضرورت ہے۔
یہ اب تک کی سب سے موثر ڈیبگنگ تکنیک ہے جسے میں جانتا ہوں کیونکہ اس میں ڈیبگر کی ضرورت نہیں ہے۔ آپ کا دماغ ایک ہی وقت میں متعدد کوڈ برانچوں کا جائزہ لیتا ہے اور آپ کو اس کے مقابلے کوڈ کا بہت وسیع جائزہ فراہم کرتا ہے۔ کلاسک ڈیبگر.

آپ اپنا موازنہ ایک گرینڈ ماسٹر سے کر سکتے ہیں جو شطرنج کھیلتا ہے اور سوچتا ہے کہ 3 آگے بڑھتا ہے۔

میں اس تکنیک کو مکمل طور پر دفاع کی اپنی ابتدائی لائن کے طور پر استعمال کرتا ہوں۔ پھر میں ایک حقیقی ڈیبگر استعمال کرتا ہوں۔

اپنے سر میں ڈیبگ کرنے کا طریقہ سیکھنے کے لیے، آپ کو مشق کرنے کی ضرورت ہے۔ جب آپ کسی مسئلے کے حل کی توثیق کرتے ہیں اور "غلط جواب" حاصل کرتے ہیں، تو سیدھے ڈیبگر بٹن پر نہ جائیں۔ کوڈ کو دوبارہ پڑھیں اور سوچیں: "اس لائن میں کیا ہو رہا ہے؟"، ""اگر" یہاں پروگرام کو کیسے متاثر کرتا ہے؟"، "جب ہم لوپ سے باہر نکلتے ہیں، تو تکرار کرنے والے کی قدر کیا ہوتی ہے؟"

اس طرح آپ اپنے لیے سوچتے ہیں۔ وقت گزرنے کے ساتھ، آپ کوڈ لکھنا اور اسے فلائی پر ڈیبگ کرنا سیکھیں گے۔

مصنف کے بارے میں

میں نے کمپیوٹنگ اولمپیاڈ میں 3 میں سے 4 گولڈ میڈل کیسے جیتے؟
Andrei Margeloiu ایک شوقین پروگرامر ہے جس میں انٹرپرینیورشپ، سٹارٹ اپس اور آؤٹ ڈور میں دلچسپی ہے۔ آپ اس سے رابطہ کر سکتے ہیں۔ LinkedIn پر.

ترجمہ: ڈیانا شیرمیوا

ماخذ: www.habr.com

نیا تبصرہ شامل کریں