1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> Rob BOWDEN: Hi. 3 00:00:13,715 --> 00:00:17,800 Mimi nina Rob, na natumaini yako mchezo kwa ajili ya mchezo wa miaka 15. 4 00:00:17,800 --> 00:00:22,040 Sasa, kuna kazi nne unahitaji kutekeleza katika mpango huu - init, 5 00:00:22,040 --> 00:00:24,650 kuteka, hoja, na alishinda. 6 00:00:24,650 --> 00:00:27,230 Kwa hiyo, hebu tuangalie init. 7 00:00:27,230 --> 00:00:32,930 >> Hapa, tunaona jambo la kwanza tuko kwenda kufanya ni kutangaza variable 8 00:00:32,930 --> 00:00:34,600 aitwaye counter. 9 00:00:34,600 --> 00:00:37,620 Ni kwenda kuanzishwa mara d d minus 1. 10 00:00:37,620 --> 00:00:40,200 Kumbuka kwamba d ni mwelekeo wa bodi yetu. 11 00:00:40,200 --> 00:00:43,840 Jinsi init ni kwenda kufanya kazi ni itakuja iterate juu ya bodi nzima 12 00:00:43,840 --> 00:00:46,050 na sisi ni kwenda kuanza upande wa kushoto juu. 13 00:00:46,050 --> 00:00:48,570 >> Na hebu sema tu sisi na 4 na 4 bodi. 14 00:00:48,570 --> 00:00:51,220 Hivyo juu kushoto tuko kwenda kusema ni 15. 15 00:00:51,220 --> 00:00:53,960 Na kisha sisi ni kwenda tu kuhesabu kupitia bodi, akisema 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, na kadhalika. 17 00:00:58,510 --> 00:01:03,780 Hivyo upande wa juu kushoto, tunatarajia kuwa mara d d minus 1, ambayo katika 4 na 4 18 00:01:03,780 --> 00:01:08,290 kesi ni kwenda kuwa 16 minus 1, ambayo ni usahihi 15. 19 00:01:08,290 --> 00:01:10,885 >> Na sasa hapa ambapo sisi ni kwenda iterate juu ya bodi nzima. 20 00:01:10,885 --> 00:01:14,720 Na sisi ni kwenda kuweka kila nafasi katika bodi ya thamani ya sasa ya 21 00:01:14,720 --> 00:01:19,090 kukabiliana na yetu, na kisha kukabiliana na ni kwenda kwa kuongezwa, ili ijayo 22 00:01:19,090 --> 00:01:22,300 nafasi sisi kufikia ni kwenda na kukabiliana na kuwa moja chini ya 23 00:01:22,300 --> 00:01:23,690 nafasi uliopita. 24 00:01:23,690 --> 00:01:26,970 Hivyo sisi awali alikuwa 15 na kuongezwa counter. 25 00:01:26,970 --> 00:01:30,065 Hivyo basi sisi ni kwenda kuwapa 14 nafasi ya pili, decrement counter, 26 00:01:30,065 --> 00:01:33,710 na tunakwenda kwa ajili 13, na kadhalika. 27 00:01:33,710 --> 00:01:37,620 >> Hatimaye, sisi haja ya kushughulikia kona kesi ambapo, kama bodi ina hata 28 00:01:37,620 --> 00:01:44,450 mwelekeo, basi tu kufanya 15, 14, 13, 12, njia yote chini ya 3, 2, 1, ni 29 00:01:44,450 --> 00:01:46,780 ataondoka kwetu na unsolvable bodi. 30 00:01:46,780 --> 00:01:49,390 Na tuna wabadilishane 1 na 2. 31 00:01:49,390 --> 00:01:52,930 Hivyo, kama d mod 2 ni sawa na 0, kwamba jinsi sisi ni kwenda kuangalia 32 00:01:52,930 --> 00:01:54,410 ili kuona kama hata. 33 00:01:54,410 --> 00:01:59,810 Kama d mod 2 ni sawa na 0, basi katika mstari d minus 1, ambayo ni mstari chini, na 34 00:01:59,810 --> 00:02:05,430 nafasi d bala 2, au safu d minus 2, tunakwenda kuweka kwamba 2, na 35 00:02:05,430 --> 00:02:07,860 safu d minus 3 tuko kwenda kuweka 1. 36 00:02:07,860 --> 00:02:12,170 Hivyo hiyo kupunguza tu ambapo 1 na 2 sasa ni. 37 00:02:12,170 --> 00:02:16,270 >> Hatimaye, sisi ni kwenda kuweka sana chini haki sawa kwa tupu, ambapo 38 00:02:16,270 --> 00:02:20,700 tupu imekuwa hash inavyoelezwa juu kama 0. 39 00:02:20,700 --> 00:02:26,785 Kwa hiyo, kwamba hakuwa madhubuti muhimu, tangu hii kwa kitanzi ni kwenda na 40 00:02:26,785 --> 00:02:30,610 kuweka sahihi chini 0, tangu kukabiliana na itakuwa kawaida kufikia 0. 41 00:02:30,610 --> 00:02:34,610 Lakini hiyo hutegemea sisi kujua kwamba tupu ilikuwa heshi kupata 0. 42 00:02:34,610 --> 00:02:38,280 Kama mimi kwenda katika mpango huu na baadaye kubadili tupu juu hadi 100, ni 43 00:02:38,280 --> 00:02:39,770 lazima bado kazi. 44 00:02:39,770 --> 00:02:43,180 >> Hivyo hii ni maamuzi tu kuhakikisha kwamba haki ya chini ni kweli sawa na yetu 45 00:02:43,180 --> 00:02:44,870 tupu thamani. 46 00:02:44,870 --> 00:02:50,270 Hatimaye, tuna vigezo mbili kimataifa, hivyo tupu i na tupu j, na tunaona 47 00:02:50,270 --> 00:02:53,360 wale alitangaza katika juu. 48 00:02:53,360 --> 00:02:56,270 Na sisi ni kwenda kutumia wale kimataifa mbili vigezo kuweka wimbo wa 49 00:02:56,270 --> 00:02:59,040 nafasi ya tupu, hivyo kwamba sisi si haja ya kuangalia kupitia nzima 50 00:02:59,040 --> 00:03:03,890 bodi ya kupata tupu kila moja wakati sisi kujaribu kufanya hoja. 51 00:03:03,890 --> 00:03:08,450 Hivyo nafasi ya tupu daima ni kwenda kuanza kulia chini. 52 00:03:08,450 --> 00:03:13,270 Hivyo haki ya chini ni kutolewa kwa fahirisi d minus 1, d minus 1. 53 00:03:13,270 --> 00:03:14,880 Kwa hiyo, hiyo ni init. 54 00:03:14,880 --> 00:03:17,040 >> Sasa sisi kuendelea na kuteka. 55 00:03:17,040 --> 00:03:19,370 Hivyo, kuteka ni kwenda kuwa sawa ambapo tunakwenda iterate 56 00:03:19,370 --> 00:03:20,970 juu ya bodi nzima. 57 00:03:20,970 --> 00:03:25,400 Na sisi tu wanataka magazeti thamani kwamba katika kila nafasi ya bodi. 58 00:03:25,400 --> 00:03:29,580 Hivyo hapa, sisi ni uchapishaji thamani kwamba katika kila nafasi ya bodi. 59 00:03:29,580 --> 00:03:32,280 Na taarifa kwamba sisi ni kufanya -. 60 00:03:32,280 --> 00:03:37,410 Na anayewambia printf tu kwamba bila kujali kama ni tarakimu moja au 61 00:03:37,410 --> 00:03:42,010 tarakimu mbili idadi, sisi bado unataka kwa kuchukua nguzo mbili katika magazeti nje, 62 00:03:42,010 --> 00:03:46,290 ili kwamba kama tuna mbili tarakimu na moja idadi tarakimu katika bodi hiyo, yetu 63 00:03:46,290 --> 00:03:49,450 bodi bado kuangalia nzuri na za mraba. 64 00:03:49,450 --> 00:03:54,190 >> Hivyo tunataka kufanya hivyo kwa kila thamani katika bodi, ila kwa tupu. 65 00:03:54,190 --> 00:03:58,260 Hivyo, kama nafasi katika bodi ni sawa na tupu, kisha sisi hasa 66 00:03:58,260 --> 00:04:01,730 unataka magazeti nje tu kusisitiza kuwakilisha tupu, badala ya 67 00:04:01,730 --> 00:04:05,150 chochote thamani ya tupu kweli ni. 68 00:04:05,150 --> 00:04:08,500 >> Hatimaye, tunataka magazeti nje line mpya. 69 00:04:08,500 --> 00:04:11,970 Taarifa kwamba hii bado ni ndani ya nje kwa ajili ya kitanzi, lakini nje 70 00:04:11,970 --> 00:04:13,200 ndani kwa ajili ya kitanzi. 71 00:04:13,200 --> 00:04:17,930 Tangu nje hii kwa kitanzi ni iterating juu ya safu wote, na hivyo printf hii ni 72 00:04:17,930 --> 00:04:22,130 kwenda tu magazeti line mpya, hivyo sisi kuendelea na magazeti nje ya mstari unaofuata. 73 00:04:22,130 --> 00:04:23,910 Na kwamba ni kwa sare. 74 00:04:23,910 --> 00:04:27,770 >> Kwa hiyo, sasa basi hoja juu ya hoja. 75 00:04:27,770 --> 00:04:32,590 Sasa, sisi kupita hoja, tile kwamba user ni aliingia katika mchezo - wao 76 00:04:32,590 --> 00:04:36,360 kuingia tile wanataka hoja - na wewe ni wanatakiwa kurudi bool, hivyo 77 00:04:36,360 --> 00:04:39,300 ama kweli au uongo, kulingana na kama kwamba hoja ilikuwa kweli 78 00:04:39,300 --> 00:04:43,360 halali - kama tile ambayo inaweza kuwa kuhamia katika nafasi tupu. 79 00:04:43,360 --> 00:04:48,340 >> Hivyo hapa, sisi kutangaza variable mitaa, tile_1 na tile_j, ambayo ni kwenda 80 00:04:48,340 --> 00:04:52,150 kuwa sawa na blank_i na blank_j, ila ni kwenda kuweka wimbo wa 81 00:04:52,150 --> 00:04:54,910 nafasi ya tile. 82 00:04:54,910 --> 00:05:00,370 Sasa hapa, sisi ni kwenda kutumia blank_i na blank_j na kusema haki wote, hivyo 83 00:05:00,370 --> 00:05:01,930 hapa ni tupu kwenye ubao. 84 00:05:01,930 --> 00:05:04,420 >> Sasa, ni tile juu ya tupu? 85 00:05:04,420 --> 00:05:06,210 Ni tile upande wa kushoto wa tupu? 86 00:05:06,210 --> 00:05:07,420 Ni tile na haki ya tupu? 87 00:05:07,420 --> 00:05:08,970 Ni tile chini tupu? 88 00:05:08,970 --> 00:05:13,330 Hivyo, kama tile ni katika yeyote kati ya wale nafasi, basi tunajua kuwa tile 89 00:05:13,330 --> 00:05:16,390 inaweza kuhamia katika doa tupu na tupu inaweza kuhamia ambapo 90 00:05:16,390 --> 00:05:18,240 tile sasa ni. 91 00:05:18,240 --> 00:05:26,400 >> Hivyo hapa, tunasema kama bodi katika nafasi ya blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Hivyo hii ni kusema ni tile juu ya tupu ya sasa? 93 00:05:31,120 --> 00:05:34,350 Na kama ni hivyo, sisi ni kwenda kukumbuka kwamba ni msimamo wa tile. 94 00:05:34,350 --> 00:05:37,870 tile ni katika nafasi ya blank_i minus 1 na blank_j. 95 00:05:37,870 --> 00:05:40,660 sasa kwanza, sisi pia kuwa na kuangalia hii haki hapa, hivyo blank_i ni 96 00:05:40,660 --> 00:05:41,760 zaidi ya 0. 97 00:05:41,760 --> 00:05:43,410 >> Kwa nini tunataka kufanya hivyo? 98 00:05:43,410 --> 00:05:47,290 Naam, kama tupu ni katika mstari wa juu wa bodi, kisha sisi hawataki 99 00:05:47,290 --> 00:05:51,240 kuangalia juu ya tupu kwa tile tangu hakuna juu juu 100 00:05:51,240 --> 00:05:52,430 mstari wa bodi. 101 00:05:52,430 --> 00:05:55,950 Hii ni jinsi gani inaweza kuishia kupata kitu kama kosa segmentation au 102 00:05:55,950 --> 00:05:59,030 mpango wako ili tu kazi katika njia zisizotarajiwa. 103 00:05:59,030 --> 00:06:04,310 Kwa hiyo, hili ni kuhakikisha kwamba sisi si kuangalia katika maeneo ambayo si halali. 104 00:06:04,310 --> 00:06:08,470 >> Sasa tunakwenda kufanya kitu kimoja kwa wote mchanganyiko nyingine iwezekanavyo. 105 00:06:08,470 --> 00:06:13,250 Hivyo hapa, sisi ni kuangalia chini tupu kuona kama kwamba ni tile. 106 00:06:13,250 --> 00:06:16,950 Na sisi pia kuhakikisha sisi ni si juu ya mstari chini, au mwingine sisi 107 00:06:16,950 --> 00:06:18,910 lazima kuangalia kwa tile. 108 00:06:18,910 --> 00:06:25,040 Hapa, sisi ni kwenda kuangalia upande wa kushoto wa tupu kuona kama ni tile. 109 00:06:25,040 --> 00:06:27,860 Na sisi lazima si kuangalia kwa upande wa kushoto kama tuko katika safu leftmost. 110 00:06:27,860 --> 00:06:30,100 Na hapa sisi ni kwenda kuangalia kwa haki ya tupu, na sisi lazima si 111 00:06:30,100 --> 00:06:33,340 kuangalia kwa haki kama sisi ni katika safu rightmost. 112 00:06:33,340 --> 00:06:37,820 >> Hivyo, kama hakuna mambo hayo ni kweli, hiyo ina maana tile hakuwa karibu 113 00:06:37,820 --> 00:06:39,640 tupu na sisi anaweza kurudi uongo. 114 00:06:39,640 --> 00:06:41,230 hoja ilikuwa si halali. 115 00:06:41,230 --> 00:06:47,010 Lakini, kama moja ya wale walikuwa kweli, basi hatua hii, tunajua kwamba tile_i na 116 00:06:47,010 --> 00:06:50,540 tile_j ni sawa na nafasi ya tile. 117 00:06:50,540 --> 00:06:55,210 Na hivyo, tunaweza update bodi katika nafasi tile_i na tile_j. 118 00:06:55,210 --> 00:06:59,820 Tunajua thamani mpya itakuwa tupu na kwamba nafasi blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, ambayo ilikuwa ya awali tupu - tunajua tile ni kwenda 120 00:07:02,950 --> 00:07:04,030 kuhamia huko. 121 00:07:04,030 --> 00:07:07,610 >> Taarifa sisi si kweli kuwa kwa kufanya wabadilishane halisi hapa, kwa sababu tunajua 122 00:07:07,610 --> 00:07:09,850 maadili ambayo haja ya kuwa na kuingizwa katika nafasi hizo. 123 00:07:09,850 --> 00:07:13,780 Hatuna haja ya muda variable kote. 124 00:07:13,780 --> 00:07:16,920 >> Hatimaye, tunahitaji kukumbuka kwamba sisi kuwa na vigezo wetu wa kimataifa kwamba ni 125 00:07:16,920 --> 00:07:18,980 kuweka wimbo wa nafasi ya tupu. 126 00:07:18,980 --> 00:07:22,780 Hivyo tunataka update nafasi ya tupu kuwa ambapo tile 127 00:07:22,780 --> 00:07:24,190 awali ilikuwa. 128 00:07:24,190 --> 00:07:27,680 Hatimaye, sisi kurudi kweli tangu hoja ilikuwa na mafanikio. 129 00:07:27,680 --> 00:07:31,110 Sisi mafanikio kubadilishana tupu na tile. 130 00:07:31,110 --> 00:07:34,890 >> Yote ya haki, hivyo mwisho sisi haja ya kuangalia won. 131 00:07:34,890 --> 00:07:39,900 Hivyo, alishinda vile vile anarudi bool ambapo kweli ni kwenda zinaonyesha kuwa 132 00:07:39,900 --> 00:07:41,460 user ameshinda mchezo. 133 00:07:41,460 --> 00:07:43,780 Na uongo ni kuonyesha kwamba mchezo bado ni kwenda. 134 00:07:43,780 --> 00:07:46,340 user si alishinda. 135 00:07:46,340 --> 00:07:52,100 Kwa hiyo, hili ni kwenda kuwa pretty much kinyume cha init, ambapo init, 136 00:07:52,100 --> 00:07:56,920 kumbuka, sisi initialize bodi hadi 15, 14, 13, 12, kadhalika. 137 00:07:56,920 --> 00:08:03,000 Wakati mshindi, tunataka kuangalia kama bodi ni 1, 2, 3, 4, 5, na kadhalika. 138 00:08:03,000 --> 00:08:06,600 >> Kwa hiyo, tunakwenda initialize wetu kukabiliana na 1 tangu kwamba ni nini juu 139 00:08:06,600 --> 00:08:08,400 upande wa kushoto wa bodi lazima. 140 00:08:08,400 --> 00:08:10,860 Na kisha tunakwenda kwa kitanzi juu ya bodi nzima. 141 00:08:10,860 --> 00:08:13,690 Hebu kupuuza hali hii kwa ajili ya pili. 142 00:08:13,690 --> 00:08:18,410 Na hali hii ni kwenda tu kuangalia ni bodi katika nafasi hii 143 00:08:18,410 --> 00:08:20,790 sawa na makosa ya sasa? 144 00:08:20,790 --> 00:08:27,040 Kama ni hivyo, nyongeza kuhesabu ili nafasi ya pili sisi kuangalia ni moja ya juu 145 00:08:27,040 --> 00:08:29,690 kuliko nafasi sisi ni katika hivi sasa. 146 00:08:29,690 --> 00:08:32,700 >> Hivyo ndivyo sisi kupata juu upande wa kushoto lazima 1. 147 00:08:32,700 --> 00:08:33,950 Nyongeza kuhesabu 2. 148 00:08:33,950 --> 00:08:35,010 Angalia katika nafasi ijayo. 149 00:08:35,010 --> 00:08:35,690 Je, hii ni 2? 150 00:08:35,690 --> 00:08:37,659 Kama ni hivyo, nyongeza kuhesabu hadi 3. 151 00:08:37,659 --> 00:08:39,179 Nafasi ya pili, ni hii 3? 152 00:08:39,179 --> 00:08:42,440 Kama ni hivyo, nyongeza kuhesabu 4, na kadhalika. 153 00:08:42,440 --> 00:08:49,190 Kwa hiyo, kama kuna nafasi yoyote juu ya bodi hiyo haina sawa kuhesabu yetu, 154 00:08:49,190 --> 00:08:52,640 kisha tunataka kurudi uongo tangu kwamba ina maana kuna baadhi tile kwamba ni 155 00:08:52,640 --> 00:08:55,490 si katika msimamo sahihi. 156 00:08:55,490 --> 00:08:58,810 >> Hivyo hapa, ni nini hali hii kufanya? 157 00:08:58,810 --> 00:09:02,170 Vizuri, kumbuka kwamba tupu ni wanatakiwa kwenda juu ya haki ya chini. 158 00:09:02,170 --> 00:09:06,180 Na thamani tupu ya nguvu si lazima sawa thamani ya 159 00:09:06,180 --> 00:09:11,080 kukabiliana na kwamba ni kwenda kufikiwa chini ya haki. 160 00:09:11,080 --> 00:09:15,760 Hivyo sisi hasa wanataka kuangalia kama i sawa na sawa na d minus 1 na j usawa 161 00:09:15,760 --> 00:09:19,470 sawa na d minus 1 - ambayo ni kusema kama sisi ni kuangalia haki ya chini ya 162 00:09:19,470 --> 00:09:22,050 bodi - kisha sisi tu unataka kuendelea. 163 00:09:22,050 --> 00:09:26,200 Tunataka ruka hii hasa iteration ya kwa kitanzi. 164 00:09:26,200 --> 00:09:31,250 >> Na hivyo, kama sisi kusimamia na kupata njia hii Furushi kwa kitanzi, hiyo ina maana kwamba 165 00:09:31,250 --> 00:09:34,690 kulikuwa hakuna tile kwamba alikuwa katika sahihi msimamo. 166 00:09:34,690 --> 00:09:38,900 Na sisi kuvunja nje ya kitanzi na kuja hapa, ambapo tunaweza kurudi kweli. 167 00:09:38,900 --> 00:09:41,800 Tiles wote walikuwa katika nafasi sahihi na hiyo ina maana mtumiaji 168 00:09:41,800 --> 00:09:43,230 alishinda mchezo. 169 00:09:43,230 --> 00:09:44,460 Na hiyo ni yake. 170 00:09:44,460 --> 00:09:46,550 Jina langu ni Rob Bowden, na hii ilikuwa 15. 171 00:09:46,550 --> 00:09:52,726