Golf um número transcendental

46

Definições

  • Um número algébrico é um número que é zero de um polinômio diferente de zero com coeficientes inteiros. Por exemplo, a raiz quadrada de 2é algébrica, porque é um zero de x^2 - 2.
  • Um número transcendental é um número real que não é algébrico.

Tarefa

Você deve escolher um número transcendental.

Em seguida, escreva um programa / função que use um número inteiro positivo ne nimprima o décimo dígito decimal após o ponto decimal do número transcendental escolhido. Você deve indicar claramente em sua submissão, qual número transcendental é usado.

Você pode usar a indexação 0 ou a indexação 1.

Exemplo

e^2=7.389056098...é um número transcendental. Para este número:

n output
1 3
2 8
3 9
4 0
5 5
6 6
7 0
8 9
9 8
...

Observe que a inicial 7é ignorada.

Como mencionei acima, você pode escolher outros números transcendentais.

Pontuação

Isso é . A menor pontuação em bytes vence.

Freira Furada
fonte
Como as diferentes respostas lidam com o fato de que existe um número finito de números inteiros que podem ser usados ​​como argumento? 0 seria uma resposta aceitável desde que exista um número transcendental cuja primeira maxInteger dígitos são 0
WNG
1
Os idiomas do @WNG têm precisão arbitrária. Não há maxinteger.
Leaky Nun
1
@WNG Você pode pensar no índice de entrada como uma string, não um número inteiro, em idiomas que não possuem tipos de números arbitrariamente grandes.
Isaacg

Respostas:

112

Python , 3 bytes

min

Experimente online!

Pega uma sequência numérica e gera o menor dígito como o menor caractere. Por exemplo, 2542. O decimal com esses dígitos começa

0.0123456789011111111101222222220123333333012344444401234555550123456666012345678801234567

Este é o OEIS A054054 .

Reivindicação: Este número cé transcendental

Prova: observe que cé muito escasso: quase todos os seus dígitos são zero. Isso porque grande n, há alta probabilidade de nter um dígito zero, fornecendo um dígito mínimo de zero. Além disso, cpossui longas execuções de zeros consecutivos. Usamos um resultado existente que afirma que isso significa cé transcendental.

Seguindo esta pergunta math.SE , vamos Z(k)representar a posição do k'th dígito diferente de zero de ce c_kseja esse dígito diferente de zero, um número inteiro entre 1e 9. Em seguida, expressamos a expansão decimal de c, mas assumindo apenas os dígitos diferentes de zero, como a soma acima k=1,2,3,...de c_k/10^Z(k).

Usamos o resultado do ponto 4 desta resposta de George Lowther: que cé transcendental se houver infinitas execuções de zeros que são pelo menos uma fração constante do número de dígitos até agora. Formalmente, deve haver um ε>0para que Z(k+1)/Z(k) > 1+εpara infinitamente muitos k. Vamos usarε=1/9

Para qualquer número de dígitos d, tome kcom Z(k) = 99...99com dnoves. Tal kexiste porque esse dígito cé a 9e, portanto, diferente de zero. Contando a partir de 99...99, todos esses números contêm um dígito zero, portanto, marca o início de um longo período de zeros c. O próximo dígito diferente de zero é apenas Z(k+1) = 1111...11com d+1os. A proporção Z(k+1)/Z(k)excede um pouco 1+1/9.

Isso satisfaz a condição de todos d, implicando o resultado.

xnor
fonte
Eu ficaria muito animado em ver a prova.
Freira vazando
1
Isso é permitido? minela mesma não recebe nenhuma entrada e não fornece nenhuma saída, algo que parece ser um requisito da pergunta. Certamente, é a principal função do todo, mas não faz nada sem o gerador e a declaração de impressão aparentes no 'Experimente online'.
Mast
6
@ Master Sim, o problema é gerar o nono dígito dado n, não gerar o decimal. O código de teste é mostrar a sequência de dígitos. E uma expressão que é avaliada para uma função, incluindo uma literal de função, é um envio de função válido .
xnor 16/05
1
Noodle9 17/17
38

Pitão, 1 byte

h

Entrada e saída são strings. A função pega o primeiro dígito do índice. O número transcendental resultante é semelhante a:

