सभी एकल आठ


24

से पूर्णांकों का एक गैर खाली आयताकार सरणी को देखते हुए 0करने के लिए 9कोशिकाओं है कि कर रहे हैं की राशि, उत्पादन 8और एक पड़ोसी है कि नहीं है 8। यहां पड़ोसी को मूर अर्थ में समझा जाता है , अर्थात् विकर्ण सहित। तो प्रत्येक कोशिका में 8पड़ोसी होते हैं, सरणी के किनारों पर कोशिकाओं को छोड़कर।

उदाहरण के लिए, इनपुट दिया गया

8 4 5 6 5
9 3 8 4 8
0 8 6 1 5
6 7 9 8 2
8 8 7 4 2

उत्पादन होना चाहिए 3। तीन अर्हकारी कोशिकाएँ निम्नलिखित होंगी, जिन्हें एक तारांकन चिह्न के साथ चिह्नित किया गया है (लेकिन केवल ऐसी प्रविष्टियों की मात्रा आउटपुट होनी चाहिए):

* 4 5 6 5
9 3 8 4 *
0 8 6 1 5
6 7 9 * 2
8 8 7 4 2

अतिरिक्त नियम

परीक्षण के मामलों

  1. इनपुट:

    8 4 5 6 5
    9 3 8 4 8
    0 8 6 1 5
    6 7 9 8 2
    8 8 7 4 2
    

    आउटपुट: 3

  2. इनपुट

    8 8
    2 3
    

    आउटपुट: 0

  3. इनपुट:

    5 3 4
    2 5 2
    

    आउटपुट: 0

  4. इनपुट:

    5 8 3 8
    

    आउटपुट: 2

  5. इनपुट:

    8
    0
    8
    

    आउटपुट: 2

  6. इनपुट:

    4 2 8 5
    2 6 1 8
    8 5 5 8
    

    आउटपुट: 1

  7. इनपुट:

    4 5 4 3 8 1 8 2
    8 2 7 7 8 3 9 3
    9 8 7 8 5 4 2 8
    4 5 0 2 1 8 6 9
    1 5 4 3 4 5 6 1
    

    आउटपुट 3

  8. इनपुट:

    8
    

    आउटपुट: 1

  9. इनपुट:

    8 5 8 1 6 8 7 7
    9 9 2 8 2 7 8 3
    2 8 4 9 7 3 2 7
    9 2 9 7 1 9 5 6
    6 9 8 7 3 1 5 2
    1 9 9 7 1 8 8 2
    3 5 6 8 1 4 7 5
    

    आउटपुट: 4

  10. इनपुट:

    8 1 8
    2 5 7
    8 0 1
    

    आउटपुट: 3

MATLAB प्रारूप में इनपुट:

[8 4 5 6 5; 9 3 8 4 8; 0 8 6 1 5; 6 7 9 8 2; 8 8 7 4 2]
[8 8; 2 3]
[5 3 4; 2 5 2]
[5 8 3 8]
[8; 0; 8]
[4 2 8 5; 2 6 1 8; 8 5 5 8]
[4 5 4 3 8 1 8 2; 8 2 7 7 8 3 9 3; 9 8 7 8 5 4 2 8; 4 5 0 2 1 8 6 9; 1 5 4 3 4 5 6 1]
[8]
[8 5 8 1 6 8 7 7; 9 9 2 8 2 7 8 3; 2 8 4 9 7 3 2 7; 9 2 9 7 1 9 5 6; 6 9 8 7 3 1 5 2; 1 9 9 7 1 8 8 2; 3 5 6 8 1 4 7 5]
[8 1 8; 2 5 7; 8 0 1]

पायथन प्रारूप में इनपुट:

