रकम का एक ग्रिड उत्पन्न करें


15

यादृच्छिक संख्याओं से भरे, 7 बाय 7 ग्रिड उत्पन्न करें। हालांकि, एक विषम पंक्ति और स्तंभ संख्या (0 से शुरू) वाली कोशिकाओं में, आपको आसपास की कोशिकाओं के योग का उपयोग करना चाहिए। यहां 3 बाय 3 ग्रिड (राशि-वर्ग बोल्ड) के साथ एक छोटा सा उदाहरण दिया गया है:

2 2  2
2 16 2
2 2  2

और यहाँ एक उदाहरण 7 बाय 7 ग्रिड:

6 5  4 3  7 2  5
6 43 3 50 8 43 8
4 7  8 8  9 3  1
4 36 1 43 6 40 5
3 3  6 1  4 7  5
4 35 3 45 9 42 1
2 6  8 6  8 5  3

नियम

  • नंबर जो sums नहीं हैं, उन्हें हमेशा 1 और 9 के बीच होना चाहिए।

  • ग्रिड को बेतरतीब ढंग से उत्पन्न किया जाना चाहिए। गैर-राशि के लिए, प्रत्येक अंक को दिखने का एक समान मौका होना चाहिए, भले ही वह किस सेल में हो।

  • नंबरों को जोड़ना होगा। इसका अर्थ है कि किसी कॉलम में प्रत्येक संख्या का पहला या अंतिम अंक लंबवत होना चाहिए। (आप मान सकते हैं कि मध्य संख्या हमेशा दो अंकों की होगी।)

  • आसपास की कोशिकाओं में विकर्ण शामिल हैं। इसलिए, प्रत्येक योग वर्ग में इसके चारों ओर आठ नंबर होंगे, जिन्हें आपको जोड़ना होगा।

  • सबसे कम कोड जीतता है, क्योंकि यह


3
यह है है पहला अंक है कि लाइनें होने के लिए? यानी यह आखिरी हो सकता है?
अस्थिरता

@Volatility मुझे लगता है कि सही संरेखण काम करेगा। संपादित
Doorknob

क्या होगा यदि किसी भाषा में यादृच्छिक संख्या जनरेटर नहीं है?
हेमदॉल

जवाबों:


14

एपीएल, 53 49 43 42 40 39 36

मैं ;.एपीएल में जे के दोहराने में कामयाब रहा , और गैरेथ के दृष्टिकोण का इस्तेमाल किया , जिससे 13 चार्ट बच गए।

{×5⌷⍵:5⌷⍵⋄+/⍵}¨3,⌿3,/×∘?∘9¨∘.∨⍨9⍴0 1

नमूना रन:

      {×5⌷⍵:5⌷⍵⋄+/⍵}¨3,⌿3,/×∘?∘9¨∘.∨⍨9⍴0 1
9  9 6  1 7  5 6
7 55 5 39 9 54 9
9  8 2  1 8  1 9
2 43 8 41 6 42 5
7  3 4  4 8  3 2
2 29 1 26 2 35 8
6  4 2  3 2  3 7

स्पष्टीकरण:

  • ∘.∨⍨9⍴0 1 थोड़ा सा मुखौटा उत्पन्न करता है।
  • ×∘?∘9¨ यादृच्छिक संख्या के एक नकाबपोश ग्रिड का निर्माण, 1 से 9 समावेशी से यादृच्छिक मूल्य से प्रत्येक बिट को गुणा करता है।
  • 3,⌿3,/नकाबपोश सरणी में सभी 3 से 3 अतिव्यापी बक्से को वापस करने के लिए हैकरी के रूप में वर्णित किया जा सकता है। ये भी प्रक्रिया में समतल हैं।
  • {×5⌷⍵:5⌷⍵⋄+/⍵}¨प्रत्येक तत्व को असाइन करते हुए, सरणी पर पुनरावृत्ति करता है । प्रत्येक पुनरावृत्ति के लिए, यह पांचवां (मध्य, यह याद करते हुए कि एपीएल इंडेक्सिंग 1-आधारित है) लेता है, और अपना संकेत देता है। इस मामले में यह परीक्षण के बराबर है यदि संख्या 0. से अधिक है। यदि यह 1 (सही के लिए) रिटर्न देता है, तो उस तत्व को वापस करें। अन्यथा, चपटा 3 में तत्वों का योग 3 बॉक्स से वापस करें। यह :⋄टर्नरी ऑपरेटर का उपयोग करता है , जो ?:कई भाषाओं में बराबर है ।

उह ओह। लगता है कि मुझे और अधिक चरित्र बचत ढूंढनी होगी। : -एस
गैरेथ

@ अच्छी तरह से, देखो हमारे यहाँ क्या है। मैं लीड में वापस आ गया हूं: पी
अस्थिरता

