Số tam giác


16

(không, không phải những người đó )

Các thách thức

Bạn sẽ được cung cấp hai đầu vào. Đầu tiên là một số nguyên dương n > 0, được sử dụng để xuất ra một n x ntam giác vuông của các số 1, 2, 3, ... n. Tam giác này bắt đầu trong một góc và tăng theo chiều ngang và chiều dọc của một và theo đường chéo của hai. Xem các ví dụ dưới đây để làm rõ. Giữ một khoảng trắng giữa các cột và giữ tất cả các số được căn phải trong các cột cụ thể của chúng. (Đây là sau tất cả).

Đầu vào thứ hai x, là một trong bốn ký tự ASCII riêng biệt mà bạn chọn xác định góc bắt đầu của tam giác (và do đó là hướng). Ví dụ: bạn có thể sử dụng 1,2,3,4hoặc a,b,c,dhoặc#,*,!,) , vv Xin vui lòng ghi rõ trong câu trả lời của bạn như thế nào định hướng hoạt động.

Để làm rõ trong thử thách này, tôi sẽ sử dụng 1,2,3,4nó sẽ tương ứng với 1phía trên bên trái, 2cho phía trên bên phải, và theo chiều kim đồng hồ.

Các ví dụ

Ví dụ: cho n = 5, x = 1xuất ra như sau:

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

Đối với đầu vào n = 11, hãy x = 1xuất các mục sau (lưu ý các khoảng trắng thừa để các chữ số đơn được căn phải):

 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

Với đầu vào n=6x=2đầu ra:

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

Với đầu vào n = 3x = 4đầu ra:

3
2 3
1 2 3

Với đầu vào n = 1và bất kỳ x, đầu ra:

1

Những quy định

  • Dòng mới hàng đầu / dấu hoặc khoảng trắng khác là tùy chọn, miễn là các số xếp hàng một cách thích hợp. (Ví dụ, theo dõi khoảng trắng để tạo đầu ra vuông là chấp nhận được).
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Đầu ra có thể là bàn điều khiển, được lưu dưới dạng hình ảnh, được trả về dưới dạng danh sách các chuỗi, v.v ... Bất kỳ định dạng thuận tiện và được phép .
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Câu hỏi này chỉ là cái này + cái này . Tôi chưa biết nhưng tôi cảm thấy như đây là bản sao của một trong số họ.
Thuật sĩ lúa mì

4
@WheatWizard Tôi không nghĩ câu trả lời từ một trong những thách thức đó có thể được sửa đổi một cách tầm thường để cạnh tranh ở đây.
admBorkBork

Thành thật mà nói tôi biết rất nhiều người nói rằng đó là những gì tạo ra một bản sao, nhưng theo như tôi có thể nói đó không phải là một quy tắc. Đối với tôi một bản sao là một câu hỏi không cung cấp gì về thách thức mà không được cung cấp bởi các câu hỏi hiện có.
Thuật sĩ lúa mì

2

Tôi đã đọc câu trả lời đó. Đó là một khuyến nghị trong một bối cảnh cụ thể hơn không phải là một phán quyết phổ quát.
Thuật sĩ lúa mì

Câu trả lời:



1

MATL , 18 byte

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

Đầu vào đầu tiên là n. Đầu vào thứ hai là x, có thể là:

  • 0: trên cùng bên trái
  • 1: phía dưới bên trái
  • 2: góc phải ở phía dưới
  • 3: trên cùng bên phải

(Hoặc nó có thể là bất kỳ số nguyên nào khác, được hiểu theo modulo 4).

Hãy thử nó tại MATL Online!


1

APL (Dyalog) , 29 byte

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

Hãy thử trực tuyến!

Làm sao?

¨⍳⍵- cho mỗi itrong phạm vin

(⍳+⍵-⊢)- sản xuất phạm vi ivới sự bổ sung véc tơn - i

↑⌽ - đảo ngược và làm phẳng

⌽∘⍉ - xoay phải

⍣⍺⊢- xlần

' '@(=∘0) - loại bỏ số không


1

JavaScript 130 128 154 142 138 135 133 byte

* vấn đề đệm cố định

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 tôi nghĩ rằng tôi đã sửa nó ngay bây giờ
DanielIndie

0

Python 2 , 124 120 byte

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

Hãy thử trực tuyến! hoặc Thử tất cả các trường hợp thử nghiệm

(r+[n]+['']*i)[-n:]sẽ thêm một số chuỗi trống vào danh sách số và cắt theo đúng kích thước, zipvới [::1-x%4/2*2][::1-x/3*2]sẽ thực hiện xoay vòng, và %%%ds'%len(`n`)*nsẽ tạo ra một chuỗi để fomating (như ' %3s %3s %3s'...) được sử dụng trên mỗi số + danh sách chuỗi trống


0

Toán học, 89 byte

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

đây là một giải pháp khác hoạt động trong TIO

Toán học, 122 byte

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


Hãy thử trực tuyến!


0

Than , 39 byte

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

Hãy thử trực tuyến! Lưu ý: Không gian lưu trữ. Liên kết là phiên bản dài dòng của mã. Giá trị thứ hai là số vòng quay ngược chiều kim đồng hồ nên 0 là phía trên bên trái, 1 dưới bên trái, 2 dưới bên phải, 3 trên bên phải. Giải trình:

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

Javascript (ES6), 241 222 214 byte

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>

Ít chơi gôn

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

Lưu ý về định hướng.

Tham số thứ hai là một ký tự từ {'0', '1', '2', '3'} và tự động nhập được chuyển đổi thành một số theo & toán tử. Nếu bit 0 (lsb) của số được đặt, các dòng được lật theo chiều dọc. Nếu bit 1 (nlsb) được đặt, các cột được lật theo chiều ngang. Các ký tự chữ số thập phân khác có thể được sử dụng với kết quả dự đoán.

Không gian lưu trữ

Các mục trống trong chuỗi đầu ra đã được thay thế bằng khoảng trắng, có nghĩa là các dòng có khoảng trắng ở các hướng theo hướng '0' và '1'.


0

Lua, 250 byte

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

Lấy tham số [w] idth và [m] ode bằng cách sử dụng 1,2,3,4 cho các chế độ như được mô tả trong ví dụ.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.