Golf un nombre transcendantal


46

Définitions

  • Un nombre algébrique est un nombre qui est le zéro d'un polynôme différent de zéro avec des coefficients entiers. Par exemple, la racine carrée de 2est algébrique, car c’est un zéro x^2 - 2.
  • Un nombre transcendantal est un nombre réel qui n'est pas algébrique.

Tâche

Vous devez choisir un nombre transcendantal.

Ensuite, écrivez un programme / fonction qui prend un entier positif net indiquez le n-ième chiffre décimal après le point décimal de votre nombre transcendantal choisi. Vous devez indiquer clairement dans votre mémoire quel numéro transcendantal est utilisé.

Vous pouvez utiliser l'indexation 0 ou l'indexation 1.

Exemple

e^2=7.389056098...est un nombre transcendantal. Pour ce numéro:

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

Notez que l'initiale 7est ignorée.

Comme je l'ai mentionné ci-dessus, vous pouvez choisir d'autres nombres transcendantaux.

Notation

C'est du . Le score le plus bas en octets l'emporte.


Comment les différentes réponses gèrent-elles le fait qu'il existe un nombre fini d'entiers pouvant être utilisé comme argument? 0 serait une réponse acceptable puisqu'il existe un numéro transcendantal dont les premiers chiffres maxInteger sont 0
WNG

1
@WNG Les langues ont une précision arbitraire. Il n'y a pas de maxinteger.
Leaky Nun

1
@WNG Vous pouvez considérer l'index d'entrée comme une chaîne, et non un entier, dans des langues ne comportant pas de types de nombres arbitrairement grands.
isaacg

Réponses:


112

Python , 3 octets

min

Essayez-le en ligne!

Prend une chaîne numérique, affiche son plus petit chiffre en tant que plus petit caractère. Par exemple, 254donne 2. La décimale avec ces chiffres commence

0.0123456789011111111101222222220123333333012344444401234555550123456666012345678801234567

C'est OEIS A054054 .

Revendication: Ce nombre cest transcendantal

Preuve: Notez que cc'est très rare: presque tous ses chiffres sont zéro. C'est parce que grand n, il y na une forte probabilité d' avoir un chiffre zéro, ce qui donne un chiffre min égal à zéro. En outre, ca de longues séries de zéros consécutifs. Nous utilisons un résultat existant qui déclare que ce moyen cest transcendantal.

A la suite de cette question math.SE , Z(k)représentons la position du k'e chiffre non nul de c, et prenons c_kce chiffre non nul, un nombre entier compris entre 1et 9. Ensuite, nous exprimons le développement décimal de c, mais en prenant seulement les chiffres non nuls, comme la somme k=1,2,3,...de c_k/10^Z(k).

Nous utilisons le résultat du point 4 de cette réponse de George Lowther: c’est ctranscendantal s’il ya jusqu’à présent une infinité de suites de zéros représentant au moins une fraction constante du nombre de chiffres. Formellement, il doit y avoir un ε>0tel que Z(k+1)/Z(k) > 1+εpour un nombre infini k. Nous allons utiliserε=1/9

Pour un certain nombre de chiffres d, prendre kavec Z(k) = 99...99avec dquatre épingles. Un tel kexiste parce que ce chiffre cest un 9, et donc non nul. En comptant 99...99, ces nombres contiennent tous un chiffre zéro, ce qui marque le début d’une longue série de zéros c. Le prochain chiffre différent de zéro ne se trouve Z(k+1) = 1111...11qu'avec d+1ceux-là. Le rapport Z(k+1)/Z(k)dépasse légèrement 1+1/9.

Cela satisfait la condition pour chaque d, impliquant le résultat.


Je serais très heureux de voir la preuve.
Leaky Nun

1
Est-ce permis? minlui-même ne prend aucune entrée et ne fournit aucune sortie, quelque chose qui semble être une exigence de la question. Bien sûr, c’est la fonction clé dans l’ensemble, mais elle ne fait rien sans le générateur et la déclaration d’impression apparaissant dans «Essayez-le en ligne».
Mât

6
@Mast Oui, le problème est de sortir le nième chiffre donné n et non de générer la décimale. Le code de test doit montrer la séquence de chiffres. Et une expression qui renvoie une fonction, y compris un littéral de fonction, est une soumission de fonction valide .
xnor

1
délicieux :)))
Noodle9

38

Pyth, 1 octet

h

L'entrée et la sortie sont des chaînes. La fonction prend le premier chiffre de l'index. Le nombre transcendantal résultant ressemble à:

0.0123456789111111111122222222223 ...

C’est transcendantal car c’est 1/9un nombre qui comporte des zéros de longueur d’une fraction au moins constante du nombre. Sur la base de cette réponse math.stackexchange , cela signifie que le nombre est transcendant.

Il y a des étendues de zéros allant de chiffre 100 ... 000à 199 ... 999, le rapport de Z(k+1)à Z(k)est donc 2 infiniment souvent.

