Üçgen Sayılar


16

(hayır, o olanlar değil )

Meydan okuma

Size iki giriş verilecektir. Birincisi , sayıların sağ üçgenini n > 0çıktılamak için kullanılan pozitif bir tamsayıdır . Bu üçgen bir köşede başlar ve yatay ve dikey olarak bir ve çapraz olarak iki oranında artar. Açıklama için aşağıdaki örneklere bakın. Sütunlar arasında bir boşluk bırakın ve tüm sayıları kendi sütunlarında sağa hizalayın. ( Sonuçta bu ).n x n1, 2, 3, ... n

İkinci giriş,, xüçgenin başlangıç ​​köşesini (ve dolayısıyla yönünü) belirleyen, seçtiğiniz dört ayrı tek ASCII karakterinden biridir. Örneğin, 1,2,3,4veya a,b,c,dveya #,*,!,)vb. Kullanabilirsiniz . Lütfen yanıtınızda yönün nasıl çalıştığını belirtin.

Bu meydan okumanın içinde açıklama için ben kullanacağı 1,2,3,4uygun olan 1sol üst için 2üst hakkı için ve benzeri saat yönünde.

Örnekler

Örneğin, için n = 5, x = 1çıkış aşağıdaki gibidir:

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

Giriş için n = 11, x = 1çıkış (tek basamaklı sağa hizalı, böylece ilave boşluk olursa) Aşağıdaki:

 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

Giriş n=6ve x=2çıkış ile:

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

Giriş n = 3ve x = 4çıkış ile:

3
2 3
1 2 3

Girdi n = 1ve herhangi bir xçıktı ile:

1

Kurallar

  • Öncü / sondaki yeni satırlar veya diğer boşluklar, numaraların uygun şekilde hizalanması koşuluyla isteğe bağlıdır. (Örneğin, kare çıktı yapmak için sondaki boşluk kabul edilebilir).
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • Çıktı konsola olabilir, görüntü olarak kaydedilebilir, dizeler listesi olarak döndürülebilir, vb. Herhangi bir uygun ve izin verilen format .
  • Standart boşluklar yasaktır.
  • Bu bu nedenle her zamanki golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Bu soru sadece bu + bu . Henüz bilmiyorum ama bunlardan birinin bir kopyası gibi hissediyorum.
Rock Garf Hunter Post

4
@WheatWizard Bu zorluklardan herhangi birinin yanıtlarının burada rekabetçi olacak şekilde önemsiz bir şekilde değiştirilebileceğini düşünmüyorum.
AdmBorkBork

Dürüst olmak gerekirse, birçok insanın neyin kopya olduğunu söyler, ama bunun bir kural olmadığını söyleyebilirim. Bana göre yinelenen soru, mevcut sorular tarafından verilmeyen zorluk açısından hiçbir şey sunmayan bir sorudur.
Rock Garf Hunter Post

2
@WheatWizard Meta mutabakatı .
AdmBorkBork

Bu cevabı okudum. Evrensel bir karar değil, daha spesifik bir bağlamda bir tavsiye.
Rock Garf Hunter Post

Yanıtlar:



1

MATL , 18 bayt

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

İlk girdi n. İkinci girdi x:

  • 0: Sol üst
  • 1: sol alt
  • 2: sağ alt
  • 3: sağ üst

(Veya modulo 4 olarak yorumlanan başka bir tamsayı olabilir).

MATL Online'da deneyin !


1

APL (Dyalog) , 29 bayt

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

Çevrimiçi deneyin!

Nasıl?

¨⍳⍵- her biri için iaralığından

(⍳+⍵-⊢)- ivektörize ilavesiyle ürün yelpazesin - i

↑⌽ - ters ve düzleştir

⌽∘⍉ - sağa döndür

⍣⍺⊢- xkez

' '@(=∘0) - sıfırları kaldır


1

JavaScript 130 128 154 142 138 135 133 bayt

* sabit dolgu sorunları

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 sanırım şimdi
sabitledim

0

Python 2 , 124120 bayt

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

Çevrimiçi deneyin! veya Tüm test senaryolarını deneyin

(r+[n]+['']*i)[-n:]sayısı listeye bazı boş dizeleri ekleyin ve sağ boyutuna doğrayın edecek zipolan [::1-x%4/2*2]ve [::1-x/3*2]rotasyon yapacak ve %%%ds'%len(`n`)*n(gibi fomating için bir dize üretecektir ' %3s %3s %3s'...+ boş dize listesi her numaraları kullanılmak üzere)


0

Mathematica, 89 bayt

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

İşte TIO'da çalışan başka bir çözüm

Mathematica, 122 bayt

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


Çevrimiçi deneyin!


0

Odun kömürü , 39 bayt

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

Çevrimiçi deneyin! Not: Sondaki boşluk. Bağlantı, kodun ayrıntılı versiyonudur. İkinci değer saat yönünün tersine dönüş sayısıdır, bu nedenle 0 sol üst, 1 alt sol, 2 alt sağ, 3 üst sağdır. Açıklama:

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 bayt

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>

Daha Az 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
)

Oryantasyon hakkında not.

İkinci parametre, {'0', '1', '2', '3'} 'den bir karakterdir ve &operatör tarafından otomatik olarak bir sayıya dönüştürülür . Sayının bit 0'ı (lsb) ayarlanırsa, çizgiler dikey olarak çevrilir. Bit 1 (nlsb) ayarlanırsa, sütunlar yatay olarak çevrilir. Diğer ondalık basamak karakterleri tahmin edilebilir sonuçlarla kullanılabilir.

Sondaki Uzaylar

Çıktı dizesindeki boş girdiler boşluklarla değiştirilir, yani satırlar '0' ve '1' yönlerinde arka boşluklara sahiptir.


0

Lua, 250 bayt

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

Örnekte açıklandığı gibi modlar için 1,2,3,4 parametrelerini kullanarak [w] idth ve [m] ode parametrelerini alır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.