삼각수


16

(아니, 저것들 은 아닙니다 )

도전

두 개의 입력이 주어집니다. 첫 번째는 양의 정수 n > 0이며 n x n숫자의 직각 삼각형 을 출력하는 데 사용됩니다 1, 2, 3, ... n. 이 삼각형은 모서리에서 시작하여 가로 및 세로로 1 씩, 대각선으로 2 씩 증가합니다. 설명을 위해 아래 예를 참조하십시오. 열 사이에 하나의 공백을 유지하고 모든 숫자를 특정 열에서 오른쪽 정렬로 유지하십시오. (이것은 결국 ).

두 번째 입력 x은 삼각형의 시작 코너 (및 방향)를 결정하는 4 개의 개별 단일 ASCII 문자 중 하나입니다. 예를 들어, 당신은 사용할 수 있습니다 1,2,3,4하거나 a,b,c,d또는 #,*,!,)방향이 어떻게 작동하는지 당신의 대답에 지정하십시오 등.

이 과제를 명확히 1,2,3,4하기 1위해 왼쪽 2위, 오른쪽 위 등을 시계 방향으로 사용합니다.

실시 예

예를 들어 for n = 5x = 1대해 다음을 출력하십시오.

1 2 3 4 5
2 3 4 5
3 4 5
4 5
5

입력 n = 11, x = 1출력 (단일 자리가 오른쪽 정렬되도록 여분의 공간을 주) 다음

 1  2  3  4  5  6  7  8  9 10 11
 2  3  4  5  6  7  8  9 10 11
 3  4  5  6  7  8  9 10 11
 4  5  6  7  8  9 10 11
 5  6  7  8  9 10 11
 6  7  8  9 10 11
 7  8  9 10 11
 8  9 10 11
 9 10 11
10 11
11

입력 n=6x=2출력 :

6 5 4 3 2 1
  6 5 4 3 2
    6 5 4 3
      6 5 4
        6 5
          6

입력 n = 3x = 4출력으로 :

3
2 3
1 2 3

input n = 1과 any x로 출력 :

1

규칙

  • 숫자가 적절하게 정렬되는 경우 선행 / 후행 줄 바꿈 또는 기타 공백은 선택 사항입니다. 예를 들어, 정사각형 출력을 만들기 위해 공백을 사용할 수 있습니다.
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 콘솔로 출력하고 이미지로 저장하거나 문자열 목록으로 반환 할 수 있습니다. 편리하고 허용되는 형식 .
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

이 질문은 + this 입니다. 나는 아직 모른다. 그러나 나는 이것이 그들 중 하나의 속담 인 것처럼 느낀다.
Post Rock Garf Hunter

4
@WheatWizard 이러한 도전 중 하나의 대답을 여기에서 경쟁력을 위해 사소하게 수정할 수 있다고 생각하지 않습니다.
AdmBorkBork

솔직히 말해서 나는 많은 사람들이 복제본을 만드는 것이지만 규칙이 아니라고 말할 수 있습니다. 나에게 중복은 기존 질문에서 제공하지 않은 도전적인 관점에서 아무것도 제공하지 않는 질문입니다.
Post Rock Garf Hunter

2
@WheatWizard 메타 합의 .
AdmBorkBork

나는 그 대답을 읽었습니다. 보다 보편적 인 판결이 아닌보다 구체적인 상황에서의 권고안입니다.
Post Rock Garf Hunter

답변:



1

MATL , 18 바이트

