무너지는 매트릭스


18

관련 : 하자의 디자인 숫자 모자이크 , 인쇄 / 출력합니다 L-phabet . 샌드 박스 게시물은 여기

주어진 2 개의 입력이 C = columns and rows, S = starting point다음과 같이 행렬을 출력합니다.

Input 4, 3

1   2   3   0
2   2   3   0
3   3   3   0
0   0   0   0

설명

주어진 C = 4, S = 3

1) C x C채워진 행렬 만들기0

         4 columns
4     _____|____
     |          |
r  --0  0   0   0
o |  0  0   0   0
w |  0  0   0   0
s  --0  0   0   0

2) S행과 열에 값 을 입력 S한 다음에서 1을 빼고 S까지 반복 S = 0합니다. 이 경우S = 3

             Column 3 
S = 3           |
                v
        0   0   3   0
        0   0   3   0
Row 3-->3   3   3   0
        0   0   0   0


         Column 2
S = 2       |
            v
        0   2   3   0
Row 2-->2   2   3   0
        3   3   3   0
        0   0   0   0


     Column 1
S=1     |
        v
Row 1-->1   2   3   0
        2   2   3   0
        3   3   3   0
        0   0   0   0



Final Result

1   2   3   0
2   2   3   0
3   3   3   0
0   0   0   0

규칙

  • 취하다 C >= S >= 0
  • 출력은 행렬, 목록 목록, 배열 (1 차원 또는 2 차원) 등이 될 수 있습니다.
  • 기본 I / O 형식을 통해 입력 할 수 있습니다
  • 프로그램, 기능 등은 1 인덱싱 또는 0 인덱싱 일 수 있습니다. 어느 것을 지정하십시오.

참고 설명은 1- 인덱싱입니다


승리 기준

답변:


6

젤리 , 8 바이트

»>⁴¬×»µþ

온라인으로 사용해보십시오!

작동 원리

젤리의 외부 제품 원자 ( þ)

Jelly의 외부 곱 원자 인을 þ정수 인수 Y (이 경우 X = Y = first argument  )가 주어지면 다음과 같은 튜플 행렬을 생성 하는 빠른 (연산자) 라고 생각할 수 있습니다 .엑스와이엑스=와이=첫 번째 주장 

[(1,1)(2,1)(,1)(엑스,1)(1,2)(2,2)(,2)(엑스,2)(1,와이)(2,와이)(,와이)(엑스,와이)]

또한 모든 쌍에 바로 링크를 적용합니다. 는 두 개의 인수를 사용하여 다음과 같은 것을 생성하는 함수처럼 작동합니다.에프

[에프(1,1)에프(2,1)에프(,1)에프(엑스,1)에프(1,2)에프(2,2)에프(,2)에프(엑스,2)에프(1,와이)에프(2,와이)에프(,와이)에프(엑스,와이)]

현재 진행중인 작업과 어떤 관련이 있습니까?

이것은 예상 된 출력의 모든 값이 최대 인덱스 테이블 일 뿐이며이 최대 값이 두 번째 인수를 초과하면 임을 알 수 있습니다. 따라서이 맵핑을 수행하기 위해 다음 링크를 작성할 수 있습니다.0

»>⁴¬×» – Dyadic (2-argument) link.
»      – Maximum of the X, Y coordinates.
 >⁴    – Check if this exceeds the second argument of the program.
   ¬   – Negate this boolean.
    ×» – And multiply by the maximum, computed again.

6

R , 47 41 바이트

function(C,S,m=outer(1:C,1:C,pmax))m*!m>S

온라인으로 사용해보십시오!

1- 색인. S==C(0이 아님)에 대한 출력을 생성 한 다음 >S행렬 곱셈을 사용하여 값이있는 셀을 0으로 만듭니다 (4 바이트에 대해 Giuseppe에게 감사합니다!).


산뜻한! 곱셈은 ​​당신에게 좋은 마일리지를 줄 것입니다 : 43 바이트
Giuseppe

트윗 담아 가기 나는 두 가지를 더 구할 수 있었다 :)
JayCe


5

하스켈 , 47 45 바이트

출력 형식을 1 차원 목록으로 변경하여 -2 바이트

c&s|x<-[1..c]=[sum[j|j<=s]|j<-x>>=(<$>x).max]

온라인으로 사용해보십시오!

설명

이 용어 x >>= (<$> x) . max는 골프 버전입니다

concat [ max i <$> x | i <- x ]

로 평가됩니다 [1,2,3,4..c, 2,2,3,4..c, 3,3,3,4..c, ..., c,c,c,c..c]. 이제 우리 가 달성 0한 값을 초과 하면 값을 강제로 설정하면됩니다 .ssum [ j | j <= s]





3

젤리 , 6 바이트

⁴Ri»µþ

전체 프로그램 * 촬영 정수 CS정의 정수리스트의리스트의 젤리 표현을 출력 (1 인덱스).

온라인으로 사용해보십시오! (다이어 드 결과를보다 쉽게 ​​읽을 수 있도록 숫자 그리드로 형식화)

