Golf un numero trascendentale


46

definizioni

  • Un numero algebrico è un numero pari a zero di un polinomio diverso da zero con coefficienti interi. Ad esempio, la radice quadrata di 2è algebrica, perché è zero di x^2 - 2.
  • Un numero trascendentale è un numero reale che non è algebrico.

Compito

Devi scegliere un numero trascendentale.

Poi, scrivere un programma / funzione che prende un intero positivo ne l'uscita n-esimo decimale cifre dopo il punto decimale del numero trascendente prescelto. Devi indicare chiaramente nella tua presentazione, quale numero trascendentale viene utilizzato.

È possibile utilizzare 0-indicizzazione o 1-indicizzazione.

Esempio

e^2=7.389056098...è un numero trascendentale. Per questo numero:

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

Si noti che l'iniziale 7viene ignorata.

Come ho detto sopra, puoi scegliere altri numeri trascendentali.

punteggio

Questo è . Vince il punteggio più basso in byte.


In che modo le diverse risposte gestiscono il fatto che esiste un numero finito di numeri interi che possono essere usati come argomento? 0 sarebbe una risposta accettabile poiché esiste un numero trascendentale le cui prime cifre maxInteger sono 0
WNG

1
@WNG Le lingue hanno una precisione arbitraria. Non c'è maxinteger.
Leaky Nun,

1
@WNG Puoi pensare all'indice di input come una stringa, non un numero intero, in lingue che non hanno tipi di numeri arbitrariamente grandi.
isaacg,

Risposte:


112

Python , 3 byte

min

Provalo online!

Prende una stringa numerica, genera la cifra più piccola come carattere più piccolo. Ad esempio, 2542. Inizia il decimale con queste cifre

0.0123456789011111111101222222220123333333012344444401234555550123456666012345678801234567

Questo è OEIS A054054 .

Reclamo: questo numero cè trascendentale

Prova: si noti che cè molto scarso: quasi tutte le sue cifre sono zero. Questo perché grande n, c'è un'alta probabilità che nabbia una cifra zero, dando una cifra min zero. Inoltre, cha lunghe serie di zero consecutivi. Usiamo un risultato esistente che afferma che questo significa che cè trascendentale.

A seguito di questa domanda matematica.SE , Z(k)rappresentiamo la posizione della k'cifra non zero di c, e c_ksia quella cifra diversa da zero, un numero intero compreso tra 1e 9. Quindi, esprimiamo l'espansione decimale di c, ma prendendo solo le cifre diverse da zero, come la somma k=1,2,3,...di c_k/10^Z(k).

Usiamo il risultato del punto 4 di questa risposta di George Lowther: questo cè trascendentale se ci sono infiniti cicli di zero che sono almeno una frazione costante del numero di cifre finora. Formalmente, ci deve essere un ε>0modo che Z(k+1)/Z(k) > 1+εper infinitamente molti k. Useremoε=1/9

Per qualsiasi numero di cifre d, prendere kcon Z(k) = 99...99con dnove. Tale kesiste perché questa cifra in cè a 9, e quindi diversa da zero. Contando da 99...99, questi numeri contengono tutti una cifra zero, quindi segna l'inizio di una lunga serie di zero c. La prossima cifra diversa da zero non è fino a Z(k+1) = 1111...11con d+1quelle. Il rapporto Z(k+1)/Z(k)supera leggermente 1+1/9.

Questo soddisfa le condizioni per tutti d, implicando il risultato.


Sarei piuttosto entusiasta di vedere la prova.
Leaky Nun,

1
È permesso? mindi per sé non accetta alcun input e non fornisce alcun output, qualcosa che sembra essere un requisito della domanda. Certo, è la funzione chiave nel suo insieme, ma non fa nulla senza che il generatore e la dichiarazione di stampa siano evidenti in "Provalo online".
Albero

6
@Mast Sì, il problema è generare l'ennesima cifra data n, non generare il decimale. Il codice di prova è mostrare la sequenza di cifre. E un'espressione che restituisce una funzione, inclusa una funzione letterale, è un valido invio di funzione .
xnor

1
delizioso :)))
Noodle9

38

Pyth, 1 byte

h

Input e output sono stringhe. La funzione accetta la prima cifra dell'indice. Il numero trascendente risultante assomiglia a:

0.0123456789111111111122222222223 ...

Questo è trascendentale perché è 1/9più un numero che ha tratti di zero di lunghezza almeno una frazione costante del numero. Sulla base di questa risposta math.stackexchange , ciò significa che il numero è trascendentale.

Ci sono tratti di zero che vanno dalla cifra 100 ... 000a 199 ... 999, quindi il rapporto di Z(k+1)a Z(k)è 2 infinitamente spesso.

Pertanto, il numero sopra riportato 1/9è trascendentale, e quindi il numero sopra è trascendente.