NOOOOOOOOOO !!!!!!! :-(
गैरेथ

13

J, 63 61 59 55 52 51 49 47 39 37 वर्ण हैं

3 3(4&{+4{*|+/)@,;._3(**1+?)+./~9$0 9

अपने 10 चरित्र की बचत के लिए अस्थिरता के लिए धन्यवाद ।

स्पष्टीकरण (प्रत्येक चरण में अलग-अलग यादृच्छिक संख्याएँ होंगी ...):

यादृच्छिक संख्या उत्पन्न करने के लिए मुखौटा उत्पन्न करें (उपयोग $:

   9 9$9$0 9
0 9 0 9 0 9 0 9 0
0 9 0 9 0 9 0 9 0
0 9 0 9 0 9 0 9 0
0 9 0 9 0 9 0 9 0
0 9 0 9 0 9 0 9 0
0 9 0 9 0 9 0 9 0
0 9 0 9 0 9 0 9 0
0 9 0 9 0 9 0 9 0
0 9 0 9 0 9 0 9 0

अब हमारे पास एक हुक है । यह वास्तव में एक खुश दुर्घटना है जब मैं एक पुराने संस्करण को नीचे कर रहा था। इसका आशय मूल |:और +.साथ होना था । यह तब समझ में आया जब मैं उस समय अपने और जीरो का उपयोग कर रहा था, लेकिन अब मेरे पास नाइन और जीरो हैं। यह सिर्फ इतना होता है कि यह जीसीडी अर्थ के साथ उसी तरह काम करता है +.। मेरे लिए भाग्यशाली। :-)

   (+.|:)9 9$9$0 9
0 9 0 9 0 9 0 9 0
9 9 9 9 9 9 9 9 9
0 9 0 9 0 9 0 9 0
9 9 9 9 9 9 9 9 9
0 9 0 9 0 9 0 9 0
9 9 9 9 9 9 9 9 9
0 9 0 9 0 9 0 9 0
9 9 9 9 9 9 9 9 9
0 9 0 9 0 9 0 9 0

तो, अब जब हमारे पास 9s और 0s का ग्रिड है तो हम कुछ यादृच्छिक संख्याएँ उत्पन्न करना चाहते हैं। ?एक दी गई संख्या से 0 तक (लेकिन शामिल नहीं) से एक यादृच्छिक संख्या उत्पन्न करता है। एक सूची को देखते हुए यह सूची के प्रत्येक सदस्य के लिए इस तरह से एक यादृच्छिक संख्या उत्पन्न करेगा। तो इस मामले में यह तालिका में प्रत्येक 9 के लिए 0 से 8 तक की संख्या और प्रत्येक 0 के लिए 0 से 1 तक एक फ्लोटिंग पॉइंट नंबर उत्पन्न करेगा।

   ?(+.|:)9 9$9$0 9
 0.832573 7 0.926379 7 0.775468 6 0.535925 3  0.828123
        7 0        5 5        4 3        4 5         4
0.0944584 2 0.840913 2 0.990768 1 0.853054 3  0.881741
        3 8        7 0        8 3        3 4         8
 0.641563 4 0.699892 7 0.498026 1 0.438401 6  0.417791
        6 8        7 5        2 3        6 6         3
 0.753671 6 0.487016 4 0.886369 7 0.489956 5  0.902991
        3 4        7 8        1 4        8 0         8
0.0833539 4 0.311055 4 0.200411 6 0.247177 5 0.0464731

लेकिन हम 1 से 9 तक नंबर चाहते हैं 0 से 8. नहीं। इसलिए हम 1 जोड़ते हैं।

   (1+?)(+.|:)9 9$9$0 9
 1.4139 4  1.7547 7 1.67065 4 1.52987 1 1.96275
      2 8       2 4       3 9       6 9       9
1.15202 7 1.11341 5  1.0836 1 1.24713 2 1.13858
      9 3       3 2       4 7       3 8       6
1.06383 9 1.67909 4 1.09801 8  1.4805 6  1.0171
      9 5       5 5       9 5       9 4       3
1.22819 1 1.85259 4 1.95632 6 1.33034 3 1.39417
      4 2       5 1       3 7       2 5       6
1.06572 5  1.9942 5 1.78341 5 1.16516 6 1.37087

यह बहुत अच्छा है, लेकिन हम जो शून्य चाहते हैं, उसे खो चुके हैं, इसलिए हम सभी ननों को लोगों में बदलने के बाद इसे मूल मुखौटा से गुणा करेंगे। मैं जाँच करता हूँ कि क्या मान 1 से अधिक है (1&<*1+?)
यहाँ कुछ चीज़ें चल रही हैं:

  • हमने एक कांटा बनाया है जो हमें बहुत कम पात्रों में बहुत सारे काम पैक करने की अनुमति देता है।
  • हमने क्रिया &को 1 ( ) <बांधा है।

तो सभी संयुक्त (1&<*1+?)यादृच्छिक संख्या उत्पन्न कर रहे हैं, और उन सभी संख्याओं को शून्य कर रहे हैं जहां मूल ग्रिड में शून्य द्वारा उत्पन्न होते हैं।

   (1&<*1+?)(+.|:)9 9$9$0 9
0 3 0 2 0 7 0 1 0
9 5 2 7 7 1 4 5 7
0 6 0 8 0 3 0 1 0
4 8 7 5 9 7 7 9 4
0 9 0 6 0 9 0 9 0
6 1 2 1 4 6 8 9 4
0 3 0 8 0 6 0 6 0
2 5 2 2 2 2 3 9 3
0 9 0 3 0 5 0 3 0

अगला बिट एक है (मेरी राय में, वैसे भी :-) चालाक बिट।
कट ;.क्रिया का एक रूप होता है x u;._3 yजो इनपुट को xउसके द्वारा बताए गए बक्सों में काट देता है , और फिर क्रिया uको उन पर लागू करता है। इस मामले में हमारे पास है 3 3(4&{++/*0=4&{)@,;._3

  • 3 3बक्से हम चाहते वर्णन है - 3x3।
  • (4&{++/*0=4&{)@,एक क्रिया ट्रेन जो बताती है कि हम क्या प्रत्येक बॉक्स के लिए क्या करना चाहते है।

प्रदर्शित करने के लिए ;.क्रिया मैं इस्तेमाल करेंगे <प्रत्येक बॉक्स को दिखाने के लिए:

   3 3(<);._3(1&<*1+?)(+.|:)9 9$9$0 9
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│0 8 0│8 0 7│0 7 0│7 0 4│0 4 0│4 0 3│0 3 0│
│9 1 3│1 3 2│3 2 3│2 3 8│3 8 5│8 5 5│5 5 9│
│0 6 0│6 0 1│0 1 0│1 0 2│0 2 0│2 0 4│0 4 0│
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│9 1 3│1 3 2│3 2 3│2 3 8│3 8 5│8 5 5│5 5 9│
│0 6 0│6 0 1│0 1 0│1 0 2│0 2 0│2 0 4│0 4 0│
│7 1 6│1 6 7│6 7 1│7 1 2│1 2 1│2 1 6│1 6 1│
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│0 6 0│6 0 1│0 1 0│1 0 2│0 2 0│2 0 4│0 4 0│
│7 1 6│1 6 7│6 7 1│7 1 2│1 2 1│2 1 6│1 6 1│
│0 7 0│7 0 5│0 5 0│5 0 9│0 9 0│9 0 7│0 7 0│
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│7 1 6│1 6 7│6 7 1│7 1 2│1 2 1│2 1 6│1 6 1│
│0 7 0│7 0 5│0 5 0│5 0 9│0 9 0│9 0 7│0 7 0│
│7 9 9│9 9 7│9 7 1│7 1 9│1 9 4│9 4 9│4 9 5│
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│0 7 0│7 0 5│0 5 0│5 0 9│0 9 0│9 0 7│0 7 0│
│7 9 9│9 9 7│9 7 1│7 1 9│1 9 4│9 4 9│4 9 5│
│0 3 0│3 0 2│0 2 0│2 0 7│0 7 0│7 0 9│0 9 0│
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│7 9 9│9 9 7│9 7 1│7 1 9│1 9 4│9 4 9│4 9 5│
│0 3 0│3 0 2│0 2 0│2 0 7│0 7 0│7 0 9│0 9 0│
│3 1 6│1 6 1│6 1 7│1 7 6│7 6 8│6 8 9│8 9 9│
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│0 3 0│3 0 2│0 2 0│2 0 7│0 7 0│7 0 9│0 9 0│
│3 1 6│1 6 1│6 1 7│1 7 6│7 6 8│6 8 9│8 9 9│
│0 9 0│9 0 3│0 3 0│3 0 4│0 4 0│4 0 3│0 3 0│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘

ध्यान देने योग्य कुछ बातें:

  • बक्से ओवरलैप करते हैं - शीर्ष बाएं बॉक्स में दूसरा और तीसरा कॉलम इसके दाईं ओर बॉक्स में पहला और दूसरा है।
  • 7x7 बॉक्स हैं। इसलिए हमारे पास शुरू में 9x9 ग्रिड था।
  • प्रत्येक स्थान पर हमें एक राशि की आवश्यकता होती है 0जो बॉक्स के केंद्र में हो।

अब हमें बस केंद्र में मान को पास करने की आवश्यकता है (यदि यह गैर-शून्य है) या 3x3 बॉक्स में संख्याओं को जोड़ दें (यदि केंद्र शून्य है)।
ऐसा करने के लिए हमें केंद्र संख्या तक आसान पहुंच की आवश्यकता है। ,यहाँ मदद करता है। यह 3 आइटम को केंद्र संख्या के साथ 9 आइटमों की सूची में 3x3 ग्रिड में बदल देता है। केंद्र मूल्य को बाहर निकालने के लिए
4&{उपयोग करेगा {और फिर 0 के साथ तुलना करेगा 0=4&{। यह एक 0या 1सही या गलत के लिए रिटर्न देता है , जिसे हम तब राशि से गुणा करते हैं+/ । यदि यह केंद्र में शून्य था, तो अब हमारी आवश्यकता के अनुसार हमारी राशि है। यदि यह शून्य नहीं था, तो समाप्त करने के लिए हम सिर्फ केंद्र मूल्य जोड़ते हैं 4&{+
यह क्रिया ट्रेन देता है(4&{++/*0=4&{)@,

   3 3(4&{++/*0=4&{)@,;._3(1&<*1+?)(+.|:)9 9$9$0 9
2  6 9  3 7  9 7
3 47 6 51 5 49 5
3  9 9  6 6  2 8
7 48 6 47 1 37 5
5  4 5  7 7  2 6
5 35 3 49 8 51 9
1  6 6  6 7  4 8

क्या आपकी एक पंक्ति कोड वह सब करती है, जिसमें यादृच्छिक संख्याएँ शामिल हैं? मुझे आश्वस्त करो। बस यकीन करना मुश्किल है।
डेविड सीपी

हां, यह मानना ​​मुश्किल हो सकता है। यादृच्छिक बिट द्वारा किया जाता है ?। मैं नवीनतम संस्करण को प्रतिबिंबित करने के लिए स्पष्टीकरण बदल दूंगा।
गैरेथ

@DavidCarraher J में अधिकांश क्रियाएं या तो 1 या 2 वर्ण की हैं, इसलिए 47 वर्ण बहुत सारे काम में पैक कर सकते हैं।
गैरेथ

7x7 ओवरलैपिंग वर्गों में 9x9 बॉक्स का कटिंग निश्चित रूप से चतुर बिट है। 10 मिनट से भी कम समय में मैं इसे लागू करने में सक्षम हो गया हूं ताकि मेरे मौजूदा गोल्फस्क्रिप्ट कार्यान्वयन को 7.5% तक हरा दिया जा सके।
पीटर टेलर

ओह ठीक है, ऐसा लगता है कि यह मेरे लिए ड्राइंग बोर्ड पर वापस आ गया है।
अस्थिरता

5

रूबी (135 पात्र)

a=(0..48).map{rand(9)+1}
([0,0,j=8]*3).each{|l|a[j]=[0,1,6,7,8].inject{|s,e|s+a[j+e]+a[j-e]};j+=l+2}
a.each_slice(7){|r|puts"%-3s"*7%r}

नमूना उत्पादन

2  1  6  9  4  5  1  
9  34 4  37 2  31 3  
7  2  3  1  8  1  7  
5  42 4  40 2  47 9  
3  9  9  4  9  4  7  
3  44 4  41 2  47 4  
6  9  1  5  7  6  8  

टूट - फूट

यह बहुत स्पष्ट नहीं है कि यह कैसे काम करता है, इसलिए यहां एक त्वरित ब्रेकडाउन है। नोट: आप संभवत : इनमें से कुछ चरणों को छोड़ सकते हैं और छोटे संस्करणों पर अधिक तेज़ी से कूद सकते हैं, लेकिन मुझे लगता है कि यह अलग-अलग तरीकों से देखने के लिए पर्याप्त रूप से शैक्षिक है, विशेष रूप से मैं 2-अंकीय संख्याओं को 1-अंकीय संस्करणों में बदलने के लिए शाब्दिक रूप से पैटर्न को खोलकर। ।

नैवेद्य संस्करण

दो-आयामी सरणी पर भरोसा करने वाले अन्य रूबी समाधानों के विपरीत , आप 1-आयामी सरणी के साथ शुरू करके और ऑफसेट मूल्यों के साथ काम करके एक छोटा संस्करण प्राप्त कर सकते हैं, क्योंकि पैटर्न दोहराते हैं।

ary=(0..48).map { rand(9) + 1 }

offsets = [-8,-7,-6,-1,1,6,7,8]

3.times do |i|
  [8,10,12].each do |j|
    ary[j + 14*i] = ary.values_at(*offsets.map { |e| j+14*i + e }).inject(:+)
  end
end

ary.each.with_index do |e,i|
  $> << ("%-3s" % e)
  $> << ?\n if i % 7==6
end

यहां मुख्य सिद्धांत यह है कि हम 8, 10, 12 के सूचकांक पदों पर काम कर रहे हैं, केवल 14. के गुणकों से ऑफसेट। पदों 8, 10 और 12 3x3 ग्रिड के केंद्र हैं जिन्हें हम समेट रहे हैं। नमूना उत्पादन में 34 स्थिति 8, 42 8 + 14 * 1, आदि की स्थिति है हम साथ 34 पदों के द्वारा स्थिति 8 से ऑफसेट स्थिति 8 की जगह [-8,-7,-6,-1,1,6,7,8]- दूसरे शब्दों में 34 = sum(ary[8-8], ary[8-7], ..., ary[8+8])[8 + 14*i, 10 + 14*i, 12 + 14*i]पैटर्न के दोहराव के बाद से यह सिद्धांत सभी मूल्यों के लिए है।

इसका अनुकूलन कर रहे हैं

सबसे पहले, कुछ त्वरित अनुकूलन:

  • इसके बजाय 3.times { ... }, और j + 14*iहर बार गणना करते हुए, पदों को "इनलाइन" करें [8,10,12,22,24,26,36,38,40]
  • offsetsसरणी एक बार प्रयोग किया जाता है, तो शाब्दिक साथ चर बदलें।
  • के do ... endसाथ बदलें {...}और मुद्रण के चारों ओर स्विच करें $> << foo। (यहाँ एक चाल है जिसमें शामिल है puts nilऔर() == nil ।)
  • छोटे चर नाम।

इसके बाद का कोड 177 अक्षर है:

a=(0..48).map{rand(9)+1}
[8,10,12,22,24,26,36,38,40].each{|j|a[j]=a.values_at(*[-8,-7,-6,-1,1,6,7,8].map{|e|j+e}).inject(:+)}
a.map.with_index{|e,i|$><<"%-3s"%e<<(?\nif i%7==6)}

अगली कटौती के लिए, ध्यान दें कि injectऑफ़सेट सरणी को क्रम में रखने की आवश्यकता नहीं है। हम या तो [-8,-7,-6,-1,1,6,7,8]या कुछ अन्य आदेश दे सकते हैं, क्योंकि इसके अलावा सराहनीय है।

तो पहले सकारात्मकता और पाने के लिए नकारात्मक जोड़ी [1,-1,6,-6,7,-7,8,-8]

अब आप छोटा कर सकते हैं

[1,-1,6,-6,7,-7,8,-8].map { |e| j+e }.inject(:+)

सेवा

[1,6,7,8].flat_map { |e| [j+e, j-e] }

इसका परिणाम यह होगा

a=(0..48).map{rand(9)+1}
[8,10,12,22,24,26,36,38,40].each{|j|a[j]=a.values_at(*[1,6,7,8].flat_map{|e|[j+e,j-e]}).inject(:+)}
a.map.with_index{|e,i|$><<"%-3s"%e<<(?\nif i%7==6)}

जो 176 अक्षर है।

8 से शिफ्ट करें और अंतर पर जाएं

दो-वर्ण शाब्दिक मान ऐसा लगता है कि उन्हें छोटा किया जा सकता है, इसलिए लूप की शुरुआत में अद्यतन [8,10,12,22,24,26,36,38,40]करके सब कुछ नीचे ले जाएं और शिफ्ट करें । (ध्यान दें कि ऑफसेट मूल्यों को अद्यतन करने की आवश्यकता से बचा जाता है ।)8j+=81,6,7,8

a=(0..48).map{rand(9)+1}
[0,2,4,14,16,18,28,30,32].each{|j|j+=8;a[j]=a.values_at(*[1,6,7,8].flat_map{|e|[j+e,j-e]}).inject(:+)}
a.map.with_index{|e,i|$><<"%-3s"%e<<(?\nif i%7==6)}

यह 179 है, जो बड़ा है, लेकिन j+=8वास्तव में हटाया जा सकता है।

पहला बदलाव

[0,2,4,14,16,18,28,30,32]

मतभेदों की एक सरणी के लिए:

[2,2,10,2,2,10,2,2]

और इन मूल्यों को प्रारंभिक रूप से जोड़ते हैं j=8। यह अंततः समान मूल्यों को कवर करेगा। (हम शायद पहले 8 से शिफ्ट करने के बजाय इसे सीधे छोड़ सकते हैं।)

ध्यान दें कि हम भी की एक डमी मूल्य जोड़ देंगे 9999मतभेद सरणी के अंत तक, और करने के लिए जोड़ jपर अंत देंगे , लूप की शुरुआत नहीं । औचित्य यह है कि भयानक रूप से वही 3 नंबर दोहराए जाने के करीब 2,2,10,2,2,10,2,2दिखाई देता है 3 बार, और j+differenceलूप के अंत में कंप्यूटिंग करके , 9999वास्तव में आउटपुट को प्रभावित नहीं करेगा, क्योंकि a[j]कॉल नहीं है, जहां jकुछ मूल्य है खत्म हो गया 10000

a=(0..48).map{rand(9)+1}
j=8
[2,2,10,2,2,10,2,2,9999].each{|l|a[j]=a.values_at(*[1,6,7,8].flat_map{|e|[j+e,j-e]}).inject(:+);j+=l}
a.map.with_index{|e,i|$><<"%-3s"%e<<(?\nif i%7==6)}

इस अंतर सरणी के साथ, j+=8अब बस है j=8, ज़ाहिर है, अन्यथा हम बार-बार 8बहुत अधिक जोड़ देंगे । हमने ब्लॉक वेरिएबल को से भी बदल दिया jहै l

इसलिए चूंकि 9999तत्व का आउटपुट पर कोई प्रभाव नहीं है, इसलिए हम इसे बदल सकते हैं 10और सरणी को छोटा कर सकते हैं ।

a=(0..48).map{rand(9)+1}
j=8
([2,2,10]*3).each{|l|a[j]=a.values_at(*[1,6,7,8].flat_map{|e|[j+e,j-e]}).inject(:+);j+=l}
a.map.with_index{|e,i|$><<"%-3s"%e<<(?\nif i%7==6)}

यह 170 अक्षर है।

लेकिन अब j=8थोड़ा सा भद्दा लग रहा है, और आप आसानी से असाइनमेंट के लिए उपयोग कर सकते हैं 2 अक्षरों [2,2,10]को 2 से नीचे स्थानांतरित करके बचा 8सकते हैं। यह भी j+=lबनने की जरूरत है j+=l+2

a=(0..48).map{rand(9)+1}
([0,0,j=8]*3).each{|l|a[j]=a.values_at(*[1,6,7,8].flat_map{|e|[j+e,j-e]}).inject(:+);j+=l+2}
a.map.with_index{|e,i|$><<"%-3s"%e<<(?\nif i%7==6)}

यह 169 अक्षर है। 7 वर्णों को निचोड़ने का एक गोल-गोल तरीका है, लेकिन यह साफ-सुथरा है।

अंतिम मोड़

values_atकॉल निरर्थक की वास्तव में तरह है, और हम एक इनलाइन कर सकते हैं Array#[]कॉल। इसलिए

a.values_at(*[1,6,7,8].flat_map{|e|[j+e,j-e]}).inject(:+)

हो जाता है

[1,6,7,8].flat_map{|e|[a[j+e],a[j-e]]}.inject(:+)

आप यह भी देख सकते हैं flat_map सरणी में प्रारंभिक के साथ + j+e/j-e+ injectअधिक प्रत्यक्ष योग में घटाया जा सकता है 0

इससे आपका साथ छूट जाता है 152 वर्णों के :

a=(0..48).map{rand(9)+1}
([0,0,j=8]*3).each{|l|a[j]=[0,1,6,7,8].inject{|s,e|s+a[j+e]+a[j-e]};j+=l+2}
a.map.with_index{|e,i|$><<"%-3s"%e<<(?\nif i%7==6)}

आखिरकार:

  • map.with_index बन सकता है each_slice
  • मुद्रण दृष्टिकोण बदलें।

135 :

a=(0..48).map{rand(9)+1}
([0,0,j=8]*3).each{|l|a[j]=[0,1,6,7,8].inject{|s,e|s+a[j+e]+a[j-e]};j+=l+2}
a.each_slice(7){|r|puts"%-3s"*7%r}

आप एक बाइट के eachसाथ बदल सकते हैं map
जॉर्डन

3

अजगर, 132

यह नियमों को तकनीकी रूप से संतुष्ट नहीं करता है, क्योंकि प्रत्येक संख्या के अंतिम अंक पहले के बजाय संरेखित होते हैं। लेकिन मुझे लगा कि मैं वैसे भी साझा करूंगा:

import numpy
G=numpy.random.randint(1,10,(7,7))
G[1::2,1::2]=sum(G[i:6+i:2,j:6+j:2]for i in[0,1,2]for j in[0,1,2]if i&j!=1)
print G

नमूना उत्पादन:

[[ 8  9  8  3  8  5  8]
 [ 6 53  4 45  8 53  8]
 [ 8  2  8  1  5  3  8]
 [ 2 40  6 34  1 32  7]
 [ 4  1  9  1  3  3  2]
 [ 4 35  7 35  6 31  1]
 [ 1  7  2  5  2  8  6]]

3

गणितज्ञ, १०hem

s=#-1;;#+1&;g=1+8~RandomInteger~{7,7};Column/@
ReplacePart[g,{i_?EvenQ,j_?EvenQ}:>g〚s@i,s@j〛~Total~2-g〚i,j〛]

परिणाम

Prettier आउटपुट के लिए 2 अक्षरों की लागत से Column/@बदला जा सकता है TableForm@


बहुत, बहुत चालाक। Grid[ReplacePart[ g, {i_?EvenQ, j_?EvenQ} :> g[[s@i, s@j]]~Total~2 - g[[i, j]]]\[Transpose]]एक क्लीनर आउटपुट देता है और यदि आप किसी एकल वर्ण के रूप में ट्रांसपोज़ की गिनती करते हैं, तो कुछ पात्रों को सहेजता है, जो कि यह मैथमैटिका में है। Btw, वुल्फराम के OneLinerSubmission टेम्प्लेट में 106 कैरेक्टर, 105 में से एक कैरेक्टर ट्रांसपोज़ किया गया।
डेविड सीपीसी

@DavidCarraher धन्यवाद चार गिनती अनावश्यक न्यूलाइन और :>एक प्रतीक होने के कारण है , हालांकि यह यूनिकोड के निजी उपयोग क्षेत्र में है। यहां तक ​​कि ट्रांसपोज़ेशन को भी हटाया जा सकता है, क्योंकि ट्रांसपोज़ेशन के बाद भी वैधता समन नियम लागू होता है। लेकिन ऐसा लगता Gridहै कि आगे के विकल्पों (v8) के बिना प्रविष्टियों को संरेखित नहीं किया गया है
ssch

Gridस्तंभों के भीतर संख्याओं को केंद्रित करता है। तकनीकी रूप से, यह चुनौती को पूरा नहीं करेगा, लेकिन यह प्रदर्शित तालिका में सूची प्रदर्शित होने से बेहतर है।
डेविड सीपी

बहुत अच्छा। मैं बस एक ही चीज़ बनाने में काफी समय बिताता हूं, केवल मैं इस्तेमाल करता हूं Partऔर Tuples। जल्द ही पोस्टिंग
श्री। छिपकली

आप इसके साथ दो अक्षर बचा सकते हैं:p=2|4|6;Column/@ReplacePart[g,{i:p,j:p}:>g[[s@i,s@j]]~Total~2-g[[i,j]]]
Mr.Wizard

3

गोल्फस्क्रिप्ट ( 79 78 72 70 68 66 65 60 वर्ण)

56,{13%5<,~9rand)}%9/`{>3<zip`{>3<(*(+(\{+}*or' '}+7,%n}+7,/

NB इसमें एक शाब्दिक टैब होता है, जिसे मार्कडाउन अच्छी तरह से तोड़ सकता है।

गारेथ के कारण चतुर बिट: उसका जे समाधान देखें।

ऑनलाइन डेमो


3

आर: 114 वर्ण

a=array(sample(1:9,49,r=T),c(7,7))
for(i in 2*1:3){for(j in 2*1:3)a[i,j]=sum(a[(i-1):(i+1),(j-1):(j+1)])-a[i,j]}
a

पहली पंक्ति 1 से 9 तक यादृच्छिक रूप से चुनी गई संख्याओं से भरा 7 से 7 सरणी बनाएं (प्रतिस्थापन के साथ एक समान वितरण, r=Tजिसके लिए खड़ा हैreplace=TRUE )। दूसरी पंक्ति, 3 बाय 3 ग्रिड की गणना करें, केंद्र को प्रतिस्थापित करें और परिणाम के साथ बदलें। तीसरी पंक्ति प्रिंट परिणामस्वरूप ग्रिड (डिफ़ॉल्ट रूप से, मैट्रिक्स और सरणी कॉलम सही संरेखित हैं)।

उदाहरण आउटपुट:

     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    8    5    6    4    3    2    2
[2,]    1   37    6   41    7   38    8
[3,]    5    3    3    3    9    4    3
[4,]    4   31    3   41    3   44    9
[5,]    3    5    5    9    6    7    3
[6,]    3   32    2   40    4   37    5
[7,]    8    2    4    1    9    1    2

2

जे, 67 65 बाइट्स

जे में एक भोले और क्रिया समाधान यह कार्य का एक सीधा कार्यान्वयन है।

(+/^:_"2((,&.>/@(<:,],>:)"0)&.>m){0 m}a)(m=.{;~1 3 5)}a=.>:?7 7$9

पहले मैं 1 और 9 के बीच पूर्णांक का 7 x 7 सरणी बनाता हूं। वास्तव में J का? क्रिया अपने तर्क तक संख्या उत्पन्न करती है, यही कारण है कि हमें प्रत्येक तत्व को बढ़ाने की आवश्यकता है,> जे में

a=.>:?7 7$9 
२ 2 5 ४ ४ ५ १
४ ५ ४ १ ६। ९
3 8 3 6 5 3 3
६ 6 ६ ३ ३ 8 १ १
7 7 4 4 5 9 9
2 3 6 5 2 2 9
2 2 6 8 8 1 3

मैं विषम पंक्ति / कॉल कोशिकाओं, विषम पंक्ति / स्तंभ सूचकांकों के जोड़े के शून्यकरण के लिए उपयोग किया जाने वाला मास्क तैयार करता हूं:

m=.{;~1 3 5
┌───┬───┬───┐
│1 1│1 3│1 5│
├───┼───┼───┤
│3 1│3 3│3 5│
├───┼───┼───┤
│5 1│5 3│5 5│
└───┴───┴───┘

कैटलॉग क्रिया {बॉक्स वाली सूची के अंदर परमाणुओं से वस्तुओं को जोड़ती है

┌─────┬─────┐
│1 3 5│1 3 5│
└─────┴─────┘

एक कैटलॉग बनाने के लिए, उपरोक्त जोड़े की 3x3 तालिका

फिर मैं प्रत्येक 3x3 सबरेज़ के चयन के लिए उपयोग की जाने वाली पंक्ति / कॉल सूचकांकों की एक तालिका तैयार करता हूं।

s=.(,&.>/@(<:,],>:)"0)&.>m
┌─────────────┬─────────────┬─────────────┐
│┌─────┬─────┐│┌─────┬─────┐│┌─────┬─────┐│
││0 1 2│0 1 2│││0 1 2│2 3 4│││0 1 2│4 5 6││
│└─────┴─────┘│└─────┴─────┘│└─────┴─────┘│
├─────────────┼─────────────┼─────────────┤
│┌─────┬─────┐│┌─────┬─────┐│┌─────┬─────┐│
││2 3 4│0 1 2│││2 3 4│2 3 4│││2 3 4│4 5 6││
│└─────┴─────┘│└─────┴─────┘│└─────┴─────┘│
├─────────────┼─────────────┼─────────────┤
│┌─────┬─────┐│┌─────┬─────┐│┌─────┬─────┐│
││4 5 6│0 1 2│││4 5 6│2 3 4│││4 5 6│4 5 6││
│└─────┴─────┘│└─────┴─────┘│└─────┴─────┘│
└─────────────┴─────────────┴─────────────┘

एम सरणी में प्रत्येक जोड़ी के लिए मैं ट्रिपल की एक जोड़ी बनाता हूं, जो एम जोड़ी के प्रत्येक नंबर के आसपास केंद्रित होता है:

        ┌─────┬─────┐
 1 3 -> │0 1 2│2 3 4│
        └─────┴─────┘

ट्रिपल के इन जोड़े का उपयोग जे से क्रिया {द्वारा किया जाता है, जो एक साथ कई पंक्तियों और स्तंभों का चयन कर सकता है। 0 1 2/2 3 4 का अर्थ है कि मैं पंक्तियों 2, 3 और 4 के साथ पंक्तियों को मिलाकर 0, 1 और 2 का चयन करता हूं, इस प्रकार शीर्ष पर दूसरी 3x3 सब्रे का चयन करता हूं।

अंत में, मैं कार्य को प्राप्त करने के लिए 7x7 सरणी और मास्क का उपयोग कर सकता हूं: पहले मैं तत्सम तत्वों को 0 पर सेट करने के लिए मास्क के रूप में उपयोग करता हूं:

0 m}a

तब मैं एक चयनकर्ता के रूप में s का उपयोग करके सभी 3x3 सबरेज़ लेता हूँ और उनकी रकम ढूँढता हूँ:

+/^:_"2 s{0 m}a

फिर मैंने इन नंबरों को शुरुआती सरणी में वापस डाल दिया।

 (+/^:_"2 s{0 m}a)m}a 
२ 2 5 ४ ४ ५ १
4 39 4 39 6 36 9
3 8 3 6 5 3 3
६ ४४ ६ ४० 44 ४२ १
7 7 4 4 5 9 9
२ ३६ ६ ४३ २ ४६ ९
2 2 6 8 8 1 3

इसे ऑनलाइन आज़माएं!



1

रूबी, 207

मैं अपना समाधान पहले प्रस्तुत करूंगा (जैसा कि मैं हमेशा करता हूं):

a=Array.new(7){Array.new(7){rand(9)+1}}
s=[-1,0,1]
s=s.product s
s.slice!4
r=[1,3,5]
r.product(r).map{|x|u=0
s.map{|y|u+=a[x[0]+y[0]][x[1]+y[1]]}
a[x[0]][x[1]]=u}
puts a.map{|x|x.map{|y|y.to_s.ljust 3}.join

1

रूबी, 150 वर्ण

v=(a=0..6).map{a.map{rand(9)+1}}
(o=[1,3,5]).map{|i|o.map{|j|v[i][j]=0
(d=[0,-1,1]).map{|r|d.map{|c|v[i][j]+=v[i+r][j+c]}}}}
puts v.map{|r|"%-3d"*7%r}

यदि बाईं औचित्य आवश्यकता औचित्य है तो बस ljust इसका उपयोग करना होगा ... ठीक है, नहीं। मुझे रूबी की प्रारूपण क्षमताएं बहुत पसंद हैं।

उपयोग न करें Array.new(7){...}(0..6).map{...}दोनों छोटे और अधिक पठनीय है और आपको मुफ्त में एक असाइन करने योग्य सीमा मिलती है।

लाइन # 3 Doorknob के समाधान से प्रेरित है ।


1

GolfScript, 87 वर्ण

49,{.1&\7/1&!|9rand)*}%.7/{[..1>@0\+]zip{{+}*}%);}:^%zip{^~}%]zip{.0=!=}%{'  '+3<}%7/n*

वहाँ बहुत सारे ज़िप हैं ... ( ऑनलाइन देखें )

3  9  9  3  3  9  8  
6  46 2  50 3  39 8  
7  3  7  2  4  7  3  
8  33 9  51 8  49 5  
4  3  9  9  3  9  2  
1  45 9  41 6  33 2  
4  3  6  1  6  1  4  

1

जे, 58/64/67 वर्ण

0j_1":(7$0,:7$0 1){"0 1 |:>v;v-~7 7{.0,.0,3+/\"1]3+/\v=.1+?7 7$9

जबकि विनिर्देश को संख्याओं को बाएं-संरेखित करने की आवश्यकता होती है, दशमलव दशमलव का उपयोग करने की कोई आवश्यकता नहीं है, इसलिए मुझे लगता है कि यह मान्य आउटपुट है:

1.0e0 8.0e0 9.0e0 6.0e0 2.0e0 9.0e0 6.0e0
6.0e0 3.9e1 8.0e0 4.0e1 2.0e0 3.8e1 4.0e0
1.0e0 4.0e0 2.0e0 8.0e0 3.0e0 9.0e0 3.0e0
2.0e0 2.4e1 5.0e0 4.1e1 9.0e0 4.7e1 8.0e0
1.0e0 3.0e0 6.0e0 5.0e0 3.0e0 5.0e0 7.0e0
4.0e0 3.0e1 1.0e0 2.3e1 1.0e0 3.1e1 1.0e0
6.0e0 5.0e0 4.0e0 2.0e0 1.0e0 5.0e0 8.0e0

यदि बाएं संरेखण के बजाय दायां संरेखण स्वीकार्य है, तो हम 58 वर्णों पर हैं

(7$0,:7$0 1){"0 1 |:>v;v-~7 7{.0,.0,3+/\"1]3+/\v=.1+?7 7$9

J के ":(प्रारूप) में तीन स्वरूपण मोड हैं:

  • n अंकों के साथ या सिकुड़ते-लपेटने (डिफ़ॉल्ट प्रदर्शन) के साथ दाएं-संरेखित
  • एन-अंकों और मी वर्णों के साथ बाएं-संरेखित वैज्ञानिक संकेतन
  • (बाएं / केंद्र / दाएं) - (ऊपर / मध्य / नीचे) संरेखण (नीचे, 69 वर्ण) के साथ सिकुड़ा हुआ बॉक्स प्रदर्शन

सबसे वर्बोज़ लेकिन साथ ही सबसे अधिक बहुमुखी और केवल एक ही उदाहरण के अनुसार आउटपुट का उत्पादन करने में सक्षम है, 8!:2फॉरमेटिंग फॉरेन, जो एक स्वरूपण स्ट्रिंग को अपने बाएं तर्क के रूप में लेता है। साथ ही 67 अक्षर :

'l3.'8!:2(7$0,:7$0 1){"0 1 |:>v;v-~7 7{.0,.0,3+/\"1]3+/\v=.1+?7 7$9

यहाँ बॉक्सिंग प्रारूप है:

 0 0":<"0(7$0,:7$0 1){"0 1 |:>v;v-~7 7{.0,.0,3+/\"1]3+/\v=.1+?7 7$9

 ┌─┬──┬─┬──┬─┬──┬─┐
 │2│6 │5│7 │5│7 │6│
 ├─┼──┼─┼──┼─┼──┼─┤
 │8│40│4│35│9│49│6│
 ├─┼──┼─┼──┼─┼──┼─┤ 
 │6│7 │2│2 │1│9 │6│
 ├─┼──┼─┼──┼─┼──┼─┤
 │8│41│9│35│3│45│7│
 ├─┼──┼─┼──┼─┼──┼─┤
 │3│1 │5│6 │7│8 │4│
 ├─┼──┼─┼──┼─┼──┼─┤
 │7│37│4│45│6│48│8│
 ├─┼──┼─┼──┼─┼──┼─┤
 │8│4 │5│4 │8│1 │6│
 └─┴──┴─┴──┴─┴──┴─┘

1

पर्ल, 117 वर्ण

print$_,++$j%7?$":$/for map{++$i/7&$i%7&1?
eval join"+",@x[map{$i+$_,$i-$_}1,6,7,8]:" $_"}@x=map{1+int rand 9}$i--..48

यह उन पर्ल स्क्रिप्ट्स में से एक है, जहां सभी लूप के लिए एक को ढहा दिया गया है map कॉल है ताकि सब कुछ एक ही स्टेटमेंट में किया जा सके। ग्लोबल वैरिएबल्स भी इसमें कुछ महत्वपूर्ण दिखावे के हैं। मुझे लगता है कि मैं यहाँ क्या कहना चाह रहा हूँ, यह कार्यक्रम थोड़ा स्थूल है।

रुको, यह बदतर हो जाता है: स्क्रिप्ट में एक ज्ञात बग है! यह शुरू होने का एक-दस लाख से कम मौका है, हालांकि, इसलिए मैंने इसे ठीक करने के लिए आस-पास नहीं देखा है।


हम पर पकड़ मत करो, क्या बग है?

बोनस पहले व्यक्ति को इंगित करता है जो इसे स्पॉट करता है!
ब्रेडबॉक्स

1

गणितज्ञ , १०६ / १००

मैं इसे देखने से पहले ssch के कोड के साथ कुछ समान था। मैं उपयोग करने के उनके विचार को उधार ले रहा हूं Column। केवल ASCII के साथ, 106 :

s=#-1;;#+1&
a=8~RandomInteger~{7,7}+1
a[[##]]=a[[s@#,s@#2]]~Total~2-a[[##]];&@@@{2,4,6}~Tuples~2
Column/@a

यूनिकोड वर्ण (ssch द्वारा प्रयुक्त) के साथ, 100 :

s=#-1;;#+1&
a=8~RandomInteger~{7,7}+1
a〚##〛=a〚s@#,s@#2〛~Total~2-a〚##〛;&@@@{2,4,6}~Tuples~2
Column/@a

1

एक्सेल VBA, 74 बाइट्स

VBE तत्काल फ़ंक्शन जो कि आउटपुट करता है [B2:H9]

[B2:H9]="=IF(ISODD(ROW()*COLUMN()),SUM(A1:C1,A2,C2,A3:C3),INT(RAND()*8)+1)

नमूना आउटपुट

यहां छवि विवरण दर्ज करें


1

पॉवर्सशेल, 149 148 बाइट्स

-1 बाइट @AdmBorkBork के लिए धन्यवाद। यह बढ़ीया है!

$i=-1
($a=(,1*8+0,1*3)*3+,1*7|%{$_*(1+(Random 9))})|?{++$i;!$_}|%{6..8+1|%{$_,-$_}|%{$a[$i]+=$a[$i+$_]}}
-join($a|%{if(!(++$i%7)){"
"};'{0,3}'-f$_})

स्पष्टीकरण:

$i=-1                       # let $i store -1
($a=                        # let $a is array of random numbers with zero holes
    (,1*8+0,1*3)*3+,1*7|    # the one-dimension array equals
                            # 1 1 1 1 1 1 1
                            # 1 0 1 0 1 0 1
                            # 1 1 1 1 1 1 1
                            # 1 0 1 0 1 0 1
                            # 1 1 1 1 1 1 1
                            # 1 0 1 0 1 0 1
                            # 1 1 1 1 1 1 1
    %{                      # for each element
        $_*(1+(Random 9))   # multiply 0 or 1 element to random digit from 1 to 9
    }                       # now $a stores values like (* is a random digit from 1 to 9)
                            # * * * * * * *
                            # * 0 * 0 * 0 *
                            # * * * * * * *
                            # * 0 * 0 * 0 *
                            # * * * * * * *
                            # * 0 * 0 * 0 *
                            # * * * * * * *
)|?{++$i;!$_                # calc index $i and passthru values == 0 only
}|%{                        # for each zero value cell with index $i
    6..8+1|%{               # offsets for the surrounding cells
                            #  .  .  .
                            #  .  x +1
                            # +6 +7 +8  
        $_,-$_              # add the mirror offsets 
                            # -8 -7 -6
                            # -1  x +1
                            # +6 +7 +8  
    }|%{                    # for each offset 
        $a[$i]+=$a[$i+$_]   # add surrounding values to the cell
    }
}
                            # display the $a
-join(
    $a|%{                   # for each value of $a
        if(!(++$i%7)){"`n"} # line break for each 7 cells
        '{0,3}'-f$_         # formatted value of $a with width = 3 char and align right
    }
)                           # join all values to string

1
आप एक बाइट (एक नई लाइन) से छुटकारा पा सकते हैं, अपने $aकाम को ($a=(,1*8+0,1*3)*3+,1*7|%{$_*(1+(Random 9))})|?{++$i;!$_}|%{6..8+1|%{$_,-$_}|%{$a[$i]+=$a[$i+$_]}}
पार्न्स में एनकैप

यह काम नहीं करता है। सरणी को पहले पूरी तरह से आबाद किया जाना चाहिए $a[$i+$_]। तो यहाँ दो चरण हैं। मेरे पास एक पाइप में घुसने के कई प्रयास थे। :)
mazzy

1
यह काम नहीं करता है यदि आप असाइनमेंट के चारों ओर मुर्गियाँ नहीं रखते हैं। के साथ ($a=(,1*8+0,1*3)*3+,1*7|%{$_*(1+(Random 9))}), $aअगले पाइपलाइन उदाहरण से पहले पूरी तरह से आबादी है। यह काम करना चाहिए (कम से कम, यह मेरे लिए करता है)।
AdmBorkBork

0

गणितज्ञ 142 151 172 179

कोड

z = (m = RandomInteger[{1, 9}, {7, 7}]; s = SparseArray; o = OddQ; e = EvenQ; i = {1, 1, 1};
(m + ArrayPad[ListCorrelate[{i, i, i}, m] s[{{i_, j_} /; o@i \[And] o@j -> 1}, {5, 5}], 1]
- 2 m s[{{i_, j_} /; e@i \[And] e@j -> 1}, {7, 7}]) // Grid)

प्रयोग

z

M8


आपके पास है 0; नियम 1-9 कहते हैं कि
दरवाज़े

धन्यवाद। मैंने डेटा और पिक्स को सही किया। कार्य अपरिवर्तित रहते हैं।
डेविड

साथ ही, प्रश्न में निर्दिष्ट संख्याओं को संरेखित नहीं किया गया है।
Doorknob

गणितज्ञ की शब्दावलियाँ (या, अधिक सटीक रूप से, बड़े शब्दों का उपयोग करने की जिद) स्पष्ट हो जाती हैं।
डेविड

0

जूलिया 0.6 , 127 (89) बाइट्स

x=rand(1:9,7,7);[x[i,j]=sum(!(0==k==l)*x[i+k,j+l]for k=-1:1,l=-1:1)for i=2:2:7,j=2:2:7]
Base.showarray(STDOUT,x,1<1;header=1<1)

इसे ऑनलाइन आज़माएं!

89 बाइट्स मूल प्रदर्शन का उपयोग करके, जो स्वीकार्य हो सकती है यदि अतिरिक्त लाइनें मुद्रित की जा सकती हैं:

7×7 Array{Int64,2}:
6   6  8   2  3   2  3
7  44  5  33  4  23  5
3   8  1   9  1   3  2
4  41  2  37  5  22  2
7   8  8   8  3   4  2
9  53  6  44  7  36  3
7   7  1   9  2   6  9

0

जावा 10, 262 260 248 239 बाइट्स

v->{int a[][]=new int[7][7],i=49,j,k;for(;i-->0;)a[i/7][i%7]+=Math.random()*9+1;var r="";for(;++i<7;r+="\n")for(j=0;j<7;r+=(k=a[i][j])>9|j++%2<1?k+" ":k+"  ")if(i*j%2>0)for(a[i][j]=k=0;k<9;k++)a[i][j]+=k!=4?a[i+k/3-1][j+k%3-1]:0;return r;}

-12 बाइट्स @ceilingcat की बदौलत

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

v->{                        // Method with empty unused parameter and String return-type
  int a[][]=new int[7][7],  //  Integer-matrix with 7x7 zeroes
      i=49,j,k;             //  Index integers (`i` starting at 49)
  for(;i-->0;)              //  Loop `i` in the range (49, 0]:
    a[i/7][j%7]+=Math.random()*9+1;
                            //   Fill the current cell with a random 1..9 integer
  var r="";                 //  Result-String, starting empty
  for(;++i<7;               //  Loop `i` in the range [0, 7):
      r+="\n")              //    After every iteration: append a new-line to the result
    for(j=0;j<7;            //   Inner loop `j` in the range [0, 7):
        r+=                 //     After every iteration: append the result-String with:
           (k=a[i][j])>9    //      If the current number has 2 digits,
           |j++%2<1?        //      or it's an even column (indices 0/2/4/6)
            k+" "           //       Append the current number appended with one space
           :                //      Else:
            k+"  ")         //       Append the current number appended with two spaces
      if(i*j%2>1)           //    If both indexes `i` and `j` are odd
        for(a[i][j]=k=0;    //     Reset both the current item and index `k` to 0
            k<9;k++)        //     Inner loop `k` in the range [0, 9):
          a[i][j]+=         //      Sum the item at location `i,j` with:
           k!=4?            //       If `k` is not 4 (the current item itself)
            a[i+k/3-1][j+k%3-1]
                            //        Sum it with the numbers surrounding it
           :                //       Else:
            0;              //        Leave it the same by adding 0
  return r;}                //  Return the result-String

@ceilingcat धन्यवाद! और मैं के साथ कुछ और बाइट्स को बचाने के लिए कर लिया है varके बजाय Stringऔर +=Math.random()*9+1;के बजाय =(int)(Math.random()*9+1);। यह वास्तव में आपके लिए मेरे सभी पुराने उत्तरों को देखने के लिए बहुत उपयोगी है, हाहा! : डी
केविन क्रूज़सेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.