एक आयाम में परिमित झुकाव


32

इस चुनौती का उद्देश्य यह निर्धारित करना है कि क्या एक-बिटेनसोनल टुकड़ों के संग्रह को एक निरंतर निरंतर हिस्सा बनाने के लिए टाइल किया जा सकता है।

एक टुकड़ा शून्य और शून्य का एक खाली-खाली क्रम है, जो एक के साथ शुरू और समाप्त होता है। कुछ संभव टुकड़े कर रहे हैं 1, 101, 1111, 1100101

टाइलिंग का अर्थ है टुकड़ों की व्यवस्था करना ताकि लोगों का एक एकल सन्निहित ब्लॉक बन जाए। एक टुकड़े में से एक शून्य के स्थान पर कब्जा कर सकता है, लेकिन एक टुकड़े से नहीं, दूसरे टुकड़े से।

समान रूप से, अगर हम किसी को "ठोस सामग्री" और शून्य को "छेद" के रूप में देखते हैं, तो टुकड़ों को फिट होना चाहिए ताकि किसी भी छेद को छोड़ दें।

टाइलिंग बनाने के लिए, टुकड़ों को केवल उनके एक आयामी स्थान के साथ स्थानांतरित किया जा सकता है। (उन्हें विभाजित नहीं किया जा सकता है, या प्रतिबिंबित नहीं किया जा सकता है)। प्रत्येक टुकड़े का एक बार उपयोग किया जाता है।

उदाहरण

तीन टुकड़े 101, 11, 101के रूप में निम्नलिखित है, जहां प्रत्येक टुकड़ा आवश्यक बदलाव के साथ प्रस्तुत किया जाता है में दिखाया गया टाइलों जा सकता है:

  101
11
   101

इसलिए प्राप्त टाइलिंग है

111111

एक दूसरे उदाहरण के रूप में, टुकड़े 11011और 1001101टाइलों नहीं किया जा सकता। विशेष रूप से, पारी

 11011
1001101

मान्य नहीं है क्योंकि दो ऐसे हैं जो टकराते हैं; तथा

11011
  1001101

मान्य नहीं है क्योंकि परिणाम में एक शून्य होगा।

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

इनपुट एक या अधिक टुकड़ों में से एक संग्रह है। किसी भी उचित प्रारूप की अनुमति है; उदाहरण के लिए:

  • तार की एक सूची, जहां प्रत्येक स्ट्रिंग में दो अलग-अलग, लगातार वर्ण हो सकते हैं;
  • कई सरणियाँ, जहां प्रत्येक सरणी में एक टुकड़े के लिए लोगों की स्थिति होती है;
  • (विषम) पूर्णांक की एक सूची, प्रत्येक संख्या का द्विआधारी प्रतिनिधित्व एक टुकड़ा को परिभाषित करता है।

उत्पादन एक truthy मूल्य होना चाहिए, अगर एक खपरैल संभव है, और एक falsy मूल्य अन्यथा। आउटपुट मान के अनुरूप होने की आवश्यकता नहीं है; यही है, वे अलग-अलग इनपुट के लिए अलग हो सकते हैं।

प्रोग्राम या फ़ंक्शंस की अनुमति है, किसी भी प्रोग्रामिंग भाषा मेंमानक खामियों को मना किया जाता है।

बाइट्स में सबसे छोटा कोड जीतता है।

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

प्रत्येक इनपुट एक अलग लाइन पर है

Truthy

1
111
1, 1
11, 111, 1111
101, 11, 1
101, 11, 101
10001, 11001, 10001
100001, 1001, 1011
10010001, 1001, 1001, 101
10110101, 11001, 100001, 1
110111, 100001, 11, 101
1001101, 110111, 1, 11, 1

Falsy

101
101, 11
1, 1001
1011, 1011
11011, 1001101
1001, 11011, 1000001
1001, 11011, 1000001, 10101


3
इस समस्या का अनंत संस्करण और भी दिलचस्प हो सकता है (यानी टाइलों का एक सेट पूरी तरह से बिना ओवरलैप के 1 डी लाइन भर सकता है)। तब सामान की तरह 101101सच्चाई होगी, भले ही उनमें से कोई परिमित संख्या एक सन्निहित ब्लॉक में परिणाम न हो।
मार्टिन एंडर

जवाबों:



8

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

32-बिट पूर्णांक की एक सरणी के रूप में इनपुट लेता है। एक बूलियन देता है।

f=([n,...a],x)=>n?[...f+''].some(_=>n&&!(x&n)&f(a,x|n,n<<=1)):!(x&-~x)

या उल्टे सत्य / झूठे मूल्यों के साथ 66 बाइट्स :

f=([n,...a],x)=>n?[...Array(32)].every(_=>x&n|f(a,x|n,n*=2)):x&-~x

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

कैसे?