0.0123456789111111111122222222223 ...

Isso é transcendental porque é 1/9mais um número que tem trechos de zeros de comprimento pelo menos uma fração constante do número. Com base nesta resposta math.stackexchange , isso significa que o número é transcendental.

Existem trechos de zeros que vão de dígito 100 ... 000a 199 ... 999, portanto, a proporção de Z(k+1)a Z(k)é 2 infinitamente.

Assim, o número acima menos 1/9é transcendental e, portanto, o número acima é transcendental.

isaacg
fonte
1
Observe que a pergunta feita no post vinculado do M.SE não se aplica a esse número, mas o ponto 4 da resposta de George Lowther.
Henning Makholm
16

Python 2 , 19 bytes

lambda n:1>>(n&~-n)

O n th dígito é um , se n é uma potência de 2 e 0 de outro modo.

Experimente online!

Dennis
fonte
3
Eu ia responder isso, mas não encontrei nenhuma prova de sua transcendência. O que faz você acreditar que esse número é transcendente? n&~-n>0é mais curto a propósito.
orlp 15/05
1
@orlp Fredholm's number
Leaky Nun
@orlp Eu teria que perguntar ao OP se os booleanos estão bem.
Dennis
1
@ Scrooble Estes booleanos.
Dennis
11

brainfuck, 2 bytes

,.

Da mesma forma que em outras respostas, retorna o primeiro dígito decimal e ignora o restante.

KSab
fonte
5

Retina, 4 bytes

1!`.

Retorna o primeiro dígito do número de entrada. Como essa porta era muito chata, aqui estão mais algumas portas:

O`.
1!`.

(8 bytes) Retorna o dígito mínimo do número de entrada.

.+
$*
+`^(11)+$
$#1$*
^1$

(25 bytes) Retorna 1 se o número de entrada for uma potência de 2.

.+
$*_