어떻게?

⁴Ri»µþ - Main Link: C, S
     þ - outer product with:
    µ  -   the monadic function (i.e. f(x,y) for x in [1..C] for y in [1..C]):
   »   -     maximum (of x and y)
⁴      -     program's 4th argument = 2nd input = S
 R     -     range = [1,2,3,...S]
  i    -     first index of (the maximum) in (the range) or 0 if not found
       - as a full program: implicit print

* 이것이 전체 프로그램 인 이유는 프로그램 인수 액세스를 사용하기 때문입니다 . Dyadic 링크로서이 코드는 그것을 사용하는 프로그램이 어떻게 호출되는지에 의존합니다.
8 바이트 단위로 재사용 할 수있는 2 차원 링크 (왼쪽에서 S, 오른쪽으로 C를 표시) : 8 바이트 단위로 재사용 할 수있는 2 차원 링크 (왼쪽에 C, 오른쪽에 S)RiⱮⱮ»þ`}
RiⱮⱮ⁹»þ¤


2

자바 10, 88 바이트

C->S->{var r=new int[C][C];for(;S>0;)for(int s=S--;s-->0;)r[S][s]=r[s][S]=S+1;return r;}

온라인으로 사용해보십시오.

설명:

C->S->{                     // Method with two int parameters and int-matrix return-type
  var r=new int[C][C];      //  Result-matrix of size `C` by `C`
  for(;S>0;)                //  Loop as long as `S` is not 0 yet:
    for(int s=S--;s-->0;)   //   Inner loop `s` in the range (`S`, 0]
                            //   (and decrease `S` by 1 in the process with `S--`)
      r[S][s]=r[s][S]=S+1;  //    Set the values at both {`S`,`s`} and {`s`,`S`} to `S+1`
  return r;}                //  Return the result

2

PHP , 92 바이트

이것은 "1- 인덱싱"입니다.

<?list(,$c,$s)=$argv;for(;$i++<$c;print"\n")for($j=0;$j++<$c;)echo$s<$i||$s<$j?0:max($i,$j);

그것을 실행하려면 :

php -n <filename> <c> <s>

예:

php -n collapsing_matrice.php 8 6

또는 온라인으로 사용해보십시오!


2

Stax , 10 바이트

▓╜.→,cΘ○╤æ

실행 및 디버깅

작동 방식 :

R(Xm]i*xit+J Full program, implicit input.
R            1-based range of S
 (           Right-pad with zeroes to length C
  X          Save to X register
   m         Map (same as here):
    ]          Wrap in list
     i*        repeat by iteration index
       xit     Remove first  elements from X register
          +    Append
           J   Stringify each element, and join by space


2

Excel VBA, 65 바이트

[A1:B1]범위 에서 입력 및 출력 되는 즉각적인 윈도우 기능 [C1].Resize([A1],[A1]).

[C1].Resize([A1],[A1])=0:For s=-[B1]To-1:[C1].Resize(-s,-s)=-s:Next

입출력

입력이 범위 내에 있습니다 [A1:B1]

I / O



2

MATLAB, 58 바이트 (익명 사용자에게 감사)

function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:j,1:j)=j;end

루프를 실행하여 행렬의 요소를 적절한 수로 채우십시오. 아마도 더 영리 할 수도 있습니다arrayfun


함수의 이름을 지정할 필요가 없으며 zeros(c)어떤 바이트를 안전하게 사용할 수 있습니다 . 또한 Octave 답변을 보았는데 Matlab에서도 작동한다고 생각하십니까?
ბიმო

@ OMᗺ Octave에서는 matlab에서 익명 함수 내의 변수 이름을 지정할 수 없습니다. 또한, max()같은 모양의 인수를해야합니다
AAAAA는 분석 재개 모니카 말한다

1
익명 사용자가 제안했습니다 function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:s,1:s)=j;end.
Jonathan Frech

오 @JonathanFrech 내 훨씬 간단 :-( 단지 필요가되게합니다o(1:j,1:j)=j
AAAAA 모니카 복원 말한다



1

, 19 바이트

Eθ⪫IEEθ⌈⟦ιλ⟧∧‹λη⊕λ 

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 출력을 10 진수로 변환하고 멋지게 형식화하는 데 3 바이트가 사용됩니다. 설명:

 θ                  Input `C`
E                   Map over implicit range
      θ             Input `C`
     E              Map over implicit range
          λ         Inner index
         ι          Outer index
       ⌈⟦  ⟧        Maximium
    E               Map over results
              λ     Current value
               η    Input `S`
             ‹      Less than
                 λ  Current value
                ⊕   Incremented
            ∧       Logical AND
   I                Cast to string
  ⪫                 Join with spaces
                    Implicitly print on separate lines



0

매스 매 티카 44 바이트

Table[If[i <= s && j <= s, Max[i, j], 0], {i, c}, {j, c}]

공백이 필요하다고 확신합니까? 나는 Mathematica를 테스트 할 수는 없지만 그것이 있다고 생각하지 않습니다.
밀 마법사
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.