โจทย์ทั้งหมด
ปานกลาง 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

นับจำนวนระเบิดรอบเซลล์ในเกม Minesweeper

ใส่หมายเหตุให้กระดานสี่เหลี่ยมผืนผ้า

ใส่หมายเหตุให้กระดานสี่เหลี่ยมผืนผ้า โดยเครื่องหมายดอกจัน (*) คือระเบิด และจุด (.) คือช่องปลอดภัย สำหรับแต่ละช่องปลอดภัย ให้นับจำนวนระเบิดใน 8 ช่องรอบข้าง (รวมแนวทแยง) แล้วแทนที่ด้วยตัวเลข 1 ถึง 8 ตามจำนวนนั้น หรือคงไว้เป็นจุดถ้าจำนวนนั้นเป็นศูนย์ ระเบิดต้องคงเดิม ช่องนอกกระดานถือว่าไม่มีอยู่

ให้เขียนฟังก์ชัน minesweeper_neighbor_counts(board)

อินพุต

board: แถวของกระดานจากบนลงล่าง; ตัวอักษรในแต่ละแถวเรียงจากซ้ายไปขวา

เอาต์พุต

คืนค่าแถวที่ใส่หมายเหตุแล้ว โดยลำดับและขนาดเท่าเดิม

เงื่อนไข

1 ≤ จำนวนแถว, จำนวนคอลัมน์ ≤ 200 ทุกแถวต้องมีความยาวเท่ากันและไม่เป็นศูนย์ และประกอบด้วยเฉพาะ * และ . เท่านั้น

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
board = ["*..", "...", "..*"]

ผลลัพธ์ที่คาดหวัง:
expected = ["*1.", "121", ".1*"]
อินพุต:
std::vector<std::string> board = {"*..", "...", "..*"};

ผลลัพธ์ที่คาดหวัง:
std::vector<std::string> expected = {"*1.", "121", ".1*"};
อินพุต:
string[] board = new string[] {"*..", "...", "..*"};

ผลลัพธ์ที่คาดหวัง:
string[] expected = new string[] {"*1.", "121", ".1*"};

คำอธิบาย

ช่องตรงกลางสัมผัสระเบิดสองลูก จึงมีค่าเป็น 2 ช่องขวาบนและซ้ายล่างไม่สัมผัสระเบิดเลย จึงยังเป็นจุด ช่องปลอดภัยอื่น ๆ สัมผัสระเบิดหนึ่งลูก

ตัวอย่างที่ 2
อินพุต:
board = ["..."]

ผลลัพธ์ที่คาดหวัง:
expected = ["..."]
อินพุต:
std::vector<std::string> board = {"..."};

ผลลัพธ์ที่คาดหวัง:
std::vector<std::string> expected = {"..."};
อินพุต:
string[] board = new string[] {"..."};

ผลลัพธ์ที่คาดหวัง:
string[] expected = new string[] {"..."};

คำอธิบาย

กระดานแถวเดียวนี้ไม่มีระเบิดเลย ทุกช่องจึงมีค่าเป็นศูนย์และยังคงเป็นจุดทั้งหมด

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก