Dreieckige Zahlen


16

(nein, nicht diese )

Die Herausforderung

Sie erhalten zwei Eingänge. Die erste ist eine positive Ganzzahl n > 0, mit der ein n x nrechtwinkliges Dreieck der Zahlen ausgegeben wird 1, 2, 3, ... n. Dieses Dreieck beginnt in einer Ecke und vergrößert sich horizontal und vertikal um eins und diagonal um zwei. Zur Verdeutlichung siehe nachfolgende Beispiele. Lassen Sie einen Abstand zwischen den Spalten und richten Sie alle Zahlen in den jeweiligen Spalten rechtsbündig aus. (Das ist doch ).

Die zweite Eingabe xist eines von vier verschiedenen einzelnen ASCII-Zeichen Ihrer Wahl, die die Startecke des Dreiecks (und damit die Ausrichtung) bestimmen. Zum Beispiel könnten Sie 1,2,3,4oder a,b,c,doder #,*,!,)usw. verwenden. Bitte geben Sie in Ihrer Antwort an, wie die Ausrichtung funktioniert.

Zur Verdeutlichung dieser Herausforderung verwende ich, 1,2,3,4was 1links 2oben, rechts oben usw. im Uhrzeigersinn entspricht.

Die Beispiele

Zum Beispiel für n = 5, x = 1Ausgabe wie folgt vor :

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

Für die Eingabe n = 11, x = 1die folgende Ausgabe (beachten Sie die zusätzlichen Leerzeichen so werden die einzelnen Ziffern rechtsbündig):

 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

Mit Ein- n=6und x=2Ausgang:

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

Mit Eingabe n = 3und x = 4Ausgabe:

3
2 3
1 2 3

Mit input n = 1und any x, output:

1

Die Regeln

  • Führende / nachfolgende Zeilenumbrüche oder andere Leerzeichen sind optional, sofern die Zahlen richtig ausgerichtet sind. (Zum Beispiel ist es akzeptabel, Leerzeichen nachzustellen, um eine quadratische Ausgabe zu erhalten.)
  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Die Ausgabe kann auf der Konsole erfolgen, als Bild gespeichert, als Liste von Zeichenfolgen usw. zurückgegeben werden. Beliebiges praktisches und zulässiges Format .
  • Standardlücken sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.

Diese Frage ist genau das + das . Ich weiß es noch nicht, aber ich glaube, das ist ein Betrug von einem von ihnen.
Weizen-Assistent

4
@WheatWizard Ich glaube nicht, dass Antworten aus diesen beiden Herausforderungen einfach modifiziert werden können, um hier wettbewerbsfähig zu sein.
AdmBorkBork

Um ehrlich zu sein, ich weiß, dass viele Leute das sagen, was ein Duplikat ausmacht, aber soweit ich das beurteilen kann, ist es keine Regel. Für mich ist ein Duplikat eine Frage, die in Bezug auf die Herausforderung nichts bietet, was nicht durch vorhandene Fragen bereitgestellt wird.
Weizen-Assistent

2
@ WheatWizard Meta-Konsens .
AdmBorkBork

Ich habe diese Antwort gelesen. Es ist eine Empfehlung in einem spezifischeren Kontext, keine universelle Entscheidung.
Weizen-Assistent

Antworten:



1

MATL , 18 Bytes

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

Erste Eingabe ist n. Die zweite Eingabe lautet x:

  • 0: oben links
  • 1: unten links
  • 2: unten rechts
  • 3: oben rechts

(Oder es kann eine beliebige andere Ganzzahl sein, die als Modulo 4 interpretiert wird).

Probieren Sie es bei MATL Online!


1

APL (Dyalog) , 29 Bytes

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

Probieren Sie es online!

Wie?

¨⍳⍵ - für jedes i im Bereich vonn

(⍳+⍵-⊢)- Produktreihe imit vektorisierter Addition vonn - i

↑⌽ - umkehren und abflachen

⌽∘⍉ - nach rechts drehen

⍣⍺⊢ - x mal

' '@(=∘0) - Nullen entfernen


1

JavaScript 130 128 154 142 138 135 133 Bytes

* Probleme mit der Polsterung behoben

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 Ich glaube, ich habe es jetzt
behoben

0

Python 2 , 124 120 Bytes

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

Probieren Sie es online! oder Probieren Sie alle Testfälle aus

(r+[n]+['']*i)[-n:]fügt auf die richtige Größe, einige leere Strings in der Nummernliste und hacken zipmit [::1-x%4/2*2]und [::1-x/3*2]wird die Drehung machen, und %%%ds'%len(`n`)*nwird eine Zeichenfolge für fomating (wie erzeugen ' %3s %3s %3s'...) auf jeder Zahlen + leeren String - Liste verwendet werden


0

Mathematica, 89 Bytes

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

Hier ist eine andere Lösung, die in TIO funktioniert

Mathematica, 122 Bytes

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


Probieren Sie es online!


0

Kohle , 39 Bytes

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

Probieren Sie es online! Hinweis: Leerzeichen am Ende. Link ist eine ausführliche Version des Codes. Der zweite Wert ist die Anzahl der Umdrehungen gegen den Uhrzeigersinn, sodass 0 links oben, 1 links unten, 2 rechts unten und 3 rechts oben ist. Erläuterung:

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 Bytes

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>

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

Hinweis zur Orientierung.

Der zweite Parameter ist ein Zeichen aus {'0', '1', '2', '3'} und wird vom &Bediener automatisch in eine Zahl umgewandelt . Wenn das Bit 0 (lsb) der Zahl gesetzt ist, werden die Zeilen vertikal gespiegelt. Wenn Bit 1 (nlsb) gesetzt ist, werden Spalten horizontal gespiegelt. Andere Dezimalstellen können mit vorhersagbaren Ergebnissen verwendet werden.

Nachgestellte Leerzeichen

Leere Einträge in der Ausgabezeichenfolge wurden durch Leerzeichen ersetzt. Dies bedeutet, dass Zeilen in den Ausrichtungen '0' und '1' nachgestellte Leerzeichen haben.


0

Lua, 250 Bytes

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

Übernimmt die Parameter [w] idth und [m] ode unter Verwendung von 1,2,3,4 für die im Beispiel beschriebenen Modi.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.