Os números naturais, incluindo 0, são formalmente definidos como conjuntos, da seguinte maneira :
- O número 0 é definido como o conjunto vazio, {}
- Para n ≥ 0, o número n +1 é definido como n ∪ { n }.
Como conseqüência, n = {0, 1, ..., n -1}.
Os primeiros números, definidos por este procedimento, são:
- 0 = {}
- 1 = {{}}
- 2 = {{}, {{}}}
- 3 = {{}, {{}}, {{}, {{}}}}
Desafio
Dado n
, produza sua representação como um conjunto.
Regras
A saída pode consistentemente usar qualquer suporte de caracteres, tais como {}
, []
, ()
ou <>
. Caracteres arbitrários (como 01
) não são permitidos.
Em vez de uma vírgula como acima, o separador pode ser qualquer sinal de pontuação; ou pode ser inexistente.
Os espaços (não as novas linhas) podem ser incluídos de forma arbitrária e inconsistente.
Por exemplo, o número 2 com colchetes e ponto e vírgula como separador é [[]; [[]]]
, ou equivalente [ [ ]; [ [ ] ] ]
, ou mesmo[ [ ] ;[ []]]
A ordem na qual os elementos de um conjunto são especificados não importa. Então você pode usar qualquer ordem na representação. Por exemplo, estas são algumas saídas válidas para 3
:
{{},{{}},{{},{{}}}}
{{{}},{{},{{}}},{}}
{{{}},{{{}},{}},{}}
Você pode escrever um programa ou função . A saída pode ser uma sequência ou, se estiver usando uma função, você pode retornar uma lista ou matriz aninhada cuja representação de sequência esteja em conformidade com o acima.
Casos de teste
0 -> {}
1 -> {{}}
2 -> {{},{{}}}
3 -> {{},{{}},{{},{{}}}}
4 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
5 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}
6 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}
7 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}}
fonte
Respostas:
Gelatina , 3 bytes
Este é um link monádico. Experimente online!
Como funciona
Cada número natural é o conjunto de todos os números naturais anteriores, ou seja, n = {0,…, n-1} . Como não há números naturais anteriores a 0 , temos que 0 = {} .
fonte
ḶL
é um no-op, o mnemônico é pouco. Há também unbinary, undecimal, unhalve, unsine, unarccosine, etc.Python 2, 26 bytes
Teste em Ideone .
fonte
JavaScript (ES6), 32 bytes
Simples o suficiente.
fonte
.map()
sem uma função de seta dentro :-).map(Number)
é um caso bastante comum..map(e=>+e)
seja mais curto, por um byte.Perl 6 , 16 bytes
Retorna estrutura de dados aninhada.
Exemplo:
Explicação:
fonte
Ruby,
2721 bytesEu sou novo no golfe rubi, mas aqui não vale nada. Obrigado à Jordânia por economizar 6 bytes!
Esta é uma função recursiva
f
(um proc, para ser específico) e recebe um argumentos
. Ele mapeia o procf
mais0...s
, que é o intervalo[0, s)
.fonte
map{|e|f[e]}
pormap &f
.Haskell,
3227 bytesExperimente em Ideone.
fonte
CJam , 14 bytes
Experimente online!
Explicação
Em cada iteração, o bloco constrói a representação de um número a partir do número anterior. Para ilustrar, vamos considerar a segunda iteração, onde a representação do número
2
é construída a partir da de1
, que é a string"[[]]"
."[[]]"
_
(duplicada), ela contém"[[]]"
,"[[]]"
)
(uncons), ela contém"[[]]"
,"[[]"
,"]"
@
(girar), ela contém"[[]"
,"]"
,"[[]]"
\
(swap), ela contém"[[]"
,"[[]]"
,"]"
]
(empacotar na matriz), ela contém["[[]" "[[]]" "]"]
, que seria exibida como a sequência"[[][[]]]"
.fonte
Queijo Cheddar, 17 bytes
Recursão curta + Faixa curta + iteração curta = Um desafio em que o cheddar se sai muito bem
Não concorrente, 11 bytes
o
=>
operador foi adicionado após o lançamento deste desafio, tornando esta resposta não competitiva.Isso pode parecer confuso, mas deixe-me simplificá-lo:
basicamente
n
é a entrada ef
é a própria função.|>n
gera [0, n) e=>
mapeia issof
.fonte
05AB1E ,
87 bytesExplicação
Experimente online!
Guardado 1 byte graças a Adnan.
fonte
Pitão, 4 bytes
Suíte de teste
L
: Defina a funçãoy
com entradab
yMb
:y
mapeado no intervalo0, 1, ..., b-1
Na entrada 0, esse mapa retorna
[]
. Caso contrário, ele retornaráy
mapeado sobre todos os números atéb
.fonte
MATL , 13 bytes
Experimente online!
Explicação
fonte
Perl, 27 bytes
Inclui +1 para
-p
Muitos métodos diferentes parecem terminar em 27 ou 28 bytes. por exemplo
O melhor que eu pude encontrar é
já que em perls mais antigos, você pode deixar o espaço antes do
for
e obter 26 bytesfonte
Mathematica, 14 bytes
fonte
Mathematica, 31 bytes
Implementa diretamente a definição como uma lista aninhada. Usa uma função sem nome que se chama recursivamente usando
#0
.fonte
Union
, em vez deJoin
:±0={};±n_:={t=±(n-1)}⋃t
... No entanto, neste caso, é ainda mais curto para ir para uma solução iterativa:Nest[{#}⋃#&,{},#]&
Retina ,
2418 bytesExperimente online! (A primeira linha ativa um conjunto de testes separado por avanço de linha.)
Explicação
Isso converte a entrada em unário e acrescenta
<>
, a representação de0
.Aqui, o
+
indica que essa substituição deve ser executada em um loop até que a string pare de mudar. É mais fácil explicar isso, seguindo as etapas individuais que eu segui no golfe. Vamos com esta versão da substituição:Isso corresponde à última
1
representação unária da entrada restante (para removê-la e decrementar a entrada), bem como ao conteúdo da corrente definida no final. Em seguida, ele é substituído por um novo conjunto que contém o anterior e seu conteúdo. No entanto, podemos notar que$1
é seguido por>
ambos os casos e, portanto, podemos incluí-lo na própria captura e omiti-lo do padrão de substituição. Isso leva ao formulárioNo entanto, agora podemos observar que
(.*)
apenas captura o sufixo da sequência depois1<
e até reinserimos esse sufixo no final com$1
. Como a sintaxe de substituição nos fornece uma maneira de nos referirmos à parte de uma sequência após uma correspondência$'
, podemos simplesmente omitir essas duas partes e terminar com a versão usada na resposta:fonte
{}
, mas<>
é o único par que nunca precisa escapar, então eu pensei em ir com isso. ;)Subcarga , 14 bytes
Experimente online!
Os programas fullload underload não podem receber entrada por meio de nenhum de nossos métodos definidos, portanto, esta é uma função que recebe entrada da pilha como um numeral da igreja (a maneira normal de definir números inteiros no underload) e produz saída para a pilha como uma string .
Os
(…)
marcadores de agrupamento são necessários para tornar isso uma função (reutilizável) e não um trecho (apenas utilizável uma vez). O wrapper no link TIO chama a função em questão de forma destrutiva^
, mas pode ser reutilizada através da cópia e consumindo apenas uma das cópias ao chamá-la. Ele também fornece entrada para o programa (aqui(:*:*)
, ou seja, 4) e imprime a saída usandoS
.Explicação
A subcarga é surpreendentemente adequada para essa tarefa, como os tarpits de Turing, com primitivas úteis como "copiar" e "cercar parênteses". (De alguma forma, o Underload, normalmente uma linguagem muito detalhada, está superando o Mathematica, normalmente uma linguagem que vence devido a um enorme conjunto de componentes internos, através de componentes internos mais adequados!) Veja como o programa funciona:
A exponenciação da função efetivamente faz com que as etapas da função se repitam quantas vezes, assim, por exemplo,
(:a*)
³ seria(:a*:a*:a*)
. Essa é a maneira idiomática de escrever um loop que se repete um determinado número de vezes no Underload. (Você pode observar que isso~^
é descrito de duas maneiras diferentes acima; isso porque os números inteiros no Underload são definidos como exponenciação de função especializada para esse número inteiro; portanto, para fazer uma exponenciação de função, você simplesmente tenta executar um número inteiro como se fosse uma função. .)fonte
Pari / GP , 23 bytes
Experimente online!
fonte
APL (NARS), 15 caracteres, 30 bytes
teste:
Não sei se isso seria aceito ... Zilde está ⍬ aqui representa o conjunto vazio {} se eu quiser imprimir o elemento Zilde ou um elemento cheio de Zilde, e Zilde incluiu tudo o que aconteceu é imprimir nada ... então para ver Zilde é preciso definir uma função que eu chamo de o (
o←⎕fmt
) eu não insiro na contagem porque o elemento e sua estrutura existem mesmo que o sistema não o imprima ... É possível se io for 0poderia ser uma solução de 12 caracteres também ...
fonte
Braquilog , 14 bytes
Experimente online!
Explicação
fonte
GAP , 22 bytes
Por exemplo:
fonte
Raquete 119 bytes
Ungolfed:
Teste (Na raquete {} é igual a () e a saída padrão é ()):
Para ver claramente cada número (0 a 3):
fonte
Lote, 74 bytes
Usa o fato de que cada resposta é igual à resposta anterior inserida em si após a liderança
{
. As primeiras saídas são as seguintes:fonte