Ainsi, le nombre moins ci-dessus 1/9est transcendantal, et donc le nombre ci-dessus est transcendantal.


1
Notez que la question posée dans l'article lié à M.SE ne s'applique pas à ce numéro, mais au point 4 de la réponse de George Lowther.
Henning Makholm

16

Python 2 , 19 octets

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

Le n ième chiffre est 1 si n est une puissance de 2 et 0 autrement.

Essayez-le en ligne!


3
J'allais répondre à cela, mais je n'ai trouvé aucune preuve de sa transcendance. Qu'est-ce qui te fait croire que ce nombre est transcendant? n&~-n>0est plus court au fait.
Orlp



@ orlp je devrais demander à l'OP si les booléens vont bien.
Dennis

1
@Scrooble Ces booléens.
Dennis

11

brainfuck, 2 octets

,.

À l'instar d'autres réponses, renvoie le premier chiffre décimal et ignore le reste.



5

Rétine, 4 octets

1!`.

Retourne le premier chiffre du numéro saisi. Parce que ce port était si ennuyeux, voici quelques ports supplémentaires:

O`.
1!`.

(8 octets) Renvoie le chiffre minimum du nombre saisi.

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

(25 octets) Retourne 1 si le numéro d'entrée est une puissance de 2.

.+
$*_

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

(30 bytes) La constante de Champernowne.


4

Brachylog 2, 7 octets

⟦₁c;?∋₎

Essayez-le en ligne!

Calcule les chiffres de la constante de Champernowne (éventuellement une puissance de dix en raison de problèmes d’indexation, ce qui n’importe évidemment pas ici). Fondamentalement, cela concatène ensemble des nombres entiers, puis prend le nième chiffre.


Pourquoi avez-vous besoin ⟦₁?
Leaky Nun

@ LeakyNun: Parce que sinon, nous commencerions à concaténer les nombres avec 0, et vous ne pouvez pas le faire car ce 0123n'est pas un nombre (il a un zéro non significatif, ce qui ne cadre pas avec le concept de Brachylog de ce qu'est un nombre).

4

Python 2, 13 octets

L'entrée et la sortie sont des chaînes.

lambda n:n[0]

Le nième chiffre du nombre est le chiffre le plus significatif de n lorsqu'il est écrit en décimal.


4
Vous devriez inclure pourquoi ce nombre est transcendantal.
Orlp

2
@orlp On dirait que la référence de xnor peut facilement être appliquée ici aussi - soustrayez 1/9 du nombre, puis Z (n + 1) / Z (n) ~ = 2 infiniment souvent (entre 10 ^ x et 2 * 10 ^ x ).
Feersum


3

JavaScript, 51 octets

Cette fonction calcule nle chiffre de la constante de Champernowne. Ajouter f=au début et invoquer comme f(arg). Notez que nest indexé 1.

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

Explication

Cette fonction prend en un seul argument n. Il crée ensuite une nchaîne de caractères contenant une série de 1 répétitifs. Ensuite, il divise cette chaîne en un tableau de 1. Après cela, il parcourt tous les éléments du tableau et les multiplie avec leur index incrémenté de 1 dans le tableau. Ensuite, il joint le tableau ""(chaîne vide) pour former une chaîne. Enfin, il renvoie l' nélément th de la chaîne obtenue.

Remarque: Le type de la valeur renvoyée est toujours String .

Test 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 octets

Champernowne est la constante.

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

Pourquoi avez-vous besoin n+1?
Leaky Nun

@ LeakyNun Parce que sinon j'obtiens des erreurs d'indexation pour n <= 1.
orlp

Vous pouvez utiliser 1-indexation.
Leaky Nun

@LeakyNun n <= 1.
orlp

Je pense que vous devez spécifier Python 2 pour celui-ci.
numbermaniac

3

APL (Dyalog) , 3 octets

2|⍴

Essayez-le en ligne! (la suite de tests génère une plage de nombres allant de 1à 10000, les convertit en chaîne, puis leur applique le train 2|⍴).

Prend le nombre saisi en tant que chaîne et renvoie sa longueur mod 2. So 123=> 3 mod 2=> 1.

La séquence commence comme suit:

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

donc cela peut être généralisé comme suit: 9 1s 90 0s 900 1s ...

En multipliant ce nombre par 9, nous obtenons un nombre de Liouville , qui s’avère transcendant.


Je ne pense pas que ce soit nécessairement un nombre de Liouville - ce n’est pas évident pour moi d’obtenir n> 10. Il ne s'adapter le théorème plus fort d' autres personnes ici utilisent, cependant.
Ørjan Johansen

@ ØrjanJohansen Vous pouvez l'exprimer ainsi 1 - 10^-9 + 10^-99 - 10^-999 + 10^-9999 - 10^-99999 + ..., donc c'est un numéro de Liouville.
Leaky Nun

@LeakyNun La fraction des exposants consécutifs est d'environ 10, mais pour correspondre à la définition sur Wikipédia, elle doit être non bornée. C'est pourquoi les 1 indices de la constante de Liouville d'origine utilisent une factorielle et non une exponentielle.
Ørjan Johansen

3

Haskell, 25 octets 17 octets

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

La constante de Champernowne peut être 0 ou 1, indexé en C10 * .01 est toujours transcendant.

Edit: selon le commentaire Nimis, vous pouvez utiliser la liste monad pour la réduire à

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

2
=<<de la liste monade est concat.map: (!!)$show=<<[1..].
nimi

2

JavaScript, 73 octets

C’est un programme qui calcule le ne chiffre de la constante de Liouville, où nest le numéro saisi en appelant la fonction gsous la forme g(arg)(et nest indexé 1). Notez que la nouvelle ligne dans le code est nécessaire.

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}

Explication

Le programme comprend deux fonctions fet g. fest une fonction récursive de calcul factoriel, et gest la fonction principale du programme. g suppose d'avoir un seul argument n. Il définit un argument par défaut ravec une valeur de 0. Il itère ensuite tous les entiers de 0 à n, et, à chaque itération, vérifie si la fonction fappliquée sur i(l'index en cours) est égale n, c'est-à-dire si nest une factorielle de i. Si tel est le cas, rla valeur de s est définie sur 1. À la fin de la fonction, rest renvoyé.

Extrait pour le 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>

Avertissement: Ne mettez pas une très grande valeur dans la zone de saisie de l'extrait! Sinon, votre appareil pourrait se figer!


1

Pyth, 7 5 4 octets

@jkS

Essayez-le en ligne!

Utilise la constante de Champernowne.

Sauvegardé 2 3 octets grâce à Leaky Nun.


1
vous pouvez utiliser jkpour remplacer sm`d, je crois.
Leaky Nun

