क्या मेरे बच्चों की वर्णमाला चटाई ठीक से रंगों द्वारा समूहीकृत है?


14

मेरे बच्चों के पास खेलने के लिए एक वर्णमाला की चटाई है, कुछ इस तरह से:

वर्णमाला की चटाई

महीनों के बाद मैट की टाइलें बेतरतीब ढंग से रखी जाने के बाद, मैं थक गया और चटाई के सभी टाइलों को उनके पृष्ठभूमि के रंगों के अनुसार वर्गों द्वारा रखा गया। इसलिए, यदि अक्षर पृष्ठभूमि रंग का प्रतिनिधित्व करते हैं, तो मुझे इस तरह एक चटाई मिली:

AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC

इसलिए, रंगों ए, बी, सी, डी और ई के लिए हमेशा एक ही पृष्ठभूमि के रंग के साथ सभी टाइलों को कनेक्ट करने का एक तरीका होता है, जो क्षैतिज या ऊर्ध्वाधर रूप से चटाई में होता है। यही मैं रंगों द्वारा समूहीकृत एक चटाई को ठीक से कहता हूं । आप निम्न तालिका में पिछले उदाहरण के लिए समूह देख सकते हैं:

AA
A
A
AA
AAAA
AAAAAA

  BB
 BB
 B

    C
   CCC
  CCCC
  CCC
    CCCC
      CCC

     DDD
      D
      DD
     DD

        E
       EE
        E
       EE
        E

इसके अलावा, हर रंग के लिए केवल एक समूह है, इसलिए यह मान्य नहीं होगा:

ABA
ABA

क्योंकि रंग A टाइल्स को केवल एक समूह में समूहीकृत नहीं किया जाता है। यह भी मान्य नहीं होगा क्योंकि टाइलें क्षैतिज या लंबवत रूप से कनेक्ट नहीं होती हैं:

AB
BA

चुनौती

मुद्रण योग्य ASCII रेंज में वर्णों के 2-आयामी सरणी को देखते हुए (जब तक दोनों आयामों का आकार 1 के बराबर या अधिक हो, तब तक वर्ग होने की आवश्यकता नहीं है), जांचें कि क्या सरणी रंगों द्वारा ठीक से वर्गीकृत की गई चटाई का प्रतिनिधित्व करती है (सरणी में प्रत्येक अलग वर्ण एक अलग रंग का प्रतिनिधित्व करता है)। इनपुट तब तक किसी भी उचित प्रारूप में हो सकता है जब तक वह वर्णों के 2-आयामी सरणी (2 डी चार सरणी, समान लंबाई के तार के सरणी, और इसी तरह) का प्रतिनिधित्व करता है, और आउटपुट में सच्चाई और गलत मूल्यों की एक जोड़ी होनी चाहिए (0) / 1, 't' / 'f', सही / गलत, जब तक कुछ लौटाया जाता है और रिटर्न मान इनपुट के अनुरूप होते हैं)।

यह कोड-गोल्फ है, इसलिए प्रत्येक भाषा की जीत के लिए सबसे छोटा कार्यक्रम / कार्य / विधि / मेमना हो सकता है!

उदाहरण

A    truthy

AB
AB   truthy

AB
BA   falsey

ABCDE    truthy

ABCDC    falsey

**::dd22
***:d222
*:::::22    truthy

$$$%%%&&
$$%%&&&&
&&$$$%&&    falsey

AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC   truthy

AABB
ABBA
AAAA    truthy

AAAB
AAAA
AAAA    truthy

मेरी चटाई ठीक से रंगों से समूहीकृत

मेरी चटाई ठीक से रंगों से समूहीकृत

(मुझे अभी भी उन सीमाओं को ठीक करना है ...)


1
जिज्ञासा से बाहर, आप अल्फ़ान्यूमेरिकल ऑर्डर में चटाई की व्यवस्था क्यों नहीं करेंगे? पाठ्यक्रम की चुनौती के साथ कुछ नहीं करना है, बस सोच रहा था
caird coinheringaahing

4
@cairdcoinheringaahing क्योंकि तब मेरा विशेष OCD संतुष्ट नहीं होगा। :-)
चार्ली

3
आपके बच्चे कोड गोल्फ चुनौतियों के लिए प्रेरणा का स्रोत बने रहे हैं :-)
लुइस मेंडो

2
रंगों को कुछ अन्य इनपुट (जैसे पूर्णांक या पिक्सेल शायद) के बजाय वर्णों का प्रतिनिधित्व क्यों करना पड़ता है?
जोनाथन एलन

2
ओकड की बात करें, तो यह चुनौती ठीक से समूहीकृत चटाई की तस्वीर के बिना पूरी नहीं होगी
जोनाह

जवाबों:


6

MATL , 16 15 बाइट्स

1e"G@=4&1ZI1>vzg

इनपुट एक 2 डी चार सरणी है (पंक्तियों को अलग करके ;)। आउटपुट है 0अगर इनपुट योग्य है, या 1अन्यथा।

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

