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 Ako Rob, at inaasahan ko ang iyong laro para sa laro ng 15. 4 00:00:17,800 --> 00:00:22,040 Ngayon, mayroong apat na mga pag-andar na kailangan mo ipatupad sa ganitong programa - init, 5 00:00:22,040 --> 00:00:24,650 gumuhit, ilipat, at nanalo. 6 00:00:24,650 --> 00:00:27,230 Kaya, tingnan natin ang init ipaalam. 7 00:00:27,230 --> 00:00:32,930 >> Dito, makikita natin ang unang bagay na kami ay pagpunta sa gawin ay magpahayag ng isang variable 8 00:00:32,930 --> 00:00:34,600 na tinatawag na counter. 9 00:00:34,600 --> 00:00:37,620 Ito ay pagpunta sa ma-initialize upang d beses d minus 1. 10 00:00:37,620 --> 00:00:40,200 Tandaan na d ay ang sukat sa aming mga board. 11 00:00:40,200 --> 00:00:43,840 Paano Pupunta init upang gumana ay ito ang nangyayari upang umulit sa buong board 12 00:00:43,840 --> 00:00:46,050 at kami ay pagpunta sa simulan sa kaliwang tuktok. 13 00:00:46,050 --> 00:00:48,570 >> At sabihin nating lang namin May 4 sa pamamagitan ng 4 na board. 14 00:00:48,570 --> 00:00:51,220 Kaya umalis sa tuktok Ikinalulungkot namin pagpunta sa sabihin ay 15. 15 00:00:51,220 --> 00:00:53,960 At pagkatapos lang kami ng pagpunta upang mabilang sa pamamagitan ng mga board, na sinasabi 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, at iba pa. 17 00:00:58,510 --> 00:01:03,780 Kaya sa kaliwang tuktok, inaasahan namin na maging d beses d minus 1, na kung saan sa 4 ng 4 18 00:01:03,780 --> 00:01:08,290 kaso ay magiging 16 minus 1, na kung saan ay tama 15. 19 00:01:08,290 --> 00:01:10,885 >> At ngayon, narito kung saan kami ay pagpunta sa umulit sa buong board. 20 00:01:10,885 --> 00:01:14,720 At kami ay pagpunta sa itakda ang bawat posisyon sa board upang ang kasalukuyang halaga ng 21 00:01:14,720 --> 00:01:19,090 ang aming mga counter, at pagkatapos ay i-counter ay pagpunta sa pagbawas, kaya na ang susunod na 22 00:01:19,090 --> 00:01:22,300 posisyon maabot kami ay pagpunta sa may counter maging isa mas mababa sa 23 00:01:22,300 --> 00:01:23,690 ang nakaraang posisyon. 24 00:01:23,690 --> 00:01:26,970 Kaya sa simula namin ay may 15 at pagbawas counter. 25 00:01:26,970 --> 00:01:30,065 Kaya pagkatapos kami ay pagpunta upang magtalaga ng 14 sa susunod na posisyon, pagbabawas counter, 26 00:01:30,065 --> 00:01:33,710 at kami ay pagpunta sa itinalaga 13, at iba pa. 27 00:01:33,710 --> 00:01:37,620 >> Panghuli, kailangan namin upang mahawakan na sulok kaso kung saan, kung ang board ay may kahit na 28 00:01:37,620 --> 00:01:44,450 sukat, pagkatapos lamang ng paggawa 15, 14, 13, 12, ang lahat ng mga paraan down sa 3, 2, 1, ay 29 00:01:44,450 --> 00:01:46,780 pagpunta sa iwan sa amin ng isang walang lutas board. 30 00:01:46,780 --> 00:01:49,390 At mayroon kaming magpalit ng 1 at ang 2. 31 00:01:49,390 --> 00:01:52,930 Kaya, kung d mod 2 ay katumbas ng 0, na paano kami ng pagpunta sa suriin 32 00:01:52,930 --> 00:01:54,410 upang makita kung ito ay kahit na. 33 00:01:54,410 --> 00:01:59,810 Kung d mod 2 ay katumbas ng 0, pagkatapos ay sa hilera d minus 1, na kung saan ay hilera sa ibaba, at 34 00:01:59,810 --> 00:02:05,430 posisyon d minus 2, o haligi d minus 2, kami ay pagpunta upang i-set na sa 2, at 35 00:02:05,430 --> 00:02:07,860 haligi d minus 3 kami pagpunta sa nakatakda sa 1. 36 00:02:07,860 --> 00:02:12,170 Kaya na lamang pagtaliwas kung saan ang 1 at 2 sa kasalukuyan ay. 37 00:02:12,170 --> 00:02:16,270 >> Sa wakas, kami ay pagpunta upang itakda ang napaka kanang ibaba katumbas ng blangko, kung saan 38 00:02:16,270 --> 00:02:20,700 blangko ay tinukoy ng hash sa tuktok bilang 0. 39 00:02:20,700 --> 00:02:26,785 Kaya, na noon ay hindi mahigpit na kinakailangan, dahil ito ay para sa loop ay pagpunta sa may 40 00:02:26,785 --> 00:02:30,610 itakda ang kanang ibaba upang 0, dahil counter ay natural maabot 0. 41 00:02:30,610 --> 00:02:34,610 Ngunit na umaasa sa amin alam na blangko ay na-hash upang makahanap ng isang 0. 42 00:02:34,610 --> 00:02:38,280 Kung pumunta ako sa programang ito at sa ibang pagkakataon baguhin blangko sa tuktok upang 100, ito 43 00:02:38,280 --> 00:02:39,770 dapat pa ring gagana. 44 00:02:39,770 --> 00:02:43,180 >> Kaya ito ay lamang siguraduhin na ang kanang ibaba ay ang tunay na katumbas ng aming 45 00:02:43,180 --> 00:02:44,870 blangko ang halaga. 46 00:02:44,870 --> 00:02:50,270 Panghuli, mayroon kaming dalawang mga pangkalahatang variable, kaya blangko i at blangko j, at makita namin 47 00:02:50,270 --> 00:02:53,360 mga ipinahayag sa itaas. 48 00:02:53,360 --> 00:02:56,270 At kami ay pagpunta upang gamitin ang dalawang pandaigdigang mga mga variable upang masubaybayan ang 49 00:02:56,270 --> 00:02:59,040 posisyon ng blangko, nang sa gayon ay hindi namin kailangan upang tumingin sa pamamagitan ng buong 50 00:02:59,040 --> 00:03:03,890 board upang mahanap ang blangko bawat solong oras sinusubukan naming gawin ang isang paglipat. 51 00:03:03,890 --> 00:03:08,450 Kaya ang posisyon ng blangko palaging ay pagpunta sa simulan sa kanang ibaba. 52 00:03:08,450 --> 00:03:13,270 Kaya kanang ibaba ay ibinibigay sa pamamagitan ng mga indeks d minus 1, d minus 1. 53 00:03:13,270 --> 00:03:14,880 Kaya, iyon ang init. 54 00:03:14,880 --> 00:03:17,040 >> Ngayon ilipat namin sa upang gumuhit. 55 00:03:17,040 --> 00:03:19,370 Kaya, mabubunot ay magiging katulad kung saan kami ay pagpunta upang umulit 56 00:03:19,370 --> 00:03:20,970 sa buong board. 57 00:03:20,970 --> 00:03:25,400 At kami gusto lang i-print ang halaga na sa bawat posisyon ng board. 58 00:03:25,400 --> 00:03:29,580 Kaya dito, kami ay nagpi-print ang halaga na sa bawat posisyon ng board. 59 00:03:29,580 --> 00:03:32,280 At mapansin na aming ginagawa -. 60 00:03:32,280 --> 00:03:37,410 At na nagsasabi sa lamang printf na walang kinalaman sa kung ito ay isang isa digit o 61 00:03:37,410 --> 00:03:42,010 dalawang digit na numero, pa rin namin ito nais na tumagal ng hanggang dalawang mga hanay sa print out, 62 00:03:42,010 --> 00:03:46,290 upang kung mayroon kaming dalawang digit at isa na digit na numero sa parehong board, ang aming 63 00:03:46,290 --> 00:03:49,450 board ay pa rin hitsura maganda at parisukat. 64 00:03:49,450 --> 00:03:54,190 >> Kaya gusto naming gawin iyon para sa bawat halaga sa board, maliban para sa blangko. 65 00:03:54,190 --> 00:03:58,260 Kaya, kung ang posisyon sa board ay katumbas ng ang blangko, pagkatapos namin na partikular na 66 00:03:58,260 --> 00:04:01,730 nais na i-print out lang ng guhitan sa ilalim upang kumatawan sa blangko, sa halip ng 67 00:04:01,730 --> 00:04:05,150 anuman ang halaga ng blangko talaga. 68 00:04:05,150 --> 00:04:08,500 >> Panghuli, nais naming i-print out ng isang bagong linya. 69 00:04:08,500 --> 00:04:11,970 Pansinin na ito ay nasa loob pa rin ang mga panlabas na para sa loop, ngunit sa labas 70 00:04:11,970 --> 00:04:13,200 ang panloob para sa loop. 71 00:04:13,200 --> 00:04:17,930 Dahil ito panlabas para sa loop ay iterating higit sa lahat ng mga hilera, at sa gayon ito ay printf 72 00:04:17,930 --> 00:04:22,130 pagpunta sa i-print lamang ng isang bagong linya, kaya kami lumipat sa i-print ang susunod na hilera. 73 00:04:22,130 --> 00:04:23,910 At na ito para sa mabubunot. 74 00:04:23,910 --> 00:04:27,770 >> Kaya, ni lumipat sa ilipat ngayon hayaan. 75 00:04:27,770 --> 00:04:32,590 Ngayon, ipasa namin ilipat, ang tile na ang gumagamit ay ipinasok sa laro - ang mga ito 76 00:04:32,590 --> 00:04:36,360 ipasok ang tile na nais nilang ilipat - at ka dapat na magbalik ng bool, kaya 77 00:04:36,360 --> 00:04:39,300 alinman true o false, depende sa kung na ilipat ay talagang 78 00:04:39,300 --> 00:04:43,360 wastong - kung na tile ay maaaring maging inilipat papunta sa blangko ang puwang. 79 00:04:43,360 --> 00:04:48,340 >> Kaya dito, ipinahahayag namin ang isang lokal na variable, tile_1 at tile_j, na kung saan ay pumunta sa 80 00:04:48,340 --> 00:04:52,150 kahawig ng blank_i at blank_j, maliban ito ay pagpunta upang masubaybayan ang 81 00:04:52,150 --> 00:04:54,910 posisyon ng mga tile. 82 00:04:54,910 --> 00:05:00,370 Ngayon dito, kami ay pagpunta sa gamitin blank_i at blank_j at sabihin ang lahat ng karapatan, sa gayon 83 00:05:00,370 --> 00:05:01,930 narito ang blangko sa board. 84 00:05:01,930 --> 00:05:04,420 >> Ngayon, ay ang tile sa itaas ng blangko? 85 00:05:04,420 --> 00:05:06,210 Ay ang tile sa kaliwa ng ang blangko? 86 00:05:06,210 --> 00:05:07,420 Ay ang tile sa kanan ng blangko? 87 00:05:07,420 --> 00:05:08,970 Ay ang tile sa ibaba ng blangko? 88 00:05:08,970 --> 00:05:13,330 Kaya, kung ang tile ay nasa alinman sa mga mga posisyon, pagkatapos ay alam namin na ang mga tile 89 00:05:13,330 --> 00:05:16,390 maaaring ilipat papunta sa blangko lugar at ang blangko ang maaaring ilipat sa kung saan ang 90 00:05:16,390 --> 00:05:18,240 latagan ng baldosa sa kasalukuyan ay. 91 00:05:18,240 --> 00:05:26,400 >> Kaya dito, sinasabi namin kung board sa posisyon blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Kaya ito ay sinasabi ay ang tile sa itaas ng kasalukuyang blangko? 93 00:05:31,120 --> 00:05:34,350 At kung gayon, kami ay pagpunta sa tandaan na ang posisyon ng tile. 94 00:05:34,350 --> 00:05:37,870 Tile ay nasa posisyon blank_i minus 1 at blank_j. 95 00:05:37,870 --> 00:05:40,660 ngayon una, mayroon din namin ang pagsusuring ito dito mismo, kaya blank_i ay 96 00:05:40,660 --> 00:05:41,760 higit sa 0. 97 00:05:41,760 --> 00:05:43,410 >> Bakit gusto naming gawin iyon? 98 00:05:43,410 --> 00:05:47,290 Well, kung ang blangko ay nasa hilera sa tuktok ng board, pagkatapos ay hindi namin nais na 99 00:05:47,290 --> 00:05:51,240 tumingin sa itaas ang blangko para sa mga tile mula noong walang anuman sa itaas ng tuktok 100 00:05:51,240 --> 00:05:52,430 hilera ng board. 101 00:05:52,430 --> 00:05:55,950 Ito ay kung paano mo maaaring tapusin up sa pagkuha ng isang bagay tulad ng isang segmentation fault o 102 00:05:55,950 --> 00:05:59,030 maaari lamang gumana ang iyong mga programa sa mga hindi inaasahang paraan. 103 00:05:59,030 --> 00:06:04,310 Kaya, ito ay tinitiyak na ang ginagawa namin hindi tumingin sa mga lugar na hindi wasto. 104 00:06:04,310 --> 00:06:08,470 >> Ngayon kami ay pagpunta sa gawin ang parehong bagay para sa lahat ng iba pang mga posibleng mga kumbinasyon. 105 00:06:08,470 --> 00:06:13,250 Kaya dito, naghahanap kami sa ibaba ng blangko upang makita kung iyon ang tile. 106 00:06:13,250 --> 00:06:16,950 At mayroon din naming matiyak na hindi namin wala sa hilera sa ibaba, o iba pa namin 107 00:06:16,950 --> 00:06:18,910 hindi dapat hanapin ang tile. 108 00:06:18,910 --> 00:06:25,040 Dito, kami ay pagpunta sa tumingin sa kaliwa ng ang blangko upang makita kung ito ay ang tile. 109 00:06:25,040 --> 00:06:27,860 At hindi namin ay dapat magmukhang sa kaliwa kung hindi kami sa pinakakaliwa haligi. 110 00:06:27,860 --> 00:06:30,100 At dito kami ay pagpunta sa tumingin sa kanan ng blangko, at hindi namin dapat 111 00:06:30,100 --> 00:06:33,340 tumingin sa kanan, kung hindi kami sa rightmost haligi. 112 00:06:33,340 --> 00:06:37,820 >> Kaya, kung wala sa mga bagay ay totoo, na nangangahulugang ang mga tile ay hindi na magkakaharap 113 00:06:37,820 --> 00:06:39,640 sa blangko at maaari naming ibalik hindi totoo. 114 00:06:39,640 --> 00:06:41,230 Paglipat ay hindi wasto. 115 00:06:41,230 --> 00:06:47,010 Subalit, kung ang isa sa mga ay totoo, pagkatapos ay sa puntong ito, alam namin na tile_i at 116 00:06:47,010 --> 00:06:50,540 ay tile_j katumbas ng posisyon ng mga tile. 117 00:06:50,540 --> 00:06:55,210 At kaya, maaari naming i-update ang board sa mga posisyon tile_i at tile_j. 118 00:06:55,210 --> 00:06:59,820 Alam namin ang bagong mga halaga ay ang magiging blangko at na ang posisyon blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, na kung saan ay ang orihinal blangko - malaman namin ang mga tile ay pagpunta sa 120 00:07:02,950 --> 00:07:04,030 ilipat doon. 121 00:07:04,030 --> 00:07:07,610 >> Pansinin hindi namin talagang mayroon na gawin ang isang real swap dito, dahil alam namin ang 122 00:07:07,610 --> 00:07:09,850 mga halaga na kailangang ma-ipinasok na sa mga posisyong ito. 123 00:07:09,850 --> 00:07:13,780 Hindi namin kailangan ng pansamantalang variable sa paligid. 124 00:07:13,780 --> 00:07:16,920 >> Panghuli, kailangan naming tandaan na kami mayroon aming mga pangkalahatang variable na 125 00:07:16,920 --> 00:07:18,980 pagpapanatili ng track ng mga posisyon ng blangko. 126 00:07:18,980 --> 00:07:22,780 Kaya gusto naming upang i-update ang posisyon ng ang blangko upang maging kung saan ang mga tile 127 00:07:22,780 --> 00:07:24,190 Orihinal na noon. 128 00:07:24,190 --> 00:07:27,680 Sa wakas, bumalik kami totoo dahil ang paglipat ay matagumpay. 129 00:07:27,680 --> 00:07:31,110 Matagumpay naming magpalit ang blangko na may mga tile. 130 00:07:31,110 --> 00:07:34,890 >> Ang lahat ng mga karapatan, kaya huli naming kailangan mag-check won. 131 00:07:34,890 --> 00:07:39,900 Kaya, nanalo ng kaparehong ay nagbabalik ng bool kung saan totoo ay pagpunta sa magpahiwatig na ang 132 00:07:39,900 --> 00:07:41,460 gumagamit ay nanalo sa laro. 133 00:07:41,460 --> 00:07:43,780 At hindi totoo ay nagpapahiwatig na ang laro ay pagpunta pa rin. 134 00:07:43,780 --> 00:07:46,340 Ang user ay hindi nanalo. 135 00:07:46,340 --> 00:07:52,100 Kaya, ito ay magiging kaakit-akit magkano ang katapat ng init, na kung saan ang init, 136 00:07:52,100 --> 00:07:56,920 tandaan, initialize namin sa board sa 15, 14, 13, 12, iba pa. 137 00:07:56,920 --> 00:08:03,000 Sapagkat napanalunan, nais naming suriin kung ang board ay 1, 2, 3, 4, 5, at iba pa. 138 00:08:03,000 --> 00:08:06,600 >> Kaya, kami ay pagpunta sa pagsisimula ng aming kontrahin sa 1 dahil iyon ang tuktok 139 00:08:06,600 --> 00:08:08,400 kaliwa ng board ay dapat na. 140 00:08:08,400 --> 00:08:10,860 At pagkatapos ay kami ay pagpunta sa loop sa buong board. 141 00:08:10,860 --> 00:08:13,690 Hayaan huwag pansinin ang kundisyong ito para sa isang segundo. 142 00:08:13,690 --> 00:08:18,410 At ang kundisyong ito ay pagpunta lamang sa check ang board sa posisyon na ito 143 00:08:18,410 --> 00:08:20,790 katumbas ng kasalukuyang mga bilang? 144 00:08:20,790 --> 00:08:27,040 Kung gayon, dagdagan ang bilang ng sa gayon ay ang susunod na posisyon tinitingnan namin ay isa mas mataas 145 00:08:27,040 --> 00:08:29,690 kaysa sa posisyon tayo sa ngayon. 146 00:08:29,690 --> 00:08:32,700 >> Kaya na kung paano namin makuha ang kaliwang tuktok ay dapat na 1. 147 00:08:32,700 --> 00:08:33,950 Dinagdagan ang bilang sa 2. 148 00:08:33,950 --> 00:08:35,010 Tumingin sa susunod na posisyon. 149 00:08:35,010 --> 00:08:35,690 Ito ba 2? 150 00:08:35,690 --> 00:08:37,659 Kung gayon, dinagdagan ang bilang sa 3. 151 00:08:37,659 --> 00:08:39,179 Susunod na posisyon, ay ang 3? 152 00:08:39,179 --> 00:08:42,440 Kung gayon, dinagdagan ang bilang sa 4, at iba pa. 153 00:08:42,440 --> 00:08:49,190 Kaya, kung mayroong anumang posisyon sa board na hindi kasing-halaga ng aming panonood, 154 00:08:49,190 --> 00:08:52,640 pagkatapos ay nais naming ibalik hindi totoo dahil na nangangahulugan na ang ilang mga tile na ay 155 00:08:52,640 --> 00:08:55,490 wala sa tamang posisyon. 156 00:08:55,490 --> 00:08:58,810 >> Kaya dito, kung ano ang kundisyong ito ay ginagawa? 157 00:08:58,810 --> 00:09:02,170 Well, tandaan na ang blangko ay dapat na pumunta sa kanang ibaba. 158 00:09:02,170 --> 00:09:06,180 At halaga ang blangko ng lakas hindi kinakailangang kasing-halaga sa halaga ng 159 00:09:06,180 --> 00:09:11,080 kontrahin na pagpunta sa maabot sa kanang ibaba. 160 00:09:11,080 --> 00:09:15,760 Kaya namin nais na partikular na upang suriin kung i katumbas ay katumbas d minus 1 at j Kapantay 161 00:09:15,760 --> 00:09:19,470 ay katumbas d minus 1 - na kung saan ay nagsasabing kung namin ay tumitingin sa kanang ibaba ng 162 00:09:19,470 --> 00:09:22,050 board - pagkatapos namin lamang nais na magpatuloy. 163 00:09:22,050 --> 00:09:26,200 Gusto naming laktawan ang partikular na pag-ulit ng para sa loop. 164 00:09:26,200 --> 00:09:31,250 >> At kaya, kung pamahalaan namin upang makakuha ng sa pamamagitan ng nested para sa loop, ibig sabihin nito ay na 165 00:09:31,250 --> 00:09:34,690 walang tile na noon ay sa ang hindi tamang posisyon. 166 00:09:34,690 --> 00:09:38,900 At masira kami sa labas ng loop at dumating dito, kung saan maaari naming nagbabalik ng tunay. 167 00:09:38,900 --> 00:09:41,800 Ang lahat ng mga tile ay nasa tamang posisyon at nangangahulugan na ang gumagamit ay may 168 00:09:41,800 --> 00:09:43,230 Nanalo ang laro. 169 00:09:43,230 --> 00:09:44,460 At na ito. 170 00:09:44,460 --> 00:09:46,550 Ang pangalan ko ay Rob Bowden, at ito ay 15. 171 00:09:46,550 --> 00:09:52,726