$.`
+1`.(\d*)_
$1
1!`.

(30 bytes) Constante de Champernowne.

Neil
fonte
4

Braquilog 2, 7 bytes

⟦₁c;?∋₎

Experimente online!

Calcula dígitos da constante Champernowne (possivelmente dez vezes uma potência de dez devido a problemas de indexação, o que claramente não importa aqui). Basicamente, isso apenas concatena números inteiros e leva o enésimo dígito.


fonte
Por que você precisa ⟦₁?
Freira vazando 15/05
@LeakyNun: Porque, do contrário, começaríamos a concatenar números com 0, e você não pode fazer isso porque 0123não é um número (ele tem um zero à esquerda, que não se encaixa no conceito de Brachylog sobre o que é um número).
4

Python 2, 13 bytes

Entrada e saída são strings.

lambda n:n[0]

O nono dígito do número é o dígito mais significativo de n quando é escrito em decimal.

feersum
fonte
4
Você deve incluir por que esse número é transcendental.
orlp 15/05
2
@orlp Parece que a referência do xnor também pode ser facilmente aplicada aqui - subtraia 1/9 do número e depois Z (n + 1) / Z (n) ~ = 2 infinitamente frequentemente (entre 10 ^ x e 2 * 10 ^ x )
feersum
3

JavaScript, 51 bytes

Esta função calcula o ndígito da constante de Champernowne. Adicione f=no início e chame like f(arg). Observe que né 1 indexado.

n=>[..."1".repeat(n)].map((c,i)=>c*++i).join``[n-1]

Explicação

Esta função recebe um único argumento n. Em seguida, ele cria uma ncadeia de caracteres de 1s repetitiva. Em seguida, divide essa String em uma matriz de 1s. Depois disso, ele itera sobre todos os elementos da Matriz e os multiplica com seu índice na Matriz incrementado por 1. Em seguida, junta a Matriz sobre ""(String vazia) para formar uma String. Por fim, ele retorna o nth elemento da String obtida.

Nota: O tipo do valor retornado é sempre String .

Snippet de teste

let f =

n=>[..."1".repeat(n)].map((c,i)=>c*++i).join``[n-1]

i.oninput = e => o.innerHTML = f(parseInt(e.target.value,10));
<input id=i><pre id=o></pre>

Arjun
fonte
3

Python 2, 43 bytes

Champernowne é constante.

lambda n:"".join(`i`for i in range(n+1))[n]
orlp
fonte
Por que você precisa n+1?
Freira vazando 15/05
@LeakyNun Porque mais eu recebo erros de indexação para n <= 1.
orlp 15/05
Você pode usar a indexação 1.
Freira vazando
@LeakyNun n <= 1.
orlp 15/05
Eu acho que você precisa especificar Python 2 para este.
Numbermaniac #
3

APL (Dyalog) , 3 bytes

2|⍴

Experimente online! (a suíte de testes gera um intervalo de números de 1para 10000, converte-os em uma sequência e aplica o trem 2|⍴neles).

Pega o número de entrada como uma string e retorna seu comprimento mod 2. Então 123=> 3 mod 2=> 1.

A sequência começa assim:

1  1  1  1  1  1  1  1  1  0  0  0  0  0  0  ...

então isso pode ser generalizado da seguinte forma: 9 1s 90 0s 900 1s ...

Multiplicar esse número por 9 nos dá um número de Liouville , que é comprovadamente transcendental.

Kritixi Lithos
fonte
Eu não acho que esse seja necessariamente um número de Liouville - não é óbvio para mim que você pode obter n> 10. Ele se encaixa no teorema mais forte que outras pessoas aqui estão usando, no entanto.
Ørjan Johansen
@ ØrjanJohansen Você pode expressá-lo como 1 - 10^-9 + 10^-99 - 10^-999 + 10^-9999 - 10^-99999 + ..., por isso é um número de Liouville.
Leaky Nun
@LeakyNun A fração de expoentes consecutivos é de aproximadamente 10, mas para se ajustar à definição da Wikipedia, ela precisa ser ilimitada - é por isso que os índices 1 da constante original de Liouville usam um fatorial, e não um exponencial.
Ørjan Johansen
3

Haskell, 25 bytes 17 bytes

(!!)$concat$map show[1..]

A constante de Champernowne pode ser 0 ou 1 indexada, pois C10 * .01 ainda é transcendental.

Editar: de acordo com o comentário nimis, você pode usar a mônada da lista para reduzir isso para

(!!)$show=<<[1..]
Matt R
fonte
2
=<<da lista mônada é concat.map: (!!)$show=<<[1..].
nimi
2

JavaScript, 73 bytes

Este é um programa que calcula o nth dígito da constante de Liouville, onde né o número de entrada fornecido pela chamada da função gcomo g(arg)(e né indexada em 1). Observe que a nova linha no código é necessária.

f=n=>n<1?1:n*f(n-1);g=(n,r=0)=>{for(i=0;i<=n;i++)if(f(i)==n)r=1
return r}

Explicação

O programa consiste em duas funções, fe g. fé uma função recursiva de computação fatorial e gé a principal função do programa. g assume ter um único argumento n. Ele define um argumento padrão rcom um valor de 0. Ele, então, itera sobre todos os Inteiros de 0 a ne, em cada iteração, verifica se a função faplicada sobre i(o índice atual) é igual n, ou seja, se né um fatorial de i. Se esse for o caso, ro valor de é definido como 1. No final da função, ré retornado.

Snippet para teste

f=n=>n<1?1:n*f(n-1);g=(n,r=0)=>{for(i=0;i<=n;i++)if(f(i)==n)r=1
return r}

i.oninput = e => o.innerHTML = g(parseInt(e.target.value,10))
<input id=i><pre id=o></pre>

Aviso: não coloque um valor muito grande na caixa de entrada do Snippet! Caso contrário, seu dispositivo poderá congelar!

Arjun
fonte
1

Pitão, 7 5 4 bytes

@jkS

Experimente online!

Usa a constante de Champernowne.

Economizou 2 3 bytes graças a Leaky Nun.

aplaudir
fonte
1
você pode usar jkpara substituir sm`d, acredito.
Freira vazando
1
Você pode usar em Svez de Uh?
Leaky Nun
Eu acho que eles são funcionalmente idênticos, então sim. Eu li totalmente os documentos>.>
aplaudo
Eles não são idênticos funcionais. Scomeça com 1e Ucomeça com 0.
Freira vazando
Por que você reverte sua edição? O número resultante ainda é transcendental.
Freira vazando
1

