একটি স্থির ইটের প্রাচীর তৈরি করুন


39

একটি ইটের প্রাচীর সারিগুলিতে সজ্জিত অনুভূমিক 1-বাই-এন ইট দিয়ে তৈরি একটি আয়তক্ষেত্র। এখানে 4 ইঞ্চি এবং প্রস্থ 8 এর প্রাচীর রয়েছে এবং ডানদিকে ইটের আকারগুলি দেখানো হয়েছে।

[______][______]    4 4
[__][____][__][]    2 3 2 1
[][______][____]    1 4 3
[____][______][]    3 4 1

এই প্রাচীরটি অস্থির কারণ এটির একটি ত্রুটি রয়েছে , এমন একটি জায়গা যেখানে চারপাশের ইটগুলিতে পেরেনগুলির সাথে নীচে দেখানো হয়েছে ইটগুলির মধ্যে দুটি উল্লম্ব ফাটল।

[______][______]    
[__][____)(__][]
[][______)(____]
[____][______][]

তবে, ডানদিকে আকার -1 ইটের সীমানা ফাটলগুলি দোষ তৈরি করে না কারণ সেগুলি একটি সারি দ্বারা পৃথক করা হয়েছে।

কোড লিখুন যা নির্দিষ্ট আকারের ইটগুলির বাইরে নির্মিত একটি স্থির প্রাচীর সন্ধান করে এবং প্রদর্শন করে। সবচেয়ে কম বাইট জেতা

ইনপুট

ইটের আকারের একটি খালি খালি তালিকা (ধনাত্মক সংখ্যা) এবং কমপক্ষে 2 এর উচ্চতা you আপনি যদি চান তবে এই তালিকাটি বাছাই করা যেতে পারে। আপনি বিকল্পভাবে প্রতিটি আকারের ইটের একটি গণনা নিতে পারেন।

আউটপুট

প্রয়োজনীয় উচ্চতার স্থায়ী আয়তক্ষেত্রাকার প্রাচীরের একটি চিত্র যা প্রদত্ত সমস্ত ইট ব্যবহার করে। এটিকে মুদ্রণ করুন বা নতুন লাইনের সাথে স্ট্রিং হিসাবে ফিরিয়ে দিন।

আকারের একটি ইট 2n অক্ষর হিসাবে আঁকুন, বন্ধনী দ্বারা বেষ্টিত আন্ডারস্কোর।

1: []
2: [__]
3: [____]
4: [______]
...

ইনপুটটিতে কমপক্ষে একটি সমাধান থাকার গ্যারান্টিযুক্ত। যদি একাধিক থাকে তবে আপনার কেবল একটি প্রাচীর আঁকতে হবে।

কোনও সময়ের সীমাবদ্ধতা নেই; আপনি চান হিসাবে যতটা নিষ্ঠুর শক্তি ব্যবহার করুন। আপনার অ্যালগরিদম কোনও আকারের ইনপুটগুলিতে তাত্ত্বিকভাবে কাজ করা উচিত।

পরীক্ষার কেস:

একাধিক সমাধান রয়েছে, সুতরাং আপনার ফলাফলগুলি আলাদা হতে পারে।

>> [1, 1, 2, 2], 2
[][__]
[__][]

>> [1, 1, 1, 2, 2, 2, 2, 3], 2
[__][____][__]
[][__][][__][]

>> [1, 1, 2, 2, 3, 3, 3, 3], 3
[][__][____]
[__][____][]
[____][____]

>> [1, 2, 3, 4, 5, 6, 7, 8, 9], 5
[][______________]
[__][____________]
[________________]
[____][__________]
[______][________]

>> [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], 5
[][__][__]
[__][__][]
[][__][__]
[__][__][]
[][__][__]

আপনি কেন>> 1 টি অক্ষরের প্রশস্ততার পরিবর্তে ইট 2n অক্ষর প্রশস্ত করার সিদ্ধান্ত নিয়েছিলেন?
স্পার

