Considérons trois séquences de nombres A
, B
et C
:
A
: Une séquence basée sur les relations de récurrencef(n) = f(n-1)+f(n-2)
, en commençant parf(1) = 3, f(2) = 4
. Ainsi, la séquence commence comme ceci:3 4 7 11 18 29 47 76 ...
B
: Les nombres composites , c'est-à-dire tous les entiers qui ne sont pas des nombres premiers (ou 1):4 6 8 9 10 12 14 15 16 ...
C
: Les chiffres de Pi:3 1 4 1 5 9 2 6 5 ...
Étant donné un entier positif N < 50
, comme argument de fonction ou STDIN, renvoyer la valeur décimale de la fraction A(N)/B(N)
avec des C(N)
chiffres après le point décimal. Les règles normales d'arrondi s'appliquent (arrondir si le N + 1ème chiffre est égal ou supérieur à 5). Si le Nième chiffre de pi
est zéro, un entier doit être imprimé. notation scientifique / La forme standard est acceptée pour les nombres supérieurs à 1000.
C'est le golf de code, donc la réponse la plus courte en octets l'emporte.
Quelques exemples:
N = 1: 0.750
N = 2: 0.7
N = 3: 0.8750
N = 4: 1.2
N = 6: 2.416666667
N = 10: 11.056
N = 20: 764.8750
Bien sûr, les règles de golf standard sont applicables.
La fonction doit se terminer en moins de deux minutes sur tout ordinateur portable moderne.
C(n)
chiffres, devons-nous inclure des 0 à la fin?N
? Si oui, jusqu'à N = 49. Ou autre chose?Réponses:
Pyth,
605758 octetsHarnais de test
C'est assez simple - calculer pi, la série de fibonacci et les composites, arrondir aux chiffres C (n), remplir les chiffres C (n) plus l'emplacement des chiffres du point décimal, c'est fait.
Un):
hu,eGsGQjT7
B (n):
e.ftPZQ)
C (n):
e/u+/*GHhyHy^TQr99ZZT
60 -> 57: nettoyé le cas spécial n = 1 dans le calcul pi.
57 -> 58: n'utilisait pas une précision suffisamment élevée pour pi pour toute la plage d'entrée - augmentation de 99 itérations à 1000 itérations.
Remarque sur l'arrondi: Ceci utilise le système d'arrondi "le plus proche" de Python, plutôt que le système "vers l'infini" spécifié par l'OP. Cependant, la différence n'a d'importance que si les chiffres qui suivent immédiatement le point d'arrondi sont
5000...
, par exemple, 1,25 arrondis à 1 chiffre. J'ai vérifié la plage d'entrée, et cela ne se produit jamais, donc le résultat correct est toujours retourné.la source
PowerShell,
420 octets (ayyyyyyyy)378 octetsMerci à isaacg pour avoir économisé 41 octets, pour avoir calculé comment la question arrondit. Cela signifie que je n'ai pas eu à inclure les horribles
[MidpointRounding]::AwayFromZero
et que je n'avais pas besoin de les exprimer explicitement en tant que[double]
.Celui-ci était très amusant!
Étendu:
La récursivité dans PowerShell est ... lente, dirons-nous, nous devons donc construire
A(N)
l'autre direction et la stocker dans un tableau, puis l'indexer.VIEUX
Aussi, vache sacrée, les exigences de sortie ont-elles tué cela? Par défaut, PowerShell arrondit au arrondi d'un / k / un banquier le plus proche, ce qui nécessite d'utiliser l'extraordinairement verbeux
[MidpointRounding]::AwayFromZero
pour changer de style d'arrondi . En plus de cela, nous devons ensuite remplir les zéros de fin, le cas échéant. Ces deux exigences se sont combinées pour faire passer les deux dernières lignes de 20 octets[math]::Round($r,$q)
à 102 octets (du$s=""
au+$s)
) ... wow.la source
[MidpointRounding]::AwayFromZero
seuls est presque trop beau / mauvais pour être vrai ... =)Javascript (ES6), 302 octets
Un mot: inachevé.
Les 49 premiers chiffres de pi sont stockés dans une chaîne et les deux autres séquences sont générées automatiquement. Cela a été joué au golf à mi-chemin; Je suis (presque) sûr de pouvoir en extraire 50 octets supplémentaires.
Fonctionne pour tous les cas de test et devrait fonctionner pour le reste. Crashes sur quelque chose de plus de 49 ou de moins de 0 (il ne devrait jamais rencontrer ces situations de toute façon). J'aime particulièrement son résultat pour 0:
la source
Octave,
276236 octetsTout d'abord, je pensais que ce serait cool d'utiliser une précision illimitée dans ces outils mathématiques (et de rafraîchir certaines connaissances à ce sujet) alors j'ai commencé à écrire des algorithmes et j'ai finalement fini par découvrir que la
pi
valeur n'était pas si précise que devra réutiliser le tableau. Encore une fois, pas de grand succès:Encore assez lisible, non?
Usage
fonction copier-coller en octave, appeler la fonction
c
avec un argument de la valeur requise:Optimisations:
endif
,endfor
et similaire avecend
qui fonctionne de la même manièrei
d'une sauvegarde d'un octetnum2str(str2num(p(A)))
bêtises :)la source
end
, nonendif
, autant d'octets enregistrés. Si vous arrive aussi d'avoir la boîte à outils symbolique pour Matlab, vous pouvez utiliservpa
pour obtenir suffisamment de points de décimales pour pi:vpa(sym(pi),49)
. Je ne l'ai pas sur cet ordinateur portable, donc je ne suis pas sûr que cesym
soit nécessaire, mais je dois quand même économiser pas mal d'octets =) Et la lecture n'est pas nécessairement une bonne chose dans le code golf =)while
deendwhile
et travaux similaires fonctionne bien, donc je mets à jour la réponse avec quelques caractères de moins :)