1
Pouvez-vous utiliser Sau lieu de Uh?
Leaky Nun

Je pense qu'ils sont fonctionnellement identiques, alors oui. Je lis totalement la documentation>.>
applaudir

Ils ne sont pas fonctionnels identiques. Scommence par 1et Ucommence par 0.
Leaky Nun

Pourquoi avez-vous annulé votre modification? Le nombre résultant est toujours transcendantal.
Leaky Nun



1

Fusain , 24 octets (sans compétition)

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

Essayez-le en ligne!

Remarque: au moment de poster, ne fonctionne pas car nnest un multiple positif de 14.

Explication

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)? Donc, il n'y a pas de πvariable prédéfinie?
Neil

@Neil Pas encore, et je n'ai pas l'intention de rendre πégal à pi, parce que c'est un langage orienté ASCII, et non mathématique
ASCII uniquement

1

Japt , 3 1 + 1 = 2 1 octet

Un autre port de solution de feersum .

Prend l'entrée sous forme de chaîne.

g

Essayez-le en ligne


Explication

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

L'entrée peut être une chaîne, vous pouvez donc faire gpour 1 octet :)
Oliver

Le défi ne fait pas mention de l'entrée de chaîne, @obarakon, alors j'ai utilisé des entiers dans mes ports JS , puis à leur tour ici.
Shaggy

Ah, euh. Beaucoup d'autres réponses utilisaient des entrées de chaîne. Mais vous avez raison, le PO ne l'a pas mentionné dans le défi.
Oliver

1

TI-BASIC, 16 octets

Teste fondamentalement si l’entrée N(1 indexée) est un nombre triangulaire. C'est le même que le retour Ne chiffre de 0,1010010001 ..., ce qui est prouvé être transcendant. La séquence de chiffres est OEIS A010054 .

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

0

Fourier, 16 octets

I~NL~S10PS~XN/Xo

Essayez-le en ligne!

Comme d'autres réponses, le premier chiffre de l'entrée est généré.

Une explication du code:

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

0

JavaScript (ES6)

Quelques ports de quelques autres solutions


La solution Python de Feersum , 12 octets

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


La solution Python de Dennis , 13 octets

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


La solution Python de xnor , 20 octets

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



0

05AB1E , 3 1 octet

EDIT : En utilisant la preuve des autres réponses, retourne le premier chiffre de l'entrée

¬

1-indexé pour π (seulement 100 000 chiffres)

žs¤

Comment ça fonctionne

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

Ou, si vous préférez e (toujours indexé sur 1) (10 000 chiffres maximum)

žt¤

Essayez-le en ligne!


0

J, 2 octets

La même solution que tout le monde utilise:

{.

Retourne le premier chiffre de n. IO est sur les cordes

Constante de Liouville, 9 octets

(=<.)!inv

Retourne 1si input est la factorielle d'un entier.

Pi, 13 octets

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

Le dernier chiffre non décimal de pi fois 10 ^ n.





En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.