Rob 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 অদলবদল করতে হবে. ঘ mod 2 0 সমান সুতরাং, যদি, যে আমরা চেক চলুন কিভাবে এটা এমনকি আছে কিনা দেখতে. ঘ mod 2 0 তারপর, সারি ঘ বিয়োগ মধ্যে সমান হলে 1, যা নিচের সারি, এবং অবস্থান D বিয়োগ 2, বা কলাম D বিয়োগ 2, আমরা 2 যে সেট করতে যাচ্ছে, এবং করছি কলাম D বিয়োগ 3 আমরা করছি 1 সেট যাচ্ছে. সুতরাং যে শুধু reversing যেখানে 1 এবং 2 বর্তমানে. পরিশেষে, আমরা খুবই সেট চলুন নীচের অংশে ডানদিকে ফাঁকা সমান, যেখানে ফাঁকা হ্যাশ সংজ্ঞায়িত করা হয়েছে 0 হিসেবে শীর্ষে. সুতরাং, যে কঠোরভাবে প্রয়োজন ছিল না লুপ জন্য এই আছে যাচ্ছে সাল 0 থেকে নীচে, ডান থেকে সেট পাল্টা স্বাভাবিকভাবেই 0 পৌঁছাতে হবে. কিন্তু বুদ্ধিমান যে আমাদের উপর নির্ভর করে ফাঁকা একটি 0 খুঁজে কুচি - কুচি করিয়া কাটা বস্তু ছিল. আমি পরে এই প্রোগ্রাম ঢোকা এবং যদি , 100 থেকে উপরের ফাঁকা পরিবর্তন এটা এখনও কাজ করা উচিত. তাই এই শুধু নিশ্চিত যে করছে নীচে ডান আসলে সমান আমাদের ফাঁকা মান. পরিশেষে, আমরা দুই গ্লোবাল ভেরিয়েবল আছে, তাই আমি এবং ফাঁকা ঞ ফাঁকা, এবং আমরা দেখতে যারা শীর্ষে ঘোষণা. এবং আমরা যারা দুই গ্লোবাল ব্যবহার চলুন ট্র্যাক রাখতে ভেরিয়েবল ফাঁকা স্থান, আমরা না করতে যাতে সমগ্র মাধ্যমে সন্ধান করতে হবে ফাঁকা প্রতি একক খোঁজার বোর্ড আমরা তাড়াতাড়ি করতে চেষ্টা সময়. তাই ফাঁকা স্থান সর্বদা নীচে ডানদিকে শুরু করতে যাচ্ছে. তাই নীচের অংশে ডানদিকে দেওয়া হয় সূচকের ঘ বিয়োগ 1, ডি বিয়োগ 1. সুতরাং, যে Init এর. এখন আমরা আঁকতে যান. সুতরাং, ড্র অনুরূপ হতে যাচ্ছে আমরা বারবার চলুন যেখানে সমগ্র বোর্ডের উপর. এবং আমরা শুধু মান প্রিন্ট করতে চান যে বোর্ডের প্রতিটি অবস্থানে আছে. তাই এখানে, আমরা যে মান মুদ্রণ করছি বোর্ডের প্রতিটি অবস্থানে. এবং আমরা করছেন লক্ষ্য -. এবং যে মাত্র printf, কহন যে তথাপি এটি একটি এক অবস্থান ঠিকানা অথবা যদি এর দুই অঙ্ক নম্বর, আমরা এখনও এটা করতে চান , মুদ্রণ আউট দুটি কলাম লাগতে যাতে আমরা দুই অঙ্ক এবং যদি কেউ থাকেন একই বোর্ড অঙ্ক সংখ্যা, আমাদের বোর্ড এখনও চমৎকার এবং বর্গক্ষেত্র দেখবে. সুতরাং আমরা প্রতি মান জন্য যে কাজ করতে চান বোর্ড, ফাঁকা ছাড়া. সুতরাং, যদি বোর্ডের মধ্যে অবস্থান সমান ফাঁকা, তারপর আমরা বিশেষভাবে শুধু একটি আন্ডারস্কোর প্রিন্ট আউট করতে চান ফাঁকা প্রতিনিধিত্ব করেন, পরিবর্তে থেকে যাই হোক না কেন মান ফাঁকা আসলে. পরিশেষে, আমরা প্রিন্ট করতে চান একটি নতুন লাইন আউট. এই ভিতরে এখনও যে লক্ষ্য করুন বাইরে লুপ জন্য বাইরের, কিন্তু লুপ জন্য ভেতরের. লুপ জন্য এই বাইরের iterating হয় সব সারি ধরে, এবং তাই এই 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 থেকে বড়. কেন আমরা কি সেটা চান? ওয়েল, ফাঁকা উপরের সারিতে যদি বোর্ডের তারপর, আমরা চাই না যেহেতু টালি জন্য ফাঁকা উপরে তাকান উপরে উপরে কিছুই নেই বোর্ডের সারিতে. এই আপনি পেয়ে শেষ হতে পারে কিভাবে একটি সেগমেন্টেশন ফল্ট বা মত কিছু আপনার প্রোগ্রাম ঠিক কাজ করতে পারে অপ্রত্যাশিত উপায়ে. সুতরাং, এই এক না যে এমনটা নিশ্চিত করা হয় বৈধ নয় এমন জায়গায় চেহারা. এখন আমরা ধরে একই জিনিস করে যাচ্ছেন সব অন্যান্য সম্ভাব্য সমাহার. তাই এখানে, আমরা ফাঁকা নীচের বেরাচ্ছেন যে টালি যদি দেখতে. এবং আমরা নিশ্চিত যে আমরা করছি করতে হবে না নিচের সারি উপর, বা অন্যথায় আমরা টালি জন্য হওয়া উচিত নয়. এখানে, আমরা বাম এর চেহারা চলুন এটা টালি যদি ফাঁকা দেখতে. এবং আমরা বামে তাকান উচিত নয় আমরা leftmost কলামে হন তাহলে. এবং এখানে আমরা চেহারা চলুন ডানে ফাঁকা এর, এবং আমরা না করা উচিত আমরা যদি ডানে তাকান ডানদিকে অবস্থিত কলামে. সুতরাং, সেগুলো কেউ সত্য ছিল, যে টালি সন্নিহিত ছিল না মানে ফাঁকা এবং আমরা মিথ্যা ফিরে আসতে পারেন. সরানো বৈধ ছিল না. কিন্তু, যারা এক সত্য ছিল, তারপর এ এই মুহুর্তে, আমরা যে tile_i জানি এবং tile_j সমান হয় টালি অবস্থান. এবং তাই, আমরা এ বোর্ড আপডেট করতে পারেন অবস্থানের tile_i এবং tile_j. আমরা নতুন মান ফাঁকা হবে জানি এবং যে অবস্থানে blank_i blank_j, মূল, যা ছিল ফাঁকা - আমরা টালি যাচ্ছে জানি সেখানে সরাতে. আসলে আমরা যা করতে হবে না লক্ষ্য করুন একটি এখানে বাস্তব swap ', আমরা জানি, যেহেতু সন্নিবেশিত করা প্রয়োজন যে মান সেই অবস্থানের মধ্যে. আমরা একটি অস্থায়ী দরকার নেই প্রায় পরিবর্তনশীল. পরিশেষে, আমরা যে আমরা মনে রাখা প্রয়োজন যে আমাদের গ্লোবাল ভেরিয়েবল আছে অবস্থান সম্পর্কে অবগত থাকার ফাঁকা মোট. তাই আমরা অবস্থান আপডেট করতে চান যেখানে টালি হতে ফাঁকা মূলত ছিল. পরিশেষে, আমরা যেহেতু সত্য ফিরে পদক্ষেপ সফল হয়েছে. আমরা সফলভাবে অদলবদল টালি দিয়ে ফাঁকা. ঠিক আছে, তাই শেষ আমরা বিজয়ী চেক প্রয়োজন. সুতরাং, জিতেছে একভাবে একটি bool ফেরৎ যেখানে সত্য ইঙ্গিত যাচ্ছে যে ইউজার খেলা জিতেছে. এবং মিথ্যা ইঙ্গিত হয় খেলা এখনও যাচ্ছে. ব্যবহারকারী জিতেছে নি. সুতরাং, এই প্রায় কাছাকাছি হতে যাচ্ছে Init বিপরীত, যেখানে Init, আমরা বোর্ড আরম্ভ, স্মরণ তাই 15, 14, 13, 12, যাও. জিতেছে যেহেতু, আমরা পরীক্ষা করতে হলে বোর্ড তাই 1, 2, 3, 4, 5, এবং হয়. সুতরাং, আমরা আরম্ভ চলুন আমাদের যে কি উপরে যেহেতু 1 থেকে মোকাবেলায় বোর্ডের বাম হতে হবে. এবং তারপর আমরা লুপ চলুন সমগ্র বোর্ডের উপর. এর এই অবস্থা উপেক্ষা যাক এক সেকেন্ডের জন্য. এবং এই অবস্থা শুধু যাচ্ছে চেক এই অবস্থা এ বোর্ড বর্তমান সংখ্যা সমান? যদি তাই হয়, গণনা বাড়ায় যাতে আমরা তাকান পরের অবস্থানে এক বেশী আমরা এই মুহূর্তে এ অবস্থান আর. সুতরাং যে আমরা পেতে কিভাবে উপরের বাম 1 হতে হবে. 2 থেকে গণনা বাড়ায়. পরের অবস্থানে তাকান. এই 2 আছে? যদি তাই হয়, 3 থেকে গণনা বাড়ায়. পরবর্তী অবস্থান, এই 3 আছে? যদি তাই হয়, গণনা বাড়ায় 4 থেকে, এবং তাই. সুতরাং, কোন অবস্থানে আছে আমাদের গণনা সমান না বোর্ড, তারপর আমরা যে যেহেতু মিথ্যা ফিরে চাই যে কিছু টালি আছে মানে না সঠিক অবস্থান. তাই এখানে, এই অবস্থায় কি করছে? ভাল, খালি মনে রাখবেন নীচে ডানদিকে যেতে অনুমিত. আর ফাঁকা এর মান না বল অগত্যা মান সমান যে পৌঁছে যাচ্ছে মোকাবেলায় নীচে ডানদিকে. তাই আমরা বিশেষভাবে পরীক্ষা করতে যদি আমি সমান ঘ বিয়োগ 1 এবং জে সমান সমান ঘ বিয়োগ 1 সমান - বলছে না যা যদি আমরা নীচের অংশে ডানদিকে এর এ খুঁজছেন বোর্ড - তারপর আমরা ঠিক চালিয়ে যেতে চান. আমরা এই বিশেষ এড়িয়ে চাই জন্য লুপ পুনরাবৃত্তির. এবং তাই, আমরা এই মাধ্যমে পেতে পরিচালনা হলে লুপ জন্য নেস্টেড, এর মানে হল যে ছিল যে কোন টালি ছিল ভুল অবস্থান. এবং আমরা লুপ আউট বিরতি এবং আসা এখানে, যেখানে আমরা সত্য ফিরে আসতে পারেন. সমস্ত টাইলস সঠিক অবস্থানের মধ্যে ছিল এবং যে ব্যবহারকারী আছে মানে খেলা জিতেছে. এবং যে এটি. আমার নাম রব বাউডেন, এবং এই 15 ছিল.