Los números naturales que incluyen 0 se definen formalmente como conjuntos, de la siguiente manera :
- El número 0 se define como el conjunto vacío, {}
- Para n ≥ 0, el número n +1 se define como n ∪ { n }.
Como consecuencia, n = {0, 1, ..., n -1}.
Los primeros números, definidos por este procedimiento, son:
- 0 = {}
- 1 = {{}}
- 2 = {{}, {{}}}
- 3 = {{}, {{}}, {{}, {{}}}}
Reto
Dado n
, muestra su representación como un conjunto.
Reglas
La salida puede utilizar constantemente cualquier soporte de carácter tales como {}
, []
, ()
o <>
. Los caracteres arbitrarios (como 01
) no están permitidos.
En lugar de una coma como la anterior, el separador puede ser cualquier signo de puntuación; o puede ser inexistente.
Los espacios (no las nuevas líneas) pueden incluirse de manera arbitraria e inconsistente.
Por ejemplo, el número 2 con corchetes y punto y coma como separador es [[]; [[]]]
, o equivalente [ [ ]; [ [ ] ] ]
, o incluso[ [ ] ;[ []]]
El orden en que se especifican los elementos de un conjunto no importa. Entonces puede usar cualquier orden en la representación. Por ejemplo, estos son algunos resultados válidos para 3
:
{{},{{}},{{},{{}}}}
{{{}},{{},{{}}},{}}
{{{}},{{{}},{}},{}}
Puedes escribir un programa o función . La salida puede ser una cadena o, si usa una función, puede devolver una lista o matriz anidada cuya representación de cadena se ajusta a lo anterior.
Casos de prueba
0 -> {}
1 -> {{}}
2 -> {{},{{}}}
3 -> {{},{{}},{{},{{}}}}
4 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
5 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}
6 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}
7 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}}
fuente
Respuestas:
Jalea , 3 bytes
Este es un enlace monádico. Pruébalo en línea!
Cómo funciona
Cada número natural es el conjunto de todos los números naturales anteriores, es decir, n = {0, ..., n-1} . Como no hay números naturales que precedan a 0 , tenemos que 0 = {} .
fuente
ḶL
es un no-op, la mnemónica es de longitud reducida. También hay unbinary, undecimal, unhalve, unsine, unarccosine, etc.Python 2, 26 bytes
Pruébalo en Ideone .
fuente
JavaScript (ES6), 32 bytes
Suficientemente simple.
fuente
.map()
sin una función de flecha en el interior :-).map(Number)
Es un caso bastante común..map(e=>+e)
es más corto, por un byte.Perl 6 , 16 bytes
Devuelve la estructura de datos anidados.
Ejemplo:
Explicación:
fuente
Rubí,
2721 bytesSoy nuevo en Ruby Golf, pero aquí no pasa nada. ¡Gracias a Jordan por guardar 6 bytes!
Esta es una función recursiva
f
(un proceso, para ser específico) y toma un argumentos
. Se asigna el procf
más0...s
, que es el rango[0, s)
.fuente
map{|e|f[e]}
conmap &f
.Haskell,
3227 bytesPruébalo en Ideone.
fuente
CJam , 14 bytes
Pruébalo en línea!
Explicación
En cada iteración, el bloque construye la representación de un número a partir del anterior. Para ilustrar, consideremos la segunda iteración, donde la representación del número
2
se construye a partir de la de1
, que es la cadena"[[]]"
."[[]]"
_
(duplicado) que contiene"[[]]"
,"[[]]"
)
(Subsi) que contiene"[[]]"
,"[[]"
,"]"
@
(girar) que contiene"[[]"
,"]"
,"[[]]"
\
(swap) que contiene"[[]"
,"[[]]"
,"]"
]
(paquete en matriz) que contiene["[[]" "[[]]" "]"]
, que se mostrará como la cadena"[[][[]]]"
.fuente
Cheddar, 17 bytes
Recurrencia corta + Rango corto + iteración corta = Un desafío donde el cheddar funciona muy bien
No competidor, 11 bytes
El
=>
operador se agregó después de que se lanzó este desafío, lo que hace que esta respuesta no sea competitiva.Esto puede parecer confuso, pero déjame simplificarlo:
Básicamente
n
es la entrada yf
es la función misma.|>n
genera [0, n) y=>
asigna eso encimaf
.fuente
05AB1E ,
87 bytesExplicación
Pruébalo en línea!
Guardado 1 byte gracias a Adnan.
fuente
Pyth, 4 bytes
Banco de pruebas
L
: Definir la funcióny
con entradab
yMb
:y
mapeado sobre el rango0, 1, ..., b-1
En la entrada 0, este mapa vuelve
[]
. De lo contrario, vuelvey
mapeado sobre todos los números hastab
.fuente
MATL , 13 bytes
Pruébalo en línea!
Explicación
fuente
Perl, 27 bytes
Incluye +1 para
-p
Muchos métodos diferentes parecen terminar en 27 o 28 bytes. p.ej
Lo mejor que pude encontrar es
ya que en perls más antiguos puedes soltar el espacio antes
for
y obtener 26 bytesfuente
Mathematica, 14 bytes
fuente
Mathematica, 31 bytes
Implementa directamente la definición como una lista anidada. Utiliza una función sin nombre que recursivamente se llama a sí misma usando
#0
.fuente
Union
lugar deJoin
:±0={};±n_:={t=±(n-1)}⋃t
... Sin embargo, en este caso es aún más corto buscar una solución iterativa:Nest[{#}⋃#&,{},#]&
Retina ,
2418 bytesPruébalo en línea! (La primera línea habilita un conjunto de pruebas separado por salto de línea).
Explicación
Esto convierte la entrada a unario y agrega
<>
, la representación de0
.Aquí,
+
indica que esta sustitución debe ejecutarse en un bucle hasta que la cadena deje de cambiar. Es más fácil explicar esto siguiendo los pasos individuales que tomé para jugar golf. Comencemos con esta versión de la sustitución:Esto coincide con la última
1
representación unaria de la entrada restante (para eliminarla y disminuir la entrada), así como con el contenido del conjunto actual al final. Esto luego se reemplaza con un nuevo conjunto que contiene el anterior, así como su contenido. Sin embargo, podemos notar que$1
es seguido>
en ambos casos y, por lo tanto, podemos incluirlo en la captura misma y omitirlo del patrón de sustitución. Eso lleva a la formaSin embargo, ahora podemos observar que
(.*)
solo captura el sufijo de la cadena después1<
e incluso reinsertamos este sufijo al final con$1
. Dado que la sintaxis de sustitución nos da una forma de referirnos a la parte de una cadena después de una coincidencia$'
, simplemente podemos omitir ambas partes y terminar con la versión utilizada en la respuesta:fuente
{}
, pero<>
es el único par que nunca necesita escapar, así que pensé en ir con eso. ;)Baja carga , 14 bytes
Pruébalo en línea!
Los programas completos de subcarga no pueden recibir datos a través de ninguno de nuestros métodos definidos, por lo que esta es una función que toma datos de la pila como un número de Church (la forma normal de definir enteros en Underload) y produce una salida a la pila como una cadena .
Los
(…)
marcadores de agrupación son necesarios para que esto sea una función (reutilizable) en lugar de un fragmento (solo se puede usar una vez). El contenedor en el enlace TIO llama a la función en cuestión de manera destructiva^
, pero podría reutilizarse haciendo una copia y consumiendo solo una de las copias al llamarla. También proporciona entrada al programa (aquí(:*:*)
, es decir, 4), e imprime la salida usandoS
.Explicación
La subcarga es sorprendentemente adecuada para esta tarea, ya que las carpas de Turing van, teniendo primitivas tan útiles como "copiar" y "rodear con paréntesis". (De alguna manera, Underload, normalmente un lenguaje muy detallado, está superando a Mathematica, normalmente un idioma que gana debido a que tiene un gran conjunto de builtins, a través de tener builtins más apropiados). Así es como funciona el programa:
La exponenciación de la función hace que los pasos de la función se repitan muchas veces, por lo que, por ejemplo,
(:a*)
³ sería(:a*:a*:a*)
. Esa es la forma idiomática de escribir un bucle que se repite un número determinado de veces en Underload. (Puede observar que~^
se describe de dos maneras diferentes anteriormente; eso se debe a que los enteros en Underload se definen como exponenciación de funciones especializadas para ese entero, por lo que para hacer una exponenciación de funciones, simplemente intente ejecutar un entero como si fuera una función .)fuente
Pari / GP , 23 bytes
Pruébalo en línea!
fuente
APL (NARS), 15 caracteres, 30 bytes
prueba:
No sé si esto sería aceptado ... Zilde está ⍬ aquí representa el conjunto vacío {} si quiero imprimir el elemento Zilde o un elemento lleno de Zilde, y Zilde adjuntó todo lo que sucede es imprimir nada ... así que para ver Zilde, uno tiene que definir una función. Lo llamo o (
o←⎕fmt
). No inserto en el conteo porque el elemento y su estructura existen incluso si el sistema no lo imprime ... Es posible si io es 0podría ser una solución de 12 caracteres también ...
fuente
Brachylog , 14 bytes
Pruébalo en línea!
Explicación
fuente
GAP , 22 bytes
Por ejemplo:
fuente
Raqueta 119 bytes
Sin golf:
Prueba (En Racket {} es igual que () y la salida predeterminada es ()):
Para ver claramente cada número (0 a 3):
fuente
Lote, 74 bytes
Utiliza el hecho de que cada respuesta es igual a la respuesta anterior insertada en sí misma después de la guía
{
. Las primeras salidas son las siguientes:fuente