:&YhiX!VZ{' 0'2:YX

첫 번째 입력은 n입니다. 두 번째 입력은입니다 x.

  • 0: 왼쪽 상단
  • 1: 왼쪽 아래
  • 2: 오른쪽 아래
  • 3: 오른쪽 상단

또는 다른 정수일 수 있으며, 이는 모듈로 4로 해석됩니다.

MATL Online 에서 사용해보십시오 !


1

APL (Dyalog) , 29 바이트

{' '@(=∘0)⌽∘⍉⍣⍺⊢↑⌽(⍳+⍵-⊢)¨⍳⍵}

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

어떻게?

¨⍳⍵-각각 i의 범위n

(⍳+⍵-⊢)- i벡터화 된 첨가의 범위를 생성n - i

↑⌽ -뒤집고 평평하게

⌽∘⍉ -우회전

⍣⍺⊢- x

' '@(=∘0) -제로 제거


1

자바 스크립트 130 128 154 142 138 135 133 바이트

* 고정 패딩 문제

A=(n,x)=>(j=>{for(;n--;s=x<3?S+`
`+s:s+S+`
`)
for(S=O,i=j;i;S=i-->n^~-x%3?X+S:S+X)
X=(i>n?i+O:O).padStart(j.length+1)})(n+=s=O="")||s

console.log(A(6,1))
console.log(A(6,2))
console.log(A(6,3))
console.log(A(6,4))

console.log(A(12,1))
console.log(A(12,2))
console.log(A(12,3))
console.log(A(12,4))

/* 154 solution
A=(n,x)=>{s=""
for(j=n;n--;s=x<3?S+`
`+s:s+S+`
`)
for(S="",i=j;i;S=i-->n?~-x%3?S+X:X+S:~-x%3?X+S:S+X)
X=(i>n?i+"":"").padStart((j+"").length+1)
return s
}

142 solution
A=(n,x)=>{s=""
for(j=n;n--;s=x<3?S+`
`+s:s+S+`
`)
for(S="",i=j;i;S=i-->n ^ ~-x%3?X+S:S+X)
X=(i>n?i+"":"").padStart((j+"").length+1)
return s
}

138 solution
A=(n,x)=>{s=""
for(j=n+" ";n--;s=x<3?S+`
`+s:s+S+`
`)
for(S="",i=+j;i;S=i-->n^~-x%3?X+S:S+X)
X=(i>n?i+"":"").padStart(j.length)
return s
}

135 solution
A=(n,x)=>{for(j=n+=s=O="";n--;s=x<3?S+`
`+s:s+S+`
`)
for(S=O,i=j;i;S=i-->n^~-x%3?X+S:S+X)
X=(i>n?i+O:O).padStart(j.length+1)
return s
}
*/


@AdmBorkBork 지금 수정했다고 생각합니다
DanielIndie

0

파이썬 2 , 124120 바이트

n,x=input()
r=range(n)
for l in zip(*[(r+[n]+['']*i)[-n:]for i in r][::1-x%4/2*2])[::1-x/3*2]:print' %%%ds'%len(`n`)*n%l

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 시도하십시오

(r+[n]+['']*i)[-n:]숫자 목록에 일부 빈 문자열을 추가하고, 적당한 크기로 잘라 것 zip으로 [::1-x%4/2*2]하고 [::1-x/3*2]회전을하게되며, %%%ds'%len(`n`)*n(같은 fomating에 대한 문자열을 생성합니다 ' %3s %3s %3s'...+ 빈 문자열 목록 각 번호에 사용되는)


0

Mathematica, 89 바이트

(R=Reverse;Grid[{#&,R/@#&,R[R/@#]&,R@#&}[[#2]]@PadRight@Array[Range[#,s]&,s=#]/. 0->""])&   

여기 TIO에서 작동하는 다른 솔루션이 있습니다.

수학, 122 바이트

(R=Reverse;StringRiffle[""<>ToString/@#&/@({#&,R/@#&,R[R/@#]&,R@#&}[[#2]]@PadRight@Array[#~Range~s&,s=#]/. 0->" "),"\n"])&


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


0

, 39 바이트

Nτ≔EτEτ◧׋⁺ιλτI⊕⁺ιλLθσFN≔⮌EσEσ§μλσEσ⪫ι 

온라인으로 사용해보십시오! 참고 : 후행 공간. 링크는 자세한 버전의 코드입니다. 두 번째 값은 시계 반대 방향 회전 수이므로 0은 왼쪽 상단, 1은 왼쪽 하단, 2는 오른쪽 하단, 3은 오른쪽 상단입니다. 설명:

Nτ                                      Assign the first input as an integer
   EτEτ                                 Map in two dimensions
               ⊕⁺ιλ                     Sum of zero-indexed coordinates plus 1
              I                         Cast to string
         ‹⁺ιλτ                          Is this the upper left triangle?
        ×                               Repeat the string once if so
       ◧           Lθ                   Pad to length of first input
  ≔                  σ                  Assign to variable
                          EσEσ§μλ       Transpose the array
                         ⮌              Reflect the array, giving a rotation
                        ≔        σ      Reassign to variable
                       N                Second input as an integer
                      F                 Repeat that many times
                                  Eσ    Map over array
                                    ⪫ι  Join with spaces and implicitly print

0

자바 (ES6) 241 222 214 바이트

let f = 

    (n,x)=>(L=x=>(''+x).length,M=b=>x&b?(c,i,a)=>a[n-1-i]:c=>c,Array(n).fill(b=' ').map((c,i)=>b.repeat(L(n)-L(++i))+i).map((c,i,a)=>a.map((v,j)=>j>i?b.repeat(L(n)):v)).map(M(1)).map(c=>c.map(M(2))).map(c=>c.join(b)))


function printTriangle() {  // display array of strings returned by f
    o.innerText = f(
       +Length.value, // number
       Rotate.value[0] // ASCII char
    ).join('\n');
}
Length: <input type="text" value="11" id="Length"><br>
Rotate: <input type="text" value="0" id="Rotate"> 0,1,2,3<br>
<button type="button" onclick="printTriangle()">
  OK
</button>
<br>
<pre id="o"></pre>

덜 골프

(n,x)=>(
    L= x=> (''+x).length,                // strlen(x)
    M= b=> x&b ? (c,i,a)=>a[n-1-i] : c=>c, // reverse or identity map
    Array(n).fill(b=' ')
   .map((c,i)=>b.repeat(L(n)-L(++i))+i)  // a complete line of numbers
   .map((c,i,a)=>a.map((v,j)=>j>i?b.repeat(L(n)):v)) // to 2-d array
                                         // with spaces for blank numbers
   .map(M(1))                            // flip vertically?
   .map(c=>c.map(M(2)))                  // flip horizontally?
   .map(c=>c.join(b))                    // convert lines to strings
)

방향에 유의하십시오.

두 번째 매개 변수는 { '0', '1', '2', '3'}의 문자이며 &연산자에 의해 자동으로 숫자로 변환 된 유형 입니다. 숫자의 비트 0 (lsb)이 설정되면 선이 세로로 뒤집 힙니다. 비트 1 (nlsb)이 설정되면 열이 가로로 뒤집 힙니다. 다른 10 진수는 예측 가능한 결과와 함께 사용할 수 있습니다.

후행 공백

출력 문자열의 빈 항목이 공백으로 바뀌어 줄에 방향 '0'과 '1'의 끝에 공백이 있습니다.


0

루아, 250 바이트

function f(w,m)d=""for y=1,w do for x=1,w do d=string.format("%s%"..tostring(w):len().."s ",d,m<2 and(y+x-1<=w and x+y-1 or"")or(m<3 and(x>=y and w-x+y or"")or(m<4 and(y+x-1>=w and w+w-x-y+1 or"")or(y>=x and w-y+x or""))))end;d=d.."\n"end;print(d)end

예제에 설명 된 모드에 대해 1,2,3,4를 사용하여 [w] idth 및 [m] ode 매개 변수를 사용합니다.


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