1
Si noti che la domanda posta nel post M.SE collegato non si applica a questo numero, ma lo fa il punto 4 della risposta di George Lowther.
Henning Makholm,

16

Python 2 , 19 byte

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

Il n esima cifra è 1 se n è una potenza di 2 e 0 altrimenti.

Provalo online!


3
Stavo per rispondere a questa domanda, ma non ho trovato alcuna prova della sua trascendenza. Cosa ti fa credere che questo numero sia trascendente? n&~-n>0è più breve a proposito.
orlp,



@orlp Dovrei chiedere all'OP se i booleani stanno bene.
Dennis,

1
@Scrooble Questi
Dennis,

11

Brainfuck, 2 byte

,.

Analogamente ad altre risposte, restituisce la prima cifra decimale e ignora il resto.



5

Retina, 4 byte

1!`.

Restituisce la prima cifra del numero inserito. Poiché quella porta era così noiosa, ecco alcune altre porte:

O`.
1!`.

(8 byte) Restituisce la cifra minima del numero di input.

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

(25 byte) Restituisce 1 se il numero di input è una potenza di 2.

.+
$*_

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

(30 byte) La costante di Champernowne.


4

Brachylog 2, 7 byte

⟦₁c;?∋₎

Provalo online!

Calcola le cifre della costante di Champernowne (probabilmente per una potenza di dieci a causa di problemi di indicizzazione, che chiaramente non contano qui). Fondamentalmente, questo concatena solo numeri interi e quindi prende l' ennesima cifra.


Perché avete bisogno ⟦₁?
Leaky Nun,

@LeakyNun: Perché altrimenti inizieremmo a concatenare i numeri con 0, e non puoi farlo perché 0123non è un numero (ha uno zero iniziale, che non rientra nel concetto di Brachylog di cosa sia un numero).

4

Python 2, 13 byte

Input e output sono stringhe.

lambda n:n[0]

L'ennesima cifra del numero è la cifra più significativa di n quando è scritta in decimale.


4
Dovresti includere il motivo per cui questo numero è trascendentale.
orlp,

2
@orlp Sembra che il riferimento di xnor possa essere facilmente applicato anche qui: sottrai 1/9 dal numero e quindi Z (n + 1) / Z (n) ~ = 2 infinitamente spesso (tra 10 ^ x e 2 * 10 ^ x ).
feersum,


3

JavaScript, 51 byte

Questa funzione calcola la ncifra della costante di Champernowne. Aggiungi f=all'inizio e invoca like f(arg). Si noti che nè 1 indicizzato.

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

Spiegazione

Questa funzione accetta un singolo argomento n. Quindi, crea una nlunga stringa di caratteri di 1 ripetitivi. Quindi, divide quella stringa in una matrice di 1s. Successivamente, scorre ogni elemento dell'array e li moltiplica con il loro indice nell'array incrementato di 1. Quindi, unisce l'array sopra ""(stringa vuota) per formare una stringa. Alla fine, restituisce il nth elemento della stringa ottenuta.

Nota: il tipo del valore restituito è sempre String .

Test dello snippet

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>


3

Python 2, 43 byte

La costante di Champernowne.

lambda n:"".join(`i`for i in range(n+1))[n]

Perché avete bisogno n+1?
Leaky Nun,

@LeakyNun Perché altrimenti ricevo errori di indicizzazione per n <= 1.
orlp

Puoi usare 1-indicizzazione.
Leaky Nun,

@LeakyNun n <= 1.
orlp,

Penso che devi specificare Python 2 per questo.
numbermaniac,

3

APL (Dyalog) , 3 byte

2|⍴

Provalo online! (la suite di test genera un intervallo di numeri da 1a 10000, li converte in una stringa e quindi applica il treno 2|⍴su di essi).

Prende il numero di input come stringa e restituisce la sua lunghezza mod 2. So 123=> 3 mod 2=> 1.

La sequenza inizia così:

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

quindi questo può essere generalizzato in questo modo: 9 1s 90 0s 900 1s ...

Moltiplicare questo numero per 9 ci dà un numero di Liouville , che si è dimostrato trascendentale.


Non penso che questo sia necessariamente un numero di Liouville - non è ovvio per me che puoi ottenere n> 10. Si fa montare il teorema più forte altre persone qui hanno utilizzato, però.
Ørjan Johansen,

@ ØrjanJohansen Puoi esprimerlo come 1 - 10^-9 + 10^-99 - 10^-999 + 10^-9999 - 10^-99999 + ..., quindi è un numero di Liouville.
Leaky Nun,

@LeakyNun La frazione di esponenti consecutivi è di circa 10, ma per adattarsi alla definizione su Wikipedia deve essere illimitata - ecco perché gli 1 indici della costante di Liouville originale usano un fattoriale, e non un esponenziale.
Ørjan Johansen,

3

Haskell, 25 byte 17 byte

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

La costante di Champernowne può essere 0 o 1 indicizzata come C10 * .01 è ancora trascendentale.

Modifica: come da commento nimis è possibile utilizzare la monade elenco per ridurlo a

(!!)$show=<<[1..]

2
=<<dalla lista Monade è concat.map: (!!)$show=<<[1..].
nimi,

2

JavaScript, 73 byte

Questo è un programma che calcola la ncifra della costante di Liouville, dove nè il numero di input dato invocando la funzione gcome g(arg)(ed nè 1-indicizzato). Si noti che la nuova riga nel codice è necessaria.

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}

Spiegazione

Il programma è composto da due funzioni fe g. fè una funzione di calcolo fattoriale ricorsiva ed gè la funzione principale del programma. g presume di avere un solo argomento n. Definisce un argomento predefinito rcon un valore pari a 0. Quindi, itera su tutti gli Integer da 0 a ne, in ogni iterazione, verifica se la funzione fapplicata isull'indice corrente è uguale n, ovvero se nè fattoriale i. In tal caso, ril valore di è impostato su 1. Alla fine della funzione, rviene restituito.

Snippet per i test

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>

Avviso: non inserire un valore molto grande nella casella di input dello snippet! In caso contrario, il dispositivo potrebbe bloccarsi!


1

Pyth, 7 5 4 byte

@jkS

Provalo online!

Usa la costante di Champernowne.

Salvato 2 3 byte grazie a Leaky Nun.


1
puoi usare jkper sostituire sm`d, credo.
Leaky Nun,