f = (                       // f = recursive function taking:
  [n, ...a],                //   n = next integer, a = array of remaining integers
  x                         //   x = solution bitmask, initially undefined
) =>                        //
  n ?                       // if n is defined:
    [... f + ''].some(_ =>  //   iterate 32+ times:
      n &&                  //     if n is not zero:
        !(x & n)            //       if x and n have some bits in common,
        &                   //       force invalidation of the following result
        f(                  //       do a recursive call with:
          a,                //         the remaining integers
          x | n,            //         the updated bitmask
          n <<= 1           //         and update n for the next iteration
        )                   //       end of recursive call
    )                       //   end of some()
  :                         // else (all integers have been processed):
    !(x & -~x)              //   check that x is a continuous chunk of 1's

4

भूसी , 16 बाइट्स

V§=OŀF×+ṠṀṪ+oŀṁ▲

1-आधारित सूचकांकों की सूची की सूची लेता है। इसे ऑनलाइन आज़माएं!

व्याख्या

V§=OŀF×+ṠṀṪ+oŀṁ▲  Implicit input, say x=[[1,3],[1]]
              ṁ▲  Sum of maxima: 4
            oŀ    Lowered range: r=[0,1,2,3]
        ṠṀ        For each list in x,
          Ṫ+      create addition table with r: [[[1,3],[2,4],[3,5],[4,6]],
                                                 [[1],[2],[3],[4]]]
     F×+          Reduce by concatenating all combinations: [[1,3,1],[1,3,2],...,[4,6,4]]
V                 1-based index of first list y
    ŀ             whose list of 1-based indices [1,2,...,length(y)]
 §=               is equal to
   O              y sorted: 2

3

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

FLḶ0ẋ;þ⁸ŒpS€P€1e

लोगों और शून्य 1( या तो सत्य) की वापसी की सूचियों की सूची लेने वाला एक विवादास्पद लिंक0 (सत्य) (फाल्सी) ।

इसे ऑनलाइन आज़माएं! या देखें परीक्षण-सूट देखें (छोटा - पहले 6 झूठों के बाद पहले आठ सत्य के बाद से चार लोगों को कार्टेसियन उत्पाद के उपयोग के कारण शामिल करने में बहुत लंबा समय लगता है)।

कैसे?

FLḶ0ẋ;þ⁸ŒpS€P€1e - Link: list of lists, tiles
F                - flatten (the list of tiles into a single list)
 L               - length (gets the total number of 1s and zeros in the tiles)
  Ḷ              - lowered range = [0,1,2,...,that-1] (how many zeros to try to prepend)
   0             - literal zero
    ẋ            - repeat = [[],[0],[0,0],...[0,0,...,0]] (the zeros to prepend)
       ⁸         - chain's left argument, tiles
      þ          - outer product with:
     ;           -   concatenation (make a list of all of the zero-prepended versions)

        Œp       - Cartesian product (all ways that could be chosen, including man
                 -   redundant ones like prepending n-1 zeros to every tile)
          S€     - sum €ach (good yielding list of only ones)
            P€   - product of €ach (good yielding 1, others yielding 0 or >1)
              1  - literal one
               e - exists in that? (1 if so 0 if not)


2

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

FLḶ0ẋ;þµŒpSP$€1e

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

-1 बाइट मिस्टर एक्सकोडर की बदौलत

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


1

जे , 74 बाइट्स

f=:3 :'*+/1=*/"1+/"2(l{."1 b)|.~"1 0"_ 1>,{($,y)#<i.l=:+/+/b=:>,.&.":&.>y'

मैं इसे बाद में शांत करने की कोशिश कर सकता हूं, लेकिन अब यह एक स्पष्ट क्रिया है। मैं ungolfed संस्करण की व्याख्या करूँगा। यह बॉक्सिंग पूर्णांक और रिटर्न 1(सत्य) या 0(मिथ्या) की एक सूची लेता है ।

This will be my test case, a list of boxed integers:
   ]a=:100001; 1001; 1011                
┌──────┬────┬────┐
│100001│1001│1011│
└──────┴────┴────┘
b is the rectangular array from the input, binary digits. Shorter numbers are padded
with trailing zeroes:
   ]b =: > ,. &. ": &.> a   NB. Unbox each number, convert it to a list of digits 
1 0 0 0 0 1
1 0 0 1 0 0
1 0 1 1 0 0

l is the total number of 1s in the array: 
   ]l=: +/ +/ b             NB. add up all rows, find the sum of the resulting row)
7

r contains all possible offsets needed for rotations of each row: 
   r=: > , { ($,a) # < i.l  NB. a catalogue of all triplets (in this case, the list
has 3 items) containing the offsets from 0 to l:
0 0 0
0 0 1
0 0 2
0 0 3
0 0 4
 ...
6 6 3
6 6 4
6 6 5
6 6 6

m is the array after all possible rotations of the rows of b by the offsets in r. 
But I first extend each row of b to the total length l:
   m=: r |."0 1"1 _ (l {."1 b)  NB. rotate the extended rows of b with offsets in r,
ranks adjusted

For example 14-th row of the offsets array applied to b:
    13{r
0 1 6
   13{m
1 0 0 0 0 1 0
0 0 1 0 0 0 1
0 1 0 1 1 0 0

Finally I add the rows for each permutation, take the product to check if it's all 1, and
check if there is any 1 in each permuted array.
   * +/ 1= */"1 +/"2 m
1 

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

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