1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> आरओबी BOWDEN: हाय. 3 00:00:13,715 --> 00:00:17,800 मैं रोब हूँ, और मुझे आशा है कि आपके 15 के खेल के लिए खेल. 4 00:00:17,800 --> 00:00:22,040 अब, आप की जरूरत चार कार्य कर रहे हैं इस कार्यक्रम में लागू करने के लिए - init, 5 00:00:22,040 --> 00:00:24,650 , आकर्षित ले जाते हैं, और जीता. 6 00:00:24,650 --> 00:00:27,230 तो, चलो init को देखो. 7 00:00:27,230 --> 00:00:32,930 >> यहाँ, हम हम कर रहे हैं पहली बात यह देखना क्या करने जा रहा एक चर घोषित है 8 00:00:32,930 --> 00:00:34,600 काउंटर कहा जाता है. 9 00:00:34,600 --> 00:00:37,620 यह प्रारंभ की जा करने के लिए जा रहा है डी बार डी करने के लिए शून्य से 1. 10 00:00:37,620 --> 00:00:40,200 डी आयाम है कि याद रखें हमारे बोर्ड की. 11 00:00:40,200 --> 00:00:43,840 कैसे init काम चल रहा है यह हो रहा है है पूरे बोर्ड पर पुनरावृति 12 00:00:43,840 --> 00:00:46,050 और हम शुरू करने जा रहे हैं ऊपर छोड़ दिया पर. 13 00:00:46,050 --> 00:00:48,570 >> और चलो बस कहना है हम एक 4 4 द्वारा बोर्ड है. 14 00:00:48,570 --> 00:00:51,220 तो ऊपर हम कर रहे हैं छोड़ दिया कहने जा रहा 15 है. 15 00:00:51,220 --> 00:00:53,960 और फिर हम सिर्फ गिनती करने के लिए जा रहे हैं बोर्डों के माध्यम से,, 15, 14, 13 कह 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, और इतने पर. 17 00:00:58,510 --> 00:01:03,780 तो ऊपर छोड़ दिया, हम डी गुना होने की उम्मीद डी शून्य से 1, 4 से 4 में जो 18 00:01:03,780 --> 00:01:08,290 मामला 16 शून्य से होने जा रहा है 1, सही ढंग से 15 है. 19 00:01:08,290 --> 00:01:10,885 >> हम करने जा रहे हैं, जहां और अब यहाँ है पूरे बोर्ड पर पुनरावृति. 20 00:01:10,885 --> 00:01:14,720 और हम में से प्रत्येक की स्थिति निर्धारित करने के लिए जा रहे हैं के वर्तमान मूल्य के लिए बोर्ड 21 00:01:14,720 --> 00:01:19,090 हमारे काउंटर, और फिर काउंटर जा रहा है घटती करने के लिए, इतना है कि अगले 22 00:01:19,090 --> 00:01:22,300 हम तक पहुंचने की स्थिति होने वाला है काउंटर से एक से भी कम हो 23 00:01:22,300 --> 00:01:23,690 पिछले स्थिति. 24 00:01:23,690 --> 00:01:26,970 तो हम शुरू में 15 था और काउंटर घटती. 25 00:01:26,970 --> 00:01:30,065 तो फिर हम 14 आवंटित करने के लिए जा रहे हैं अगले स्थिति, घटाव काउंटर, 26 00:01:30,065 --> 00:01:33,710 और हम सौंपा जा रहे हैं 13, और इतने पर. 27 00:01:33,710 --> 00:01:37,620 >> अंत में, हम उस कोने को संभालने की जरूरत मामला है, जहां बोर्ड एक भी है अगर 28 00:01:37,620 --> 00:01:44,450 आयाम, तो बस, 15, 14, 13 कर 12, नीचे सभी तरह से 3, 2, 1, है 29 00:01:44,450 --> 00:01:46,780 हमारे साथ छोड़ने के लिए जा रहा एक न सुलझा हुआ बोर्ड. 30 00:01:46,780 --> 00:01:49,390 और हम 1 और 2 स्वैप करने के लिए है. 31 00:01:49,390 --> 00:01:52,930 डी माड 2 0 के बराबर होती है, तो, कि है हम जांच करने के लिए जा रहे हैं 32 00:01:52,930 --> 00:01:54,410 यह भी देखने के लिए अगर. 33 00:01:54,410 --> 00:01:59,810 डी माड 2 0, तो पंक्ति डी माइनस में बराबर है 1, जो नीचे पंक्ति है, और 34 00:01:59,810 --> 00:02:05,430 स्थिति डी शून्य से 2, या स्तंभ डी घटा 2, हम 2 करने के लिए सेट करने के लिए जा रहे हैं, और 35 00:02:05,430 --> 00:02:07,860 स्तंभ डी शून्य से 3 हम कर रहे हैं 1 पर सेट करने के लिए जा रहा है. 36 00:02:07,860 --> 00:02:12,170 तो यह है कि अभी पीछे है, जहां 1 और 2 वर्तमान में कर रहे हैं. 37 00:02:12,170 --> 00:02:16,270 >> अंत में, हम बहुत स्थापित करने के लिए जा रहे हैं नीचे सही खाली करने के लिए बराबर है, जहां 38 00:02:16,270 --> 00:02:20,700 रिक्त हैश परिभाषित किया गया है 0 के रूप में शीर्ष पर. 39 00:02:20,700 --> 00:02:26,785 तो, कि, सख्ती से आवश्यक नहीं था पाश के लिए यह किया जा रहा है के बाद से 40 00:02:26,785 --> 00:02:30,610 0 करने के लिए नीचे सही, के बाद से सेट काउंटर स्वाभाविक रूप से 0 तक पहुंच जाएगा. 41 00:02:30,610 --> 00:02:34,610 लेकिन जानते हुए भी कि हम पर निर्भर करता है कि रिक्त एक 0 खोजने के लिए hashed किया गया था. 42 00:02:34,610 --> 00:02:38,280 मैं बाद में इस कार्यक्रम में जाना है और अगर , 100 करने के लिए शीर्ष पर रिक्त बदल यह 43 00:02:38,280 --> 00:02:39,770 अभी भी काम करना चाहिए. 44 00:02:39,770 --> 00:02:43,180 >> तो यह सिर्फ यकीन है कि कर रही है नीचे सही वास्तव में करने के लिए बराबर है हमारी 45 00:02:43,180 --> 00:02:44,870 रिक्त मान. 46 00:02:44,870 --> 00:02:50,270 अंत में, हम दो वैश्विक चर है, इसलिए मैं और रिक्त जम्मू रिक्त, और हम देखते हैं 47 00:02:50,270 --> 00:02:53,360 उन शीर्ष पर घोषित कर दिया. 48 00:02:53,360 --> 00:02:56,270 और हम उन दो वैश्विक उपयोग करने के लिए जा रहे हैं का ट्रैक रखने के लिए चर 49 00:02:56,270 --> 00:02:59,040 रिक्त की स्थिति, कि हम नहीं तो पूरे के माध्यम से देखने की जरूरत है 50 00:02:59,040 --> 00:03:03,890 खाली हर एक को खोजने के लिए बोर्ड हम एक चाल चलने की कोशिश का समय है. 51 00:03:03,890 --> 00:03:08,450 तो खाली की स्थिति हमेशा से रहा है नीचे सही में शुरू करने जा रहा. 52 00:03:08,450 --> 00:03:13,270 तो नीचे सही द्वारा दिया जाता है सूचकांक डी शून्य से 1, डी शून्य से 1. 53 00:03:13,270 --> 00:03:14,880 तो, कि init है. 54 00:03:14,880 --> 00:03:17,040 >> अब हम आकर्षित करने के लिए आगे बढ़ना. 55 00:03:17,040 --> 00:03:19,370 तो, ड्रा समान होने जा रहा है हम पुनरावृति करने के लिए जा रहे हैं, जहां 56 00:03:19,370 --> 00:03:20,970 पूरे बोर्ड पर. 57 00:03:20,970 --> 00:03:25,400 और हम बस मूल्य मुद्रित करना चाहते हैं कि बोर्ड की प्रत्येक स्थिति में है. 58 00:03:25,400 --> 00:03:29,580 यहाँ तो, हम है कि मूल्य मुद्रण कर रहे हैं बोर्ड की प्रत्येक स्थिति में. 59 00:03:29,580 --> 00:03:32,280 और हम क्या कर रहे हैं कि सूचना -. 60 00:03:32,280 --> 00:03:37,410 और ये सिर्फ printf कह रहा है कि भले ही यह एक एक अंक या अगर की 61 00:03:37,410 --> 00:03:42,010 दो अंकों की संख्या, हम अभी भी यह चाहते हैं , प्रिंट आउट में दो कॉलम का समय लग 62 00:03:42,010 --> 00:03:46,290 इतना है कि हम दो अंकों और एक है एक ही बोर्ड में अंकों की संख्या, हमारे 63 00:03:46,290 --> 00:03:49,450 बोर्ड अभी भी अच्छा है और वर्ग दिखेगा. 64 00:03:49,450 --> 00:03:54,190 >> इसलिए हम हर मूल्य के लिए कि क्या करना चाहते हैं बोर्ड में रिक्त लिए छोड़कर. 65 00:03:54,190 --> 00:03:58,260 तो, अगर बोर्ड में स्थिति के बराबर होती है रिक्त, तो हम विशेष रूप से 66 00:03:58,260 --> 00:04:01,730 सिर्फ एक अंडरस्कोर बाहर मुद्रित करना चाहते हैं रिक्त का प्रतिनिधित्व करते हैं, बजाय के लिए 67 00:04:01,730 --> 00:04:05,150 की जो भी मूल्य रिक्त वास्तव में है. 68 00:04:05,150 --> 00:04:08,500 >> अंत में, हम मुद्रित करना चाहते हैं एक नई लाइन से बाहर. 69 00:04:08,500 --> 00:04:11,970 इस के अंदर अभी भी है कि नोटिस बाहर पाश के लिए बाहरी, लेकिन 70 00:04:11,970 --> 00:04:13,200 पाश के लिए भीतरी. 71 00:04:13,200 --> 00:04:17,930 पाश के लिए इस बाहरी पुनरावृति है, अत: सभी पंक्तियों पर, और इसलिए इस printf है 72 00:04:17,930 --> 00:04:22,130 बस एक नई लाइन के लिए प्रिंट, इसलिए करने जा हम अगली पंक्ति प्रिंट आउट पर चलते हैं. 73 00:04:22,130 --> 00:04:23,910 और कहा कि ड्रा के लिए है. 74 00:04:23,910 --> 00:04:27,770 >> तो, अब के लिए कदम पर चलते हैं. 75 00:04:27,770 --> 00:04:32,590 अब, हम टाइल को पास कि उपयोगकर्ता इस खेल में प्रवेश किया है - वे 76 00:04:32,590 --> 00:04:36,360 वे ले जाना चाहते टाइल दर्ज - और आप एक bool वापस जाने के लिए माना जाता है, इसलिए कर रहे हैं 77 00:04:36,360 --> 00:04:39,300 सही है या गलत, पर निर्भर करता है या तो कि इस कदम वास्तव में था कि क्या 78 00:04:39,300 --> 00:04:43,360 वैध - कि टाइल किया जा सकता है रिक्त स्थान में चले गए. 79 00:04:43,360 --> 00:04:48,340 >> यहाँ तो, हम एक स्थानीय चर घोषित, tile_1 और करने के लिए जा रहे हैं जो tile_j, 80 00:04:48,340 --> 00:04:52,150 blank_i और blank_j के समान हो, यह का ट्रैक रखने के लिए जा रहा है, सिवाय 81 00:04:52,150 --> 00:04:54,910 टाइल की स्थिति. 82 00:04:54,910 --> 00:05:00,370 अब यहाँ, हम blank_i उपयोग करने के लिए जा रहे हैं और blank_j और तो सब ठीक है कहना 83 00:05:00,370 --> 00:05:01,930 यहां बोर्ड पर रिक्त है. 84 00:05:01,930 --> 00:05:04,420 >> अब, रिक्त ऊपर टाइल है? 85 00:05:04,420 --> 00:05:06,210 रिक्त छोड़ दिया करने के लिए टाइल है? 86 00:05:06,210 --> 00:05:07,420 रिक्त के अधिकार के लिए टाइल है? 87 00:05:07,420 --> 00:05:08,970 रिक्त नीचे टाइल है? 88 00:05:08,970 --> 00:05:13,330 तो, टाइल उन में से किसी में है तो पदों, तो हम जानते हैं कि टाइल 89 00:05:13,330 --> 00:05:16,390 रिक्त स्थान में स्थानांतरित किया जा सकता है खाली करने के लिए ले जाया जा सकता है जहां 90 00:05:16,390 --> 00:05:18,240 टाइल वर्तमान में है. 91 00:05:18,240 --> 00:05:26,400 >> यहाँ तो, हम कहते हैं कि अगर स्थिति में बोर्ड blank_i शून्य से 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 तो यह कह रहा है टाइल है वर्तमान रिक्त ऊपर? 93 00:05:31,120 --> 00:05:34,350 और अगर ऐसा है, हम याद करने के लिए जा रहे हैं कि टाइल की स्थिति है. 94 00:05:34,350 --> 00:05:37,870 टाइल स्थिति blank_i में है शून्य से 1 और blank_j. 95 00:05:37,870 --> 00:05:40,660 अब सबसे पहले, हम भी इस जांच यहीं, तो blank_i है 96 00:05:40,660 --> 00:05:41,760 0 से अधिक. 97 00:05:41,760 --> 00:05:43,410 >> हम ऐसा क्यों करना चाहते हैं? 98 00:05:43,410 --> 00:05:47,290 खैर, रिक्त शीर्ष पंक्ति में है बोर्ड की, तो हम नहीं करना चाहती 99 00:05:47,290 --> 00:05:51,240 बाद टाइल के लिए रिक्त ऊपर देखो ऊपर से ऊपर कुछ भी नहीं है 100 00:05:51,240 --> 00:05:52,430 बोर्ड की पंक्ति. 101 00:05:52,430 --> 00:05:55,950 यह आपको हो रही अंत कैसे हो सकता है विखंडन दोष या की तरह कुछ 102 00:05:55,950 --> 00:05:59,030 अपने कार्यक्रम अभी काम हो सकता है अप्रत्याशित तरीके से. 103 00:05:59,030 --> 00:06:04,310 तो, यह हम नहीं करना सुनिश्चित बना रही है वैध नहीं कर रहे हैं स्थानों में देखने के लिए. 104 00:06:04,310 --> 00:06:08,470 >> अब हम के लिए एक ही बात करने जा रहे हैं अन्य सभी संभव संयोजनों. 105 00:06:08,470 --> 00:06:13,250 तो यहाँ, हम खाली नीचे देख रहे हैं कि टाइल देखने के लिए अगर. 106 00:06:13,250 --> 00:06:16,950 और हम भी यकीन है कि हम कर रहे हैं बनाने के लिए है नहीं नीचे पंक्ति पर, वरना हम 107 00:06:16,950 --> 00:06:18,910 टाइल के लिए नहीं दिखना चाहिए. 108 00:06:18,910 --> 00:06:25,040 यहाँ, हम बाईं के लिए देखने के लिए जा रहे हैं यह टाइल है तो रिक्त देखने के लिए. 109 00:06:25,040 --> 00:06:27,860 और हम बाईं ओर नहीं देखना चाहिए हम सबसे बाएँ स्तंभ में कर रहे हैं. 110 00:06:27,860 --> 00:06:30,100 और यहाँ हम को देखने के लिए जा रहे हैं सही खाली की, और हमें नहीं करना चाहिए 111 00:06:30,100 --> 00:06:33,340 हम कर रहे हैं सही करने के लिए देखो दाएँ स्तंभ में. 112 00:06:33,340 --> 00:06:37,820 >> तो, उन चीजों में से कोई भी सही थे, तो कि टाइल आसन्न नहीं था इसका मतलब 113 00:06:37,820 --> 00:06:39,640 खाली करने के लिए और हम झूठे लौट सकते हैं. 114 00:06:39,640 --> 00:06:41,230 इस कदम वैध नहीं था. 115 00:06:41,230 --> 00:06:47,010 लेकिन, उन में से एक सच्चे थे, तो पर इस बिंदु पर, हम उस tile_i जानते हैं और 116 00:06:47,010 --> 00:06:50,540 tile_j के बराबर हैं टाइल की स्थिति. 117 00:06:50,540 --> 00:06:55,210 और हां, तो हम पर बोर्ड अपडेट कर सकते हैं पदों tile_i और tile_j. 118 00:06:55,210 --> 00:06:59,820 हम नए मूल्य रिक्त हो जाएगा पता और उस स्थिति blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, मूल था जो खाली - हम टाइल करने जा रहा है पता 120 00:07:02,950 --> 00:07:04,030 वहाँ चाल है. 121 00:07:04,030 --> 00:07:07,610 >> हम वास्तव में क्या करने की जरूरत नहीं है नोटिस यहां असली स्वैप, हम जानते हैं कि जब से 122 00:07:07,610 --> 00:07:09,850 सम्मिलित करने के लिए की जरूरत है कि मानों उन पदों में. 123 00:07:09,850 --> 00:07:13,780 हम एक अस्थायी जरूरत नहीं है चारों ओर चर. 124 00:07:13,780 --> 00:07:16,920 >> अंत में, हम है कि हम याद करने की जरूरत कर रहे हैं कि हमारे वैश्विक चर है 125 00:07:16,920 --> 00:07:18,980 स्थिति पर नज़र रखने खाली की. 126 00:07:18,980 --> 00:07:22,780 तो हम की स्थिति अद्यतन करना चाहते हैं जहां टाइल होने के लिए रिक्त 127 00:07:22,780 --> 00:07:24,190 मूल रूप से किया गया था. 128 00:07:24,190 --> 00:07:27,680 अंत में, हम के बाद वापसी सच चाल सफल रहा था. 129 00:07:27,680 --> 00:07:31,110 हम सफलतापूर्वक स्वैप टाइल के साथ खाली. 130 00:07:31,110 --> 00:07:34,890 >> ठीक है, तो पिछले हम वोन जांच की जरूरत है. 131 00:07:34,890 --> 00:07:39,900 तो, जीता इसी एक bool रिटर्न जहां सच इंगित करने के लिए जा रहा है कि 132 00:07:39,900 --> 00:07:41,460 उपयोगकर्ता खेल जीता है. 133 00:07:41,460 --> 00:07:43,780 और झूठे का संकेत है कि खेल अभी भी चल रहा है. 134 00:07:43,780 --> 00:07:46,340 उपयोगकर्ता नहीं जीता है. 135 00:07:46,340 --> 00:07:52,100 तो, यह बहुत ज्यादा होने जा रहा है init के विपरीत, जहां init, 136 00:07:52,100 --> 00:07:56,920 हम बोर्ड को प्रारंभ, याद इतने पर 15, 14, 13, 12, के लिए. 137 00:07:56,920 --> 00:08:03,000 जीता जबकि, हम जाँच करना चाहते हैं बोर्ड इतने पर 1, 2, 3, 4, 5, और है. 138 00:08:03,000 --> 00:08:06,600 >> तो, हम को प्रारंभ करने के लिए जा रहे हैं हमारे कि क्या शीर्ष के बाद से 1 करने के लिए काउंटर 139 00:08:06,600 --> 00:08:08,400 बोर्ड के छोड़ दिया जाना चाहिए. 140 00:08:08,400 --> 00:08:10,860 और फिर हम पाश के लिए जा रहे हैं पूरे बोर्ड पर. 141 00:08:10,860 --> 00:08:13,690 की इस हालत की उपेक्षा एक पल के लिए. 142 00:08:13,690 --> 00:08:18,410 और इस हालत बस जा रहा है चेक इस स्थिति में बोर्ड है 143 00:08:18,410 --> 00:08:20,790 वर्तमान की गिनती के लिए बराबर है? 144 00:08:20,790 --> 00:08:27,040 यदि हां, तो गिनती बढ़ाने के लिए इतना है कि हम पर देखने के लिए अगले स्थिति एक अधिक है 145 00:08:27,040 --> 00:08:29,690 हम अभी कर रहे हैं पर स्थिति से. 146 00:08:29,690 --> 00:08:32,700 >> तो यह है कि हम कैसे मिलता है ऊपर छोड़ दिया 1 होना चाहिए. 147 00:08:32,700 --> 00:08:33,950 2 को गिनती वेतन वृद्धि. 148 00:08:33,950 --> 00:08:35,010 अगले स्थिति को देखो. 149 00:08:35,010 --> 00:08:35,690 इस 2 है? 150 00:08:35,690 --> 00:08:37,659 यदि हां, 3 को गिनती वेतन वृद्धि. 151 00:08:37,659 --> 00:08:39,179 अगले स्थिति यह 3 है? 152 00:08:39,179 --> 00:08:42,440 यदि हां, तो गिनती वेतन वृद्धि 4 करने के लिए, और इतने पर. 153 00:08:42,440 --> 00:08:49,190 तो, पर किसी भी स्थिति है, अगर वहाँ हमारी गिनती के समान नहीं है कि बोर्ड, 154 00:08:49,190 --> 00:08:52,640 तो हम उस के बाद से झूठी लौटना चाहते हैं है कि कुछ खपरैल का अर्थ है वहाँ 155 00:08:52,640 --> 00:08:55,490 नहीं सही स्थिति में. 156 00:08:55,490 --> 00:08:58,810 >> यहाँ तो, इस हालत में क्या कर रही है? 157 00:08:58,810 --> 00:09:02,170 खैर, खाली है याद नीचे सही पर जाने वाले. 158 00:09:02,170 --> 00:09:06,180 और रिक्त का मूल्य नहीं हो सकता जरूरी के मूल्य के बराबर 159 00:09:06,180 --> 00:09:11,080 उस तक पहुँच होने जा रहा है मुकाबला नीचे सही पर. 160 00:09:11,080 --> 00:09:15,760 तो हम विशेष रूप से जाँच करने के लिए चाहता हूँ मैं बराबर होती डी शून्य से 1 और जम्मू के बराबर होती है 161 00:09:15,760 --> 00:09:19,470 डी शून्य से 1 के बराबर होती है - कह रहा है, जो अगर हम नीचे सही से देख रहे हैं पर 162 00:09:19,470 --> 00:09:22,050 बोर्ड - तो हम बस जारी रखना चाहते हैं. 163 00:09:22,050 --> 00:09:26,200 हम इस विशेष छोड़ना चाहते हैं के लिए लूप का चलना. 164 00:09:26,200 --> 00:09:31,250 >> और हां, तो हम इस के माध्यम से प्राप्त करने के लिए प्रबंधन पाश के लिए नेस्ट, इसका मतलब है कि 165 00:09:31,250 --> 00:09:34,690 में था कि कोई टाइल नहीं थी गलत स्थिति. 166 00:09:34,690 --> 00:09:38,900 और हम पाश से बाहर तोड़ने के लिए और आ यहाँ, जहाँ हम सच लौट सकते हैं. 167 00:09:38,900 --> 00:09:41,800 सभी टाइल्स सही स्थिति में थे और कि उपयोगकर्ता है का मतलब 168 00:09:41,800 --> 00:09:43,230 खेल जीता. 169 00:09:43,230 --> 00:09:44,460 और यह बात है. 170 00:09:44,460 --> 00:09:46,550 मेरा नाम रोब बोडेन है, और यह 15 था. 171 00:09:46,550 --> 00:09:52,726