Esta construcción es una forma de representar los números naturales.
En esta representación, 0 se define como el conjunto vacío y para todos los demás números, n es la unión de {0} y {n-1}.
Por ejemplo, para construir 3 podemos seguir el algoritmo:
3 =
{ø, 2} =
{ø, {ø, 1}} =
{ø, {ø, {ø}}}
Tarea
Como habrás adivinado, tu tarea es tomar un número natural (incluido cero) y generar su construcción.
Puede mostrar como una cadena o como un conjunto de objetos si su idioma de elección admite dichos objetos.
Si elige generar como una cadena, debe representar un conjunto con llaves ( {}
). Opcionalmente, puede representar el conjunto vacío como ø
(de lo contrario, debe ser un conjunto sin entradas {}
). También puede optar por agregar comas y espacios en blanco entre y después de las entradas en el conjunto.
El orden no es importante, sin embargo, es posible que no tenga elementos repetidos en los conjuntos que genera (por ejemplo {ø,ø}
)
Este es el código de golf, por lo que el objetivo es tener la menor cantidad de bytes
Casos de prueba
Aquí hay algunos casos de prueba con algunos resultados de ejemplo.
0 -> {}
1 -> {{}}
2 -> {{}{{}}}
3 -> {{}{{}{{}}}}
4 -> {{}{{}{{}{{}}}}}
fuente
Respuestas:
Python , 28 bytes
Pruébalo en línea!
Esta es una solución bastante suave para el problema. Para números mayores que cero, puede obtener la representación con la fórmula de cadena
"{{}"*x+"}"*x
. Sin embargo, esto no funciona para cero donde esta es la cadena vacía. Podemos usar este hecho para cortocircuitaror
y devolver el conjunto vacío.Quería usar los objetos integrados de Python para resolver este problema, pero desafortunadamente:
No puede poner conjuntos dentro de conjuntos en python.
fuente
x
para"{{}"*x+x*"}"or
guardar un bytef=
podría ser eliminadofrozenset
, pero no hay nadie tiene bytes por eso ...Haskell , 37 bytes
Pruébalo en línea!
Hasta hace 10 minutos, una respuesta como esta no tendría sentido para mí. Todos los créditos van a esta respuesta de consejos .
Básicamente, usamos
>>
comoconcat $ replicate
(pero pasándole una lista de n elementos en lugar de simplemente n), y=<<
comoconcatMap
, replicando entonces n veces cada una de las cadenas de la lista y concatenando el resultado en una sola cadena.El
0
caso se trata por separado, ya que devolvería una cadena vacía.fuente
f 1
para que funcione correctamenteJavaScript, 28 bytes
Representa conjuntos usando matrices. Solución no recursiva de 38 bytes:
Devuelve las cadenas de salida de ejemplo.
fuente
Mathematica, 27 bytes
Tengo dos soluciones en este recuento de bytes:
fuente
#//.{1->{{}},x_/;x>1->{{},x-1}}&
. Aunque supongo que arruina la entrada 0Perl 6 , 37 bytes
Intentalo
Expandido:
fuente
:
o es algo nuevo para Perl 6?05AB1E ,
65 bytesCódigo
Utiliza la codificación CP-1252 . Pruébalo en línea! o Verifique todos los casos de prueba! .
Explicación
fuente
F¯)
, eso no funciona?n=0
, ya que la salida está vacía (no es un conjunto vacío).Retina , 22 bytes
Pruébalo en línea!
Explicación
Convierta la entrada a unario.
Reemplace cada dígito unario con
{{}
e imprima el resultado sin un salto de línea final (\
).Elimine la apertura
{
s, de modo que el resto}
sean exactamente los que aún necesitamos imprimir para cerrar todos los conjuntos. Sin embargo, el procedimiento anterior falla para la entrada0
, donde no imprimiríamos nada. Entonces...Si la cadena está vacía, reemplácela con el conjunto vacío.
fuente
n
veces en Retina ...Brain-Flak , 135 bytes
Incluye +1 para
-A
Pruébalo en línea!
fuente
Röda , 37 bytes
fuente
CJam , 11 bytes
Imprime un objeto tipo conjunto que consta de listas de listas. CJam imprime listas vacías como cadenas vacías, ya que las listas y las cadenas son casi intercambiables.
Pruébalo en línea!
Explicación
Respuesta anterior,
2118 bytesEsto fue antes de que se confirmara que estaba bien imprimir una estructura de lista anidada. Utiliza el algoritmo de repetición de cadenas.
¡Guardado 3 bytes gracias a Martin Ender!
Explicación
fuente
Jalea , 6 bytes
Este es un enlace niládico que lee un número entero de STDIN y devuelve una matriz irregular.
Pruébalo en línea!
Cómo funciona
fuente
Python 3 , 32 bytes
No es el camino más corto, pero solo tuve que hacer esto con recurrencia.
Pruébalo en línea!
fuente
Cardenal ,
5150 bytesPruébalo en línea!
Explicación
Recibir entrada y enviar hacia abajo y hacia la izquierda desde el #
Imprima "{" una vez y luego imprima "{} {" n-1 veces si n> 1, luego imprima "{}" si n> 0
Mantenga el valor de entrada hasta que se complete el primer ciclo
Imprima "}" una vez y luego repita n-1 veces si n> 1
fuente
AHK, 55 bytes
No es la respuesta más corta, pero disfruté esto porque las idiosincrasias de AutoHotkey hacen que este método de recursión se vea súper mal.
If
y lasLoop
declaraciones suponen que la siguiente línea es lo único que se incluye si no se utilizan corchetes. Los corchetes son caracteres de escape, por lo que debe escapar con otros corchetes para usarlos como texto. Además, la variable1
es el primer argumento pasado. Cuando leo el código sin conocer esos datos, la lógica se ve así:s
igual a la respuesta incorrectaSin todos los caracteres de escape entre paréntesis, se vería así:
fuente
JavaScript 50 bytes
fuente
tinylisp , 52 bytes
Pruébalo en línea!(Arnés de prueba).
Explicación
Tenga en cuenta que así
(cons x (cons y nil))
es como se crea una lista que contienex
yy
en Lisp.fuente
C (gcc) , 52 bytes
Aprovechando algunas evaluaciones de cortocircuito y recursividad.
Pruébalo en línea!
fuente
Pure Bash ,
494841 bytesPruébalo en línea!
fuente
cc , 46 bytes
Pruébalo en línea!
Entrada en stdin, salida en stdout.
Esto funciona calculando una fórmula para la salida deseada como un número base-256. El comando P en dc se usa para imprimir el número base-256 como una cadena.
Explicación adicional:
Sea n la entrada n. El programa de cc calcula la suma de
A = piso (256 ^ n / 255) * 125 (DC interpreta el BF como 11 * 10 + 15 = 125)
y
B = piso ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Para:
Observe que 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) es igual a (256 ^ n-1) / 255, por la fórmula para una progresión geométrica, y esto es igual al piso (256 ^ n / 255 ) Entonces este es el número que consiste en n 1 en la base 256.
Cuando lo multiplica por 125 para obtener A, el resultado es el número que consiste en n 125 en la base 256 (125 es un solo dígito en la base 256, por supuesto). Probablemente sea mejor escribir los dígitos en la base 256 como números hexadecimales; 125 es hexadecimal 7D, por lo que A es el número base 256 que consiste en n 7D en una fila.
B es similar:
Esta vez observe que 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) es igual a (16777216 ^ n - 1) / 16777215, y esto es igual al piso (16777216 ^ n / 16777215).
Ahora, 256 ^ 3 = 16777216 y 8 ^ 8-1 = 16777215, así que esto es lo que estamos calculando como floor ((256 ^ n) ^ 3 / (8 ^ 8-1)).
A partir de la representación en serie geométrica, este número en la base 256 es 100100100 ... 1001 con n de los dígitos siendo 1 y el resto de los dígitos siendo 0.
Esto se multiplica por 8092541, que es 7B7B7D en hexadecimal. En la base 256, este es un número de tres dígitos que consta de los dígitos 7B, 7B y 7D (escribir esos dígitos en hexadecimal por conveniencia).
Se deduce que el producto escrito en la base 256 es un número de 3 dígitos que consta de los 3 dígitos 7B 7B 7D repetidos n veces.
Esto se multiplica por 256 ^ n, lo que da como resultado un número base-256 de 4 dígitos, que consta de los 3 dígitos 7B 7B 7D repetidos n veces, seguidos de n 0. Eso es B.
Agregar A + B ahora produce el número de base 256 de 4 dígitos que consta de los 3 dígitos 7B 7B 7D repetidos n veces, seguidos de n 7D. Dado que 7B y 7D son los códigos ASCII para
{
y}
, respectivamente, esta es la cadena que consta de n copias de{{}
seguido de n copias de}
, que es exactamente lo que queremos para n> 0. El comando P en dc imprime un número base-256 como una cuerda, tal como la necesitamos.Desafortunadamente, n = 0 tiene que ser tratado como un caso especial. El cálculo anterior produce un resultado de 0 para n = 0; en ese caso, acabo de codificar la impresión de la cadena
{}
.fuente
Java 7, 61 bytes
Pruébalo en línea!
fuente
Lote, 88 bytes
fuente
Brainf *** , 99 bytes
(nueva línea para la estética) Dado que es brainf ***, toma la entrada como códigos ascii char (la entrada "a" corresponde a 96)
Braineasy, 60 bytes
Also, in my custom language (brainf** based, interpreter here):
You have to hardcode the program input into the interpreter because i'm lazy.
fuente
[]
? It seems like it could be removed05AB1E ,
53 bytesPruébalo en línea!
Esta versión es después de que aclaró que los conjuntos están bien.
Versión anterior (que hace uso de ø):
05AB1E ,
54 bytesPruébalo en línea!
Donde
1
es equivalente aø
.fuente