2
@ স্পার 1 বাই 2 চরিত্রের ব্লকগুলি মোটামুটি বর্গক্ষেত্রের দেখাচ্ছে। আমি প্রয়োজনীয় চেষ্টা করেছিলাম n>1এবং এটি পরীক্ষার কেসগুলিকে কীভাবে সীমাবদ্ধ করে তা পছন্দ করি না। এছাড়াও, দৃশ্যত নজির আছে
xnor

আমি n> 1 দিয়ে 2n বোঝাতে চাইছি না। আমার অর্থ এন এর সাথে এন> 1
স্পার 14

উত্তর:


20

পার্ল, 166 170 194

ল্যারি ওয়াল দ্বারা নির্মিত একটি ভাষার জন্য নিখুঁত কাজ।

#!perl -pa
$_=(1x($x=2/($y=pop@F)*map{1..$_}@F)."
")x$y;sub
f{my$l=$_;$-|=!@_;for$=(@_){$Z=__
x~-$=;$f=0;s/(11){$=}/[$Z]/&!/\]..{$x}\[/s&&f(grep$=ne$_||$f++,@_);$-or$_=$l}}f@F

নিষ্ঠুর শক্তি, তবে পরীক্ষার ক্ষেত্রে (<1s) বেশ দ্রুত। ব্যবহার:

$ perl ~/wall.pl <<<"1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 5"
[][__][__]
[__][__][]
[][__][__]
[__][__][]
[][__][__]

আমাকে পরীক্ষা করুন


9
হা, আমি অবাক হয়েছি যদি ল্যারি ওয়াল কখনও ভেবেছিল লোকেরা ভাষাটি এরকম ব্যবহার করবে ... :)
ক্রেতাহাটি ফিশ

12

সিজেম, 94 92 82 বাইট

এটি 92 বাইট সংস্করণ। 82 বাইট সংস্করণ অনুসরণ করা হয়।