[[8, 4, 5, 6, 5], [9, 3, 8, 4, 8], [0, 8, 6, 1, 5], [6, 7, 9, 8, 2], [8, 8, 7, 4, 2]]
[[8, 8], [2, 3]]
[[5, 3, 4], [2, 5, 2]]
[[5, 8, 3, 8]]
[[8], [0], [8]]
[[4, 2, 8, 5], [2, 6, 1, 8], [8, 5, 5, 8]]
[[4, 5, 4, 3, 8, 1, 8, 2], [8, 2, 7, 7, 8, 3, 9, 3], [9, 8, 7, 8, 5, 4, 2, 8], [4, 5, 0, 2, 1, 8, 6, 9], [1, 5, 4, 3, 4, 5, 6, 1]]
[[8]]
[[8, 5, 8, 1, 6, 8, 7, 7], [9, 9, 2, 8, 2, 7, 8, 3], [2, 8, 4, 9, 7, 3, 2, 7], [9, 2, 9, 7, 1, 9, 5, 6], [6, 9, 8, 7, 3, 1, 5, 2], [1, 9, 9, 7, 1, 8, 8, 2], [3, 5, 6, 8, 1, 4, 7, 5]]
[[8, 1, 8], [2, 5, 7], [8, 0, 1]]

आउटपुट:

3, 0, 0, 2, 2, 1, 3, 1, 4, 3

17
यदि आप इसे पसंद करते हैं तो आपको इस पर एक वोट डालना चाहिए था
लुइस मेंडो

जब मैंने "कोशिकाओं को बराबर 8" पढ़ा, तो एक पल के लिए मुझे लगा कि आपका मतलब ग्रिड से 1x1 चक (NxN) से बड़ा हो सकता है। शायद कोई गणित की आवश्यकता को स्पष्ट करने के लिए "कोशिकाओं कि 8 हैं" rephrase चाहिए। = पी
तेजा

@Tezra संपादित मुझे नया शब्द थोड़ा कम स्वाभाविक लगता है, लेकिन मैं एक देशी वक्ता नहीं हूं इसलिए मैं आपकी कसौटी पर भरोसा करूंगा
लुइस मेंडू

जवाबों:


2

MATL , 21 17 10 बाइट्स

8=t3Y6Z+>z

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

चैट में मदद के लिए लुइस मेंडो का धन्यवाद, और 2 डी कन्वेंशन का सुझाव देने के लिए।

स्पष्टीकरण:

	#implicit input, m
8=	#equal to 8? matrix of 1 where m is 8, 0 otherwise
t	#duplicate
3Y6	#push [1 1 1; 1 0 1; 1 1 1], "neighbor cells" for convolution
Z+	#2D convolution; each element is replaced by the number of neighbors that are 8
>	#elementwise greater than -- matrix of 1s where an 8 is single, 0s otherwise
z	#number of nonzero elements -- number of single eights
	#implicit output

आप (2 डी-) कनवल्शन का उपयोग करके काफी कुछ बाइट्स बचा सकते हैं, अगर आप इस अवधारणा के साथ प्रसिद्ध हैं
लुइस

1
@LuisMendo 2D कनवल्लुशन उन चीजों में से एक है जहाँ मुझे 1D कनवल्शन की समझ नहीं है, इसलिए मेरे लिए वहाँ कोई उम्मीद नहीं है ... दोनों को सीखने का अवसर जैसा लगता है!
ग्यूसेप

1
अगर आपको उस चैट रूम में मेरी मदद करने की आवश्यकता है। कन्वेंशन एक बहुत उपयोगी ऑपरेशन है। यदि आप कनवल्शन सीखना चाहते हैं तो 1 डी से शुरुआत करें। 2 डी का सामान्यीकरण तत्काल है
लुइस मेंडो

9

आर , 117 63 59 बाइट्स

function(m)sum(colSums(as.matrix(dist(which(m==8,T)))<2)<2)

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

distएक मैट्रिक्स की पंक्तियों के बीच दूरी की गणना (डिफ़ॉल्ट यूक्लिडियन है)। whichदूसरे तर्क के साथ TRUEनिर्देशांक लौटाता है जहाँ विधेय सत्य है।

निर्देशांक पड़ोसी हैं यदि उनके बीच की दूरी 2 के वर्गमूल से अधिक नहीं है, लेकिन आंतरिक <2पर्याप्त अच्छा है क्योंकि संभव दूरी sqrt(2)आरओ से कूदती है 2


