N
Geben Sie bei einer gegebenen Zahl ein rechtwinkliges NxN-Dreieck aus, in dem jede Zeile i
mit Zahlen bis zu gefüllt ist i
.
Beispiel
n = 0
(keine Leistung)
n = 4
1
1 2
1 2 3
1 2 3 4
n = 10
1
1 2
1 2 3
.
.
.
1 2 3 4 5 6 7 8 9 10
(keine Ausrichtung erforderlich)
n = N
1
1 2
1 2 3
.
.
.
1 2 3 4 .... N
Am Ende jeder Zeile steht kein Leerzeichen.
Die geringste Anzahl von Bytes gewinnt, und Standardlücken sind nicht zulässig.
Antworten:
Joe ,
53 Bytes (+2 oder +3 für-t
Flag)Nun, anscheinend habe ich nicht das volle Potenzial von Joe ausgeschöpft. Dies war möglich, als ich dies zum ersten Mal gepostet habe.
Hier
R
gibt der Bereich von 0 bis n, exklusiv. Nimmt\A
dann aufeinanderfolgende Präfixe davon (A
ist die Identitätsfunktion). Beispiele:Mit
-t
Flag (Hinweis: Dies ist jetzt die Standardausgabe, auch ohne Flag):Ohne es:
Die Regeln wurden ein wenig geändert. Mein alter Code hat sich mit N = 0 nicht richtig verhalten. Außerdem könnte die Ausgabe jetzt nur eine verschachtelte Liste sein, sodass
-t
sie gelöscht werden kann.Nun
Rn
gibt es einen Bereich von 0 bis n, exklusiv. Wenn 0 angegeben wird, wird eine leere Liste zurückgegeben.1+
Fügt jedem Element dieses Bereichs 1 hinzu.1R
ordnet die Werte den Bereichen 1 bis x zu. Wenn leere Lügen zugeordnet sind, werden leere Listen zurückgegeben.Beispielausgabe:
Update: Mir ist gerade etwas aufgefallen. Die Funktion ordnet automatisch Elementen mit Rang 0 zu. Das folgende Beispiel wird mit
-t
flag ausgeführt.Alt: 5 Bytes (mit dem
-t
Flag)Dies ist eine anonyme Funktion, die eine Zahl aufnimmt, eine Liste von 1 bis N (
1Rn
) erstellt und diese Werte dem vorhergehenden Bereich zuordnet, wobei für jedes Element des Bereichs 1 bis N ein Bereich von 1 bis x angegeben wird.Das
-t
Flag gibt die Ausgabe als J-ähnliche Tabelle aus.Hinweis: Die Sprache ist sehr neu und nicht vollständig, aber die neueste Version wurde vor dieser Herausforderung veröffentlicht.
quelle
Python 3,
4845 BytesHurra für Nebenwirkungen.
quelle
print
, um dieprint
s in umgekehrter Reihenfolge auszuführen .APL, 5
erzeugt einen Vektor 1..n und für jedes Element einen anderen solchen Vektor.
Dann macht ⍪ aus allen Vektoren eine Spalte. Dies vermeidet das Problem mit nachgestellten Leerzeichen.
Probieren Sie es auf tryapl.org
Ältere Lösung:
Erzeugt einen Vektor 1..n.
{⎕ ← ⍳⍵} ist eine Funktion, die für jedes (¨) Element einen Vektor 1..n in einer separaten Zeile ausgibt
Dieser kann leider nicht auf tryapl.org ausprobiert werden, da ⎕ ← dort nicht funktioniert.
quelle
J, 27 Bytes
J ist nicht gut mit numerischer Ausgabe ohne Array. Diese Funktion erstellt eine korrekt formatierte Zeichenfolge aus den Zahlen.
Probieren Sie es hier online aus.
quelle
]\@i.
, um;@(<@,&LF@":@:>:@:]\@i.)
PHP, 53 Bytes
Edit 2: Ismael Miguel schlug vor, von der Eingabe zu lesen, anstatt eine Funktion zu definieren. Die Punktzahl für PHP beträgt jetzt 53 Byte:
Und noch einmal, es kann verbessert werden, wenn PHP so konfiguriert ist, dass Fehler ignoriert werden (52 Bytes):
Bearbeiten: Austin schlug eine 60-Byte-Version in den Kommentaren vor:
Was verbessert werden kann, wenn wir keine PHP-Fehler anzeigen (59 Bytes):
$a
Speichert die nächste Zeile, die gedruckt wird, und jedes Mal, wenn sie gedruckt wird, werden ein Leerzeichen und die nächste Zahl (dieprint
immer zurückkehrt1
) damit verknüpft.Rekursive Funktionen (65 Bytes):
Kürzere rekursive Funktion mit deaktivierter Fehlerberichterstattung (64 Byte):
Noch kürzere rekursive Funktion mit deaktivierter Fehlerberichterstattung und einer Leerzeile vor der tatsächlichen Ausgabe (62 Byte):
Nur zum Spaß, nicht-rekursive Funktionen:
quelle
for($a=1;@$i<$n;$a.=" ".(@++$i+print"$a\n"));
for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));
(44 Bytes)function f($n){for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));}
, das sind 60 Bytes.for($a=1;$i++<$n=$_GET[n];$a.=" ".($i+print"$a\n"));
-> versuche dies (vollständiger Code, benutze URL-Parametern
mit der Nummer)CJam,
1312 BytesWie es funktioniert :
Probieren Sie es hier online aus
quelle
Pyth, 9 Bytes
Wirklich gedacht, dass dies kürzer gemacht werden kann, aber es scheint nicht so.
Probieren Sie es online aus .
quelle
VQaYhNjdY
. Wenn nura
die Liste zurückgegeben würde, wäre so etwas wieVQjdaYhN
8.a
kurz verwendet, um die angehängte Liste zurückzugeben.N+1+1-1
?r
ist die Python-Range-Funktion, daher der -1 (r1N
erstellt die Liste[1, 2, ..., N-1]
). Aber in der N - ten Iteration der Schleife, möchte ich die Liste[1, 2, ..., N+1]
, deshalb muss ich hinzufügen2
zuN
.r1hhN
übersetzt direkt zurange(1, N+1+1)
. Eine andere Möglichkeit wärer1+N2
(range(1, N+2)
).mhdhN
, aber das ist ein ganz anderer Ansatz.JavaScript (ES6) 49
52Eine so einfache Aufgabe, ich frage mich, ob dies in JS kürzer gemacht werden kann (Update: ja, mit Rekursion)
Rekursiv 49
Iteraive 52
quelle
Java,
8584 BytesDies ist in Java überraschend kurz.
Eingerückt:
1 Byte dank Bigtoes / Geobits
quelle
b+=...
in bewegenprintln(b+=...)
.Prolog - 119
quelle
Python 2 -
625465 Bytesquelle
n
sollte als Eingabe für das Programm angegeben und nicht in einer Variablen initialisiert werden.N
indem Sie tunN=input()
oder etwas Ähnliches, damit Ihr Programm als solches ausgeführt werden kann. Hier ist eine Metadiskussion zum Thema.J, 9 Zeichen
Als stillschweigendes, monadisches Verb.
i. y
- die Nummern von0
bisy - 1
.1 + i. y
- die Nummern von1
bisy
.": y
- Dery
als Zeichenfolge dargestellte Vektor .":\ y
- Jedes Präfix wirdy
als Zeichenfolge dargestellt.":\ 1 + i. y
- jedes Präfix der Nummern von1
bis wirdy
als Zeichenmatrix dargestellt.quelle
> <> (Fisch) ,
4037 + 3 = 40 BytesWiederum macht sich> <> bei einer anderen Zifferndruckübung anständig. Mit dem
-v
Flag für die Eingabe ausführen, zErläuterung
quelle
C (ohne Schleifen, ja!) - 72 Bytes
Dadurch wird eine Funktion erstellt
r(n)
, die folgendermaßen verwendet werden kann:Sehen Sie es in Aktion, hier auf tutorialspoint.com
Es erfordert ein paar Tricks, die sich leicht erklären lassen. Ich denke, es kann stark verbessert werden.
quelle
b(n,c){if(n){b(n-1,32);printf("%d%c",n,c);}}r(n){if(n){r(n-1);b(n,10);}}
b(n,c){n&&b(n-1,32)^printf("%d%c",n,c);}r(n){n&&r(n-1)^b(n,10);}
WandboxPython 2 - 72
quelle
p
. In einem anderen Fall können Sie zwei Leerzeichen entfernen - eines zwischenprint
und'\n'
und das andere zwischen)))
undfor
.def p(N):print'\n'.join(' '.join(map(str,range(1,i+2)))for i in range(N))
Perl, 28
Liest den Parameter von stdin.
Von der Kommandozeile:
Aber ich weiß jetzt nicht, wie ich das zählen soll (wahrscheinlich zwischen 25 und 29).
quelle
Python
quelle
for i in range(int(input())):print(' '.join("123456789"[:i+1]))
- Beachten Sie, dass Zeichenfolgen als Listen behandelt werden.Golfscript 14
Erwartet, dass die Eingabenummer auf dem Stapel vorhanden ist.
Online Beispiel: Link
quelle
Clip , 16
Erläuterung
quelle
Gehen,
9381789390 BytesAktuelle ungolfed
Wenn wir N> 9 verarbeiten müssen, können wir das Folgende bei 78 Bytes verwenden, es erfordert jedoch den Import des
fmt
Pakets.Wenn wir die Import-Anweisung einschließen, bin ich jetzt wieder bei meiner Initiale
939290 BytesTesten Sie es online hier: http://play.golang.org/p/BWLQ9R6ilw
Die Version mit
fmt
ist hier: http://play.golang.org/p/hQEkLvpiqtquelle
!=
zu>
allerdings.import
Aussage trotzdem zählen sollZX / Sinclair BASIC - 39 Bytes
ZX Basic verwendet 1 Byte pro Schlüsselwort (alle Wörter in Großbuchstaben), um die Bytegröße etwas zu verringern ...
Mit n = 8
quelle
VAL("1")
(6 Bytes als VAL ist 1) statt1
(7 Bytes))R 28
quelle
[1]
gegen die Spezifikation verstößt.1; 1 0
. (So tun als ob;
sich einen Zeilenumbruch vor.)cat(1:i,"\n")
. Obwohl es etwas länger als istprint(1:i)
, enthält es keinen Zeilenabstand[1]
in jeder Zeile.TI-Basic, 28 Bytes
quelle
C 89 Zeichen
Um Verwirrung zu beseitigen
puts("");
. Dies druckt einfach ein Newline-Zeichen (wie hier zu sehen ):Ich habe es mit @ TheBestOnes Java-Algorithmus etwas kürzer gemacht:
quelle
puts("");
tut nichts. Sie könnenchar b[999]=""
anstelle vonchar b[999]={0}
1 Zeichen speichern.puts("");
druckt ein Zeilenumbruchzeichen.Perl: 34 Zeichen
Dieser Code erhält die Eingangsnummer, die durch die spezielle Variable geliefert wird
$_
.quelle
print"@$_\n"for map[1..$_],1..$_
funktioniert auch.94 Bytes
Geschrieben als anonyme Funktion, die eine Zeichenfolge zurückgibt, die von der Spezifikation nicht unzulässig zu sein scheint.
Hier ist eine ungolfed Version (Kommentare werden in BDCA-Reihenfolge gelesen):
quelle
Bash + Coreutils, 26 Bytes
seq
generiert einfach die Zahlen 1 bis nsed
Speichert die gesamte Ausgabe für eine bestimmte Zeile im Haltebereich und fügt die nächste Zeile hinzu.quelle
Haskell,
62-57BytesPunktfreier Stil. Anwendungsbeispiel:
quelle
e=enumFromTo 1
spart 7 Bytes.enumFromTo 1
, muss ich der Hauptfunktion auch einen Namen geben, also sind es 5 Bytes. Ohne den Namen wäre es einlet
Konstrukt:let e=enumFromTo 1 in (putStr.unlines.map(unwords.map show.e).e) 5
Mathematica, 32
quelle
TableForm[Range/@Range@#]&
?Grid[Range/@Range@#]&
Grid
.)Scala,
736562 BytesUngolfed
quelle