कोड आवश्यक जाँच करता है कि इनपुट में प्रत्येक चार में केवल एक जुड़ा हुआ घटक है, 4-कनेक्टिविटी (जो कि कोई विकर्ण नहीं है) को देखते हुए।

बार-बार किए गए वर्णों को बार-बार संसाधित किया जाता है (जो कि कटौती करने की तुलना में गोल्फर है)।

1e       % Implicit input. Reshape into a row vector of chars
"        % For each char
  G      %   Push input again
  @      %   Push current char
  =      %   Equal (element-wise)? Gives a matrix of zeros and ones, where one
         %   represents the presence of the current char
  4      %   Push 4. This will indicate 4-connectivity
  &1ZI   %   Matrix with labels of connected componnents. Inputs are a number (4)
         %   to indicate connectivity, and a binary matrix. The output is a matrix
         %   the same size as the input where each connected componnent of ones
         %   in the input is replaced by a different integer starting at 1
  1>     %   Greater than 1 (element-wise)? The result is a matrix. If the result 
         %   is true for some entry the input doesn't qualify
  v      %   Concatenate vertically with results from previous iterations
  z      %   Number of nonzero/true values
  g      %   Logical. Converts nonzero to true
         % Implicit end. Implicit display. False / true are displayed as 0 / 1

3

बेफुज -93, 317 बाइट्स

संपादित करें: उचित बाइट-गणना के लिए निश्चित। इसके अलावा आगे गोल्फ हो सकता है

93+:10pv  +93p01+1g01_  v@.1<
gp00g1+>00p~1+:93+`!#^_1-00g10
50p93+:vv_v#!:gg03:p02:<>40p#
!`g01: <>\ 1+:vvp05:+<@^p03_^#
v93$_v# !- g00<4v04g<^1<vp06:<
>+\!\>\ 3v> 40v0>g-v^<.g>:70vp
07_v#:<^ >#+0# g#\<  10\v4gg<^
!#v _$^  g03p <\ v1_#:^5>0g  -
   <    ^ g02p1< >-:#^_^#:g05
-1<   ^p\g06\0\+1:\g06\-1:\g06:\+1g06:g07

1 सत्य के रूप में प्रिंट करता है, 0 झूठी के रूप में

यह ऑनलाइन की कोशिश करो

यहां पॉइंटर को ले जाने वाले मार्ग का एक दृश्य है

फैंसी रंग!

नोट: यह एक पुराने संस्करण के लिए है


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

यहां कुछ त्वरित और गंदे छद्मकोड हैं

a = 2Darray() # from 12,12 down and to the right
arrayLocation = 12
x = arrayLocation #stored at 0,0
y = arrayLocation #stored at 1,0
i = input()       #stored in the stack
while (i != 0):
    if (i == 10):
        y++
        x = init
    else
        a[x][y] = i
        x++
    i = input

new.x = init    #stored at 2,0
new.y = init    #stored at 3,0

currentChar = 0    #stored at 4,0
chars = array()    #stored at 1,1 onwards
charnum = 0        #stored 5,0
ToCheck = array()  #stored in the stack

current.x = null   #stored at 6,0
current.y = null   #stored at 7,0

while (new.y < y):
    if (a[new] != 0)
        currentChar = a[new]
        toCheck[] = new
        while (toCheck)
            current = toCheck.pop()
            if (a[current] == currentChar)
                toCheck.append(adjacent(current))
                a[current] = 0
        foreach (chars as char)
            if (char == currentChar)
                return 0
        charNum++
        chars[charNum] = char
    new.x++
    if (new.x > x)
        new.x = init
        new.y++

return 1

मूल रूप से, इनपुट को संग्रहीत करने के बाद, यह पूरी जगह से गुजरता है, प्रत्येक स्थान की जांच करता है। जब इसमें एक वर्ण के साथ एक स्थान मिलता है तो यह निर्देशांक को स्टैक में जोड़ता है। फिर यह उसी वर्ण के लिए चारों ओर के रिक्त स्थान की पुनरावृत्ति करता है, प्रत्येक स्थान को 0. पर सेट करता है। जब उसने उस वर्ण का खंड समाप्त कर दिया है, तो यह जाँचता है कि क्या उस वर्ण में पहले से ही एक खंड है। यदि ऐसा है, तो 0. लौटें। यदि नहीं, तो इसे वर्णों की सरणी में जोड़ें। एक बार जब यह बिना किसी डुप्लिकेट के पूरे ग्रिड से गुजरता है, तो यह 1 रिटर्न देता है।

Befunge से परिचित लोगों के लिए, यहां कोड का एक स्थान दिया गया संस्करण है

96+:10p    v    +69p01+1g01_v
`+96:+1~p00<+1g00pg01g00-1_^#
v                           <
>40p50p96+:v                ^
v    @.1<  >
>:10g `#^_30p:20p:30gg:#v_$>1+:00g-!#v_0   >30g+
v                       <  ^         >$96+1^
>40p30gv                   ^
       >:!#v_70p:60p:70gg40 g-!#v_$>
           v               ^     > ^
