Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

กรณีศึกษา Zombie Apocalypse - JavaScript


ไวรัสซอมบี้ที่น่ารังเกียจกำลังแพร่กระจายไปทั่วเมืองดิจิทัล เราทำงานที่ Digital CDC และงานของเราคือการดูแผนที่เมืองและบอกว่าพื้นที่ใดปนเปื้อนไวรัสซอมบี้ เพื่อให้กองทัพดิจิทัลรู้ว่าควรทิ้งระเบิดที่ไหน

พวกมันเป็นซอมบี้ดิจิทัลรูปแบบใหม่ที่สามารถเคลื่อนที่ได้เฉพาะในแนวตั้งและแนวนอน และแพร่ระบาดเฉพาะตัวเลขที่เหมือนกันเท่านั้น

เราจะได้อาร์เรย์สองมิติที่มีตัวเลขอยู่ในนั้น

ด้วยเหตุผลลึกลับบางอย่าง ผู้ป่วย 0 มักจะพบในพื้นที่ตะวันตกเฉียงเหนือของเมือง (องค์ประกอบ [0][0] ของเมทริกซ์) และกาฬโรคแพร่กระจายจากที่นั่นไปยังเซลล์อื่นโดยเลื่อนไปทางซ้าย ขวา ขึ้นหรือลง

เราต้องสร้างฟังก์ชันที่ส่งคืนแผนที่ (อาร์เรย์ 2 มิติ) โดยมีพื้นที่ปนเปื้อนทั้งหมดเป็น 1 และปลอดไวรัสทำเครื่องหมายเป็น 0

กล่าวอีกนัยหนึ่ง เราต้องหาองค์ประกอบเมทริกซ์ทั้งหมดที่มีค่าเท่ากับ [0][0] ที่เราสามารถไปถึงได้โดยการเลื่อนลง ขึ้น ขวา หรือซ้ายจาก [0][0] เท่านั้น - โดยไม่ต้องไปที่ ช่องเก็บค่าอื่นๆ

ตัวอย่าง

ต่อไปนี้เป็นรหัส -

const arr =[ [9, 1, 2, 3, 4, 1, 2, 9], [9, 9, 9, 2, 1, 5, 9, 9], [9, 2, 9, 3, 7, 9, 1, 9], [6, 9, 9, 9, 0, 9, 2, 9], [5, 4, 3, 9, 9, 9, 4, 9], [9, 3, 9, 5, 8, 9, 9, 9], [9, 9, 9, 9, 9, 9, 7, 9], [9, 9, 1, 2, 3, 9, 8, 9] ];const findZombies =arr => { ให้ i, j, ผลลัพธ์ =[], zombie =arr[0][0], tree ={}; const โอกาส =([i, j]) => { if (!tree[i] || !tree[i][j]) return; ผลลัพธ์[i][j] =1; var temp =ต้นไม้[i][j]; ต้นไม้[i][j] =ไม่ได้กำหนด; temp.forEach(โอกาส); } สำหรับ (i =0; i  arr[x] &&arr[x][y] ===ซอมบี้); }; }; โอกาส([0, 0]); ส่งคืนผลลัพธ์;};console.log(findZombies(arr));

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้บนคอนโซล -

<ก่อนหน้า>[ [ 1, 0, 0, 0, 0, 0, 0, 0, 1 ], [ 1, 1, 1, 0, 0, 0, 1, 1 ], [1, 0, 1, 0, 0 , 1, 0, 1 ], [ 0, 1, 1, 1, 0, 1, 0, 1 ], [ 0, 0, 0, 1, 1, 1, 0, 1 ], [ 1, 0, 1 , 0, 0, 1, 1, 1 ], [1, 1, 1, 1, 1, 1, 0, 1 ], [1, 1, 0, 0, 0, 1, 0, 1 ]]