Diese Konstruktion repräsentiert die natürlichen Zahlen.
In dieser Darstellung ist 0 als leere Menge definiert und für alle anderen Zahlen ist n die Vereinigung von {0} und {n-1}.
Um beispielsweise 3 zu konstruieren, können wir dem Algorithmus folgen:
3 =
{ø, 2} =
{ø, {ø, 1}} =
{ø, {ø, {ø}}}
Aufgabe
Wie Sie vielleicht erraten haben, besteht Ihre Aufgabe darin, eine natürliche Zahl (einschließlich Null) aufzunehmen und ihre Konstruktion auszugeben.
Sie können entweder als Zeichenfolge oder als festgelegtes Objekt ausgeben, wenn Ihre Sprache solche Objekte unterstützt.
Wenn Sie sich für die Ausgabe als Zeichenfolge entscheiden, sollten Sie einen Satz mit geschweiften Klammern ( {}
) darstellen. Optional können Sie die leere Menge als darstellen ø
(andernfalls sollte es sich um eine Menge ohne Einträge handeln {}
). Sie können auch Kommas und Leerzeichen zwischen und nach den Einträgen in der Gruppe einfügen.
Bestellen Sie ist nicht wichtig, aber Sie können nicht irgendwelche sich wiederholende Elemente in den Sätzen Sie Ausgang (zB {ø,ø}
)
Das ist Code-Golf, also ist das Ziel, die wenigsten Bytes zu haben
Testfälle
Hier sind einige Testfälle mit einigen Beispielausgaben.
0 -> {}
1 -> {{}}
2 -> {{}{{}}}
3 -> {{}{{}{{}}}}
4 -> {{}{{}{{}{{}}}}}
quelle
Antworten:
Python , 28 Bytes
Probieren Sie es online!
Dies ist eine ziemlich fade Lösung für das Problem. Für Zahlen größer als Null können Sie die Darstellung mit der Zeichenfolgenformel erhalten
"{{}"*x+"}"*x
. Dies funktioniert jedoch nicht für Null, wenn dies die leere Zeichenfolge ist. Wir können diese Tatsache nutzen, um einen Kurzschlussor
zu verursachen und den leeren Satz zurückzugeben.Ich wollte Pythons eingebaute Set-Objekte verwenden, um dieses Problem zu lösen, aber leider:
Sie können Sets nicht in Sets in Python einfügen.
quelle
x
,"{{}"*x+x*"}"or
um ein Byte zu speichernf=
könnte entfernt werden.frozenset
aber niemand hat Bytes dafür ...Haskell , 37 Bytes
Probieren Sie es online!
Bis vor 10 Minuten hätte eine Antwort wie diese keinen Sinn für mich ergeben. Alle Credits gehen auf diese Tippantwort .
Grundsätzlich verwenden wir
>>
asconcat $ replicate
(aber übergeben ihm eine Liste mit n Elementen anstelle von einfach n) und=<<
as , wobei wirconcatMap
dann jede Zeichenfolge in der Liste n-mal replizieren und das Ergebnis in eine einzelne Zeichenfolge verketten.Der
0
Fall wird separat behandelt, als würde er eine leere Zeichenfolge zurückgeben.quelle
f 1
machen, damit es richtig funktioniertJavaScript, 28 Bytes
Stellt Mengen mithilfe von Arrays dar. Nicht rekursive 38-Byte-Lösung:
Gibt die Beispielausgabezeichenfolgen zurück.
quelle
Mathematica, 27 Bytes
Bei dieser Anzahl von Bytes habe ich zwei Lösungen:
quelle
#//.{1->{{}},x_/;x>1->{{},x-1}}&
. Obwohl ich vermute, dass es Eingang 0 vermasseltPerl 6 , 37 Bytes
Versuch es
Erweitert:
quelle
:
oder ist dies etwas Neues in Perl 6?05AB1E ,
65 BytesCode
Verwendet die CP-1252- Codierung. Probieren Sie es online! oder Überprüfen Sie alle Testfälle! .
Erläuterung
quelle
F¯)
geht das nichtn=0
, da die Ausgabe leer ist (keine leere Menge).Netzhaut , 22 Bytes
Probieren Sie es online!
Erläuterung
Konvertieren Sie die Eingabe in Unary.
Ersetzen Sie jede unäre Ziffer durch
{{}
und drucken Sie das Ergebnis ohne nachfolgenden Zeilenvorschub (\
).Entfernen Sie die Öffnungen
{
, damit die verbleibenden}
genau diejenigen sind, die noch gedruckt werden müssen, um alle Sätze zu schließen. Das obige Verfahren schlägt jedoch bei Eingaben fehl0
, bei denen wir nichts drucken würden. So...Wenn die Zeichenfolge leer ist, ersetzen Sie sie durch die leere Menge.
quelle
n
mal in Retina wiederholen soll ...Brain-Flak , 135 Bytes
Beinhaltet +1 für
-A
Probieren Sie es online!
quelle
Röda , 37 Bytes
quelle
CJam , 11 Bytes
Druckt ein satzartiges Objekt, das aus Listen von Listen besteht. CJam druckt leere Listen als leere Zeichenfolgen, da Listen und Zeichenfolgen fast austauschbar sind.
Probieren Sie es online!
Erläuterung
Alte Antwort,
2118 BytesDies war, bevor bestätigt wurde, dass das Drucken einer verschachtelten Listenstruktur in Ordnung war. Verwendet den Algorithmus für die Zeichenfolgenwiederholung.
3 Bytes gespart dank Martin Ender!
Erläuterung
quelle
Gelee , 6 Bytes
Dies ist eine niladische Verknüpfung, die eine Ganzzahl aus STDIN liest und ein unregelmäßiges Array zurückgibt.
Probieren Sie es online!
Wie es funktioniert
quelle
Python 3 , 32 Bytes
Nicht der kürzeste Weg, aber ich musste dies nur mit Rekursion tun.
Probieren Sie es online!
quelle
Kardinal ,
51BytesProbieren Sie es online!
Erläuterung
Eingaben empfangen und von der # nach unten und links senden
"{" Einmal drucken, dann "{} {" n-1 mal drucken, wenn n> 1, dann "{}" drucken, wenn n> 0
Halten Sie den Eingabewert fest, bis die erste Schleife abgeschlossen ist
Gib "}" einmal aus und wiederhole dann n-1 mal, wenn n> 1 ist
quelle
AHK, 55 Bytes
Es ist nicht die kürzeste Antwort, aber ich habe es genossen, weil die Eigenheiten von AutoHotkey diese Rekursionsmethode super falsch aussehen lassen .
If
undLoop
Anweisungen gehen davon aus, dass die nächste Zeile das einzige ist, was enthalten ist, wenn keine Klammern verwendet werden. Geschweifte Klammern sind Escape-Zeichen, daher müssen Sie sie mit anderen geschweiften Klammern maskieren, um sie als Text zu verwenden. Die Variable1
ist auch das erste übergebene Argument. Wenn ich den Code lese, ohne diese Leckerbissen zu kennen, sieht die Logik folgendermaßen aus :s
gleich die falsche AntwortOhne alle Klammer-Escape-Zeichen würde das so aussehen:
quelle
JavaScript 50 Bytes
quelle
tinylisp , 52 bytes
Probieren Sie es online! (Testgeschirr).
Erläuterung
Beachten Sie, dass
(cons x (cons y nil))
Sie auf diese Weise eine Liste mitx
undy
in Lisp erstellen .quelle
C (gcc) , 52 Bytes
Nutzen Sie einige Kurzschlussauswertung und Rekursion.
Probieren Sie es online!
quelle
Pure Bash ,
494841 BytesProbieren Sie es online!
quelle
Gleichstrom , 46 Bytes
Probieren Sie es online!
Input on stdin, Output on stdout.
Dies funktioniert, indem eine Formel für die gewünschte Ausgabe als Basis-256-Zahl berechnet wird. Der Befehl P in dc wird dann verwendet, um die Basis-256-Zahl als Zeichenfolge auszudrucken.
Weitere Erklärung:
Sei n die Eingabe n. Das DC-Programm berechnet die Summe von
A = Etage (256 ^ n / 255) * 125 (BF wird von dc als 11 * 10 + 15 = 125 interpretiert)
und
B = Etage ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Für ein:
Beachten Sie, dass 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) nach der Formel für einen geometrischen Verlauf (256 ^ n-1) / 255 entspricht, und dies entspricht dem Wert für floor (256 ^ n / 255) ). Das ist also die Zahl, die aus n Einsen in der Basis 256 besteht.
Wenn Sie es mit 125 multiplizieren, um A zu erhalten, ist das Ergebnis die Zahl, die aus n 125 in der Basis 256 besteht (125 ist natürlich eine einzelne Ziffer in der Basis 256). Es ist wahrscheinlich besser, die Ziffern in Basis 256 als Hexadezimalzahlen zu schreiben. 125 ist hex 7D, also ist A die Basis-256-Zahl, die aus n 7Ds in einer Reihe besteht.
B ist ähnlich:
Diesmal ist zu beachten, dass 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) gleich (16777216 ^ n - 1) / 16777215 ist, und dies entspricht Floor (16777216 ^ n / 16777215).
Nun, 256 ^ 3 = 16777216 und 8 ^ 8-1 = 16777215, also berechnen wir dies als Floor ((256 ^ n) ^ 3 / (8 ^ 8-1)).
Aus der geometrischen Reihendarstellung ergibt sich für die Basis 256 eine Zahl von 100100100 ... 1001, wobei n der Ziffern 1 und der Rest der Ziffern 0 sind.
Dies wird mit 8092541 multipliziert, was hexadezimal 7B7B7D ist. In der Basis 256 ist dies eine dreistellige Zahl, die aus den Ziffern 7B, 7B und 7D besteht (diese Ziffern werden der Einfachheit halber hexadezimal geschrieben).
Daraus folgt, dass das in die Basis 256 geschriebene Produkt eine 3n-stellige Zahl ist, die aus den 3 Ziffern 7B, 7B, 7D besteht, die n-mal wiederholt werden.
Dies wird mit 256 ^ n multipliziert, was zu einer 4n-stelligen Basis-256-Zahl führt, die aus den 3 Ziffern 7B, 7B, 7D besteht, die n-mal wiederholt werden, gefolgt von n 0en. Das ist b
Das Addieren von A + B ergibt nun die 4n-stellige Basis-256-Zahl, die aus den 3 Ziffern 7B, 7B, 7D besteht, die n-mal wiederholt werden, gefolgt von n 7D. Da 7B und 7D die ASCII-Codes für
{
und sind}
, ist dies der String, der aus n Kopien von{{}
gefolgt von n Kopien von besteht. Dies ist}
genau das, was wir für n> 0 wollen. Der P-Befehl in dc gibt eine Base-256-Zahl aus als schnur, so wie wir sie brauchen.Leider muss n = 0 als Sonderfall behandelt werden. Die obige Berechnung ergibt zufällig ein Ergebnis von 0 für n = 0; In diesem Fall habe ich den Druck der Zeichenfolge nur hartcodiert
{}
.quelle
Java 7, 61 Bytes
Probieren Sie es online!
quelle
Stapel, 88 Bytes
quelle
Brainf *** , 99 Bytes
(Newline für Ästhetik) Da es sich um Brainf *** handelt, werden Eingaben als ASCII-Zeichencodes verwendet (Eingabe "a" entspricht 96).
Braineasy, 60 Bytes
Auch in meiner benutzerdefinierten Sprache (brainf ** basiert, Dolmetscher hier ):
Sie müssen die Programmeingabe in den Interpreter fest codieren, weil ich faul bin.
quelle
[]
? Es scheint, als könnte es entfernt werden05AB1E ,
53 BytesProbieren Sie es online!
Diese Version ist, nachdem er klargestellt hat, dass Sets in Ordnung sind.
Alte Version (die ø verwendet):
05AB1E ,
54 BytesProbieren Sie es online!
Wo
1
ist gleichbedeutend mitø
.quelle