Trójkątne Liczby

16

(nie, nie te )

Wyzwanie

Otrzymasz dwa dane wejściowe. Pierwsza to dodatnia liczba całkowita n > 0, która służy do wyprowadzenia n x nprostokąta liczb 1, 2, 3, ... n. Ten trójkąt zaczyna się w rogu i zwiększa się poziomo i pionowo o jeden, a po przekątnej o dwa. Wyjaśnienia znajdują się w poniższych przykładach. Zachowaj jedną spację między kolumnami i zachowaj wyrównanie wszystkich liczb w poszczególnych kolumnach. (W końcu to ).

Drugie wejście,, xjest jednym z czterech odrębnych wybranych znaków ASCII, które określają początkowy narożnik trójkąta (i stąd orientację). Na przykład możesz użyć 1,2,3,4lub a,b,c,dlub #,*,!,)itd. Podaj w odpowiedzi, w jaki sposób działa orientacja.

Aby wyjaśnić to wyzwanie, użyję tego, 1,2,3,4co będzie odpowiadać 1lewy 2górny, prawy górny itd. Zgodnie z ruchem wskazówek zegara.

Przykłady

Na przykład w przypadku n = 5, x = 1wyjście z następujących powodów:

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

Dla wejścia n = 11, x = 1wyjścia następujące (należy zwrócić uwagę na dodatkowe spacje więc pojedyncze cyfry są wyrównane do prawej):

 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

Z wejściem n=6i x=2wyjściem:

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

Z wejściem n = 3i x = 4wyjściem:

3
2 3
1 2 3

Z wejściem n = 1i dowolnym xwyjściem:

1

Zasady

  • Wiodące / końcowe znaki nowej linii lub inne białe znaki są opcjonalne, pod warunkiem, że liczby odpowiednio się wyrównają. (Na przykład dopuszczalne jest końcowe białe znaki, aby uzyskać kwadratowy wynik).
  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
  • Dane wyjściowe mogą być przesyłane do konsoli, zapisane jako obraz, zwrócone jako lista ciągów znaków itp. Dowolny wygodny i dozwolony format .
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło
To pytanie jest właśnie tym + tym . Nie wiem jeszcze, ale wydaje mi się, że to dupek jednego z nich.
Post Rock Garf Hunter
4
@WheatWizard Nie sądzę, aby odpowiedzi na którekolwiek z tych wyzwań można w trywialny sposób zmodyfikować, aby były konkurencyjne.
AdmBorkBork
Szczerze mówiąc, wiem, że wiele osób twierdzi, że to jest duplikat, ale o ile wiem, nie jest to regułą. Dla mnie duplikat jest pytaniem, które nie oferuje żadnych wyzwań, których nie zapewniają istniejące pytania.
Post Rock Garf Hunter
2
@WheatWizard Meta consensus .
AdmBorkBork
Przeczytałem tę odpowiedź. Jest to zalecenie w bardziej konkretnym kontekście, a nie uniwersalne orzeczenie.
Post Rock Garf Hunter

Odpowiedzi:

3

Galaretka , 13 bajtów

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

Wypróbuj online!

Lewy argument: n
Prawy argument: x( 0= lewy 1górny, 2= prawy górny, = lewy 3dolny , = prawy dolny)

Erik the Outgolfer
źródło
1

MATL , 18 bajtów

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

Pierwsze wejście to n. Drugim wejściem xmoże być:

  • 0: lewy górny
  • 1: na dole po lewej
  • 2: prawy dolny
  • 3: w prawym górnym rogu

(Lub może to być dowolna inna liczba całkowita, co jest interpretowane jako modulo 4).

Wypróbuj w MATL Online!

Luis Mendo
źródło
1

APL (Dyalog) , 29 bajtów

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

Wypróbuj online!

W jaki sposób?

¨⍳⍵ - dla każdego i w zakresien

(⍳+⍵-⊢)- produkować wachlarz z idodatkiem wektoryzacjin - i

↑⌽ - odwrócić i spłaszczyć

⌽∘⍉ - Obróć w prawo

⍣⍺⊢ - x razy

' '@(=∘0) - usuń zera

Uriel
źródło
1

JavaScript 130 128 154 142 138 135 133 bajtów

* naprawiono problemy z wypełnianiem

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
źródło
@AdmBorkBork Myślę, że naprawiłem to teraz
DanielIndie
0

Python 2 , 124 120 bajtów

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

Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe

(r+[n]+['']*i)[-n:]doda kilka pustych ciągów znaków do listy liczb i pokroi na odpowiedni rozmiar, za zippomocą [::1-x%4/2*2]i [::1-x/3*2]wykona obrót, i %%%ds'%len(`n`)*nwygeneruje ciąg do wyrzucenia (podobny ' %3s %3s %3s'...) do użycia na każdej liczbie + pusta lista ciągów

Pręt
źródło
0

Mathematica, 89 bajtów

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

oto kolejne rozwiązanie, które działa w TIO

Mathematica, 122 bajty

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


Wypróbuj online!

J42161217
źródło
0

Węgiel drzewny , 39 bajtów

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

Wypróbuj online! Uwaga: końcowe miejsce. Link jest do pełnej wersji kodu. Druga wartość to liczba obrotów w lewo, więc 0 to górny lewy, 1 dolny lewy, 2 dolny prawy, 3 górny prawy. Wyjaśnienie:

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
źródło
0

JavaScript (ES6), 241 222 214 bajtów

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>

Mniej golfa

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

Uwaga na temat orientacji.

Drugi parametr to znak z {„0”, „1”, „2”, „3”} i typ automatycznie konwertowany na liczbę przez &operatora. Jeśli ustawiony jest bit 0 (lsb) liczby, linie są odwracane w pionie. Jeśli ustawiony jest bit 1 (nlsb), kolumny są odwracane w poziomie. Inne znaki dziesiętne mogą być użyte z przewidywalnymi wynikami.

Spacje końcowe

Puste wpisy w ciągu wyjściowym zostały zastąpione spacjami, co oznacza, że ​​linie mają końcowe spacje w orientacjach „0” i „1”.

traktor53
źródło
0

Lua, 250 bajtów

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

Przyjmuje parametry [w] idth i [m] ode przy użyciu 1,2,3,4 dla trybów opisanych w przykładzie.

Paplać
źródło
0

05AB1E (61 bajtów)

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

Wypróbuj online

David Smith
źródło