Die natürlichen Zahlen einschließlich 0 werden formal wie folgt als Mengen definiert :
- Nummer 0 ist definiert als die leere Menge, {}
- Für n ≥ 0 ist die Zahl n +1 definiert als n ∪ { n }.
Infolgedessen ist n = {0, 1, ..., n- 1}.
Die ersten Zahlen, die durch dieses Verfahren definiert werden, sind:
- 0 = {}
- 1 = {{}}
- 2 = {{}, {{}}}
- 3 = {{}, {{}}, {{}, {{}}}
Herausforderung
Gegeben n
, gib seine Darstellung als Menge aus.
Regeln
Der Ausgang kann konsequent jegliche Verwendung Klammer Charakter wie {}
, []
, ()
oder <>
. Beliebige Zeichen (wie 01
) sind nicht erlaubt.
Anstelle eines Kommas wie oben kann das Trennzeichen ein beliebiges Interpunktionszeichen sein. oder es kann nicht vorhanden sein.
Leerzeichen (keine Zeilenumbrüche) können willkürlich und inkonsistent eingefügt werden.
Beispiel: Nummer 2 mit eckigen Klammern und Semikolon als Trennzeichen ist [[]; [[]]]
oder gleich [ [ ]; [ [ ] ] ]
oder gerade[ [ ] ;[ []]]
Die Reihenfolge, in der Elemente einer Menge angegeben werden, spielt keine Rolle. Sie können also eine beliebige Reihenfolge in der Darstellung verwenden. Dies sind beispielsweise einige gültige Ausgaben für 3
:
{{},{{}},{{},{{}}}}
{{{}},{{},{{}}},{}}
{{{}},{{{}},{}},{}}
Sie können ein Programm oder eine Funktion schreiben . Bei der Ausgabe kann es sich um eine Zeichenfolge handeln. Wenn Sie eine Funktion verwenden, können Sie eine verschachtelte Liste oder ein Array zurückgeben, dessen Zeichenfolgendarstellung der obigen entspricht.
Testfälle
0 -> {}
1 -> {{}}
2 -> {{},{{}}}
3 -> {{},{{}},{{},{{}}}}
4 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
5 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}
6 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}
7 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}}
quelle
Antworten:
Gelee , 3 Bytes
Dies ist eine monadische Verbindung. Probieren Sie es online!
Wie es funktioniert
Jede natürliche Zahl ist die Menge aller vorherigen natürlichen Zahlen, dh n = {0,…, n-1} . Da es keine natürlichen Zahlen vor 0 gibt, ist 0 = {} .
quelle
ḶL
es sich um ein No-Op handelt, ist die Mnemonik nicht lang. Es gibt auch unbinary, undecimal, unhalve, unsine, unarccosine, etc.Python 2, 26 Bytes
Teste es auf Ideone .
quelle
JavaScript (ES6), 32 Byte
Einfach genug.
quelle
.map()
eine.map(Number)
ist ein ziemlich häufiger Fall..map(e=>+e)
ist kürzer, von einem Byte.Perl 6 , 16 Bytes
Gibt eine verschachtelte Datenstruktur zurück.
Beispiel:
Erläuterung:
quelle
Ruby,
2721 BytesIch bin neu in Ruby Golf, aber hier geht nichts. Vielen Dank an Jordan für das Speichern von 6 Bytes!
Dies ist eine rekursive Funktion
f
(um genau zu sein ein Proc) und benötigt ein Arguments
. Es bildet den Proc-f
Over ab0...s
, also die Reichweite[0, s)
.quelle
map{|e|f[e]}
mitmap &f
.Haskell,
3227 BytesProbieren Sie es auf Ideone.
quelle
CJam , 14 Bytes
Probieren Sie es online!
Erläuterung
In jeder Iteration bildet der Block die Darstellung einer Zahl von der der vorhergehenden. Betrachten wir zur Veranschaulichung die zweite Iteration, bei der die Zahlendarstellung
2
aus1
der Zeichenfolge aufgebaut ist"[[]]"
."[[]]"
_
(Duplikat) enthält es"[[]]"
,"[[]]"
)
(Uncons) enthält"[[]]"
,"[[]"
,"]"
@
(drehen) enthält"[[]"
,"]"
,"[[]]"
\
(swap) enthält"[[]"
,"[[]]"
,"]"
]
(in Array packen) enthält es["[[]" "[[]]" "]"]
, was als String angezeigt würde"[[][[]]]"
.quelle
Cheddar, 17 Bytes
Kurze Rekursion + Kurze Reichweite + Kurze Iteration = Eine Herausforderung, bei der Cheddar sehr gut abschneidet
Nicht konkurrierend, 11 Bytes
Der
=>
Operator wurde hinzugefügt, nachdem diese Herausforderung freigegeben wurde, wodurch diese Antwort nicht konkurrierend war.Das mag verwirrend aussehen, aber lassen Sie mich es vereinfachen:
Im Grunde
n
ist der Eingang undf
ist die Funktion selbst.|>n
generiert [0, n) und=>
ordnet dies zuf
.quelle
05AB1E ,
87 BytesErläuterung
Probieren Sie es online!
Dank Adnan 1 Byte gespeichert.
quelle
Pyth, 4 Bytes
Testsuite
L
: Definieren Sie die Funktiony
mit Eingabeb
yMb
:y
über den Bereich abgebildet0, 1, ..., b-1
Bei der Eingabe 0 wird diese Zuordnung zurückgegeben
[]
. Andernfalls werdeny
alle Zahlen bis zu zugeordnetb
.quelle
MATL , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
Perl, 27 Bytes
Beinhaltet +1 für
-p
Viele verschiedene Methoden scheinen entweder 27 oder 28 Bytes zu haben. z.B
Das Beste, was ich finden konnte, ist
da bei älteren perls kann man den platz vor dem löschen
for
und bekommt 26 bytesquelle
Mathematica, 14 Bytes
quelle
Mathematica, 31 Bytes
Implementiert die Definition direkt als verschachtelte Liste. Verwendet eine unbenannte Funktion, die sich selbst rekursiv mit aufruft
#0
.quelle
Union
nichtJoin
:±0={};±n_:={t=±(n-1)}⋃t
... In diesem Fall ist es jedoch noch kürzer, sich für eine iterative Lösung zu entscheiden:Nest[{#}⋃#&,{},#]&
Retina ,
2418 BytesProbieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
Erläuterung
Dadurch wird die Eingabe in unär umgewandelt
<>
und die Darstellung von angehängt0
.Hier gibt das
+
an, dass diese Ersetzung in einer Schleife ausgeführt werden soll, bis sich die Zeichenfolge nicht mehr ändert. Es ist einfacher, dies durch die einzelnen Schritte zu erklären, die ich beim Golfspielen unternommen habe. Lassen Sie uns mit dieser Version der Ersetzung:Dies entspricht der letzten
1
unären Darstellung der verbleibenden Eingabe (um sie zu entfernen und die Eingabe zu dekrementieren) sowie dem Inhalt des aktuellen Satzes am Ende. Dieses wird dann durch ein neues Set ersetzt, das das vorherige sowie dessen Inhalt enthält. Allerdings können wir feststellen , dass$1
durch folgt>
in beiden Fällen und daher können wir es in der Aufnahme selbst enthalten und lassen sie aus dem Substitutionsmuster. Das führt zur FormJetzt können wir jedoch beobachten, dass
(.*)
nur das Suffix des Strings danach erfasst wird1<
und wir dieses Suffix am Ende sogar mit erneut einfügen$1
. Da die Substitutionssyntax uns die Möglichkeit gibt, nach einer Übereinstimmung mit auf den Teil einer Zeichenfolge zu verweisen,$'
können wir einfach beide Teile weglassen und erhalten die in der Antwort verwendete Version:quelle
{}
, aber es<>
ist das einzige Paar, das niemals entkommen muss, also dachte ich, ich würde damit anfangen . ;)Unterlast , 14 Bytes
Probieren Sie es online!
Unterlast-Vollprogramme können keine Eingaben über eine unserer definierten Methoden annehmen. Dies ist also eine Funktion, die Eingaben vom Stapel als Church-Zahl (die normale Methode zum Definieren von Ganzzahlen in Unterlast) nimmt und Ausgaben an den Stapel als Zeichenfolge erzeugt .
Die
(…)
Gruppierungsmarkierungen sind erforderlich, um dies zu einer Funktion (wiederverwendbar) und nicht zu einem Snippet (nur einmal verwendbar) zu machen. Der Wrapper in der TIO-Verknüpfung ruft die betreffende Funktion mit destruktiv auf^
, kann jedoch wiederverwendet werden, indem eine Kopie davon erstellt und beim Aufrufen nur eine der Kopien verwendet wird. Es liefert auch Eingaben in das Programm (hier,(:*:*)
dh 4) und druckt die Ausgabe mitS
.Erläuterung
Unterlast ist überraschenderweise für diese Aufgabe geeignet, wenn Turing-Tarpits unterwegs sind und nützliche Primitive wie "copy" und "surround with parenthes" enthalten. (Irgendwie schlägt Underload, normalerweise eine sehr ausführliche Sprache, Mathematica, normalerweise eine Sprache, die aufgrund einer großen Anzahl von eingebauten Funktionen durch geeignetere eingebaute Funktionen gewinnt!) So funktioniert das Programm:
Die Funktionsexponentierung bewirkt effektiv, dass sich die Schritte der Funktion so oft wiederholen, z. B.
(:a*)
³(:a*:a*:a*)
. Das ist die idiomatische Art, eine Schleife zu schreiben, die sich in Underload so oft wiederholt. (Sie können feststellen, dass~^
dies auf zwei verschiedene Arten beschrieben wurde. Dies liegt daran, dass Ganzzahlen in Unterlast als auf diese Ganzzahl spezialisierte Funktionsexponentierung definiert sind. Um eine Funktionsexponentierung durchzuführen, versuchen Sie einfach, eine Ganzzahl so auszuführen, als wäre sie eine Funktion .)quelle
Pari / GP , 23 Bytes
Probieren Sie es online!
quelle
APL (NARS), 15 Zeichen, 30 Byte
Prüfung:
Ich weiß nicht, ob dies akzeptiert werden würde ... Zilde ist ⍬ hier repräsentiert es die Leersammlung {}, wenn ich das Zilde-Element oder ein Element voller Zilde drucken möchte, und Zilde hat alles eingeschlossen, was passiert, ist, nichts zu drucken ... also, um zu sehen, Zilde muss man eine Funktion definieren, die ich es nenne o (
o←⎕fmt
). Ich nicht in die Zählung ein, weil das Element und seine Struktur existieren, auch wenn das System sie nicht druckt. Es ist möglich, wenn io 0 istkönnte auch 12 Zeichen Lösung sein ...
quelle
Brachylog , 14 Bytes
Probieren Sie es online!
Erläuterung
quelle
GAP , 22 Bytes
Beispielsweise:
quelle
Schläger 119 Bytes
Ungolfed:
Testen (In Racket {} ist dasselbe wie () und die Standardausgabe ist ()):
So sehen Sie jede Zahl deutlich (0 bis 3):
quelle
Batch, 74 Bytes
Verwendet die Tatsache, dass jede Antwort gleich der vorherigen Antwort ist, die nach der führenden in sich eingefügt wurde
{
. Die ersten Ausgaben lauten wie folgt:quelle