Wikipedia: Definição teórica dos números naturais
O conjunto N de números naturais é definido como o menor conjunto contendo 0 e fechado sob a função sucessora S definida por S (n) = n ∪ {n}.
Os primeiros números definidos dessa maneira são 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.
O uso dessa definição de números naturais conta o comprimento de uma string.
Insira uma sequência de caracteres de a-zA-Z de qualquer tamanho
Saída do comprimento da string na notação definida sem separadores
Exemplos
String vazia de entrada
Saída {}
Introduza um
Saída {{}}
Entrada aaaa
Saída {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}
Para legibilidade, a saída para 'aaaa' com separadores é
{
{}
{{}}
{{} {{}} }
{{} {{}} {{} {{} } } }
}
Condições
- Não há dígitos de 0 a 9 para aparecer no código;
- Não há uso de conversão de código de caracteres para gerar números;
- Nenhum uso de + - * / para cálculos aritméticos, incluindo incremento e decremento;
- Nenhuma operação matemática além da lógica booleana;
- A sequência de entrada não conta na determinação do comprimento dos bytes;
Vencedor Menor comprimento do código em bytes.
Como esta é minha primeira pergunta, espero ter esclarecido e rigorosamente o suficiente. Aceitamos conselhos amigáveis.
fonte
f(n-1)
?Respostas:
GolfScript (
1817 bytes)Recebe entrada na pilha (portanto, se for executado como um programa, via stdin). Deixa a saída como duas strings na pilha (portanto, se executada como um programa, a saída correta é enviada para stdout).
Para deixar uma única string na pilha, acrescente
+
a concat ou use a alternativaDissecação
Alternativo:
Impacto das restrições
Se o decréscimo fosse permitido, permitiria a solução de 15 bytes
fonte
Função Haskell,
3534 caracteresPrograma Haskell com entrada codificada,
48 ou 4947 ou 48 caracteres(47 caracteres, se você não se importa com aspas extras na saída; se o fizer, use em
putStr
vez de,print
no total, 48 caracteres)Programa Haskell,
5150 caracteresfonte
Python 3-64
Se a entrada embutida for permitida:
Python 2-54
fonte
o[-1]
em vez deo.pop()
o=[]
, que se tornao=['{}']
após uma etapa, e amplie a entrada por uma, substituindo-a por'_'+input()
, cortando o espaço depoisin
.Javascript 70 (caracteres)
Este foi o meu esforço antes de definir a pergunta. Eu diria que alguém com mais conhecimento de Javascript do que eu provavelmente pode vencê-lo.
Obrigado Jan Dvorak e Peter Taylor por mais reduções
agora 62
e agora 61
Explicação do código original
definir s para estar vazio
string de entrada em ce dividido em uma matriz
enquanto é possível pop () um caractere de c fazê-lo e redefinir s = s {s} como sucessor
corrente de saída s, mas precisa cercar com colchetes.
fonte
while
(salva um caractere).s='{'
e abandone os dois'{'+
. (Isso se comporta como minha solução GS). Há uma economia adicional de 1 caractere, usando emfor
vez dewhile
e puxando uma das duas inicializações para a inicialização do loop for.for(a;b;c){d}
é diretamente equivalentea;while(b){d;c}
na maioria dos idiomas que possuem os dois. Portanto, emborafor(;b;)
seja idêntico aowhile(b)
efeito e à contagem de caracteres,for(a;b;)
economiza um caracterea;while(b)
e é idêntico no efeito.J -
2220 carComo isso pode ser derivado:
Alternativamente, isso pode ser escrito
'{','{'&(,,~)&'}'@#
, significando a mesma coisa.Uso:
fonte
Haskell - 35 caracteres
A solução é influenciada pela de Jan Dvorak, mas sem reverter a ordem.
fonte
Scala, 64 caracteres
Observe os papéis duplos que os aparelhos e
s
desempenham neste código.EDIT: removido um dígito
fonte
Python 3 (44)
Em cada etapa,
s
é a sequência que representa o conjunto com a final}
removida. Criamos o conjunto que representa an+1
partir do conjunto que representan
através do relacionamento f (n + 1) = f (n) ∪ {f (n)}. Para implementar a união com strings, anexamos a string para {f (n)}, que é exatamentes
mas com o final}
retornado, e deixamos de incluir o final}
no resultado. Finalmente, adicionamos uma final'}'
antes de imprimir.Se eu puder codificar a string, a contagem de caracteres diminui para 35, alternando para Python 2 para salvar parênteses no
print
.Pode haver uma maneira de economizar espaço após o
print
procedimento, fazendo algo parecidoprint'{'+s
com o invertidos
, mas isso atrapalha o+=
anexo à direita.fonte
gs2, 12 bytes
mnemônicos:
fonte
Mathematica, 115 caracteres
O código completo, como mostrado, possui 121 caracteres, mas 6 deles são usados para a sequência de entrada (
"test"
) que, de acordo com as regras, não conta.Sem a exigência de que não haja delimitadores, o tamanho do código pode ser reduzido ainda mais em 24 caracteres; sem conversão explícita em string, outros 9 caracteres podem ser removidos.
fonte
Ruby, 27 anos, meio que trapaceando
Coisas questionáveis:
[[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
fonte
inspect
a matriz manualmente etr
o resultado.Pure Bash, 54
Saída:
fonte
Julia 43
A construção {z ...} expande a cadeia z em uma matriz. Dobre loops sobre todos os elementos da matriz, ignorando o conteúdo e construindo a partir da sequência vazia. A função foldl está disponível em Julia 0.30.
Saída de amostra
fonte
Haskell, 31 bytes
fonte
Mathematica,
455748 bytesUma solução de 36 bytes:
No entanto, ele usa alguns cálculos aritméticos.
fonte
Delphi XE3 (264)
Ok, eu nem chego perto do outro, mas foi divertido fazer :)
Provavelmente, pensando demais. Indo para ver se há uma maneira melhor de fazer isso.
Golfe
Ungolfed
Resultados dos testes
Cordas testadas com comprimento 0..10
fonte
Perl 5: 33 caracteres
Não está claro quais caracteres devo contar como parte da solução. Provavelmente não é aecho ... |
parte porque é usada apenas para alimentar uma linha no stdin. Provavelmente não é o nome do binário perl, porque você pode renomeá-lo para o que quiser.Portanto, contei as opções da linha de comando passadas para o perl, as aspas contidas no código Perl e o próprio código Perl.Além disso, relacionado .
fonte
pl
como padrão, mas obtém-e
e as aspas ao redor do código gratuitamente. RefPerl 6: 37 caracteres
ou de STDIN:
{"\{@_.join()\}"}...*
faz uma lista preguiçosa das formas definidas dos números naturais, e simplesmente pegamos a que precisamosget.chars
.A lista lenta pode ser escrita com mais facilidade:
Que lê de forma muito semelhante à definição.
fonte
Dardo: 85 caracteres
(com nova linha extra para facilitar a leitura).
O requisito de não usar "0" realmente morde, caso contrário
.first
seria[0]
e(..).isNegative
seria..<0
.fonte
Pitão, 13 bytes
Este é o equivalente Pyth em golfe da resposta Python do @ xnor. Observe que Pyth é mais recente que esta pergunta, portanto, esta resposta não é elegível para vencer esse desafio.
Demonstração.
fonte
u+G]GlQY
Javascript,
171149147142 142 bytes(Provavelmente será jogado mais tarde)
fonte