꾸준한 벽돌 벽 만들기


39

벽돌 벽은 가로로 쌓인 가로 1 x n 벽돌로 만들어진 직사각형입니다. 높이 4와 너비 8의 벽이 있으며 오른쪽에 벽돌 크기가 표시되어 있습니다.

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

이 벽은 벽돌 사이에 두 개의 수직 균열이 일렬로 있는 결함 이 있기 때문에 불안정합니다 .

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

그러나 오른쪽의 크기 1 벽돌과 접하는 균열은 행으로 분리되어 있기 때문에 결함을 형성하지 않습니다.

지정된 크기의 벽돌로 구성된 안정적인 벽을 찾아 표시하는 코드를 작성하십시오. 가장 적은 바이트가 이깁니다.

입력

비어 있지 않은 벽돌 크기 목록 (양수)과 높이는 2 이상입니다.이 목록은 원하는 경우 정렬 될 수 있습니다. 또는 각 크기의 벽돌 수를 선택할 수도 있습니다.

산출

주어진 모든 벽돌을 사용하는 필요한 높이의 일정한 직사각형 벽의 그림. 인쇄하거나 줄 바꿈이있는 문자열로 반환하십시오.

대괄호로 둘러싸인 밑줄로 2n 문자로 n 크기의 벽돌을 그립니다.

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
[][__][__]
[__][__][]
[][__][__]
[__][__][]
[][__][__]

왜 n> 1 문자 너비 대신 2n 문자 너비의 벽돌을 만들기로 결정 했습니까?
Sparr

2
@Sparr 1 x 2 문자 블록은 대략 정사각형으로 보입니다. 나는 요구를 시도했지만 n>1그것이 테스트 케이스를 제한하는 방법을 좋아하지 않았다. 또한 분명히 선례가 있습니다.
xnor

나는 n> 1 인 2n을 의미하지 않습니다. 나는 n> 1 인 n을 의미합니다.
Sparr

답변:


20

펄, 166170194

Larry Wall이 만든 언어에 대한 완벽한 작업.

#!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
하, Larry Wall이 사람들이 그런 언어를 사용한다고 생각했는지 궁금합니다. : :
crazyhatfish

12

CJam, 94 92 82 바이트

92 바이트 버전입니다. 다음은 82 바이트 버전입니다.

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

이것은 벽돌을 가능한 모든 방법으로 분할하고 유효한 것을 취합니다. 지금은 꽤 무차별하지만 내 컴퓨터 의 Java 인터프리터 에서 약 10 초 안에 마지막 테스트 사례를 계속 실행합니다 .

설명 :

코드는 5 개 부분으로 나뉩니다.

1) length 배열이 주어지면 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

그런 다음 입력 배열을 H 브릭 레이어로 분할하는 가능한 모든 방법이 있습니다.

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 바이트 버전에 대한 설명을 읽은 경우 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

이 버전에 대한 아이디어는 randomra 님에 의해 제공되었습니다.

온라인으로 해보십시오


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)괄호가 필요하지 않습니다.
PurkkaKoodari

좋은 전화-그것은 continue이전 버전의 유물이었습니다.
sirpercival

1
그것을 실행할 수 없으며, 불필요한 괄호가 W있고 T추가 인수가 전달됩니다.
crazyhatfish

맙소사, 감사합니다! 결정된.
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(높이)를 사용하여 가능한 모든 위치 ( 예 : -> ) 를 통해 모든 순열 lh하위 목록으로 분할합니다 . 연속 된 두 요소의 합이 같고 (브릭의 길이가 동일) 부분합 목록에 공통 요소가없는 요소가 유지됩니다 (예 : 균열이 정렬되지 않음, 기능 ). 맞는 첫 번째 목록을 작성하고 일련의 벽돌을 만드십시오.%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 는 주요 기능입니다.

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

가져 오기를 변경 하고 호출 에서 from itertools import*제거 하여 4 바이트를 절약 할 수 있습니다 . 또한, 끝에 있는 s를 ...로 변경하여 13 바이트를 절약 할 수 있습니다 . itertools.permutationsifif all(x==w[0] for x in w)and~-f(o):return
PurkkaKoodari

또한 f첫 번째 반복에서 항상 반환 되지 않습니까? 이상해 보인다. 그것은 버그이거나 거대한 골프 기회입니다.
PurkkaKoodari

제거한 수 외부 공간의 톤이 - 전후를 견적 / 괄호 / 브래킷 또한 할당하는 등 오퍼레이터 주변 t=0두번을 r(); 그 기능을 map(sum,[x[:i] for i in range(len(x))])하나의 라이너 로 만들 수 있습니다 (원하는 경우 람다에 적합). isdisjoint와 set in f()을 사용하면 크게 줄어 듭니다 ( f()오류가 있는지 여부에 관계없이 현재는 한 번의 테스트 후 반환됩니다). 개인적으로 나는 다시 것 f()같은 return not all(map(isdisjoint,map(set,map(r,w[:-1])),map(set,map(r,w[1:]))))또는 비슷한.
sirpercival

@ Pietu1998 오 예, 공간이 없습니다. 팁 주셔서 감사합니다, 나는 당신이 이러한 것들을 발견 할 수 놀랐습니다.
crazyhatfish

너무 나쁘게 웃으면 서 나는 "우주가 결과를 얻기 전에 끝날지도 모른다"는 그런 종류의 코드를 싫어하지만 이것은 xD를 수행하기 위해 무엇을해야하는지 가장 짧은 바이트입니다
Abr001am

3

자바 스크립트 (ES6) 222 232 265 279 319

여전히 골프를 치러야합니다. 이 솔루션은 모든 솔루션을 찾고 마지막으로 찾은 결과물을 출력하며 매우 빠릅니다.

Firefox에서 스 니펫을 실행하여 테스트

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

Python 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

이것은 아마도 매트릭스 조작 언어로 더 쉽게 이루어질 수 있습니다.

... 또는 정규 표현식의 남용으로 인해 "블록이 끝에서 정렬 됨"조건과 "균열 없음"조건을 결합 할 수 있습니다.

벽의 너비가 w = 6이라고 가정하십시오. 하위 문자열 "[..... ["및 "] .....]"의 위치는 정확히 {0, w-1, w, 2w-1,2w, 3w-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

MATLAB (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

입력

정수로 구성된 벡터, 예 : p ([1 1 2 2 3])

산출

벽 예의 계획 :

[____]

[__][]

[][__]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.