Sie müssen eine Funktion erzeugen, die eine Zeichenfolge s
innerhalb eines Arrays n
mal verschachtelt
>>> N("stackoverflow",2)
[['stackoverflow']]
Parameter:
s
- Eine Ascii-Saiten
- Eine ganze Zahl>= 0
Regeln
- Kürzester Code gewinnt.
- Der Ausgang wird ein verschachtelt werden
array
,list
odertuple
(oder ähnlicher Typ aus einer Anordnung basierte)
Testfälle
>>> N("stackoverflow",0)
'stackoverflow'
>>> N("stackoverflow",1)
['stackoverflow']
>>> N("stackoverflow",5)
[[[[['stackoverflow']]]]]
Inspiriert von: N-maliges Verschachteln einer Zeichenfolge in einer Liste, dh Liste einer Liste einer Liste
"
? ZBN("stack\"overflow",5)
Antworten:
Gelee , 2 Bytes
Etwas verwirrend, da: (1) Jelly keine Schnüre hat, nur Listen von Charakteren; und 2); Die Ausgabe zeigt nicht die Verschachtelung. Um zu sehen, dass dies tatsächlich das tut, was gefragt wird, schauen Sie sich eine Python-String-Darstellung des Ergebnisses an mit:
Ein zusätzliches Paar von
[]
ist vorhanden, da die Zeichenfolge selbst eine Liste von Zeichen ist. BeispielsweiseWie?
Der Proof-of-Concept-Code fügt hinzu:
quelle
Java und C #, 62 Bytes
Sollte ohne Änderungen in Java und C # funktionieren.
quelle
05AB1E , 3 Bytes
Code
Erläuterung
Dies bedeutet, dass dies auch für den 0- Testfall funktioniert, da sich der String bereits auf dem Stack befindet.
Probieren Sie es online!
quelle
JavaScript (ES6), 20 Byte
Obwohl die Leute mich normalerweise nerven, meine Funktionen für die 1-Byte-Speicherung zu curry, ist dies ein Fall, in dem dies tatsächlich zur Lösung beiträgt.
quelle
d=>g=n=>n?[g(n-1)]:d
Mathematica, 13 Bytes
quelle
CJam ,
76 BytesOnline-Dolmetscher
Dies ist eine Funktion , die unnamed ihre Argumente vom Stapel nimmt als
S N
,S
die Saite zu sein undN
die Packungen zu sein. Sie können es mit dem~
Operator, also eval, ausführen .Erläuterung:
quelle
{{a}*}
oder zu vermeiden{'a*~}
.{a}
n-mal wiederholen ) als die zweite (eine Folge von ns erzeugena
und ausführen).Javascript ES6, 23 Bytes
Rekursive Funktion
Currying ergibt die gleiche Länge
quelle
Brachylog , 10 Bytes
Probieren Sie es online!
Erläuterung
Dies wären 3 Bytes, wenn es nicht fehlerhaft wäre. Hier brauchen wir all das, um die Liste zu bekommen
[String, T, built-in_group]
, obwohl dies[String, T]
bereits unser Input ist.Leider
:g
ergibt sich direkt[[String, T], built-in_group]
, was nicht richtig erkannt wird,i
da die ganze ZahlT
in der ersten Liste steht.quelle
MATL, 6 Bytes
Dies erzeugt ein verschachteltes Zellenarray als Ausgabe. Bei der Standardanzeige von MATL können Sie jedoch nicht unbedingt erkennen, dass dies der Fall ist, da nicht alle geschweiften Klammern angezeigt werden. Die folgende Demo ist eine leicht modifizierte Version, die die Zeichenfolgendarstellung der Ausgabe zeigt.
Probieren Sie es online
Erläuterung
quelle
Pyke, 3 Bytes
Probieren Sie es hier aus!
quelle
Pyth , 3 Bytes
Permalink
Dies wird so etwas wie ausgeben
...[[[[['string']]]]]...
. Es wird nicht für Null Tiefe zitieren:string
.Erläuterung:
Wenn Sie die Tiefe Null angeben möchten, verwenden Sie stattdessen diese 4-Byte-Lösung (Erläuterung):
quelle
PHP, 60 Bytes
48 Bytes, wenn es nur nach der Aufgabe aussieht
quelle
function f($s,$n){return$n?[f($s,$n-1)]:$s;}
.print_r()
und wenn Sie diese Option nicht mögen,serialize()
sind beide kürzer alsjson_encode()
sie, während Sie die Ausgabe differenzieren.')
sieht das einsam am Ende des Codes seltsam aus.Ruby: 23 Bytes
Dies wurde aktualisiert, um es zu einem aufrufbaren Proc zu machen und nicht zum Original-Snippet. Mich würde interessieren, ob es einen Weg gibt
s
implizit zurückgegeben zu werden, anstatt ihn explizit zurückgeben zu müssen.quelle
->s,n{...}
.C,
44 Bytes, 41 BytesSie können es folgendermaßen testen:
Die Ausgabe:
Natürlich erhalten Sie Warnungen. Dies funktioniert unter
gcc
Bash auf meinem Windows-Computer (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
sowie auf einem echten Linux-Computer (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
)).quelle
int*n(s,a)int*s;{return!a?s:n(&s,a-1);}
funktioniert aber mit gcc.cc -v
->Apple LLVM version 8.0.0 (clang-800.0.38)
.!
die ternäre Bedingung löschen und die Reihenfolge vons
undn(&s,a-1)
ändern, um ein Byte zu speichern?n(s,6)
, müssen Sie ändern ,***
um******
in der Variablendeklaration und zu verwenden. Dies ist genau deshalb erforderlich, weil die Funktion das tut, was erwartet wird: Schachteln Sie den String mehrmals (hier: 6) in ein Array. Natürlich würden Sie immer noch drei Ebenen erhalten,[]
weil sie fest codiert sind. Ich denke, das Programm sollte sie überhaupt nicht ausgeben. Bei dieser Herausforderung geht es nicht um Klammern, sondern um Schachteln. Einige Sprachen drucken Arrays mit Klammern, C hat keine eingebaute Funktion, um sie überhaupt zu drucken. Na und? Es wird hier nicht benötigt.*
der Funktionssignatur einfügen?Python, 32 Bytes
quelle
Ruby, 25 Zeichen
Schreiben Sie die Python-Lösung von jamylak neu .
Probelauf:
quelle
C # 6, 50 Bytes
quelle
n<1
? Auch -2 Bytes, wenn Sieobject
statt verwendendynamic
.Ruby, 24 Bytes
Genannt wie in der Antwort von manatwork , aber eine seltsamere Implementierung.
*s
Bricht die Eingabe (eine möglicherweise verschachtelte Zeichenfolge) in ein Array ein. Wennn
dann Null ist, wirds[n]
das erste Element von zurückgegebens
, wodurch die Funktion in ein No-Op umgewandelt wird. Andernfalls wird zurückgegeben,nil
das
immer nur ein Element vorhanden ist, sodass wir zum rekursiven Aufruf übergehen.quelle
V , 6 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Perl 6 , 23 Bytes
Erweitert:
quelle
Agda, 173 Bytes
Da der Rückgabetyp der Funktion von der als Argument angegebenen Zahl abhängt, ist dies eindeutig ein Fall, in dem eine abhängig typisierte Sprache verwendet werden sollte. Leider ist Golfen in einer Sprache, in der Sie Naturals und Listen importieren müssen, um sie zu verwenden, nicht einfach. Auf der positiven Seite verwenden sie,
suc
wo ich das ausführliche erwartet hättesucc
. Also hier ist mein Code:(Ich hoffe , dass ich alle Orte gefunden , wo Räume verzichtet werden kann.)
L
Ist eine Art Funktion , die eine natürliche gegebenn
und ein Typa
gibt den Typn
mal verschachtelt Listena
, soL 3 Bool
wäre die Art von Listen von Listen von ListenBool
(wenn wir hatten importiertBool
). Dies ermöglicht es uns, die Art unserer Funktion als auszudrücken(n : ℕ) -> {a : Set} -> a -> L n a
, dass die geschweiften Klammern dieses Argument implizieren. Der Code verwendet einen kürzeren Weg, um diesen Typ zu schreiben. Die Funktion kann jetzt auf offensichtliche Weise durch Mustervergleich beim ersten Argument definiert werden.Diese Datei Laden mit einer
.agda
Erweiterung in Emacs Verwendung erlaubtC-c C-n
(bewertet Begriff Normalform), Eingang zum Beispielf 2 3
und die richtige Antwort in einer unangenehmen Form erhalten:(3 ∷ []) ∷ []
. Wenn du das mit Strings machen willst, musst du sie natürlich importieren ...quelle
→
statt schreiben könnte->
, aber das vergrößert natürlich eine UTF-8-codierte Datei.k, 3 Bytes
Wird als dyadische Funktion
/
interpretiert und wendet die linke Funktion,:
(enlist
) n-mal iterativ auf das zweite Argument an.Beispiel:
quelle
PHP, 44 Bytes
nichts Anspruchsvolles, nur eine rekursive Funktion
quelle
Python 2, 32 Bytes
Setzt
n
offene Klammern vor die Zeichenfolge undn
schließende Klammern vor die Zeichenfolge und wertet das Ergebnis aus. Wenn eine Zeichenfolgenausgabe zulässig ist,eval
kann die entfernt werden.quelle
Eigentlich 4 Bytes
Eingabe ist
string
dannn
. Golfvorschläge sind willkommen. Probieren Sie es online!Ungolfing
quelle
R,
39 bis40 BytesBEARBEITEN: Korrigiert die
n=0
Problem wurde dank @rturnbull behoben.Funktion, die zwei Eingaben
s
(Zeichenfolge) undn
(Verschachtelung) akzeptiert und die verschachtelte Liste ausgibt. Beachten Sie, dass R-class dielist
Ausgabe von Haus aus anders ausgibt als die meisten anderen Sprachen, jedoch funktional einer Schlüssel- / Wertzuordnung (mit möglicherweise unbenannten Schlüsseln) oder einer Liste in Python ähnelt.Beispiel
quelle
n=0
. Bevor ich Ihre Antwort gesehen habe, habe ich eine rekursive Lösung gefunden, die dasn=0
f=function(s,n)if(n)list(f(s,n-1))else s
n=0
Fall völlig vergessen . Ihre Lösung besteht jedoch tatsächlich aus38
Bytes ohne die Benennung der Funktion und ist daher kürzer. Großartiger Fangf(s,n-1)
Aufruf darin nicht interpretiert werden .) Rekursive anonyme Funktionen sind in R meines Wissens nicht möglich.f=function(s,n)'if'(n,list(f(s,n-1)),s)
.Schläger 83 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
Haskell,
4038 BytesDas strikte Typensystem von Haskell verhindert die Rückgabe verschiedener Typen (Strings vs. Liste der Strings vs. Liste der Strings, ...), daher muss ich meinen eigenen Typ definieren, der all diese Fälle berücksichtigt. Die Hauptfunktion
f
ruft rekursivn
mal den KonstruktorC
für die Verschachtelung undN
für den Basisfall auf.Anwendungsbeispiel (mit
deriving (Show)
dem neuendata
Typ hinzugefügt, um es drucken zu können):f 4 "codegolf"
->C (C (C (C (N "codegolf"))))
.Edit: @Christian Sievers sparte 2 Bytes, indem er die Funktion für das String-Argument in einem Punkt-freien Stil umschrieb. Vielen Dank!
quelle
deriving
Zusatzklausel: Die Parens werden nicht benötigt. - Ich bin mir nicht sicher, ob es in Ordnung ist, nur denC
Konstruktor zu verschachteln, der nicht listenartig ist. Mein sehr ähnlicher Versuch basierte auf einem als definierten Datentypdata D x=J x|L[D x]
.f 0=N;f n=C. f(n-1)
1:(2:(3:([])))
mit C (C (C (N "codegolf"))).C
ist cons (:
),N
ist nil ([]
).C
Keine Nachteile, nur Einbettungen, Ihr Datentyp kann nicht ausgedrückt werden[["a","b"],["c"]]
. Aber vielleicht ist das in Ordnung, da dieses Problem nur Singletons benötigt. -f n=...
Ist nicht sinnlos. Punkt reduziert?Either
) zu verwenden, selbst wenn die Konstruktoren etwas ausführlicher wären?tinylisp (repl), 34 bytes
Definiert eine Funktion
F
. Technisch gesehen hat tinylisp keine Strings, aber dieser Code funktioniert für jeden angegebenen Datentyp.Ungolfed (Schlüssel zu Builtins:
d
= Define,q
= Quote ,i
= If,c
= Cons,s
= Subtract):Anwendungsbeispiel:
quelle
Clojure, 24 Bytes
Clojure ist hier etwas konkurrenzfähig.
iterate
Erstellt eine Folge vonx, (f x), (f (f x)) ...
,nth
gibt das benötigte Element zurück.Sehen Sie es online: https://ideone.com/2rQ166
quelle