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
(autoomatically तार्किक करने के लिए डाली 1
, या true
करने के लिए) 10
की
81
की प्रविष्टियों x
, प्रतिस्थापन के बिना अनियमित रूप से चुने। ये प्रविष्टियाँ वे हैं जिनमें बम हैं।
conv2(+x,ones(3),'s')
का संक्षिप्त नाम है conv2(+x,ones(3),'same')
। यह मैट्रिक्स convolves x
(जो करने के लिए डाली जा करने की जरूरत है double
, का उपयोग कर +
एक 3 × 3 पड़ोस युक्त के साथ) 1
। यह गिनता है कि प्रत्येक प्रविष्टि में कितने बम हैं। ऐसी प्रविष्टियों के लिए जिनमें बम होता है, उसमें वह बम भी शामिल होता है, लेकिन बाद में उसका मूल्य समाप्त हो जाएगा।
y=[...+48 ''];
संख्या से ASCII कोड में बदलने के लिए, मूल्य में 48 जोड़ता है। खाली मैट्रिक्स के साथ संबंध इन ASCII कोड को वर्णों में डालते हैं।
y(x)=42;
'*'
बमों के पदों के लिए 42 (ASCII कोड ) प्रदान करता है । इन पदों द्वारा दिए गए हैं x
, जो यहाँ एक तार्किक सूचकांक के रूप में उपयोग किया जाता है।
disp(y)
परिणाम प्रदर्शित करता है।