Należy utworzyć funkcję, która zagnieżdża ciąg znaków s
w tablicy n
razy
>>> N("stackoverflow",2)
[['stackoverflow']]
Parametry:
s
- Ciąg asciin
- Liczba całkowita>= 0
Zasady
- Najkrótszy kod wygrywa.
- Wyjście być zagnieżdżona
array
,list
ituple
(lub podobnego typu opiera się na tablicy)
Przypadki testowe
>>> N("stackoverflow",0)
'stackoverflow'
>>> N("stackoverflow",1)
['stackoverflow']
>>> N("stackoverflow",5)
[[[[['stackoverflow']]]]]
Inspirowane przez: Zagnieżdżenie ciągu na liście n razy, tj. Lista listy listy
"
? Np.N("stack\"overflow",5)
Odpowiedzi:
Galaretka , 2 bajty
Nieco mylące, ponieważ: (1) Galaretka nie ma łańcuchów, tylko listy znaków; i (2); wyjście nie pokaże zagnieżdżenia. Aby zobaczyć, że faktycznie robi to, o co pytamy, spójrz na reprezentację wyniku w Pythonie za pomocą:
Dodatkowa para
[]
będzie obecna, ponieważ sam ciąg będzie listą znaków. Na przykładW jaki sposób?
Kod weryfikacji koncepcji dodaje:
źródło
Java i C #, 62 bajty
Powinien działać bez modyfikacji zarówno w Javie, jak i C #.
źródło
05AB1E , 3 bajty
Kod
Wyjaśnienie
Oznacza to, że działa to również w przypadku 0 , ponieważ ciąg znaków znajduje się już na stosie.
Wypróbuj online!
źródło
JavaScript (ES6), 20 bajtów
Chociaż ludzie zwykle nudzą mnie, żebym sprawdził moje funkcje w celu zaoszczędzenia 1 bajtu, jest to przypadek, w którym faktycznie przyczynia się do rozwiązania.
źródło
d=>g=n=>n?[g(n-1)]:d
Mathematica, 13 bajtów
źródło
CJam ,
76 bajtówTłumacz online
Jest to nienazwana funkcja, która bierze swoje argumenty ze stosu jako
S N
,S
będąc ciągiem iN
zawijaniem. Możesz to wykonać za pomocą~
operatora, co znaczy eval.Wyjaśnienie:
źródło
{{a}*}
lub{'a*~}
.{a}
n razy) zamiast drugiego (stwórz ciąg nsa
i wykonaj go).JavaScript ES6, 23 bajty
Funkcja rekurencyjna
Efekt curry ma taką samą długość
źródło
Brachylog , 10 bajtów
Wypróbuj online!
Wyjaśnienie
Byłyby to 3 bajty, gdyby nie było błędu. Tutaj potrzebujemy tego wszystkiego, aby uzyskać listę,
[String, T, built-in_group]
mimo że[String, T]
jest to już nasz wkład.Niestety
:g
wyniki bezpośrednio[[String, T], built-in_group]
, co nie jest poprawnie rozpoznawane przez,i
ponieważ liczba całkowitaT
znajduje się na pierwszej liście.źródło
MATL, 6 bajtów
To tworzy zagnieżdżoną tablicę komórek jako wynik. Jednak domyślny wyświetlacz MATL-a nie pozwala zobaczyć , co to jest, ponieważ nie wyświetla wszystkich nawiasów klamrowych. Poniższa wersja demonstracyjna jest nieco zmodyfikowaną wersją, która pokazuje ciąg reprezentujący dane wyjściowe.
Wypróbuj online
Wyjaśnienie
źródło
Pyke, 3 bajty
Wypróbuj tutaj!
źródło
Pyth , 3 bajty
Permalink
Spowoduje to wyświetlenie czegoś podobnego
...[[[[['string']]]]]...
. To nie będzie zacytować na głębokości zera:string
.Wyjaśnienie:
Jeśli chcesz cytować na głębokości zerowej, użyj zamiast tego 4-bajtowego rozwiązania (objaśnienie):
źródło
PHP, 60 bajtów
48 bajtów, jeśli wygląda tylko na zadanie
źródło
function f($s,$n){return$n?[f($s,$n-1)]:$s;}
.print_r()
a jeśli nie podoba ci się ta opcja,serialize()
oba są krótsze niżjson_encode()
ing, jednocześnie różnicując wynik.')
na końcu kodu wygląda dziwnie.Rubin: 23 bajty
Zostało to zaktualizowane, aby uczynić z niego proces, który można wywołać, a nie oryginalny fragment kodu. Byłbym zainteresowany, aby wiedzieć, czy istnieje sposób na
s
domniemane zwrócenie, zamiast jawnego zwrotu.źródło
->s,n{...}
.C,
44 bytes, 41 bytesYou can test it by doing the following:
The output:
Of course, you'll get warnings. This works on
gcc
on bash on my Windows machine (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
, as well as on a true Linux machine (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
).źródło
int*n(s,a)int*s;{return!a?s:n(&s,a-1);}
works with gcc.cc -v
->Apple LLVM version 8.0.0 (clang-800.0.38)
.!
from the ternary condition and switch the order ofs
andn(&s,a-1)
to save a byte?n(s,6)
, you have to change***
to******
in the variable declaration and use. This is needed exactly because the function does what it is expected to do: nest the string into an array several (here: 6) times. Of course you would still get three levels of[]
because they are hardcoded. I think the program shouldn't output them at all. This challenge is not about brackets, it is about nesting. Some languages print arrays with brackets, C hasn't any builtin function to print them at all. So what? It is not needed here.*
in the function signature?Python, 32 bytes
źródło
Ruby, 25 characters
Rewrite of jamylak's Python solution.
Sample run:
źródło
C# 6, 50 bytes
źródło
n<1
? Also -2 bytes if you useobject
instead ofdynamic
.Ruby, 24 bytes
Called the same as in manatwork's answer, but a weirder implementation.
*s
wraps the input (a possibly-nested string) in an array. Then ifn
is zero,s[n]
returns the first element ofs
, turning the function into a no-op. Otherwise, it returnsnil
sinces
will only ever have one element, so we pass through to the recursive call.źródło
V, 6 bytes
Try it online!
Explanation:
źródło
Perl 6, 23 bytes
Expanded:
źródło
Agda, 173 bytes
Since the return type of the function depends on the number given as argument, this is clearly a case where a dependently typed language should be used. Unfortunately, golfing isn't easy in a language where you have to import naturals and lists to use them. On the plus side, they use
suc
where I would have expected the verbosesucc
. So here is my code:(I hope I found all places where spaces can be omitted.)
L
is a type function that given a naturaln
and a typea
returns the type ofn
times nested lists ofa
, soL 3 Bool
would be the type of lists of lists of lists ofBool
(if we had importedBool
). This allows us to express the type of our function as(n : ℕ) -> {a : Set} -> a -> L n a
, where the curly braces make that argument implicit. The code uses a shorter way to write this type. The function can now be defined in an obvious way by pattern matching on the first argument.Loading this file with an
.agda
extension into emacs allows to useC-c C-n
(evaluate term to normal form), input for examplef 2 3
and get the correct answer in an awkward form:(3 ∷ []) ∷ []
. Now of course if you want to do that with strings you have to import them...źródło
→
instead of->
, but of course that increases the size of an UTF-8 encoded file.k, 3 bytes
Taken as a dyadic function,
/
will iteratively apply the left-hand function,:
(enlist
) n times to the second argument.Example:
źródło
PHP, 44 bytes
nothing sophisticated, just a recursive function
źródło
Python 2, 32 bytes
Puts
n
open brackets before the string andn
close brackets before it, then evals the result. If a string output is allowed, theeval
can be removed.źródło
Actually, 4 bytes
Input is
string
thenn
. Golfing suggestions welcome. Try it online!Ungolfing
źródło
R,
3940 bytesEDIT: Fixed the
n=0
issue thanks to @rturnbull.Function that takes two inputs
s
(string) andn
(nestedness) and outputs the nested list. Note that R-classlist
natively prints output differently than most other languages, however, is functionally similar to a key/value map (with possibly unnamed keys) or a list in python.Example
źródło
n=0
, though. Before I saw your answer, I came up with a recursive solution which can deal withn=0
, but it's 1 byte longer than your solution (40 bytes):f=function(s,n)if(n)list(f(s,n-1))else s
n=0
case. However, your solution is actually38
bytes excluding the naming of the function and hence shorter. Great catchf(s,n-1)
call inside of it.) Recursive anonymous functions are not possible in R, as far as I know.f=function(s,n)'if'(n,list(f(s,n-1)),s)
.Racket 83 bytes
Ungolfed:
Testing:
Output:
źródło
Haskell,
4038 bytesHaskell's strict type system prevents returning different types (Strings vs. List of Strings vs. List of List of Strings,...), so I have to define my own type that accommodates all those cases. The main function
f
recursively callsn
times the constructorC
for nesting andN
for the base case.Usage example (with
deriving (Show)
added to the newdata
type to be able to print it):f 4 "codegolf"
->C (C (C (C (N "codegolf"))))
.Edit: @Christian Sievers saved 2 bytes by rewriting the function in a point-free style for the string argument. Thanks!
źródło
deriving
clause: the parens aren't needed. - Not sure if it's okay to only nest theC
constructor which isn't list-like. My very similar attempt was based on a data type defined asdata D x=J x|L[D x]
.f 0=N;f n=C. f(n-1)
1:(2:(3:([])))
with C (C (C (N "codegolf"))).C
is cons (:
),N
is nil ([]
).C
doesn't cons, it only embeds, your data type can't express[["a","b"],["c"]]
. But maybe that is fine as this problem only needs singletons. -f n=...
isn't point-free. Point-reduced?Either
) even if it meant the constructors were a little more verbose?tinylisp (repl), 34 bytes
Defines a function
F
. Technically, tinylisp doesn't have strings, but this code will work for any data type it's given.Ungolfed (key to builtins:
d
= define,q
= quote,i
= if,c
= cons,s
= subtract):Example usage:
źródło
Clojure, 24 bytes
Clojure is somewhat competitive here.
iterate
creates a sequence ofx, (f x), (f (f x)) ...
,nth
returns needed element.See it online: https://ideone.com/2rQ166
źródło