Bilangan Segitiga

16

(tidak, bukan yang itu )

Tantangan

Anda akan diberikan dua input. Yang pertama adalah bilangan bulat positif n > 0, yang digunakan untuk menampilkan n x nsegitiga siku-siku angka 1, 2, 3, ... n. Segitiga ini dimulai di sudut dan meningkat secara horizontal dan vertikal dengan satu dan diagonal dua. Lihat contoh di bawah ini untuk klarifikasi. Pertahankan satu spasi di antara kolom dan pertahankan agar semua angka tetap lurus di kolom tertentu. ( ini ).

Input kedua x,, adalah salah satu dari empat karakter ASCII tunggal yang berbeda dari pilihan Anda yang menentukan sudut awal segitiga (dan karenanya orientasi). Misalnya, Anda bisa menggunakan 1,2,3,4atau a,b,c,datau #,*,!,), dll Silakan tentukan dalam jawaban Anda bagaimana orientasi bekerja.

Untuk klarifikasi dalam tantangan ini, saya akan menggunakan 1,2,3,4yang akan sesuai dengan 1untuk kiri atas, 2untuk kanan atas, dan seterusnya searah jarum jam.

Contohnya

Sebagai contoh, untuk n = 5, x = 1output berikut:

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

Untuk input n = 11, x = 1keluarkan yang berikut (perhatikan spasi tambahan sehingga digit tunggal sejajar dengan benar):

 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

Dengan input n=6dan x=2output:

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

Dengan input n = 3dan x = 4, output:

3
2 3
1 2 3

Dengan input n = 1dan apa pun x, output:

1

Aturan

  • Leading / trailing newlines atau spasi putih lainnya adalah opsional, asalkan nomornya berbaris dengan tepat. (Misalnya, membuntuti spasi putih untuk membuat output kuadrat dapat diterima).
  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Output dapat berupa konsol, disimpan sebagai gambar, dikembalikan sebagai daftar string, dll . Format apa pun yang nyaman dan diizinkan .
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber
Pertanyaan ini hanya ini + ini . Saya belum tahu, tetapi saya merasa ini adalah penipuan dari salah satu dari mereka.
Post Rock Garf Hunter
4
@WheatWizard Saya tidak berpikir jawaban dari salah satu tantangan itu dapat dimodifikasi untuk menjadi kompetitif di sini.
AdmBorkBork
Sejujurnya saya tahu banyak orang mengatakan itu yang membuat duplikat, tapi sejauh yang saya tahu itu bukan aturan. Bagi saya duplikat adalah pertanyaan yang tidak menawarkan apa pun dalam hal tantangan yang tidak disediakan oleh pertanyaan yang ada.
Post Rock Garf Hunter
2
@WheatWizard Meta konsensus .
AdmBorkBork
Saya sudah membaca jawaban itu. Ini adalah rekomendasi dalam konteks yang lebih spesifik bukan hukum universal.
Post Rock Garf Hunter

Jawaban:

3

Jelly , 13 byte

Rṫ`z⁶ṚH}¡U⁹¡G

Cobalah online!

Argumen kiri: Argumen n
kanan: x( 0= kiri 1atas, 2= kanan atas, = kiri 3bawah , = kanan bawah)

Erik the Outgolfer
sumber
1

MATL , 18 byte

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

Input pertama adalah n. Input kedua adalah x, yang dapat berupa:

  • 0: kiri atas
  • 1: kiri bawah
  • 2: kanan bawah
  • 3: kanan atas

(Atau bisa juga bilangan bulat lainnya, yang ditafsirkan modulo 4).

Cobalah di MATL Online!

Luis Mendo
sumber
1

APL (Dyalog) , 29 byte

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

Cobalah online!

Bagaimana?

¨⍳⍵ - untuk setiap i dalam kisarann

(⍳+⍵-⊢)- Menghasilkan kisaran idengan penambahan vektorn - i

↑⌽ - mundur dan ratakan

⌽∘⍉ - Putar ke kanan

⍣⍺⊢- xkali

' '@(=∘0) - hapus nol

Uriel
sumber
1

JavaScript 130 128 154 142 138 135 133 byte

* Memperbaiki masalah padding

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
}
*/

DanielIndie
sumber
@ AdmBorkBork saya pikir saya memperbaikinya sekarang
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

Cobalah online!atau Coba semua test case

(r+[n]+['']*i)[-n:]akan menambahkan beberapa string kosong ke daftar nomor, dan memotong ke ukuran yang tepat, zipdengan [::1-x%4/2*2]dan [::1-x/3*2]akan membuat rotasi, dan %%%ds'%len(`n`)*nakan menghasilkan string untuk fomating (seperti ' %3s %3s %3s'...) untuk digunakan pada setiap angka + daftar string kosong

tongkat
sumber
0

Mathematica, 89 bytes

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

di sini adalah solusi lain yang bekerja di TIO

Mathematica, 122 byte

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


Cobalah online!

J42161217
sumber
0

Arang , 39 bytes

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

Cobalah online! Catatan: Ruang tambahan. Tautan adalah untuk mengucapkan versi kode. Nilai kedua adalah jumlah rotasi berlawanan arah jarum jam sehingga 0 adalah kiri atas, 1 kiri bawah, 2 kanan bawah, 3 kanan atas. Penjelasan:

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
Neil
sumber
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>

Kurang Golf

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

Catatan tentang orientasi.

Parameter kedua adalah karakter dari {'0', '1', '2', '3'} dan secara otomatis mengetik dikonversi ke angka oleh & operator. Jika bit 0 (lsb) dari angka diatur, garis dibalik secara vertikal. Jika bit 1 (nlsb) diatur, kolom-kolom dibalik secara horizontal. Karakter angka desimal lainnya dapat digunakan dengan hasil yang dapat diprediksi.

Trailing Spaces

Entri kosong dalam string keluaran telah diganti dengan spasi, yang berarti garis memiliki spasi tambahan dalam orientasi '0' dan '1'.

traktor53
sumber
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

Mengambil parameter [w] idth dan [m] ode menggunakan 1,2,3,4 untuk mode seperti dijelaskan dalam contoh.

Pengobrol
sumber
0

05AB1E (61 byte)

F¹N-LN+¹N-LN+Rõ¸N∍s«N>LN¹<--N>LN¹<--Rõ¸¹<N-∍s«)²èvy¹gyg-ú}ðý,

Cobalah online

David Smith
sumber