यह एक शर्म की बात है कि संख्यात्मक खराबी colSums()^2<=2काम करने की अनुमति नहीं देती है।
Giuseppe

@Giuseppe बेशक वहाँ कुछ ही संभव दूरी और sqrt(2)कूदता है 2(जैसे sort(c(dist(expand.grid(1:6,1:6))), decreasing = TRUE))) इसलिए हम वहाँ बहुत चालाक थे।
एनएमसी

7

APL (Dyalog Classic) , 29 28 25 बाइट्स

≢∘⍸16=2⊥¨3,⌿3,/8=(⍉0,⌽)⍣4

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


नोट: 0 इंडेक्स उत्पत्ति की भी आवश्यकता नहीं है।
ज़ाचारि

@ Zacharý मैं हमेशा आश्चर्य से बचने के लिए इसे एक डिफ़ॉल्ट के रूप में उपयोग करता हूं।
ngn

आह, दूसरों के साथ की तरह 1(स्पष्ट रूप से सेट नहीं छोड़कर) यह समझ आता है।
20

आश्चर्य यह स्टेंसिल का उपयोग नहीं करता है। क्या ऐसा कुछ है जो स्टेंसिल को असुविधाजनक बनाता है?
lirtosiast

@lirtosiast यह अभी इसके साथ है :)
ngn

5

जेली , 18 15 बाइट्स

8=µ+Ż+ḊZµ⁺ỊṖḋµS

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

यह काम किस प्रकार करता है

8=µ+Ż+ḊZµ⁺ỊṖḋµS    Main link (monad). Input: digit matrix
8=              1) Convert elements by `x == 8`
  µ             2) New chain:
   +Ż+Ḋ              x + [0,*x] + x[1:] (missing elements are considered 0)
                     Effectively, vertical convolution with [1,1,1]
       Z             Transpose
        µ⁺      3) Start new chain, apply 2) again
          ỊṖ       Convert elements by `|x| <= 1` and remove last row
            ḋ      Row-wise dot product with result of 1)
             µS 4) Sum

पिछला समाधान, 18 बाइट्स

æc7B¤ZḊṖ
8=µÇÇỊḋµS

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

एक और दृष्टिकोण साझा करना चाहता था, हालांकि यह जोनाथन एलन के समाधान से 1 बाइट लंबा है ।

यह काम किस प्रकार करता है

æc7B¤ZḊṖ    Auxiliary link (monad). Input: integer matrix
æc7B¤       Convolution with [1,1,1] on each row
     ZḊṖ    Zip (transpose), remove first and last elements

8=µÇÇỊḋµS    Main link (monad). Input: digit matrix
8=           Convert 8 to 1, anything else to 0 (*A)
  怀        Apply aux.link twice (effective convolution with [[1,1,1]]*3)
     Ịḋ      Convert to |x|<=1, then row-wise dot product with A
       µS    Sum the result


4

जे , 43, 40 37 बाइट्स

-3 बाइट्स बब्बलर को धन्यवाद

1#.1#.3 3(16=8#.@:=,);._3(0|:@,|.)^:4

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

स्पष्टीकरण:

एल्गोरिथ्म का पहला भाग आश्वासन देता है कि हम एक 3x3 स्लाइडिंग विंडो को उसके इनपुट पर लागू कर सकते हैं। यह शून्य और 90 डिग्री रोटेशन की एक पंक्ति को तैयार करके प्राप्त किया जाता है, 4 बार दोहराया जाता है।

1#.1#.3 3(16=8#.@:=,);._3(0|:@,|.)^:4
                         (       )^:4 - repeat 4 times
                          0|:@,|.     - reverse, prepend wit a row of 0 and transpose
                     ;._3             - cut the input (already outlined with zeroes)
      3 3                             - into matrices with size 3x3
         (          )                 - and for each matrix do
                   ,                  - ravel (flatten)
             8    =                   - check if each item equals 8
              #.@:                    - and convert the list of 1s and 0s to a decimal
          16=                         - is equal to 16?
   1#.                                - add (the result has the shape of the input)