Java 8, 18 bytes

Igual à resposta de Dennis para Python 2 , o número de Fredholm

n->(n&(n-1))>0?0:1
JollyJoker
fonte
(n-1)pode ser ~-nou --nsalvar 2 bytes. Ou você pode ter exatamente o mesmo que a resposta de Dennis : n->1>>(n&~-n)ou 1>>(n&--n).
Kevin Cruijssen
1

Geléia , 1 byte

Experimente online!

Primeiro dígito da entrada indexada em 0 entre aspas. 1

1 Veja a resposta de isaacg para comprovação de validade.

Erik, o Outgolfer
fonte
1

Carvão , 24 bytes (não competitivo)

NαAIUVN⟦UGPi⁺α¹⟧β§β⁺α›α⁰

Experimente online!

Nota: No momento desta postagem, não funciona para nonde né um múltiplo positivo de 14.

Explicação

Nα                             Input number to a
   A                  β        Assign to b
     I                         Cast
       UVN                    Evaluate variable N
            ⟦UGPi⁺α¹⟧         With arguments GetVariable(Pi) and a+1
                        §β⁺α›α⁰ Print b[a+(a>0)]
Somente ASCII
fonte
GetVariable(Pi)? Então, não há πvariável predefinida?
Neil
@Neil Ainda não, e eu não estou pretendendo fazer πigual a pi, porque esta é uma linguagem orientada ASCII-arte, não uma orientada a matemática um
ASCII-only
1

Japt , 3 1 + 1 = 2 1 byte

Outro porto da solução do feersum .

Recebe a entrada como uma sequência.

g

Experimente online


Explicação

   :Implicit input of string U
g  :The first character of the string
Shaggy
fonte
A entrada pode ser uma string, assim você pode fazer gpara 1 byte :)
Oliver
O desafio não faz menção à entrada de string, @obarakon, então usei números inteiros em minhas portas JS e, por sua vez, aqui.
Shaggy
Ah, entendi. Muitas das outras respostas usaram entradas de string. Mas você está certo, o OP não mencionou isso no desafio.
197 Oliver
1

TI-BASIC, 16 bytes

Testa basicamente se a entrada N(indexada 1) é um número triangular. É o mesmo que retornar o Nth dígito de 0.1010010001…, que é comprovadamente transcendental. A sequência de dígitos é OEIS A010054 .

Input N
int(√(2N
2N=Ans(Ans+1
kamoroso94
fonte
0

Fourier, 16 bytes

I~NL~S10PS~XN/Xo

Experimente online!

Como outras respostas, gera o primeiro dígito da entrada.

Uma explicação do código:

N = User Input
S = log(N)
X = 10 ^ S
Print (N/X)
Beta Decay
fonte
0

JavaScript (ES6)

Apenas algumas portas de outras soluções


solução Python do feersum , 12 bytes

n=>(""+n)[0]


Solução Python de Dennis , 13 bytes

n=>1>>(n&--n)


Solução Python do xnor , 20 bytes

n=>Math.min(...""+n)
Shaggy
fonte
0

C #, 13 bytes

n=>(n+"")[0];

Da solução de feersum. Quase a mesma solução que a porta js.

Experimente online

aloisdg diz Restabelecer Monica
fonte
0

05AB1E , 3 1 byte

EDIT : Usando a prova das outras respostas, retorna o primeiro dígito da entrada

¬

1 indexado para π (apenas até 100000 dígitos)

žs¤

Como funciona

žs  # Implicit input. Gets n digits of pi (including 3 before decimal)
  ¤ # Get last digit

Ou, se você preferir e (ainda com 1 indexação) (apenas até 10000 dígitos)

žt¤

Experimente online!

Neil A.
fonte
0

J, 2 bytes

A mesma solução que todo mundo está usando:

{.

Retorna o primeiro dígito de n. IO está em strings

Constante de Liouville, 9 bytes

(=<.)!inv

Retorna 1se input é o fatorial de um número inteiro.

Pi, 13 bytes

{:":<[email protected]^

O último dígito não decimal de pi vezes 10 ^ n.

Bolce Bussiere
fonte