1:\g06\+1:g 07\g07\-1:\g07\ +1: <^p\g06\0\-
v          <               ^
>50gv   >5\g1+:50p40g\1p20g^
    >:!#^_:1g40g-!#v_1-
                   >0.@

ईमानदार होने के लिए, मुझे लगता है कि आपको इसे 337 बाइट्स के रूप में गिनना चाहिए। अन्यथा, आप फ़ाइल के भीतर कोड के आयामों को कैसे निर्दिष्ट करते हैं? नई कहानियों को भी गिनना चाहिए।
नीदेज्ज्कोब

@NieDzejkob हाँ, मैंने तब से बदल दिया है कि कैसे मैं बाइट्स गिनता हूँ और जो भी TIO कहता है उसके अनुरूप है। इसके अलावा, मैं वैसे भी लाइन की गिनती गलत था? हो सकता है कि कल मैं इसे थोड़ा और आगे
जो राजा

2

जे, 66 बाइट्स

c=.1=+/@,+.]-:]*[:*@+/((,|."1)0,.1 _1)&(|.!.0)
[:*/[:c"2[="_ 0~.@,

cएक क्रिया है कि आपको बताता है कि लोगों को और शून्य के एक मैट्रिक्स है परिभाषित करता है onnected। यह सिंगलटन को सच्चे के विशेष मामले के रूप में मानता है। अन्यथा यह प्रत्येक कोशिका के एक ऑर्थोगोनल पड़ोसी गिनती लेता है, फिर उस गणना के साइनम, फिर मूल मैट्रिक्स के साथ गुणा करता है: यदि वह उत्पाद मूल मैट्रिक्स के बराबर होता है, तो यह जुड़ा हुआ है।

पड़ोसी गणना सभी 4 दिशाओं में स्थानांतरित करके प्राप्त की जाती है, फिर योग करें। 4 दिशा की पारी को xबारी बारी से / पारी की " -आरजी एक मेज द्वारा" सुविधा का उपयोग करके प्राप्त किया जाता है|.

अंत में, इनपुट के प्रत्येक अनूठे ~. तत्व के लिए एक / ज़ीरो मैट्रिक्स बनाकर स्वयं प्राप्त किया गया उत्तर , और फिर यह सुनिश्चित करना कि उन सभी मैट्रिक्स जुड़े हुए हैं। यह दूसरी पंक्ति में क्रिया है।

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


2

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

स्ट्रिंग के एक सरणी के रूप में इनपुट लेता है। लौटाता है 0या 1

a=>(C={},F=x=>!C[c=a[y][x]]|(g=v=>(a[y+v]||[])[x]==c)(-1)|g(1)|g(0,x--)|g(0,x+=2)?a[y+=!c]?F(C[c]=c?x:0):1:0)(y=0)

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

प्रारूपित और टिप्पणी की गई

a => (                            // given an array of strings a
  C = {},                         // C = object holding encountered characters
  F = x =>                        // F = recursive function taking x:
    !C[c = a[y][x]]               //   c = current character; is it a new one?
    | (g = v =>                   //   g = helper function taking v
        (a[y + v] || [])[x] == c  //       and testing whether a[y + v][x] == c
      )(-1)                       //   test a[y - 1][x]
    | g(1)                        //   test a[y + 1][x]
    | g(0, x--)                   //   test a[y][x - 1]
    | g(0, x += 2) ?              //   test a[y][x + 1]; if at least one test passes:
      a[y += !c] ?                //     increment y if c is undefined; if a[y] exists:
        F(C[c] = c ? x : 0)       //       update C, update x and do a recursive call
      :                           //     else:
        1                         //       all characters have been processed -> success
    :                             //   else:
      0                           //     invalid character detected -> failure
)(y = 0)                          // initial call to F, starting with x = y = 0

1

वोल्फ़्राम लैंग्वेज (गणितज्ञ) , 96 बाइट्स

And@@(ConnectedGraphQ@Subgraph[GridGraph@Dimensions[t],Tr/@Position[c,#]]&/@(c=Join@@(t=#)))&

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

इनपुट को पात्रों की 2 डी सूची के रूप में लेता है: उदाहरण के लिए {{"A","B"},{"C","D"}},।

चरित्र है \[Transpose]

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

हर किरदार के लिए cइनपुट में लेता है, Subgraphकी GridGraphउसी के Dimensionsहर के लिए इनपुट के रूप में जो मेल खाती है Position, जिसमें cहोता है, और जांच करता है कि यह एक है ConnectedGraphQ



1

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

(d,o={})=>{f=(i,j,c,l=d[i])=>{if(c&&l&&l[j]==c){l[j]='';f(i-1,j,c);f(i+1,j,c);f(i,j-1,c);f(i,j+1,c);o[c]=1}};d.map((e,i)=>e.map((c,j)=>o[c]||f(i,j,c)));return!d.some(e=>e.join(''))}

जब भी एक नया रंग टाइल पाया जाता है, तो कनेक्ट किए गए लोगों को खाली तारों से भरें। यदि चटाई को रंगों द्वारा ठीक से समूहीकृत किया जाता है, तो सभी टाइलें खाली तारों से भरी होनी चाहिए।

टेस्ट कोड


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