1#.                                   - add again

1
37 बाइट्स का उपयोग करना @:और बढ़ना|. । ध्यान दें कि @जगह में की @:काम नहीं करता।
बब्बलर

@ बब्बर धन्यवाद!
गैलेन इवानोव

यह अच्छा है। शायद यह कम से कम एक उच्च स्तरीय व्याख्या जोड़ने के लायक है कि यह कैसे काम करता है, अगर कोड टूटने नहीं। मुझे यह पता लगाने के लिए 10 मी या तो लग गया। इसके अलावा, यह दिलचस्प है कि एपीएल संस्करण (जो एक ही दृष्टिकोण का उपयोग करता है) कितना छोटा है। लगता है कि ज्यादातर एकल चर प्रतीकों के बजाय डिग्राफ का परिणाम है ...
जोनाह

@ जोना मैं एक स्पष्टीकरण जोड़ दूंगा। APL के साथ तुलना करने के लिए आप ngn's solution के संशोधन देख सकते हैं , विशेष रूप से 28 बाइट संस्करण
Galen Ivanov

1
@ जोना स्पष्टीकरण में कहा गया है
गैलेन इवानोव

3

रेटिना 0.8.2 , 84 बाइट्स

.+
_$&_
m`(?<!(?(1).)^(?<-1>.)*.?.?8.*¶(.)*.|8)8(?!8|.(.)*¶.*8.?.?(?<-2>.)*$(?(2).))

इसे ऑनलाइन आज़माएं! स्पष्टीकरण:

.+
_$&_

प्रत्येक पंक्ति को गैर- 8वर्णों में लपेटें ताकि सभी के 8प्रत्येक पक्ष में कम से कम एक वर्ण हो।

m`

यह अंतिम चरण है, इसलिए मतगणना मैच निहित है। mसंशोधक बनाता है ^और $पात्रों शुरू या किसी पंक्ति के अंत में मेल खाते हैं।

(?<!...|8)

एक 8, या के बाद एक चरित्र से सीधे मेल न करें ...

(?(1).)^(?<-1>.)*.?.?8.*¶(.)*.

... एक वर्ण 8 से नीचे; अगली पंक्ति (?(1).)^(?<-1>.)*के समान कॉलम से मेल खाता है ¶(.)*, लेकिन अगली पंक्ति पर वर्ण के 1 बाएं या दाएं होने की .?.?अनुमति देता है ।8.

8

मैच 8एस।

(?!8|...)

एक 8 से पहले एक 8 मैच मत करो, या ...

.(.)*¶.*8.?.?(?<-2>.)*$(?(2).)

... नीचे पंक्ति में एक 8 के साथ एक चरित्र; फिर से, (?<-2>.)*$(?(2).)के रूप में एक ही स्तंभ से मेल खाता है (.)*¶पिछले लाइन पर है, लेकिन .?.?अनुमति देता है 81 जा छोड़ दिया करने के लिए या के अधिकार 8से पहले .पिछले लाइन पर।


3

जेली , 17 बाइट्स

=8ŒṪµŒcZIỊȦƲƇẎ⁸ḟL

इसे ऑनलाइन आज़माएं! या परीक्षण-सूट देखें

कैसे?

