Rob BOWDEN: Hi. Ako Rob, at inaasahan ko ang iyong laro para sa laro ng 15. Ngayon, mayroong apat na mga pag-andar na kailangan mo ipatupad sa ganitong programa - init, gumuhit, ilipat, at nanalo. Kaya, tingnan natin ang init ipaalam. Dito, makikita natin ang unang bagay na kami ay pagpunta sa gawin ay magpahayag ng isang variable na tinatawag na counter. Ito ay pagpunta sa ma-initialize upang d beses d minus 1. Tandaan na d ay ang sukat sa aming mga board. Paano Pupunta init upang gumana ay ito ang nangyayari upang umulit sa buong board at kami ay pagpunta sa simulan sa kaliwang tuktok. At sabihin nating lang namin May 4 sa pamamagitan ng 4 na board. Kaya umalis sa tuktok Ikinalulungkot namin pagpunta sa sabihin ay 15. At pagkatapos lang kami ng pagpunta upang mabilang sa pamamagitan ng mga board, na sinasabi 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, at iba pa. Kaya sa kaliwang tuktok, inaasahan namin na maging d beses d minus 1, na kung saan sa 4 ng 4 kaso ay magiging 16 minus 1, na kung saan ay tama 15. At ngayon, narito kung saan kami ay pagpunta sa umulit sa buong board. At kami ay pagpunta sa itakda ang bawat posisyon sa board upang ang kasalukuyang halaga ng ang aming mga counter, at pagkatapos ay i-counter ay pagpunta sa pagbawas, kaya na ang susunod na posisyon maabot kami ay pagpunta sa may counter maging isa mas mababa sa ang nakaraang posisyon. Kaya sa simula namin ay may 15 at pagbawas counter. Kaya pagkatapos kami ay pagpunta upang magtalaga ng 14 sa susunod na posisyon, pagbabawas counter, at kami ay pagpunta sa itinalaga 13, at iba pa. Panghuli, kailangan namin upang mahawakan na sulok kaso kung saan, kung ang board ay may kahit na sukat, pagkatapos lamang ng paggawa 15, 14, 13, 12, ang lahat ng mga paraan down sa 3, 2, 1, ay pagpunta sa iwan sa amin ng isang walang lutas board. At mayroon kaming magpalit ng 1 at ang 2. Kaya, kung d mod 2 ay katumbas ng 0, na paano kami ng pagpunta sa suriin upang makita kung ito ay kahit na. Kung d mod 2 ay katumbas ng 0, pagkatapos ay sa hilera d minus 1, na kung saan ay hilera sa ibaba, at posisyon d minus 2, o haligi d minus 2, kami ay pagpunta upang i-set na sa 2, at haligi d minus 3 kami pagpunta sa nakatakda sa 1. Kaya na lamang pagtaliwas kung saan ang 1 at 2 sa kasalukuyan ay. Sa wakas, kami ay pagpunta upang itakda ang napaka kanang ibaba katumbas ng blangko, kung saan blangko ay tinukoy ng hash sa tuktok bilang 0. Kaya, na noon ay hindi mahigpit na kinakailangan, dahil ito ay para sa loop ay pagpunta sa may itakda ang kanang ibaba upang 0, dahil counter ay natural maabot 0. Ngunit na umaasa sa amin alam na blangko ay na-hash upang makahanap ng isang 0. Kung pumunta ako sa programang ito at sa ibang pagkakataon baguhin blangko sa tuktok upang 100, ito dapat pa ring gagana. Kaya ito ay lamang siguraduhin na ang kanang ibaba ay ang tunay na katumbas ng aming blangko ang halaga. Panghuli, mayroon kaming dalawang mga pangkalahatang variable, kaya blangko i at blangko j, at makita namin mga ipinahayag sa itaas. At kami ay pagpunta upang gamitin ang dalawang pandaigdigang mga mga variable upang masubaybayan ang posisyon ng blangko, nang sa gayon ay hindi namin kailangan upang tumingin sa pamamagitan ng buong board upang mahanap ang blangko bawat solong oras sinusubukan naming gawin ang isang paglipat. Kaya ang posisyon ng blangko palaging ay pagpunta sa simulan sa kanang ibaba. Kaya kanang ibaba ay ibinibigay sa pamamagitan ng mga indeks d minus 1, d minus 1. Kaya, iyon ang init. Ngayon ilipat namin sa upang gumuhit. Kaya, mabubunot ay magiging katulad kung saan kami ay pagpunta upang umulit sa buong board. At kami gusto lang i-print ang halaga na sa bawat posisyon ng board. Kaya dito, kami ay nagpi-print ang halaga na sa bawat posisyon ng board. At mapansin na aming ginagawa -. At na nagsasabi sa lamang printf na walang kinalaman sa kung ito ay isang isa digit o dalawang digit na numero, pa rin namin ito nais na tumagal ng hanggang dalawang mga hanay sa print out, upang kung mayroon kaming dalawang digit at isa na digit na numero sa parehong board, ang aming board ay pa rin hitsura maganda at parisukat. Kaya gusto naming gawin iyon para sa bawat halaga sa board, maliban para sa blangko. Kaya, kung ang posisyon sa board ay katumbas ng ang blangko, pagkatapos namin na partikular na nais na i-print out lang ng guhitan sa ilalim upang kumatawan sa blangko, sa halip ng anuman ang halaga ng blangko talaga. Panghuli, nais naming i-print out ng isang bagong linya. Pansinin na ito ay nasa loob pa rin ang mga panlabas na para sa loop, ngunit sa labas ang panloob para sa loop. Dahil ito panlabas para sa loop ay iterating higit sa lahat ng mga hilera, at sa gayon ito ay printf pagpunta sa i-print lamang ng isang bagong linya, kaya kami lumipat sa i-print ang susunod na hilera. At na ito para sa mabubunot. Kaya, ni lumipat sa ilipat ngayon hayaan. Ngayon, ipasa namin ilipat, ang tile na ang gumagamit ay ipinasok sa laro - ang mga ito ipasok ang tile na nais nilang ilipat - at ka dapat na magbalik ng bool, kaya alinman true o false, depende sa kung na ilipat ay talagang wastong - kung na tile ay maaaring maging inilipat papunta sa blangko ang puwang. Kaya dito, ipinahahayag namin ang isang lokal na variable, tile_1 at tile_j, na kung saan ay pumunta sa kahawig ng blank_i at blank_j, maliban ito ay pagpunta upang masubaybayan ang posisyon ng mga tile. Ngayon dito, kami ay pagpunta sa gamitin blank_i at blank_j at sabihin ang lahat ng karapatan, sa gayon narito ang blangko sa board. Ngayon, ay ang tile sa itaas ng blangko? Ay ang tile sa kaliwa ng ang blangko? Ay ang tile sa kanan ng blangko? Ay ang tile sa ibaba ng blangko? Kaya, kung ang tile ay nasa alinman sa mga mga posisyon, pagkatapos ay alam namin na ang mga tile maaaring ilipat papunta sa blangko lugar at ang blangko ang maaaring ilipat sa kung saan ang latagan ng baldosa sa kasalukuyan ay. Kaya dito, sinasabi namin kung board sa posisyon blank_i minus 1 blank_j. Kaya ito ay sinasabi ay ang tile sa itaas ng kasalukuyang blangko? At kung gayon, kami ay pagpunta sa tandaan na ang posisyon ng tile. Tile ay nasa posisyon blank_i minus 1 at blank_j. ngayon una, mayroon din namin ang pagsusuring ito dito mismo, kaya blank_i ay higit sa 0. Bakit gusto naming gawin iyon? Well, kung ang blangko ay nasa hilera sa tuktok ng board, pagkatapos ay hindi namin nais na tumingin sa itaas ang blangko para sa mga tile mula noong walang anuman sa itaas ng tuktok hilera ng board. Ito ay kung paano mo maaaring tapusin up sa pagkuha ng isang bagay tulad ng isang segmentation fault o maaari lamang gumana ang iyong mga programa sa mga hindi inaasahang paraan. Kaya, ito ay tinitiyak na ang ginagawa namin hindi tumingin sa mga lugar na hindi wasto. Ngayon kami ay pagpunta sa gawin ang parehong bagay para sa lahat ng iba pang mga posibleng mga kumbinasyon. Kaya dito, naghahanap kami sa ibaba ng blangko upang makita kung iyon ang tile. At mayroon din naming matiyak na hindi namin wala sa hilera sa ibaba, o iba pa namin hindi dapat hanapin ang tile. Dito, kami ay pagpunta sa tumingin sa kaliwa ng ang blangko upang makita kung ito ay ang tile. At hindi namin ay dapat magmukhang sa kaliwa kung hindi kami sa pinakakaliwa haligi. At dito kami ay pagpunta sa tumingin sa kanan ng blangko, at hindi namin dapat tumingin sa kanan, kung hindi kami sa rightmost haligi. Kaya, kung wala sa mga bagay ay totoo, na nangangahulugang ang mga tile ay hindi na magkakaharap sa blangko at maaari naming ibalik hindi totoo. Paglipat ay hindi wasto. Subalit, kung ang isa sa mga ay totoo, pagkatapos ay sa puntong ito, alam namin na tile_i at ay tile_j katumbas ng posisyon ng mga tile. At kaya, maaari naming i-update ang board sa mga posisyon tile_i at tile_j. Alam namin ang bagong mga halaga ay ang magiging blangko at na ang posisyon blank_i blank_j, na kung saan ay ang orihinal blangko - malaman namin ang mga tile ay pagpunta sa ilipat doon. Pansinin hindi namin talagang mayroon na gawin ang isang real swap dito, dahil alam namin ang mga halaga na kailangang ma-ipinasok na sa mga posisyong ito. Hindi namin kailangan ng pansamantalang variable sa paligid. Panghuli, kailangan naming tandaan na kami mayroon aming mga pangkalahatang variable na pagpapanatili ng track ng mga posisyon ng blangko. Kaya gusto naming upang i-update ang posisyon ng ang blangko upang maging kung saan ang mga tile Orihinal na noon. Sa wakas, bumalik kami totoo dahil ang paglipat ay matagumpay. Matagumpay naming magpalit ang blangko na may mga tile. Ang lahat ng mga karapatan, kaya huli naming kailangan mag-check won. Kaya, nanalo ng kaparehong ay nagbabalik ng bool kung saan totoo ay pagpunta sa magpahiwatig na ang gumagamit ay nanalo sa laro. At hindi totoo ay nagpapahiwatig na ang laro ay pagpunta pa rin. Ang user ay hindi nanalo. Kaya, ito ay magiging kaakit-akit magkano ang katapat ng init, na kung saan ang init, tandaan, initialize namin sa board sa 15, 14, 13, 12, iba pa. Sapagkat napanalunan, nais naming suriin kung ang board ay 1, 2, 3, 4, 5, at iba pa. Kaya, kami ay pagpunta sa pagsisimula ng aming kontrahin sa 1 dahil iyon ang tuktok kaliwa ng board ay dapat na. At pagkatapos ay kami ay pagpunta sa loop sa buong board. Hayaan huwag pansinin ang kundisyong ito para sa isang segundo. At ang kundisyong ito ay pagpunta lamang sa check ang board sa posisyon na ito katumbas ng kasalukuyang mga bilang? Kung gayon, dagdagan ang bilang ng sa gayon ay ang susunod na posisyon tinitingnan namin ay isa mas mataas kaysa sa posisyon tayo sa ngayon. Kaya na kung paano namin makuha ang kaliwang tuktok ay dapat na 1. Dinagdagan ang bilang sa 2. Tumingin sa susunod na posisyon. Ito ba 2? Kung gayon, dinagdagan ang bilang sa 3. Susunod na posisyon, ay ang 3? Kung gayon, dinagdagan ang bilang sa 4, at iba pa. Kaya, kung mayroong anumang posisyon sa board na hindi kasing-halaga ng aming panonood, pagkatapos ay nais naming ibalik hindi totoo dahil na nangangahulugan na ang ilang mga tile na ay wala sa tamang posisyon. Kaya dito, kung ano ang kundisyong ito ay ginagawa? Well, tandaan na ang blangko ay dapat na pumunta sa kanang ibaba. At halaga ang blangko ng lakas hindi kinakailangang kasing-halaga sa halaga ng kontrahin na pagpunta sa maabot sa kanang ibaba. Kaya namin nais na partikular na upang suriin kung i katumbas ay katumbas d minus 1 at j Kapantay ay katumbas d minus 1 - na kung saan ay nagsasabing kung namin ay tumitingin sa kanang ibaba ng board - pagkatapos namin lamang nais na magpatuloy. Gusto naming laktawan ang partikular na pag-ulit ng para sa loop. At kaya, kung pamahalaan namin upang makakuha ng sa pamamagitan ng nested para sa loop, ibig sabihin nito ay na walang tile na noon ay sa ang hindi tamang posisyon. At masira kami sa labas ng loop at dumating dito, kung saan maaari naming nagbabalik ng tunay. Ang lahat ng mga tile ay nasa tamang posisyon at nangangahulugan na ang gumagamit ay may Nanalo ang laro. At na ito. Ang pangalan ko ay Rob Bowden, at ito ay 15.