MATLAB, 94 93 ไบต์
rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
ตัวอย่างการรัน (บรรทัดแรกหลังจากโค้ดคืออินพุตที่ผู้ใช้พิมพ์):
>> rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
99
*10001*2*
220001232
*201111*1
*312*1111
12*211000
011211000
0001*1000
000112110
000001*10
คำอธิบาย
rng(input(''));
ใช้จำนวนเต็มและใช้เป็นเมล็ด (ใช้งานได้ในเวอร์ชัน MATLAB ที่ทันสมัยเวอร์ชันเก่าอาจต้องการไวยากรณ์ที่แตกต่าง)
x(9,9)=~1;
กำหนดตรรกะ0
หรือfalse
(ที่ได้รับโดยมีเหตุผลกวน1
) เพื่อเข้าของเมทริกซ์(9,9)
x
ส่วนที่เหลือของรายการจะเริ่มต้นโดยอัตโนมัติเพื่อตรรกะ0
เช่นกัน
x(randperm(81,10))=1;
กำหนด1
(ส่งโดยอัตโนมัติไปที่ลอจิคัล1
หรือtrue
) ให้10
กับ
81
รายการของx
, สุ่มเลือกโดยไม่มีการแทนที่ รายการเหล่านี้เป็นรายการที่มีระเบิด
conv2(+x,ones(3),'s')
conv2(+x,ones(3),'same')
เป็นคำย่อของ มัน convolves เมทริกซ์x
(ซึ่งจะต้องมีการโยนไปdouble
ใช้+
) กับเขต 3 × 3 1
มี สิ่งนี้นับว่ามีจำนวนระเบิดติดกับแต่ละรายการ สำหรับรายการที่มีระเบิดมันรวมถึงระเบิดนั้น แต่จะมีการเขียนทับค่าในภายหลัง
y=[...+48 ''];
เพิ่ม 48 ให้กับค่าเพื่อแปลงจากตัวเลขเป็นรหัส ASCII การต่อกับเมทริกซ์ที่ว่างเปล่าจะใช้รหัส ASCII เหล่านี้กับตัวอักษร
y(x)=42;
กำหนด 42 (รหัส ASCII สำหรับ'*'
) ให้กับตำแหน่งของระเบิด ตำแหน่งเหล่านี้ถูกกำหนดโดยx
ที่นี่ใช้เป็นดัชนีเชิงตรรกะ
disp(y)
แสดงผลลัพธ์