Debe producir una función que anida una cadena s
dentro de una matriz, n
veces
>>> N("stackoverflow",2)
[['stackoverflow']]
Parámetros:
s
- Una cuerda asciin
- un entero>= 0
Reglas
- El código más corto gana.
- La salida será una anidada
array
,list
otuple
(tipo o similar basado fuera una matriz)
Casos de prueba
>>> N("stackoverflow",0)
'stackoverflow'
>>> N("stackoverflow",1)
['stackoverflow']
>>> N("stackoverflow",5)
[[[[['stackoverflow']]]]]
Inspirado por: Anidar una cadena dentro de una lista n veces, es decir, lista de una lista de una lista
"
? P.ejN("stack\"overflow",5)
Respuestas:
Jalea , 2 bytes
Ligeramente confuso, ya que: (1) Jelly no tiene cadenas, solo listas de caracteres; y 2); la salida no mostrará el anidamiento. Para ver que esto realmente está haciendo lo que se le pide, mire una representación en cadena de Python del resultado con:
Un par adicional de
[]
estará presente ya que la cadena en sí será una lista de caracteres. Por ejemplo¿Cómo?
El código de prueba de concepto agrega:
fuente
Java y C #, 62 bytes
Debería funcionar sin modificaciones tanto en Java como en C #.
fuente
05AB1E , 3 bytes
Código
Explicación
Esto significa que esto también funciona para el caso de prueba 0 , ya que la cadena ya está en la pila.
Pruébalo en línea!
fuente
JavaScript (ES6), 20 bytes
Aunque la gente normalmente me molesta para que modifique mis funciones para el ahorro de 1 byte, este es un caso en el que realmente contribuye a la solución.
fuente
d=>g=n=>n?[g(n-1)]:d
Mathematica, 13 bytes
fuente
CJam ,
76 bytesIntérprete en línea
Esta es una función sin nombre que toma sus argumentos de la pila como
S N
,S
siendo la cadena yN
las envolturas. Puede ejecutarlo con el~
operador, lo que significa evaluar.Explicación:
fuente
{{a}*}
o{'a*~}
.{a}
n veces) en lugar del segundo (producir una cadena de nsa
y ejecutarlo).Javascript ES6, 23 bytes
Función recursiva
Resultados de curry en la misma longitud
fuente
Brachylog , 10 bytes
Pruébalo en línea!
Explicación
Esto sería de 3 bytes si no se corrigió. Aquí necesitamos todo esto para obtener la lista
[String, T, built-in_group]
, aunque[String, T]
ya es nuestra entrada.Desafortunadamente,
:g
resulta directamente[[String, T], built-in_group]
, lo que no se reconoce correctamentei
porque el número enteroT
está dentro de la primera lista.fuente
MATL, 6 bytes
Esto produce una matriz de celdas anidadas como salida. Sin embargo, con la pantalla predeterminada de MATL, no es necesario ver que es lo que es, ya que no mostrará todas las llaves. La demostración a continuación es una versión ligeramente modificada que muestra la representación de cadena de la salida.
Pruébalo en línea
Explicación
fuente
Pyke, 3 bytes
Pruébalo aquí!
fuente
Pyth , 3 bytes
Enlace permanente
Esto generará algo como
...[[[[['string']]]]]...
. No va a citar para la profundidad cero:string
.Explicación:
Si desea citar en profundidad cero, use esta solución de 4 bytes (explicación):
fuente
PHP, 60 bytes
48 Bytes si solo se parece a la tarea
fuente
function f($s,$n){return$n?[f($s,$n-1)]:$s;}
.print_r()
y, si no le gusta esa opción,serialize()
ambas son más cortas quejson_encode()
la diferenciación de la salida.')
al final del código parece extraño.Rubí: 23 bytes
Esto se actualiza para convertirlo en un Proc invocable en lugar del fragmento original. Me interesaría saber si hay una manera de haber
s
devuelto implícitamente en lugar de tener que devolverlo explícitamente.fuente
->s,n{...}
.C,
44 bytes, 41 bytesPuede probarlo haciendo lo siguiente:
La salida:
Por supuesto, recibirás advertencias. Esto funciona en
gcc
bash en mi máquina Windows (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
así como en una verdadera máquina Linux (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
).fuente
int*n(s,a)int*s;{return!a?s:n(&s,a-1);}
funciona con gcc.cc -v
->Apple LLVM version 8.0.0 (clang-800.0.38)
.!
de la condición ternaria y cambiar el ordens
yn(&s,a-1)
guardar un byte?n(s,6)
, debe cambiar***
a******
la declaración de variable y usar. Esto es necesario exactamente porque la función hace lo que se espera que haga: anidar la cadena en una matriz varias (aquí: 6) veces. Por supuesto, todavía obtendría tres niveles de[]
porque están codificados. Creo que el programa no debería generarlos en absoluto. Este desafío no se trata de corchetes, se trata de anidar. Algunos lenguajes imprimen matrices con corchetes, C no tiene ninguna función integrada para imprimirlos. ¿Y qué? No es necesario aquí.*
de la firma en la función?Python, 32 bytes
fuente
Ruby, 25 caracteres.
Reescribe la solución Python de jamylak .
Ejecución de muestra:
fuente
C # 6, 50 bytes
fuente
n<1
? También -2 bytes si usa enobject
lugar dedynamic
.Rubí, 24 bytes.
Llamado igual que en la respuesta de manatwork , pero una implementación más extraña.
*s
envuelve la entrada (una cadena posiblemente anidada) en una matriz. Entonces, sin
es cero,s[n]
devuelve el primer elemento des
, convirtiendo la función en un no-op. De lo contrario, regresanil
yas
que solo tendrá un elemento, por lo que pasamos a la llamada recursiva.fuente
V , 6 bytes
Pruébalo en línea!
Explicación:
fuente
Perl 6 , 23 bytes
Expandido:
fuente
Agda, 173 bytes
Dado que el tipo de retorno de la función depende del número dado como argumento, este es claramente un caso en el que se debe usar un lenguaje de tipo dependiente. Desafortunadamente, jugar al golf no es fácil en un idioma en el que tienes que importar productos naturales y listas para usarlos. En el lado positivo, usan
suc
donde hubiera esperado lo detalladosucc
. Entonces aquí está mi código:(Espero haber encontrado todos los lugares donde se pueden omitir espacios).
L
Es una función de tipo que dada una naturaln
y un tipoa
devuelve el tipo den
veces de listas anidadasa
, porL 3 Bool
lo que sería el tipo de listas de listas de listas deBool
(si tuviéramos importadoBool
). Esto nos permite expresar el tipo de nuestra función como(n : ℕ) -> {a : Set} -> a -> L n a
, donde las llaves hacen implícito ese argumento. El código usa una forma más corta de escribir este tipo. La función ahora se puede definir de una manera obvia mediante la coincidencia de patrones en el primer argumento.Cargado este archivo con una
.agda
extensión en emacs permite el usoC-c C-n
(evaluar término de forma normal), de entrada, por ejemplo,f 2 3
y obtener la respuesta correcta en una forma incómoda:(3 ∷ []) ∷ []
. Ahora, por supuesto, si quieres hacer eso con cadenas, tienes que importarlas ...fuente
→
lugar de->
, pero por supuesto eso aumenta el tamaño de un archivo codificado UTF-8.k, 3 bytes
Tomado como una función diádica,
/
aplicará iterativamente la función de la izquierda,:
(enlist
) n veces al segundo argumento.Ejemplo:
fuente
PHP, 44 bytes
nada sofisticado, solo una función recursiva
fuente
Python 2, 32 bytes
Pone
n
los corchetes abiertos antes de la cadena yn
cierra los corchetes antes de ella, luego evalúa el resultado. Si se permite una salida de cadena,eval
se puede eliminar.fuente
En realidad , 4 bytes
La entrada es
string
entoncesn
. Sugerencias de golf bienvenidas. Pruébalo en línea!Ungolfing
fuente
R,
3940 bytesEDITAR: se corrigió el
n=0
problema gracias a @rturnbull.Función que toma dos entradas
s
(cadena) yn
(anidamiento) y genera la lista anidada. Tenga en cuenta que la clase Rlist
imprime de forma nativa la salida de manera diferente a la mayoría de los otros idiomas, sin embargo, es funcionalmente similar a un mapa de clave / valor (con claves posiblemente sin nombre) o una lista en Python.Ejemplo
fuente
n=0
. Antes de ver su respuesta, se me ocurrió una solución recursiva que puede manejarn=0
, pero es 1 byte más larga que su solución (40 bytes):f=function(s,n)if(n)list(f(s,n-1))else s
n=0
caso. Sin embargo, su solución es en realidad38
bytes que excluyen el nombre de la función y, por lo tanto, son más cortos. Gran capturaf(s,n-1)
llamada dentro de él.) Las funciones anónimas recursivas no son posibles en R, que yo sepa.f=function(s,n)'if'(n,list(f(s,n-1)),s)
.Raqueta 83 bytes
Sin golf:
Pruebas:
Salida:
fuente
Haskell,
4038 bytesEl estricto sistema de tipos de Haskell evita la devolución de diferentes tipos (cadenas frente a lista de cadenas frente a lista de cadenas, ...), por lo que tengo que definir mi propio tipo que se adapte a todos esos casos. La función principal
f
llama recursivamenten
veces al constructorC
para anidar yN
para el caso base.Ejemplo de uso (con
deriving (Show)
agregado al nuevodata
tipo para poder imprimirlo):f 4 "codegolf"
->C (C (C (C (N "codegolf"))))
.Editar: @Christian Sievers guardó 2 bytes reescribiendo la función en un estilo sin puntos para el argumento de cadena. ¡Gracias!
fuente
deriving
cláusula adicional : los padres no son necesarios. - No estoy seguro de si está bien anidar solo elC
constructor que no es como una lista. Mi intento muy similar se basó en un tipo de datos definido comodata D x=J x|L[D x]
.f 0=N;f n=C. f(n-1)
1:(2:(3:([])))
con C (C (C (N "codegolf"))).C
es cons (:
),N
es nulo ([]
).C
no contras, solo incrusta, su tipo de datos no puede expresarse[["a","b"],["c"]]
. Pero tal vez eso está bien ya que este problema solo necesita singletons. -f n=...
No es un punto libre. ¿Punto reducido?Either
. Ej. ) Incluso si eso significara que los constructores son un poco más detallados?tinylisp (repl), 34 bytes
Define una función
F
. Técnicamente, tinylisp no tiene cadenas, pero este código funcionará para cualquier tipo de datos que se le dé.Sin golf (clave para construir:
d
= definir,q
= citar,i
= si,c
= contras,s
= restar):Ejemplo de uso:
fuente
Clojure, 24 bytes
Clojure es algo competitivo aquí.
iterate
crea una secuencia dex, (f x), (f (f x)) ...
,nth
devuelve el elemento necesario.Véalo en línea: https://ideone.com/2rQ166
fuente