Tout le monde connaît pi la constante mathématique, le rapport entre la circonférence d'un cercle et son diamètre.
3.14159265358979323846264338327950288419716939937510...
Vous savez probablement aussi e la constante mathématique, la base d'un logarithme naturel.
2.71828182845904523536028747135266249775724709369996...
Mais ... tu connais la tarte ? C'est l'une des constantes les plus importantes (pour moi). Ce sont les chiffres de pi et e entrelacés.
32.1741185298216852385485997094352233854366206248373...
En tant qu'expansion décimale:
3, 2, 1, 7, 4, 1, 1, 8, 5, 2, 9, 8, 2, 1, 6, 8, 5, 2...
Ceci est la séquence OEIS A001355 .
MOT-CLÉ: non, base, bête , facile
C'est une séquence très stupide.
Défi
Ecrivez un programme / fonction qui prend un entier non négatif n et génère le nième chiffre du camembert .
Caractéristiques
- Les règles d'E / S standard s'appliquent .
- Les échappatoires standard sont interdites .
- Votre solution doit travailler pendant au moins 50 chiffres de chaque constante qui signifie qu'il devrait fonctionner pendant au moins 100 termes de la séquence (s'il vous plaît, essayez de ne pas hardcode: P).
- La sortie pour 2 ou 3 n'est pas un point décimal .
- Votre solution peut être indexée 0 ou indexée 1 mais veuillez préciser laquelle.
- Ce défi ne consiste pas à trouver l'approche la plus courte dans toutes les langues, mais plutôt à trouver l' approche la plus courte dans chaque langue .
- Votre code sera noté en octets , généralement dans le codage UTF-8, sauf indication contraire.
- Les fonctions intégrées qui calculent cette séquence sont autorisées, mais il est vivement conseillé d'inclure une solution qui ne repose pas sur une fonction intégrée.
- Les explications, même pour les langues "pratiques", sont encouragées .
Cas de test
Ceux-ci sont indexés par 0.
Input Output
1 2
2 1
11 8
14 6
21 4
24 9
31 5
Dans quelques meilleurs formats:
1 2 11 14 21 24 31
1, 2, 11, 14, 21, 24, 31
2 3 12 15 22 25 32
2, 3, 12, 15, 22, 25, 32
dumb
signifie simplement inintéressant, sans propriétés particulières.pei
, nonpie
Réponses:
Mathematica, 50 octets
1 indexé
la source
Riffle
, mais ma solution est un octet court:RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]
&Haskell,
154147146 octets, AUCUN HARDCODAGE OU UTILISATION DE CONSTANTES BUILTINCette solution calcule e et pi en utilisant des séries infinies et les stocke dans des entiers à virgule fixe de précision arbitraire (
Integer
type intégré de Haskell et sonRational
extension).Ungolfed:
0 indexé. Précis pour l'entrée 0-99, inexact pour l'entrée 100-101, en dehors des limites sinon.
Explication:
Calcule pi en utilisant cette série infinie . Calcule e en utilisant la série factorielle inverse classique . Théoriquement, ce ne sont pas les formules idéales à utiliser, car elles ne sont pas très concises en termes de décompte, mais ce sont les seules que je puisse trouver qui convergent assez rapidement pour permettre la vérification de la précision (d'autres sommes requises des centaines de milliers si pas des millions de termes). Dans la version golfée, e est calculé avec une précision bien supérieure à celle nécessaire pour minimiser les sous-comptages. Les deux constantes sont calculées avec un nombre de chiffres légèrement supérieur au nombre nécessaire pour éviter les erreurs d'arrondi (responsables de la queue peu commode des valeurs incorrectes).
Les constantes sont calculées en tant que ratios entiers de précision arbitraire (
Rational
), puis multipliées par 10 ^ 50 de sorte que tous les chiffres nécessaires restent intacts lorsque le rapport est converti en un entier (précision arbitraire) (Integer
). Cela évite également le problème du point décimal dans les représentations sous forme de chaîne de nombres, que la fonction tire alternativement des caractères.la source
Taxi , 749 octets
Essayez-le en ligne!
Essayer de calculer pi ou e par programme dans Taxi serait un cauchemar, même si je suis sûr que cela peut être fait. Ainsi, il est beaucoup plus court de simplement coder en dur les 100 premiers chiffres de la séquence. Cela semble assez bon marché, mais c’est certainement le code de taxi le plus court qui soit.
Il code la séquence en tant que chaîne , en prend
n
, puis itèren
vers le bas et supprime le premier caractère de la chaîne à chaque fois. Whenn=0
, affiche le premier caractère. Ceci est un indexé.Non-golfé / formaté:
la source
Python 2 , 88 octets
-4 octets grâce à l'idée de conversion de base de @EriktheOutgolfer .
Essayez-le en ligne!
Python 2 + sympy , 92 octets
0 indexé. Merci à Rod pour m'avoir rappelé de passer à
from sympy import*
, ce que j’avais oublié.Essayez-le en ligne!
Python 2 , 114 octets
Honnêtement, je pense que la solution la plus courte est le codage en dur, car Python n’a pas de fonctions intégrées utiles.Essayez-le en ligne!
Python 2 , 114 octets
Solution équivalente de @totallyhuman .
Essayez-le en ligne!
la source
05AB1E , 10 octets
Explication:
0 indexé.
Essayez-le en ligne!
la source
žt
vous n'étiez pas une liste infinie à l'époque, c'est pourquoi Okx utilise les 100 premiers chiffres de e dans son programme. Le changer pour la nouvelle version de 05AB1E (où pi et e sont tous deux une liste infinie) ne fonctionnerait toujours pas dans votre version actuelle, car le zip créerait des paires et leJ
oin joindrait ces paires au lieu de tout. 9 octets sont encore possibles en remplaçantJ
parS
dans la nouvelle version, mais enS
font une liste aplatie de caractères / chiffresPython 3 ,
8380 octets0 indexé.
Essayez-le en ligne!
Il contient des caractères non imprimables qui ne peuvent pas être vus correctement dans un navigateur.
Cela fonctionne en construisant le tuple à
(32, 17, 41, 18, 52, ...)
partir des codes ASCII des caractères de la chaîne d'octets codée en dur. Le tuple est converti en chaîne'3217411852...'
, à partir de laquelle nous sélectionnons le bon chiffre.la source
Polyglotte, 108 octets
Travaille dans:
Je pense que c’est le plus court que vous puissiez faire en C # car il faut 252 octets pour trouver la Nième décimale de pi .
la source
Java 8,
420417413404380358 (calculé) &115110 octets (codé en dur)Calculé (
420417413404380358 ):Essayez ici.
Prouvez que le résultat correct est obtenu pour les 100 éléments requis.
Codé en dur: (
115110 octets ):Essayez-le en ligne.
0 indexé
-9 et -5 octets grâce à @Nevay .
-24 octets grâce à @ceilingcat .
Vous l'avez demandé ..;)
Les doubles
Math.PI
et les éléments intégrés de JavaMath.E
ont une précision maximale de 16. Par conséquent, nous devrons calculer les deux valeurs nous-mêmes en utilisantjava.math.BigInteger
et / oujava.math.BigDecimal
.Depuis que j'ai déjà calculé PI auparavant dans un autre défi , j'ai utilisé ce même code en utilisant
BigInteger
. L'algorithme pour le nombre d'Euler utiliseBigDecimal
cependant.Le résultat
p
ete
sont donc:31415...
et2.718...
.Pouvait probablement jouer au golf en utilisant seulement
BigDecimal
, mais donnait des réponses incorrectes pour PI, alors j’utilise maintenant les deuxBigDecimal
etBigInteger
.Explication:
la source
(d+=2)
pour++d
etreturn p%10+1
justereturn p%10
.You've asked for it.. ;)
Hey, j'aime mieux votre premier. J'ai eu beaucoup plus de réponses codées que je ne pensais ...charAt(n+1>>1)
et 5 octets dans votre version codée en dur en utilisant une référence de méthode"..."::charAt
.Graine , 6015 octets
L'équivalent de graine à ma réponse Befunge. Comme je l'ai déjà mentionné, le programme Befunge dont les sorties ne fonctionnent pas sur TIO, car celui-ci semble avoir un retour à la ligne interne de 80 caractères.
la source
Excel, 113 octets
1 indexé
PI()
n'est précis que jusqu'à 15 chiffres. Similaire pourEXP(1)
.60solution de 42 octets qui fonctionne pour Input<=30
(-18 octets grâce à @Adam)la source
if(...)
déclaration:=MID(IF(ISODD(b1),PI(),EXP(1)/10)/10,b1/2+3,1)
.Vous ne pouvez pas contourner l'imprécision depi()
etexp()
, cependant05AB1E , 13 octets
Essayez-le en ligne!
Semblable à la réponse de Magic, mais un peu différent.
Explication:
la source
Python 2 + SymPy ,
7063 octetsEssayez-le en ligne!
la source
Japt , 55 octets
Testez-le en ligne! Contient quelques imparfaites.
Fonctionne en remplaçant chaque caractère de la chaîne par son charcode, puis en renvoyant le chiffre au bon index. La chaîne a été générée par ce programme:
Testez-le en ligne!
la source
Julia, 63 octets
1 indexé
Convertit pi ou e en chaîne, supprime la décimale, puis appelle le chiffre approprié. Retourne une représentation en caractères du chiffre.
la source
Semence,
58525794Basé sur la réponse TehPers Befunge.
la source
Malbolge Unshackled (variante de rotation de 20 bits), 3,64E6 octets
La taille de cette réponse étant supérieure à la taille maximale du programme (eh), le code est situé dans mon référentiel GitHub (note: ne copiez pas le code avec CTRL + A et CTRL + C, cliquez avec le bouton droit de la souris sur "Enregistrer l'élément de destination sous". .. ").
Comment faire ça?
Cela pourrait être une partie délicate, car un interprète naïf de Haskell mettra des siècles à faire la différence. TIO a un interprète décent Malbogle Unshackled, mais malheureusement, je ne pourrai pas l'utiliser (limitations).
Le meilleur que j'ai pu trouver est la variante de largeur de rotation fixe de 20 trit, qui fonctionne très bien, calculant (à peu près) instantanément .
Pour rendre l'interprète un peu plus rapide, j'ai supprimé toutes les vérifications de l'interprète Malbolge Unshackled de Matthias Lutter.
la source
05AB1E , 14 octets
Essayez-le en ligne!
Cette réponse est indexée par 0.
la source
'.K
pourþ
et enlever le<
. ( Je ne sais pas pourquoi vous même inclus le<
, puisque vous déclarez votre réponse est 0-indexé Votre réponse actuelle est 1-indexé avec le.<
.),
puisque le zip le fait implicitement, mais je vois qu'il est presque identique à la réponse de 10 octetsPython 3 + SymPy , 109 octets
0 indexé Essayez-le en ligne!
Battez le codage dur par 5 octets !! Mais pourrait probablement être mieux. Mais battre le codage en dur me fait du bien :)
la source
Pyth, 35 octets
Suite de tests
Puisque Pyth n'a pas de constantes pi et e de précision arbitraire intégrées, je les calcule directement.
Calculer pi:
Il utilise la récurrence suivante fraction continue de calculer pi:
2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))
. Je l'ai eu d' une autre réponse PPCG . Il est dérivé dans les équations 23-25 ici .Je le calcule de l'intérieur, en omettant tous les termes au-delà de la 1024e, car les derniers termes ont peu d'effet sur le nombre, et je maintiens une précision de 99 chiffres pour m'assurer que les 50 premiers sont corrects.
Calculer e:
Je fais la somme des inverses des 1024 premiers nombres, à 99 chiffres de précision.
Ensuite, je convertis les deux nombres en chaînes, les entrelace et les index.
la source
MATLAB, 93 octets
Une explication simple est que ceci convertit d’abord e et pi en chaînes, puis passe par une boucle for concaténant les chiffres. Ici, c est pie, p est pi et e est e.
J'ai également divisé cette information en plusieurs lignes pour en améliorer la lisibilité, mais le code actuel est sur une seule ligne avec un espacement minimal.
la source
n
, il produise lenth
chiffre de la séquence de camembert. Vous pouvez également réduire votre nombre de tiers en réduisant vos noms de variable à un seul caractèreinput('')
à la place deinput('n')
C # + BigDecimal ,
377372 octets5 octets sauvegardés grâce à @ Kevin Cruijssen.
Pas de lien TIO à cause de la bibliothèque externe, malheureusement, C # n’a pas de
BigDecimal
classe intégrée , donc cette externe devra le faire. Il est probablement encore possible de jouer au golf, mais pas pour le moment.Version complète / formatée:
la source
x[j++]/e
àc=(x[j++]/e)*n
au moins 2 octets; En outre, je pense que vous pouvez supprimer+""
les deux instructions de retour et renvoyer un int au lieu de chaîne, puis ajouter-48
à la deuxième instruction de retour pour convertir char en sortie int (pour -1 octet).Python 2 , 82 octets
Essayez-le en ligne!
Contient des caractères ASCII non imprimables. flornquake a économisé deux octets.
la source
lambda n:('%02d'%ord('...'[n/2]))[n%2]
- être , même s'il y a probablement mieux.brainfuck , 402 octets
Essayez-le en ligne!
Saisir comme code de caractère (par exemple "A" = 65)
Essayez-le en ligne avec saisie numérique!
code:
la source
Neim , 45 octets
neim n'est pas fait pour les nombres décimaux
Essayez-le en ligne!
la source
Befunge , 105 octets
Ne fonctionne pas sur TIO car il semble que les lignes soient internes à 80 caractères pour une raison quelconque. Vous pouvez le faire fonctionner sur TIO en plaçant chaque chiffre sur une nouvelle ligne et en plaçant
&0g,@
après le3
sur la première ligne.la source
JavaScript (ES6) + mathjs , 78 octets
Zéro indexé et fonctionne jusqu'à 128 nombres (entrée maximum de 127).
Test Snippet
la source
MATLAB (w / Symbolic Toolbox),
8982 octetsEn utilisant la boîte à outils Symbolic, cette réponse fournit une sortie sans coder en dur les valeurs de pi et e.
En tant que bonus amusant, ce code en tant qu’entrée peut prendre soit un index unique, soit un tableau d’index et fournit simultanément la valeur de sortie pour toutes les valeurs d’index fournies (par exemple, fournir 1:10 affichera les 10 premières valeurs).
(nouvelles lignes ajoutées pour la lisibilité, non requises pour l'exécution, donc non incluses dans le nombre d'octets)
Malheureusement, la version Octave utilisée par TIO ne prend pas en charge les entrées symboliques de la
vpa
fonction et ne peut donc pas fournir de lien à TIO.Dans MATLAB, l'indexation dans le vecteur de retour d'une fonction n'est pas possible de la même manière qu'avec Octave, ce qui signifie qu'il s'agit d'un programme complet plutôt que d'une simple fonction anonyme. Le programme demandera une entrée
n
lors de l'exécution - il s'agit d'une valeur indexée pour laquelle l'élément est requis. A la fin du programme, la valeur est implicitement imprimée.Pour le programme, nous utilisons la
vpa
fonction qui fournit à 51 décimales la valeur depi
etexp(1)
(e). Ceci est fait symboliquement pour permettre une précision théoriquement infinie. Pour développer plus de 100 éléments, augmentez simplement la valeur51
dans le code pour augmenter la plage.Le retour
vpa
à la lignechar
(iechar(vpa(...))
) est nécessaire pour convertir la sortie de la fonction en chaîne plutôt qu'en valeur symbolique. Le résultat obtenu est la chaîne:Cela inclut les e et les pi jusqu'à 51 décimales - assez pour permettre 100 chiffres de notre sortie (nous devons faire un peu plus de dp que nécessaire pour éviter d'imprimer des valeurs arrondies)
Afin d'indexer dans ce désordre, nous devons au moins nous débarrasser des points décimaux pour que les deux chaînes de chiffres soient contiguës. À l’origine, j’utilisais un simple remplacement regex de tout ce qui n’était pas un chiffre sans rien. Cependant, je peux économiser 7 octets en supprimant uniquement le point décimal à l'aide du code:
la chaîne résultante est maintenant:
Il contient tous les chiffres dont nous avons besoin avec les morceaux pi et e dans les index consécutifs.
Nous pouvons ensuite convertir l'index fourni de sorte que les nombres impairs accèdent au bloc pi et que les nombres pairs accèdent au bloc e en utilisant le calcul
Accéder à cet index (ces index) dans la chaîne ci-dessus fournira la sortie correcte.
la source
Axiome, 148 octets
0 tableau basé. Résultats
la source
Google Sheets, 47 octets
Fonction de feuille de travail anonyme qui prend en entrée une cellule
A1
et envoie ce chiffre de Pie à la cellule appelanteVersion codée en dur, 112 octets
Cette version répond parfaitement aux spécifications du programme, mais n’est généralement pas amusante.
Fonction de feuille de travail anonyme qui renvoie le nième chiffre de la liste de camembert indexée 1
la source
BFASM , 142 octets
Prend la saisie sous forme de caractère ascii, donne la sortie sous forme de chiffre.
la source