Aus Wikipedia Satztheoretische Definition natürlicher Zahlen
Die Menge N natürlicher Zahlen ist als die kleinste Menge definiert, die 0 enthält und unter der Nachfolgerfunktion S abgeschlossen ist, die durch S (n) = n ∪ {n} definiert ist.
Die ersten so definierten Zahlen sind 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}.
Mit dieser Definition von natürlichen Zahlen wird die Länge einer Zeichenfolge gezählt.
Geben Sie eine Zeichenfolge von a-zA-Z beliebiger Länge ein
Ausgabe der Länge der Zeichenfolge in Mengen - Notation ohne Trenn
Beispiele
Eingabe Leere Zeichenfolge
Ausgabe {}
Eingabe a
Ausgabe {{}}
Eingabe aaaa
Ausgabe {{} {{}} {{} {{}} {{} {{}} {{} {{}}}}
Für die Lesbarkeit ist die Ausgabe für 'aaaa' mit Trennzeichen
{
{}
{{}}
{{} {{}} }
{{} {{}} {{} {{} } } }
}
Bedingungen
- Der Code enthält keine Ziffern von 0 bis 9.
- Keine Verwendung der Zeichencode-Konvertierung zum Generieren von Zahlen;
- Keine Verwendung von + - * / für arithmetische Berechnungen einschließlich Inkrementieren und Dekrementieren;
- Keine anderen mathematischen Operationen als die Boolesche Logik;
- Die Eingabezeichenfolge wird bei der Bestimmung der Bytelänge nicht berücksichtigt.
Gewinner Kürzeste Codelänge in Bytes.
Da dies meine erste Frage ist, hoffe ich, dass ich sie klar und deutlich genug formuliert habe. Freundliche Beratung akzeptiert.
quelle
f(n-1)
?Antworten:
GolfScript (
1817 Bytes)Übernimmt die Eingabe auf dem Stapel (wenn also als Programm ausgeführt, über stdin). Lässt die Ausgabe als zwei Zeichenfolgen auf dem Stapel (wenn Sie also als Programm ausgeführt werden, wird die richtige Ausgabe an stdout gesendet).
Um eine einzelne Zeichenfolge im Stapel
+
zu belassen, fügen Sie sie entweder an concat an oder verwenden Sie die AlternativePräparation
Alternative:
Auswirkungen der Beschränkungen
Wenn eine Dekrementierung zulässig wäre, würde dies die 15-Byte-Lösung ermöglichen
quelle
Haskell-Funktion,
3534 ZeichenHaskell-Programm mit fest codierter Eingabe,
48 oder 4947 oder 48 Zeichen(47 Zeichen, wenn Sie keine zusätzlichen Anführungszeichen für die Ausgabe benötigen; verwenden Sie in diesem Fall
putStr
anstelle vonprint
insgesamt 48 Zeichen)Haskell-Programm,
5150 Zeichenquelle
Python 3 - 64
Wenn Inlining erlaubt ist:
Python 2 - 54
quelle
o[-1]
statto.pop()
o=[]
, waso=['{}']
nach einem Schritt erfolgt, und verlängern Sie die Eingabe um eins, indem Sie sie durch ersetzen'_'+input()
und den Raum danach verkürzenin
.Javascript 70 (Zeichen)
Dies war meine Anstrengung, bevor ich die Frage stellte. Ich würde davon ausgehen, dass jemand mit mehr Javascript-Kenntnissen als ich es wahrscheinlich schlagen kann.
Vielen Dank an Jan Dvorak und Peter Taylor für weitere Ermäßigungen
jetzt 62
und jetzt 61
Erklärung des Originalcodes
setze s auf leer
String in c eingeben und in ein Array aufteilen
während es möglich ist, ein Zeichen aus c zu pop () und s = s {s} als Nachfolger zurückzusetzen
Ausgangsstrom s, müssen jedoch mit gesetzten Klammern umgeben sein.
quelle
while
(speichert ein Zeichen).s='{'
die beiden und lassen Sie sie los'{'+
. (Das verhält sich dann wie meine GS-Lösung). Es gibt eine weitere Einsparung von 1 Zeichen, indemfor
stattwhile
einer der beiden Initialisierungen die for-Loop-Initialisierung verwendet und aufgerufen wird.for(a;b;c){d}
ista;while(b){d;c}
in den meisten Sprachen, die beides haben, direkt äquivalent . Solangefor(;b;)
also identisch mit derwhile(b)
Anzahl der Effekte und Charaktere ist, wirdfor(a;b;)
ein Zeichen gespeicherta;while(b)
und die Wirkung ist identisch.J -
2220 charWie kann das abgeleitet werden:
Alternativ kann dies geschrieben werden
'{','{'&(,,~)&'}'@#
, was dasselbe bedeutet.Verwendung:
quelle
Haskell - 35 Charaktere
Die Lösung wird von Jan Dvoraks beeinflusst, ohne jedoch die Reihenfolge umzukehren.
quelle
Scala, 64 Zeichen
Beachten Sie die doppelten Rollen, die sowohl die Klammern als
s
auch in diesem Code spielen.BEARBEITEN: eine Ziffer entfernt
quelle
Python 3 (44)
Bei jedem Schritt
s
wird die Zeichenfolge angezeigt, die den Satz darstellt, bei dem das Finale}
entfernt wurde. Wir erzeugen die Mengenrepräsentationn+1
aus der Mengenrepräsentationn
über die Beziehung f (n + 1) = f (n) ∪ {f (n)}. Um die Vereinigung mit Zeichenfolgen zu implementieren, hängen wir die Zeichenfolge für {f (n)} an, die genaus
mit dem zurückgegebenen Finale}
übereinstimmt, und vernachlässigen, das Finale}
in das Ergebnis aufzunehmen. Zum Schluss fügen wir'}'
vor dem Drucken noch ein Finale hinzu .Wenn ich die Zeichenfolge fest codieren darf, wird die Zeichenanzahl auf 35 Zeichen reduziert, und es wird zu Python 2 gewechselt, um Klammern auf der zu speichern
print
.Es könnte eine Möglichkeit geben, den Platz nach dem zu sparen,
print
indem Sie so etwas wieprint'{'+s
einen umgekehrtens
Vorgang ausführen. Dies führt jedoch zu Problemen mit+=
dem rechts angehängten Text.quelle
gs2, 12 bytes
Mnemonik:
quelle
Mathematica, 115 Zeichen
Der vollständige Code, wie gezeigt, hat 121 Zeichen, aber 6 davon werden für die Eingabezeichenfolge (
"test"
) verwendet, die gemäß den Regeln nicht zählt.Ohne das Erfordernis, dass es keine Begrenzer gibt, könnte die Codelänge weiter um 24 Zeichen verringert werden. ohne explizite Umwandlung in einen String könnten dann weitere 9 Zeichen entfernt werden.
quelle
Ruby, 27, betrügt mich irgendwie
Fragwürdige Dinge:
[[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
quelle
inspect
das Array manuell undtr
das Ergebnis.Pure Bash, 54
Ausgabe:
quelle
Julia 43
Das Konstrukt {z ...} erweitert den String z zu einem Array. Falte Schleifen über alle Elemente des Arrays, ignoriere den Inhalt und baue stattdessen aus der leeren Zeichenkette auf. Die Funktion foldl ist in Julia 0.30 verfügbar.
Beispielausgabe
quelle
Haskell, 31 Bytes
quelle
Mathematica,
455748 BytesEine 36-Byte-Lösung:
Es werden jedoch einige arithmetische Berechnungen verwendet.
quelle
Delphi XE3 (264)
Ok, ich komme nicht mal in die Nähe des anderen, aber es hat Spaß gemacht :)
Wahrscheinlich habe ich darüber nachgedacht. Gehen Sie zu sehen, ob es einen besseren Weg gibt, dies zu tun.
Golf gespielt
Ungolfed
Testergebnisse
Getestete Saiten mit Länge 0..10
quelle
Perl 5: 33 Zeichen
Es ist nicht ganz klar, welche Zeichen ich als Teil der Lösung zählen soll. Wahrscheinlich nicht dasecho ... |
Teil, weil es nur verwendet wird, um eine Zeile in stdin einzugeben. Wahrscheinlich nicht der Name der Perl-Binärdatei, da Sie diese beliebig umbenennen können.Also habe ich die an Perl übergebenen Befehlszeilenoptionen, die um den Perl-Code geschriebenen Anführungszeichen und den Perl-Code selbst gezählt.Auch verwandt .
quelle
pl
als Standard zählen, aber Sie erhalten-e
und die Anführungszeichen um den Code kostenlos. RefPerl 6: 37 Zeichen
oder von STDIN:
{"\{@_.join()\}"}...*
erstellt eine faule Liste der Mengenformen der natürlichen Zahlen, und wir greifen einfach zu der, die wir brauchenget.chars
.Die faule Liste könnte leserlicher geschrieben sein:
Welches liest sich ziemlich ähnlich wie die Definition.
quelle
Dart: 85 Zeichen
(mit zusätzlichen Zeilenumbrüchen zur besseren Lesbarkeit).
Die Forderung, nicht "0" zu verwenden, beißt wirklich, sonst
.first
wäre[0]
und(..).isNegative
wäre..<0
.quelle
Pyth, 13 Bytes
Dies ist das Golf-Pyth-Äquivalent zu @ xnors Python-Antwort. Beachten Sie, dass Pyth neuer als diese Frage ist, sodass diese Antwort nicht berechtigt ist, diese Herausforderung zu gewinnen.
Demonstration.
quelle
u+G]GlQY
Javascript,
171149147142 Bytes(Wird wahrscheinlich später weiter golfen)
quelle