এক মাত্রায় সীমাবদ্ধ il


32

এই চ্যালেঞ্জের উদ্দেশ্যটি নির্ধারণ করা হচ্ছে যে সীমাবদ্ধ অবিচ্ছিন্ন অংশ গঠনের জন্য এক-ডাইমেনসোনাল টুকরোগুলির সংকলন টাইল করা যায় কিনা।

একটি টুকরা শূন্য এবং খালি একটি খালি, সীমাবদ্ধ ক্রম যা শুরু করে এবং শেষ হয় ends কিছু সম্ভব টুকরা 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
এই সমস্যার অসীম সংস্করণটি আকর্ষণীয়ও হতে পারে (যেমন টাইলসের একটি সেট ওভারল্যাপ ছাড়াই 1D লাইন পুরোপুরি পূরণ করতে পারে কিনা)। তারপরে 101101কোনও সীমাবদ্ধ সংখ্যার ফলস্বরূপ একটি অবরুদ্ধ ব্লকের ফলাফল না পাওয়া সত্ত্বেও স্টাফ সত্য হতে পারে।
মার্টিন ইন্ডার

উত্তর:



8

জাভাস্ক্রিপ্ট (ES6), 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

একটি monadic লিঙ্ক যা হয় 1(সত্যবাদী) বা 0(মিথ্যা) প্রত্যাবর্তনকারী ও শূন্যগুলির তালিকার একটি তালিকা নিয়ে ।

এটি অনলাইন চেষ্টা করুন! বা একটি টেস্ট-স্যুট দেখুন (সংক্ষিপ্ত - প্রথম আট টি মিথ্যা তারপরে প্রথম আটটি ট্রুথির পরে যেহেতু দৈর্ঘ্য চারটি কারটিশিয়ান পণ্য ব্যবহারের কারণে অন্তর্ভুক্ত হতে খুব বেশি সময় নেয়)।

কিভাবে?

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)



1

জে , 74 বাইট

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

আমি পরে এটি প্রশমিত করার চেষ্টা করতে পারি, তবে আপাতত এটি একটি স্পষ্ট ক্রিয়াপদ ver আমি বর্ণহীন সংস্করণটি ব্যাখ্যা করব। এটি বক্সযুক্ত পূর্ণসংখ্যার এবং রিটার্নগুলির 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 

এটি অনলাইন চেষ্টা করুন!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.