l~1$,:L,:)m*{1bL=},\e!\m*{~W<{/(\e_}%}%{::+)-!},{{_,,\f<1fb}%2ew{:&,(},!}={{(2*'_*'[\']}/N}/

এটি প্রতিটি সম্ভাব্য উপায়ে ইটকে পার্টিশন করে এবং কেবলমাত্র যা বৈধ take আপাতত সুন্দর ব্রুট ফোর্স কিন্তু এখনও আমার মেশিনের জাভা ইন্টারপ্রেটারে প্রায় 10 সেকেন্ডের মধ্যে শেষ পরীক্ষার মামলাটি চালায় ।

ব্যাখ্যা :

কোডটি 5 ভাগে বিভক্ত:

1) দৈর্ঘ্যের একটি অ্যারে দেওয়া হয়েছে L, কীভাবে আমরা সকলে এটি ভাগ করে নিতে পারি H

l~1$,:L,:)m*{1bL=},
l~                     e# Read the input as string and evaluate it.
  `$,:L                e# Copy the array and take its length. Store that in L
       ,:)             e# Get an array of 1 to L
          m*           e# Cartesian power of array 1 to L of size H (height of wall)
            {1bL=},    e# Take only those parts whose sum is L

এর পরে, আমাদের ইনপুট অ্যারে এইচ ইটের স্তরগুলিতে বিভক্ত করার সমস্ত সম্ভাব্য উপায় রয়েছে।

2) ইনপুট অ্যারের সমস্ত ক্রমশক্তি পান এবং তারপরে সমস্ত অনুমতিগুলির জন্য সমস্ত পার্টিশন পান

\e!\m*{~W<{/(\e_}%}%
\e!                    e# Put the input array on top of stack and get all its permutations
   \m*                 e# Put the all possible partition array on top and to cartesian
                       e# product of the two permutations. At this point, every
                       e# permutation of the input array is linked up with every
                       e# permutation of splitting L sized array into H parts
      {           }%   e# Run each permutation pair through this
       ~W<             e# Unwrap and remove the last part from the partition permutation
          {     }%     e# For each part of parts permutation array
           /           e# Split the input array permutation into size of that part
            (\         e# Take out the first part and put the rest of the parts on top
              e_       e# Flatten the rest of the parts so that in next loop, they can be
                       e# split into next part length

এর পরে, আমাদের ইনপুট ইটগুলির সমস্ত সম্ভাব্য বিন্যাস একটি Hস্তর ইটের প্রাচীরের মধ্যে রয়েছে।

3) কেবলমাত্র সেই লেআউটগুলিই ফিল্টার করুন যার ইটের দৈর্ঘ্য সমান

{::+)-!},
{      },              e# Filter all brick layouts on this condition
 ::+                   e# Add up brick sizes in each layer
    )-!                e# This checks if the array contains all same lengths.

এই ফিল্টারটি শেষ হওয়ার পরে, সমস্ত লেআউটগুলি নিখুঁত আয়তক্ষেত্রগুলি হবে।

4) স্থিতির মানদণ্ডের সাথে মেলে যা প্রথম ইটের লেআউটটি বের করুন

{{_,,\f<1fb}%2ew{:&,(},!}=
{                       }=   e# Choose the first array element that leaves truthy on stack
 {         }%                e# For each brick layer
  _,,                        e# Create an array of 0 to layer length - 1
     \f<                     e# Get all sublists starting at 0 and ending at 0
                             e# through length - 1
        1fb                  e# Get sum of each sub list. This gives us the cumulative
                             e# length of each brick crack except for the last one
           2ew               e# Pair up crack lengths for every adjacent layer
              {    },        e# Filter layer pairs
               :&            e# See if any cumulative crack length is same in any two
                             e# adjacent layers. This means that the layout is unstable
                 ,(          e# make sure that length of union'd crack lengths is greater
                             e# than 1. 1 because 0 will always be there.
                     !       e# If any layer is filtered through this filter,
                             e# it means that the layer is unstable. Thus negation

এই পদক্ষেপের পরে, আমাদের কেবল বিন্যাসটি মুদ্রণ করতে হবে

5) লেআউট প্রিন্ট করুন

{{(2*'_*'[\']}/N}/
{               }/           e# For each brick layer
 {           }/              e# For each brick
  (2*'_*                     e# Get the (brick size - 1) * 2 underscores
        '[\']                e# Surround with []
               N             e# Newline after each layer

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


82 বাইট

l~:H;{e_mrH({H-X$,+(mr)/(\e_}%_::+)-X${_,,\f<1fb}%2ew{:&,(},+,}g{{(2*'_*'[\']}/N}/

এটি প্রায় 92 92 বাইট সংস্করণের সাথে সমান, এটির এলোমেলো স্পর্শ ব্যতীত আপনি যদি 92 বাইট সংস্করণটির ব্যাখ্যাটি পড়ে থাকেন তবে 82 বাইট সংস্করণে 3, 4 এবং 5 এর অংশগুলি হুবহু একইরকম হয়, যখন অংশ 1 এবং 2 থেকে সমস্ত ক্রিয়াকলাপগুলি পুনরাবৃত্তি করার পরিবর্তে, এই সংস্করণটি এলোমেলোভাবে একটির উত্পন্ন করে একযোগে ক্রমায়ন, অংশ 3 এবং 4 ব্যবহার করে এটি পরীক্ষা করে এবং তারপরে অংশ 3 এবং 4 এর পরীক্ষা ব্যর্থ হলে প্রক্রিয়াটি পুনরায় আরম্ভ করে।

এটি প্রথম 3 টি পরীক্ষার ক্ষেত্রে ফলাফলগুলি খুব দ্রুত মুদ্রণ করে। উচ্চতা = 5 পরীক্ষার কেসটি এখনও আমার কম্পিউটারে আউটপুট দেয়নি।

পার্থক্য ব্যাখ্যা

l~:H;{e_mrH({H-X$,+(mr)/(\e_}%_::+)-X${_,,\f<1fb}%2ew{:&,(},+,}g
l~:H;                           e# Eval the input and store the height in H
     {   ...   }g               e# A do-while loop to iterate until a solution is found
      e_mr                      e# Flatten the array and shuffle it.
          H({               }%  e# This is the random partition generation loop
                                e# Run the loop height - 1 times to get height parts
             H-X$,+(            e# While generating a random size of this partition, we
                                e# have to make sure that the remaining parts get at least
                                e# 1 brick. Thus, this calculation
                    mr)         e# Get a random size. Make sure its at least 1
                       /(\e_    e# Similar to 92's part 2. Split, pop, swap and flatten

_::+)-                          e# 92's part 3. Copy and see if all elements are same
      X${_,,\f<1fb}%2ew{:&,(},  e# 92's part 4. Copy and see if layers are stable
+,                              e# Both part 3 and 4 return empty array if
                                e# the layout is desirable. join the two arrays and
                                e# take length. If length is 0, stop the do-while

এই সংস্করণটির জন্য ধারণাটি এলোমেলোভাবে দিয়েছিল (এটি পান?)

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


9

পাইথন 2, 680 670 660 বাইট

আমি জানি না কেন আমি এই সুপার দীর্ঘ দীর্ঘ "গল্ফগুলি" রাখার জন্য জোর দিয়েছি ... তবে যাইহোক, আপনি এখানে যান।

M,L,R,N=map,len,range,None
exec"J=@:M(''.join,x);B=@:'['+'_'*2*~-x+']';K=@:M(B,x);W=@:J(M(K,x));C=@:set(M(sum,[x[:i]for i in R(L(x))]))-{0};T=@,w:w[x:]+w[:x]\ndef F(i):f=filter(@:i[x-1]&i[x],R(1,L(i)));return f and f[0]".replace('@','lambda x')
def P(e,x,i,w,h):
 for j in[-~_%h for _ in R(i-1,h+i-2)]:
    for s in R(w):
     if not e&C(T(s,x[j])):return j,s
 return N,N
def b(l,h):
 w,d=[[]for _ in R(h)],2*sum(l)/h
 for _ in l[::-1]:q=M(L,W(w));w[[q.index(i)for i in sorted(q)if i+L(B(_))<=d][-1]]+=_,
 g=M(C,w);i=F(g)
 while i:
    e=g[i-1];j,s=P(e,w,i,d,h)
    if j!=N:w[j]=T(s,w[j]);w[i],w[j]=w[j],w[i];g=M(C,w);i=F(g)
    else:b(T(-1,l),h);return
 print'\n'.join(W(w))

এর জন্য বাছাই করা ক্রম অনুসারে আউটপুট প্রয়োজন এবং এর মাধ্যমে ডাকা হয় b(brick_sizes, height)

পরীক্ষার কেস:

>>> tests = [([1, 1, 2, 2], 2),([1, 1, 1, 2, 2, 2, 2, 3], 2), ([1, 1, 2, 2, 3, 3, 3, 3], 3), ([1, 2, 3, 4, 5, 6, 7, 8, 9], 5), ([1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], 5)]
>>> for t in tests:
...     b(*t); print
... 
[__][]
[][__]

[____][__][__]
[][][__][__][]

[____][____]
[__][__][][]
[____][____]

[________________]
[______________][]
[____________][__]
[__________][____]
[________][______]

[__][__][]
[][__][__]
[__][__][]
[][__][__]
[__][__][]

এটি যেভাবে কাজ করে তা হ'ল:

  1. প্রতিটি স্তরের উপরের দিকে যাওয়ার আগে ভরাট করার চেষ্টা করে স্তরগুলিতে ইটগুলি (দীর্ঘতম> সংক্ষিপ্ততম) অর্পণ করুন।
  2. যখনই সংলগ্ন স্তরগুলি অস্থিতিশীল থাকে তখনই স্তরগুলির অদলবদল এবং ইটগুলি স্থানান্তরিত করার চেষ্টা করুন যতক্ষণ না আপনি কোনও কাজ করে এমন কিছু খুঁজে পান।
  3. যদি কিছু কাজ না করে তবে দীর্ঘতম ইটটিকে আকারের তালিকার সামনে নিয়ে যান এবং পুনরাবৃত্তি করুন।

1
আপনি সম্ভবত continueশেষ কাছাকাছি থেকে ড্রপ করতে পারেন । এছাড়াও return(N,N)প্রথম বন্ধনী প্রয়োজন হবে না।
পূর্কাকুডারী

ভাল কল - এটি continueপূর্ববর্তী সংস্করণ থেকে একটি প্রতীক ছিল।
sirpercival

1
এটি চালানো যায় না, আপনার কাছে একটি বহির্মুখী বন্ধনী রয়েছে Wএবং Tএকটি অতিরিক্ত যুক্তি পাস হয়ে যায়।
কানাঘাটফিশ

ওফ, ধন্যবাদ! স্থির করেছি।
sirpercival

5

হাস্কেল, 262 বাইট

import Data.List
c=concat
n=init.scanl1(+)
1%l=[[[l]]]
n%l=[map(h:)(c$(n-1)%t)|(h,t)<-map(`splitAt`l)[1..length l]]
v[x]=1<2
v(x:y:z)=sum x==sum y&&n x==n x\\n y&&v(y:z)
l#n=unlines$map(>>=(\b->'[':replicate(2*b-2)'_'++"]"))$head$filter v$c.(n%)=<<permutations l

ব্যবহারের উদাহরণ:

*Main> putStr $  [1, 2, 3, 4, 5, 6, 7, 8, 9] # 5
[______][________]
[__________][____]
[____________][__]
[][______________]
[________________]

*Main> putStr $ [1, 1, 2, 2, 3, 3, 3, 3] # 3
[____][____]
[__][__][][]
[____][____]

এটা কিভাবে কাজ করে: প্রধান ফাংশন #একটি তালিকা লাগে l(ইট তালিকা) এবং একটি সংখ্যা h(উচ্চতা) এবং সব একাধিক বিন্যাসন splits lমধ্যে hসম্ভাব্য সব অবস্থানের সময়ে sublists (ফাংশন মাধ্যমে %, যেমন 2%[1,2,3,4]-> [ [[1],[2,3]] , [[1,2],[3]] , [[1,2,3],[]] ])। এটি সেই স্থানে রাখে যেখানে দুটি পর পর দুটি উপাদানের সমষ্টি থাকে (অর্থাত্ ইটগুলিতে একই দৈর্ঘ্য) এবং সাবটোটেলের তালিকাগুলিতে সাধারণ উপাদান থাকে না (যেমন ফাটলগুলি লাইন থাকে না, কার্য করে v)। প্রথম তালিকাটি মানান যা ইটের একটি স্ট্রিং ফিট করে।


4

পাইথন 2, 528 , 417 , 393 , 381

খুব দীর্ঘ, উদ্বেগ সমাধান। এটি কাজ করে কিন্তু এটি সম্পর্কে, সর্বশেষ পরীক্ষার ক্ষেত্রে ফলাফল পাওয়ার আগে মহাবিশ্বটি শেষ হতে পারে।

exec u"from itertools import*;m=map;g=@w,n:([[w]],[[w[:i]]+s#i?range(1,len(w))#s?g(w[i:],n-1)])[n>1];r=@x:set(m(sum,[x[:i]#i?range(1,len(x))]));f=@w:1-all(m(@(x,y):not x&y,zip(m(r,w[:-1]),m(r,w[1:]))));a=@s,h:['\\n'.join([''.join(['[%s]'%(' '*(s-1)*2)#s?r])#r?o])#p?permutations(s)#o?g(p,h)if len(set([sum(r)#r?o]))<2 and~-f(o)][0]".translate({64:u"lambda ",35:u" for ",63:u" in "})

একটি প্রধান কাজ:

>> a([1, 1, 2, 2], 2)
'[][  ]\n[  ][]'

আপনি আমদানি পরিবর্তন করে এবং কল থেকে from itertools import*সরিয়ে 4 বাইট সংরক্ষণ করতে পারেন । এছাড়াও, শেষের এসগুলিকে 13 বাইট সংরক্ষণ করতে ... এ পরিবর্তন করা যেতে পারে । itertools.permutationsifif all(x==w[0] for x in w)and~-f(o):return
পূর্বকুডারী

এছাড়াও, fসর্বদা প্রথম পুনরাবৃত্তি ফিরে না ? অদ্ভুত লাগছে। এটি হয় বাগ বা বিশাল গল্ফের সুযোগ।
পূর্কাকুডারী

আপনি যে মুছে ফেলা হতে পারে বিদেশী শূণ্যস্থান একটি টন আছে - আগে বা পরে একটি উদ্ধৃতি / বন্ধ / বন্ধনী, একটি অপারেটর, ইত্যাদি এছাড়াও আপনি বরাদ্দ করা হয় পার্শ্ববর্তী t=0দুবার r(); আপনি সেই ফাংশনটিকে map(sum,[x[:i] for i in range(len(x))])ওয়ান-লাইনার হিসাবে তৈরি করতে পারেন (যদি আপনি চান ল্যাম্বদা-আইংয়ের জন্য উপযুক্ত)। আইসডিজোয়েন্ট এবং সেটগুলি ব্যবহার করা f()এটি উল্লেখযোগ্যভাবে হ্রাস পাবে (এটি f()বর্তমানে কেবলমাত্র একটি পরীক্ষার পরে ফিরে আসে, এটি ত্রুটিযুক্ত কিনা তা খুঁজে পাওয়া যায় না)। ব্যক্তিগতভাবে আমি পুনর্লিখন চাই f()যেমন return not all(map(isdisjoint,map(set,map(r,w[:-1])),map(set,map(r,w[1:]))))বা অনুরূপ কিছু।
sirpercival

@ পিটু 1998 ওহ হ্যাঁ, একটি জায়গা মিস করেছেন। টিপস বলার জন্য ধন্যবাদ, আমি অবাক হয়েছি আপনি এই জিনিসগুলি স্পট করতে পারেন।
ক্রেজিটফিশ

খুব খারাপ হেসে আমি সেই ধরণের কোডগুলিকে ঘৃণা করি যেখানে "ফলাফল পাওয়ার আগে মহাবিশ্ব শেষ হতে পারে" তবে এটি এক্সডিডি করার জন্য সংক্ষিপ্ততম বাইটস কোটেস্ট
Abr001am

3

জাভাস্ক্রিপ্ট (ES6) 222 232 265 279 319

এখনও গল্ফ করা হবে। এটির সমস্ত সমাধান খুঁজে পাওয়া যায়, আউটপুটটি কেবল সর্বশেষ পাওয়া যায় এবং এটি বেশ দ্রুত।

পরীক্ষার জন্য ফায়ারফক্সে স্নিপেট চালান

f=(n,h,b=[],s=0)=>
  (R=(z,l,p,k,t)=>
    z?b.map((v,a)=>
      v&&k.indexOf(v=t+a)<0&v<=s&&(
        --b[a],h=l+`[${'__'.repeat(a-1)}]`,
        v-s?R(z,h,[...p,v],k,v):R(z-1,h+'\n',[],p,0),
        ++b[a]
      ))
    :n=l
  )(h,'',[],[],0,n.map(n=>(b[n]=-~b[n],s+=n)),s/=h)&&n

// Test suite


out=x=>OUT.innerHTML=OUT.innerHTML+x+'\n'

;[ 
 [[1, 1, 2, 2], 2], [[1, 1, 1, 2, 2, 2, 2, 3], 2], [[1, 1, 2, 2, 3, 3, 3, 3], 3]
,[[1, 2, 3, 4, 5, 6, 7, 8, 9], 5], [[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], 5]]
.forEach(([a,b])=>out(a+' '+b+'\n'+f(a,b)))
<pre id=OUT></pre>

Ungolfed এবং ব্যাখ্যা

function f(n, h) {
  var b=[], s=0, result // in golfed version will re-use n for result variable
  n.forEach(function (n) {
    b[n] = -~b[n] // group equal input numbers in buckets
    s+=n          // calc sum of input numbers
  });
  // example of buckets: input 1,1,4,1,5,4 -> b[1]=3,b[4]=2,b[5]=1
  s /= h // total sum / height => sum expected for each brick layer

  // recursive scan function 
  function R(z, // layer count, from h downto 1
             l, // output so far
             p, // current layer partial sums array, mark intervals between bricks
             k, // prev layer parial sums, checked to avoid faulds
             t  // current partial sum 
             ) 
  {
    if (z > 0) 
    { // still building
      b.forEach( function (v,a) { // a:number from input list, v: repeat count 
        var w, m   // locals (in golfed version, reuse other variables avoid defining locals)
        w = t + a; // increased running total for current layer
        if (v != 0  // repeat count still > 0 
           && k.indexOf(w) < 0 // running total not found on list in prev layer (no fault)
           && w <= s) // current layer length not exceeded
        {
           --b[a]; // decrease repeat count, number used one more time
           m = l+"["+ '__'.repeat(a-1) + "]"; // new output with a brick added
           // l is not changed, it will be used again in this loop
           if (w == s) 
           {   // layer complete, go to next (if any)
               // recurse, new layer, add newline to output, p goes in k, and t start at 0 again
               R(z-1, m+'\n', [], p, 0); 
           }
           else
           {   // layer still to complete
               // recurse, same layer, m goes in l, add current sum to array p
               R(z, m, [...p,w], k, w);
           }
           ++b[a]; // restore value of repeat count for current loop
        }
      })
    }   
    else
    { // z == 0, all layers Ok, solution found, save in result and go on to next
      result = l;
    }
  }

  R(h,'',[],[],0);
  return result; // this is the last solution found
}

2

পাইথন 2, গ্রিড পদ্ধতি (290 টি অক্ষর)

x,h=input()
from itertools import *
w = sum(x)*2/h
for p in permutations(x):
 bricks = ''.join('[' + '_'*(2*n-2) + ']' for n in p)
 cols = map(''.join,zip(*zip(*[iter(bricks)]*w)))
 if all(c=='[' for c in cols[0]) and all(c==']' for c in cols[-1]) and not any(']]' in col or '[[' in col for col in cols[1:-1]):
  print('\n'.join(map(''.join,zip(*cols))))
  print()

পদ্ধতি এখানে আপনি একটি জন্য গ্রিড এবং চেহারা জায়গা বদল করুন নেই [[বা ]]যে কোন জায়গায় কলামে। আপনি এটিও পরীক্ষা করে দেখতে পারেন যে প্রাচীরের বাম এবং ডানদিকে সমস্ত ইট আপ রেখেছে: এখানে সুন্দর জিনিসটি এটি পরীক্ষা করে দেখানো হয় যে স্ট্রিংয়ের সমস্ত উপাদান একই:'[[[[[['.strip('[')==''


উপরের মিনি সংস্করণ:

x,h=input()
from itertools import*
w=sum(x)*2/h
z=zip
j=''.join
for p in permutations(x):
 C=map(j,z(*z(*[iter(j('['+'_'*(2*n-2)+']'for n in p))]*w)))
 if C[0].strip('[')==''and C[-1].strip(']')==''and not any(']]'in c or '[['in c for c in C[1:-1]):
  print('\n'.join(map(j,z(*C))))
  break

এটি সম্ভবত ম্যাট্রিক্স-ম্যানিপুলেশন ভাষায় আরও সহজে করা যেতে পারে।

... বা রেজেক্সসের অপব্যবহার যা আমাদের "ব্লকস অ্যালাইন অন" শর্তটি "ক্র্যাকস না" শর্তের সাথে একত্রিত করতে দেয়:

বলুন প্রাচীরের প্রস্থটি ডাব্লু = 6 ছিল। "[..... [", এবং "] .....]" টি স্ট্রিংয়ের অবস্থানগুলি অবশ্যই ঠিক {0, ডাব্লু -1, ডাব্লু, 2 ডাব্লু-1,2 ডাব্লু, 3 ডাব্লু -1 ,. ..}। এই পয়েন্টগুলিতে অস্তিত্বের অর্থ ইটগুলি 'লাইনওয়্যারপ' এর মতো:

       v
[][__][_
___][__]
       ^

এই পয়েন্টগুলিতে না থাকার অর্থ দেয়ালে একটি অস্থির 'ক্র্যাক' রয়েছে:

     vv
[][__][]
[    ][]
     ^^

সুতরাং আমরা সমতা নির্ধারণ করতে সমস্যা হ্রাস করি, যেখানে প্রশ্নগুলির সেটগুলি নিয়মিত প্রকাশের মিলের সূচক।

# assume input is x and height is h

from itertools import *
import re
w=sum(x)*2/h

STACKED_BRACKET_RE = r'(?=\[.{%i}\[|\].{%i}\])'%(w-1,w-1)  # ]....] or [....[
STRING_CHUNK_RE = '.{%i}'%w  # chunk a string with a regex!
bracketGoal = set().union(*[(x*w,x*w+w-1) for x in range(h-1)])  # expected match locations

for p in permutations(x):
 string = ''.join('['+'_'*(2*n-2)+']'for n in p)
 bracketPositions = {m.start() for m in re.finditer(STACKED_BRACKET_RE,string)}
 print(string, bracketPositions, bracketGoal, STACKED_BRACKET_RE) #debug
 if bracketPositions==bracketGoal:
  break

print('\n'.join(re.findall(STRING_CHUNK_RE,string)))

পাইথন, রিজেক্সপ পদ্ধতি (304 অক্ষর):

from itertools import*
import re
x,h=input()
w=sum(x)*2/h
for p in permutations(x):
 s=''.join('['+'_'*(2*n-2)+']'for n in p)
 if {m.start()for m in re.finditer(r'(?=\[.{%i}\[|\].{%i}\])'%(w-1,w-1),s)}==set().union(*[(x*w,x*w+w-1) for x in range(h-1)]):
  break

print('\n'.join(re.findall('.{%i}'%w,s)))

ত্রুটিগুলি যাচাই করতে সরাসরি দেওয়ালের চিত্রের সাথে কাজ করার আকর্ষণীয় ধারণা। আপনার মত ইনপুট নিতে একটি লাইন প্রয়োজন x,h=input()
xnor

0

মতলব (359)

function p(V),L=perms(V);x=sum(V);D=find(rem(x./(1:x),1)==0);for z= 2:numel(D-1)for y=1:numel(L),x=L(y,:);i=D(z);b=x;l=numel(x);for j=1:l,for k=j-1:-1:2,m=sum(x(1:k));if mod(m,i),if mod(m,i)<mod(sum(x(1:k-1)),i)||sum(x(1:j))-m==i,b=0;,end,end,end,end,if b,for j=1:l,fprintf('[%.*s]%c',(b(j)-2)+b(j),ones(9)*'_',(mod(sum(x(1:j)),i)<1)*10);end,return,end;end,end

ইনপুট

পূর্ণসংখ্যার ভেক্টর উদাহরণস্বরূপ: পি ([1 1 2 2 3])

আউটপুট

প্রাচীর উদাহরণের স্কিম:

[____]

[__][]

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