1
Puoi usare Sinvece di Uh?
Leaky Nun,

Penso che siano funzionalmente identici, quindi sì. Ho letto completamente i documenti>.>
applauso

Non sono identici dal punto di vista funzionale. Sinizia con 1e Uinizia con 0.
Leaky Nun,

Perché hai ripristinato la modifica? Il numero risultante è ancora trascendentale.
Leaky Nun,



1

Carbone , 24 byte (non competitivo)

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

Provalo online!

Nota: Al momento della posta, non funziona per ncui nè un multiplo positivo di 14.

Spiegazione

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)]

GetVariable(Pi)? Quindi, non esiste una πvariabile predefinita?
Neil,

@Neil Non ancora, e non ho intenzione di renderlo πuguale a pi perché questo è un linguaggio orientato all'arte ASCII, non orientato alla matematica
solo ASCII

1

Japt , 3 1 + 1 = 2 1 byte

Un altro porto della soluzione di feersum .

Accetta l'input come stringa.

g

Provalo online


Spiegazione

   :Implicit input of string U
g  :The first character of the string

L'input può essere una stringa, quindi puoi farlo gper 1 byte :)
Oliver,

La sfida non menziona l'input della stringa, @obarakon, quindi ho usato numeri interi nelle mie porte JS e poi, a sua volta, qui.
Shaggy,

Ah, capito. Molte altre risposte utilizzavano input di stringa. Ma hai ragione, l'OP non l'ha menzionato nella sfida.
Oliver,

1

TI-BASIC, 16 byte

Fondamentalmente verifica se l'input N(1-indicizzato) è un numero triangolare. Ciò Nequivale a restituire la terza cifra di 0,1010010001…, che si è dimostrata trascendentale. La sequenza di cifre è OEIS A010054 .

Input N
int(√(2N
2N=Ans(Ans+1

0

Fourier, 16 byte

I~NL~S10PS~XN/Xo

Provalo online!

Come hanno fatto altre risposte, genera la prima cifra dell'ingresso.

Una spiegazione del codice:

N = User Input
S = log(N)
X = 10 ^ S
Print (N/X)

0

JavaScript (ES6)

Solo alcune porte di alcune altre soluzioni


soluzione Python di feersum , 12 byte

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


Soluzione Python di Dennis , 13 byte

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


La soluzione Python di xnor , 20 byte

n=>Math.min(...""+n)



0

05AB1E , 3 1 byte

EDIT : utilizzando la prova delle altre risposte, restituisce la prima cifra di input

¬

1 indicizzato per π (solo fino a 100000 cifre)

žs¤

Come funziona

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

Oppure, se si preferisce e (ancora 1 indicizzato) (solo fino a 10000 cifre)

žt¤

Provalo online!


0

J, 2 byte

La stessa soluzione che usano tutti gli altri:

{.

Restituisce la prima cifra di n. IO è sulle stringhe

Costante di Liouville, 9 byte

(=<.)!inv

Restituisce 1se l'input è il fattoriale di un numero intero.

Pi, 13 byte

{:":<.@o.10x^

L'ultima cifra non decimale di pi volte 10 ^ n.





Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.