=8ŒṪµŒcZIỊȦƲƇẎ⁸ḟL - Link: list of lists of integers (digits)
=8                - equals 8?
  ŒṪ              - multidimensional truthy indices (pairs of row & column indices of 8s)
    µ             - start a new monadic chain
     Œc           - all pairs (of the index-pairs) 
            Ƈ     - filter keep if:  (keep those that represent adjacent positions)
           Ʋ      -   last four links as a monad:
       Z          -     transpose
        I         -     incremental differences
         Ị        -     insignificant? (abs(x) <= 1)
          Ȧ       -     all?
             Ẏ    - tighten (to a list of all adjacent 8's index-pairs, at least once each)
              ⁸   - chain's left argument (all the index-pairs again)
               ḟ  - filter discard (remove those found to be adjacent to another)
                L - length (of the remaining pairs of indices of single 8s)

3

जे, 42 बाइट्स

[:+/@,8=]+[:+/(<:3 3#:4-.~i.9)|.!.0(_*8&=)

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

व्याख्या

यहां उच्च-स्तरीय दृष्टिकोण क्लासिक एपीएल समाधान में उपयोग किए जाने वाले खेल के समान है: https://www.youtube.com/watch?v=a9xAKttWgP4

उस समाधान में, हम अपने मैट्रिक्स को 8 संभावित पड़ोसी दिशाओं में स्थानांतरित करते हैं, इनपुट के 8 डुप्लिकेट बनाते हैं, उन्हें ढेर करते हैं, और फिर हमारे पड़ोसी की गिनती प्राप्त करने के लिए "विमानों" को एक साथ जोड़ते हैं।

यहां, हम इस समस्या के समाधान को अनुकूलित करने के लिए "इनफिनिटी द्वारा गुणा" ट्रिक का उपयोग करते हैं।

[: +/@, 8 = ] + [: +/ (neighbor deltas) (|.!.0) _ * 8&= NB. 
                                                        NB.
[: +/@,                                                 NB. the sum after flattening
        8 =                                             NB. a 0 1 matrix created by
                                                        NB. elmwise testing if 8
                                                        NB. equals the matrix
            (the matrix to test for equality with 8   ) NB. defined by...
            ] +                                         NB. the original input plus
                [: +/                                   NB. the elmwise sum of 8
                                                        NB. matrices defined by
                                                _ *     NB. the elmwise product of 
                                                        NB. infinity and
                                                    8&= NB. the matrix which is 1
                                                        NB. where the input is 8
                                                        NB. and 0 elsewhere, thus
                                                        NB. creating an infinity-0
                                                        NB. matrix
                                        (|.!.0)         NB. then 2d shifting that 
                                                        NB. matrix in the 8 possible
                                                        NB. "neighbor" directions
                      (neighbor deltas)                 NB. defined by the "neighbor
                                                        NB. deltas" (see below)
                                                        NB. QED.
                                                        NB. ***********************
                                                        NB. The rest of the
                                                        NB. explanation merely
                                                        NB. breaks down the neighbor
                                                        NB. delta construction.


                      (neighbor deltas  )               NB. the neighbor deltas are
                                                        NB. merely the cross product
                                                        NB. of _1 0 1 with itself,
                                                        NB. minus "0 0"
                      (<: 3 3 #: 4 -.~ i.9)             NB. to create that...
                       <:                               NB. subtract one from
                          3 3 #:                        NB. the base 3 rep of
                                       i.9              NB. the numbers 0 - 8
                                 4 -.~                  NB. minus the number 4
                                                        NB.
                                                        NB. All of which produces
                                                        NB. the eight "neighbor"
                                                        NB. deltas:
                                                        NB. 
                                                        NB.       _1 _1
                                                        NB.       _1  0
                                                        NB.       _1  1
                                                        NB.        0 _1
                                                        NB.        0  1
                                                        NB.        1 _1
                                                        NB.        1  0
                                                        NB.        1  1

1
आप के बीच एक स्थान को दूर करने के लिए भूल गए हैं~>
Galen Ivanov

@GalenIvanov अब फिक्स्ड। धन्यवाद।
जोनाह

3

जावा 8, 181 157 156 बाइट्स

(M,R,C)->{int z=0,c,f,t;for(;R-->0;)for(c=C;c-->0;z+=f>1?0:f)for(f=0,t=9;M[R][c]==8&t-->0;)try{f+=M[R+t/3-1][c+t%3-1]==8?1:0;}catch(Exception e){}return z;}

-24 बाइट्स @ OlivierGrégoire को धन्यवाद ।

आयामों को अतिरिक्त मापदंडों R(पंक्तियों की मात्रा) और C(स्तंभों की मात्रा ) के रूप में लेता है ।

कोशिकाओं को काफी समान रूप से जांचा जाता है जैसा कि मैंने अपने फ्रायर सिम्युलेटर उत्तर में किया था ।

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

स्पष्टीकरण:

(M,R,C)->{                    // Method with integer-matrix as parameter & integer return
  int z=0,                    //  Result-counter, starting at 0
      c,f,t;                  //  Temp-integers, starting uninitialized
  for(;R-->0;)                //  Loop over the rows:
    for(c=C;c-->0             //   Inner loop over the columns:
           ;                  //     After every iteration:
            z+=f==1?          //      If the flag-integer is larger than 1:
                0             //       Leave the result-counter the same by adding 0
               :              //      Else:
                f)            //       Add the flag-integer (either 0 or 1)
      for(f=0,                //    Reset the flag to 0
          t=9;M[R][c]==8&     //    If the current cell contains an 8:
              t-->0;)         //     Inner loop `t` in the range (9, 0]:
        try{f+=               //      Increase the flag by:
               M[R+t/3-1]     //       If `t` is 0, 1, or 2: Look at the previous row
                              //       Else-if `t` is 6, 7, or 8: Look at the next row
                              //       Else (`t` is 3, 4, or 5): Look at the current row
                [c+t%3-1]     //       If `t` is 0, 3, or 6: Look at the previous column
                              //       Else-if `t` is 2, 5, or 8: Look at the next column
                              //       Else (`t` is 1, 4, or 7): Look at the current column
                ==8?          //       And if the digit in this cell is 8:
                 1            //        Increase the flag-integer by 1
                :0;           //       Else: leave it the same
        }catch(Exception e){} //      Catch and ignore ArrayIndexOutOfBoundsExceptions
                              //      (try-catch saves bytes in comparison to if-checks)
  return z;}                  //  And finally return the counter


2

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

param($a)(($b='='*4*($l=($a|% Le*)[0]))+($a|%{"!$_!"})+$b|sls "(?<=[^8]{3}.{$l}[^8])8(?=[^8].{$l}[^8]{3})" -a|% m*).Count

कम गोल्फ परीक्षण स्क्रिप्ट:

$f = {

param($a)

$length=($a|% Length)[0]
$border='='*4*$length
$pattern="(?<=[^8]{3}.{$length}[^8])8(?=[^8].{$length}[^8]{3})"
$matches=$border+($a|%{"!$_!"})+$border |sls $pattern -a|% Matches
$matches.count

}

@(

,(3,"84565","93848","08615","67982","88742")
,(0,"88","23")
,(0,"534","252")
,(2,"5838")
,(2,"8","0","8")
,(1,"4285","2618","8558")
,(3,"45438182","82778393","98785428","45021869","15434561")
,(1,"8")
,(4,"85816877","99282783","28497327","92971956","69873152","19971882","35681475")
,(3,"818","257","801")
,(0,"")

) | % {
    $expected,$a = $_
    $result = &$f $a
    "$($result-eq$expected): $result : $a"
}

आउटपुट:

True: 3 : 84565 93848 08615 67982 88742
True: 0 : 88 23
True: 0 : 534 252
True: 2 : 5838
True: 2 : 8 0 8
True: 1 : 4285 2618 8558
True: 3 : 45438182 82778393 98785428 45021869 15434561
True: 1 : 8
True: 4 : 85816877 99282783 28497327 92971956 69873152 19971882 35681475
True: 3 : 818 257 801
True: 0 : 

स्पष्टीकरण:

सबसे पहले, स्क्रिप्ट पहले स्ट्रिंग की लंबाई की गणना करती है।

दूसरा, यह स्ट्रिंग्स में अतिरिक्त सीमा जोड़ता है। संवर्धित वास्तविकता स्ट्रिंग पसंद करता है:

....=========!84565! !93848! !08615! !67982! !88742!===========....

बहुस्तरीय स्ट्रिंग का प्रतिनिधित्व करता है:

...=====
=======
!84565!
!93848!
!08615!
!67982!
!88742!
=======
========...

नोट 1: की संख्या =किसी भी लम्बाई की स्ट्रिंग के लिए पर्याप्त है।

नोट 2: बड़ी संख्या में =आठ की खोज को प्रभावित नहीं करता है।

अगला, नियमित अभिव्यक्ति पूर्ववर्ती गैर-आठ और निम्नलिखित गैर-आठ के साथ (?<=[^8]{3}.{$l}[^8])8(?=[^8].{$l}[^8]{3})अंक की तलाश 8करता है :(?<=[^8]{3}.{$l}[^8])(?=[^8].{$l}[^8]{3})

.......
<<<....
<8>....
>>>....
.......

अंत में, मैचों की संख्या एक परिणाम के रूप में वापस आ जाती है।


2

जेली , 12 बाइट्स

œẹ8ạṀ¥þ`’Ạ€S

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

यह काम किस प्रकार करता है

œẹ8ạṀ¥þ`’Ạ€S  Main link. Argument: M (matrix)

œẹ8           Find all multidimensional indices of 8, yielding an array A of pairs.
      þ`      Table self; for all pairs [i, j] and [k, l] in A, call the link to the
              left. Return the results as a matrix.
   ạ              Absolute difference; yield [|i - k|, |j - l|].
    Ṁ             Take the maximum.
        ’     Decrement all the maxmima, mapping 1 to 0.
         Ạ€   All each; yield 1 for each row that contains no zeroes.
           S  Take the sum.

1

जावास्क्रिप्ट (ईएस 6), 106 बाइट्स

a=>a.map((r,y)=>r.map((v,x)=>k+=v==8&[...'12221000'].every((d,i,v)=>(a[y+~-d]||0)[x+~-v[i+2&7]]^8)),k=0)|k

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


बिटवाइज़ दृष्टिकोण, 110 बाइट्स

a=>a.map(r=>r.map(v=>x=x*2|v==8,x=k=0)|x).map((n,y,b)=>a[0].map((_,x)=>(n^1<<x|b[y-1]|b[y+1])*2>>x&7||k++))&&k

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


बिटवाइज़ का दृष्टिकोण विफल रहता है[[7]]
l4m2

@ lm42 ओह, धन्यवाद। अब तय हो गया।
अरनुलद

1

क्लोजर , 227 198 बाइट्स

(fn[t w h](let[c #(for[y(range %3 %4)x(range % %2)][x y])e #(= 8(get-in t(reverse %)0))m(fn[[o p]](count(filter e(c(dec o)(+ o 2)(dec p)(+ p 2)))))](count(filter #(= 1(m %))(filter e(c 0 w 0 h))))))

आउच। निश्चित रूप से किसी भी तरह से यहां सबसे छोटा नहीं है। कोष्ठक के 54 बाइट्स हत्यारा है। मैं हालांकि इसके साथ अपेक्षाकृत खुश हूं।

-29 बाइट्स एक हेल्पर फंक्शन बनाकर, जो एक सीमा उत्पन्न करता है क्योंकि मैं दो बार कर रहा था, reduceएक (count (filterसेटअप में बदल रहा हूं , और गोल्फ के बाद थ्रेडिंग मैक्रो से छुटकारा पा रहा हूं ।

(defn count-single-eights [td-array width height]
  ; Define three helper functions. One generates a list of coords for a given range of dimensions, another checks if an eight is
  ; at the given coord, and the other counts how many neighbors around a coord are an eight
  (letfn [(coords [x-min x-max y-min y-max]
            (for [y (range y-min y-max)
                  x (range x-min x-max)]
              [x y]))
          (eight? [[x y]] (= 8 (get-in td-array [y x] 0)))
          (n-eights-around [[cx cy]]
            (count (filter eight?
                           (coords (dec cx) (+ cx 2), (dec cy) (+ cy 2)))))]

    ; Gen a list of each coord of the matrix
    (->> (coords 0 width, 0 height)

         ; Remove any coords that don't contain an eight
         (filter eight?)

         ; Then count how many "neighborhoods" only contain 1 eight
         (filter #(= 1 (n-eights-around %)))
         (count))))

(mapv #(count-single-eights % (count (% 0)) (count %))
      test-cases)
=> [3 0 0 2 2 1 3 1 4 3]

test-casesसभी "पायथन टेस्ट मामलों" को रखने वाला एक सरणी कहाँ है

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.