आरओबी BOWDEN: हाय. मैं रोब हूँ, और मुझे आशा है कि आपके 15 के खेल के लिए खेल. अब, आप की जरूरत चार कार्य कर रहे हैं इस कार्यक्रम में लागू करने के लिए - init, , आकर्षित ले जाते हैं, और जीता. तो, चलो init को देखो. यहाँ, हम हम कर रहे हैं पहली बात यह देखना क्या करने जा रहा एक चर घोषित है काउंटर कहा जाता है. यह प्रारंभ की जा करने के लिए जा रहा है डी बार डी करने के लिए शून्य से 1. डी आयाम है कि याद रखें हमारे बोर्ड की. कैसे init काम चल रहा है यह हो रहा है है पूरे बोर्ड पर पुनरावृति और हम शुरू करने जा रहे हैं ऊपर छोड़ दिया पर. और चलो बस कहना है हम एक 4 4 द्वारा बोर्ड है. तो ऊपर हम कर रहे हैं छोड़ दिया कहने जा रहा 15 है. और फिर हम सिर्फ गिनती करने के लिए जा रहे हैं बोर्डों के माध्यम से,, 15, 14, 13 कह 12, 11, 10, 9, 8, 7, 6, 5, 4, और इतने पर. तो ऊपर छोड़ दिया, हम डी गुना होने की उम्मीद डी शून्य से 1, 4 से 4 में जो मामला 16 शून्य से होने जा रहा है 1, सही ढंग से 15 है. हम करने जा रहे हैं, जहां और अब यहाँ है पूरे बोर्ड पर पुनरावृति. और हम में से प्रत्येक की स्थिति निर्धारित करने के लिए जा रहे हैं के वर्तमान मूल्य के लिए बोर्ड हमारे काउंटर, और फिर काउंटर जा रहा है घटती करने के लिए, इतना है कि अगले हम तक पहुंचने की स्थिति होने वाला है काउंटर से एक से भी कम हो पिछले स्थिति. तो हम शुरू में 15 था और काउंटर घटती. तो फिर हम 14 आवंटित करने के लिए जा रहे हैं अगले स्थिति, घटाव काउंटर, और हम सौंपा जा रहे हैं 13, और इतने पर. अंत में, हम उस कोने को संभालने की जरूरत मामला है, जहां बोर्ड एक भी है अगर आयाम, तो बस, 15, 14, 13 कर 12, नीचे सभी तरह से 3, 2, 1, है हमारे साथ छोड़ने के लिए जा रहा एक न सुलझा हुआ बोर्ड. और हम 1 और 2 स्वैप करने के लिए है. डी माड 2 0 के बराबर होती है, तो, कि है हम जांच करने के लिए जा रहे हैं यह भी देखने के लिए अगर. डी माड 2 0, तो पंक्ति डी माइनस में बराबर है 1, जो नीचे पंक्ति है, और स्थिति डी शून्य से 2, या स्तंभ डी घटा 2, हम 2 करने के लिए सेट करने के लिए जा रहे हैं, और स्तंभ डी शून्य से 3 हम कर रहे हैं 1 पर सेट करने के लिए जा रहा है. तो यह है कि अभी पीछे है, जहां 1 और 2 वर्तमान में कर रहे हैं. अंत में, हम बहुत स्थापित करने के लिए जा रहे हैं नीचे सही खाली करने के लिए बराबर है, जहां रिक्त हैश परिभाषित किया गया है 0 के रूप में शीर्ष पर. तो, कि, सख्ती से आवश्यक नहीं था पाश के लिए यह किया जा रहा है के बाद से 0 करने के लिए नीचे सही, के बाद से सेट काउंटर स्वाभाविक रूप से 0 तक पहुंच जाएगा. लेकिन जानते हुए भी कि हम पर निर्भर करता है कि रिक्त एक 0 खोजने के लिए hashed किया गया था. मैं बाद में इस कार्यक्रम में जाना है और अगर , 100 करने के लिए शीर्ष पर रिक्त बदल यह अभी भी काम करना चाहिए. तो यह सिर्फ यकीन है कि कर रही है नीचे सही वास्तव में करने के लिए बराबर है हमारी रिक्त मान. अंत में, हम दो वैश्विक चर है, इसलिए मैं और रिक्त जम्मू रिक्त, और हम देखते हैं उन शीर्ष पर घोषित कर दिया. और हम उन दो वैश्विक उपयोग करने के लिए जा रहे हैं का ट्रैक रखने के लिए चर रिक्त की स्थिति, कि हम नहीं तो पूरे के माध्यम से देखने की जरूरत है खाली हर एक को खोजने के लिए बोर्ड हम एक चाल चलने की कोशिश का समय है. तो खाली की स्थिति हमेशा से रहा है नीचे सही में शुरू करने जा रहा. तो नीचे सही द्वारा दिया जाता है सूचकांक डी शून्य से 1, डी शून्य से 1. तो, कि init है. अब हम आकर्षित करने के लिए आगे बढ़ना. तो, ड्रा समान होने जा रहा है हम पुनरावृति करने के लिए जा रहे हैं, जहां पूरे बोर्ड पर. और हम बस मूल्य मुद्रित करना चाहते हैं कि बोर्ड की प्रत्येक स्थिति में है. यहाँ तो, हम है कि मूल्य मुद्रण कर रहे हैं बोर्ड की प्रत्येक स्थिति में. और हम क्या कर रहे हैं कि सूचना -. और ये सिर्फ printf कह रहा है कि भले ही यह एक एक अंक या अगर की दो अंकों की संख्या, हम अभी भी यह चाहते हैं , प्रिंट आउट में दो कॉलम का समय लग इतना है कि हम दो अंकों और एक है एक ही बोर्ड में अंकों की संख्या, हमारे बोर्ड अभी भी अच्छा है और वर्ग दिखेगा. इसलिए हम हर मूल्य के लिए कि क्या करना चाहते हैं बोर्ड में रिक्त लिए छोड़कर. तो, अगर बोर्ड में स्थिति के बराबर होती है रिक्त, तो हम विशेष रूप से सिर्फ एक अंडरस्कोर बाहर मुद्रित करना चाहते हैं रिक्त का प्रतिनिधित्व करते हैं, बजाय के लिए की जो भी मूल्य रिक्त वास्तव में है. अंत में, हम मुद्रित करना चाहते हैं एक नई लाइन से बाहर. इस के अंदर अभी भी है कि नोटिस बाहर पाश के लिए बाहरी, लेकिन पाश के लिए भीतरी. पाश के लिए इस बाहरी पुनरावृति है, अत: सभी पंक्तियों पर, और इसलिए इस printf है बस एक नई लाइन के लिए प्रिंट, इसलिए करने जा हम अगली पंक्ति प्रिंट आउट पर चलते हैं. और कहा कि ड्रा के लिए है. तो, अब के लिए कदम पर चलते हैं. अब, हम टाइल को पास कि उपयोगकर्ता इस खेल में प्रवेश किया है - वे वे ले जाना चाहते टाइल दर्ज - और आप एक bool वापस जाने के लिए माना जाता है, इसलिए कर रहे हैं सही है या गलत, पर निर्भर करता है या तो कि इस कदम वास्तव में था कि क्या वैध - कि टाइल किया जा सकता है रिक्त स्थान में चले गए. यहाँ तो, हम एक स्थानीय चर घोषित, tile_1 और करने के लिए जा रहे हैं जो tile_j, blank_i और blank_j के समान हो, यह का ट्रैक रखने के लिए जा रहा है, सिवाय टाइल की स्थिति. अब यहाँ, हम blank_i उपयोग करने के लिए जा रहे हैं और blank_j और तो सब ठीक है कहना यहां बोर्ड पर रिक्त है. अब, रिक्त ऊपर टाइल है? रिक्त छोड़ दिया करने के लिए टाइल है? रिक्त के अधिकार के लिए टाइल है? रिक्त नीचे टाइल है? तो, टाइल उन में से किसी में है तो पदों, तो हम जानते हैं कि टाइल रिक्त स्थान में स्थानांतरित किया जा सकता है खाली करने के लिए ले जाया जा सकता है जहां टाइल वर्तमान में है. यहाँ तो, हम कहते हैं कि अगर स्थिति में बोर्ड blank_i शून्य से 1 blank_j. तो यह कह रहा है टाइल है वर्तमान रिक्त ऊपर? और अगर ऐसा है, हम याद करने के लिए जा रहे हैं कि टाइल की स्थिति है. टाइल स्थिति blank_i में है शून्य से 1 और blank_j. अब सबसे पहले, हम भी इस जांच यहीं, तो blank_i है 0 से अधिक. हम ऐसा क्यों करना चाहते हैं? खैर, रिक्त शीर्ष पंक्ति में है बोर्ड की, तो हम नहीं करना चाहती बाद टाइल के लिए रिक्त ऊपर देखो ऊपर से ऊपर कुछ भी नहीं है बोर्ड की पंक्ति. यह आपको हो रही अंत कैसे हो सकता है विखंडन दोष या की तरह कुछ अपने कार्यक्रम अभी काम हो सकता है अप्रत्याशित तरीके से. तो, यह हम नहीं करना सुनिश्चित बना रही है वैध नहीं कर रहे हैं स्थानों में देखने के लिए. अब हम के लिए एक ही बात करने जा रहे हैं अन्य सभी संभव संयोजनों. तो यहाँ, हम खाली नीचे देख रहे हैं कि टाइल देखने के लिए अगर. और हम भी यकीन है कि हम कर रहे हैं बनाने के लिए है नहीं नीचे पंक्ति पर, वरना हम टाइल के लिए नहीं दिखना चाहिए. यहाँ, हम बाईं के लिए देखने के लिए जा रहे हैं यह टाइल है तो रिक्त देखने के लिए. और हम बाईं ओर नहीं देखना चाहिए हम सबसे बाएँ स्तंभ में कर रहे हैं. और यहाँ हम को देखने के लिए जा रहे हैं सही खाली की, और हमें नहीं करना चाहिए हम कर रहे हैं सही करने के लिए देखो दाएँ स्तंभ में. तो, उन चीजों में से कोई भी सही थे, तो कि टाइल आसन्न नहीं था इसका मतलब खाली करने के लिए और हम झूठे लौट सकते हैं. इस कदम वैध नहीं था. लेकिन, उन में से एक सच्चे थे, तो पर इस बिंदु पर, हम उस tile_i जानते हैं और tile_j के बराबर हैं टाइल की स्थिति. और हां, तो हम पर बोर्ड अपडेट कर सकते हैं पदों tile_i और tile_j. हम नए मूल्य रिक्त हो जाएगा पता और उस स्थिति blank_i blank_j, मूल था जो खाली - हम टाइल करने जा रहा है पता वहाँ चाल है. हम वास्तव में क्या करने की जरूरत नहीं है नोटिस यहां असली स्वैप, हम जानते हैं कि जब से सम्मिलित करने के लिए की जरूरत है कि मानों उन पदों में. हम एक अस्थायी जरूरत नहीं है चारों ओर चर. अंत में, हम है कि हम याद करने की जरूरत कर रहे हैं कि हमारे वैश्विक चर है स्थिति पर नज़र रखने खाली की. तो हम की स्थिति अद्यतन करना चाहते हैं जहां टाइल होने के लिए रिक्त मूल रूप से किया गया था. अंत में, हम के बाद वापसी सच चाल सफल रहा था. हम सफलतापूर्वक स्वैप टाइल के साथ खाली. ठीक है, तो पिछले हम वोन जांच की जरूरत है. तो, जीता इसी एक bool रिटर्न जहां सच इंगित करने के लिए जा रहा है कि उपयोगकर्ता खेल जीता है. और झूठे का संकेत है कि खेल अभी भी चल रहा है. उपयोगकर्ता नहीं जीता है. तो, यह बहुत ज्यादा होने जा रहा है init के विपरीत, जहां init, हम बोर्ड को प्रारंभ, याद इतने पर 15, 14, 13, 12, के लिए. जीता जबकि, हम जाँच करना चाहते हैं बोर्ड इतने पर 1, 2, 3, 4, 5, और है. तो, हम को प्रारंभ करने के लिए जा रहे हैं हमारे कि क्या शीर्ष के बाद से 1 करने के लिए काउंटर बोर्ड के छोड़ दिया जाना चाहिए. और फिर हम पाश के लिए जा रहे हैं पूरे बोर्ड पर. की इस हालत की उपेक्षा एक पल के लिए. और इस हालत बस जा रहा है चेक इस स्थिति में बोर्ड है वर्तमान की गिनती के लिए बराबर है? यदि हां, तो गिनती बढ़ाने के लिए इतना है कि हम पर देखने के लिए अगले स्थिति एक अधिक है हम अभी कर रहे हैं पर स्थिति से. तो यह है कि हम कैसे मिलता है ऊपर छोड़ दिया 1 होना चाहिए. 2 को गिनती वेतन वृद्धि. अगले स्थिति को देखो. इस 2 है? यदि हां, 3 को गिनती वेतन वृद्धि. अगले स्थिति यह 3 है? यदि हां, तो गिनती वेतन वृद्धि 4 करने के लिए, और इतने पर. तो, पर किसी भी स्थिति है, अगर वहाँ हमारी गिनती के समान नहीं है कि बोर्ड, तो हम उस के बाद से झूठी लौटना चाहते हैं है कि कुछ खपरैल का अर्थ है वहाँ नहीं सही स्थिति में. यहाँ तो, इस हालत में क्या कर रही है? खैर, खाली है याद नीचे सही पर जाने वाले. और रिक्त का मूल्य नहीं हो सकता जरूरी के मूल्य के बराबर उस तक पहुँच होने जा रहा है मुकाबला नीचे सही पर. तो हम विशेष रूप से जाँच करने के लिए चाहता हूँ मैं बराबर होती डी शून्य से 1 और जम्मू के बराबर होती है डी शून्य से 1 के बराबर होती है - कह रहा है, जो अगर हम नीचे सही से देख रहे हैं पर बोर्ड - तो हम बस जारी रखना चाहते हैं. हम इस विशेष छोड़ना चाहते हैं के लिए लूप का चलना. और हां, तो हम इस के माध्यम से प्राप्त करने के लिए प्रबंधन पाश के लिए नेस्ट, इसका मतलब है कि में था कि कोई टाइल नहीं थी गलत स्थिति. और हम पाश से बाहर तोड़ने के लिए और आ यहाँ, जहाँ हम सच लौट सकते हैं. सभी टाइल्स सही स्थिति में थे और कि उपयोगकर्ता है का मतलब खेल जीता. और यह बात है. मेरा नाम रोब बोडेन है, और यह 15 था.