Calcola le prime N cifre di e


13

Sfida

Scrivi un programma per calcolare le prime N (<= 10 ^ 3) cifre di e .

Il tuo programma dovrebbe assumere un numero intero N come input.

Ingresso:

100

Produzione:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427

Ingresso:

7

Produzione:

2.718282

Ingresso:

1000

Produzione:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035

Vince la soluzione più breve!

Risposte:


8

Mathematica (12 byte)

N[E,Input[]]

Puoi provarlo online: c'è un e-digitscomando su yubnub.org ad es. Yubnub.org/parser/parse?command=e-digits+1000 che utilizza wolframalpha wolframalpha.com/input/…
jfs

1
-1 perché non si implementa il calcolo da soli.
FUZxxl,

2
@FUZxxl: l'autore non ha richiesto un'implementazione, sono preferiti solo i più brevi.
Quixotic il

7
@Quixotic La domanda dice "calcola" non solo output. Avresti discusso la stessa cosa se la domanda avesse detto "calcola" anziché "calcola"?
nitro2k01,

7

Python, 69

e = f = n = 1; N = input () + 2; exec "e + = 10 ** N / f; f * = n; n + = 1;" * N;. print'2 '+ `e` [ 1: -4]

Calcola le iterazioni N + 2 delle serie di potenze standard per e.


6

J, 20 ... ish.

Computazionale, ma ... Molto inefficiente. Con n definito (20):

(0 j.<:n)":+/%!i.x:n+9

Come una funzione monadica (32):

ge =. 3 : '(0 j.<:y)":+/%!i.x:y+9'

Come funzione tacita (33, fissa):

(0 j.<:)":(+/)&:(%&!&i.&x:&(9&+))

Questo converge molto velocemente (per 100 cifre sono necessari "solo" 70 termini) in modo da poterlo eliminare +9.
Eelvex,

Per 1000 cifre questo: (0 j.<:1000)":+/%!i.x:450richiede solo pochi secondi.
Eelvex,

Ti andrebbe di spiegare il tuo codice?
aaaaaaaaaaaa

@Eelvex: Ma ho bisogno di termini extra fino a N = 30 o giù di lì. (Qualche suggerimento su come ridurre quel casino di composte o è giusto?)
Jesse Millikan,

Ah, hai ragione, è un peccato. (Quel "pasticcio" è più corto di qualsiasi altra cosa che potrei venire con - a meno che, fuori rotta, si utilizza un numero fisso per i quali:. (0 j.<:n)":+/%!i.999x, Poi tacitamente: (+/%!i.999x)":~0 j.<:)
Eelvex

5

Python, 67

import decimal as d
d.getcontext().prec=input()
print d._One.exp()

Salva 3 caratteri? from decimal import*e rimuovili entrambid.
Timtech,

@Timtech import *non verrà importato a _Onecausa del carattere di sottolineatura iniziale.
jfs

Okay, non lo sapevo, scusa /
Timtech,

3

05AB1E, 4 3 2 byte

Barrato 4 è ancora regolare 4; (

Grazie a @Adnan per un byte.

žt

Utilizza la codifica CP-1252 .

Spiegazione:

žt - Push input. Pop a, push e to a places (up to 10000).

Aggiornare:

Rimuovi I, come žtinput comunque se nessuno è nello stack.


1
L'ho contrassegnato come non competitivo perché 05AB1E è stato creato circa 4 anni e mezzo dopo la pubblicazione della sfida.
Mego

@Mego OK, mi ricorderò di farlo la prossima volta.
George Gibson,

1
Benvenuto in Puzzle di programmazione e Code Golf! Il žcarattere è 1 byte nella codifica CP-1252 , quindi ha un punteggio totale di 2 byte anziché 3: p.
Adnan,

@Adnan Grazie! Bella lingua, a proposito.
George Gibson,

@GeorgeGibson Grazie! :)
Adnan,

2

Ruby, 68

require 'bigdecimal/math';include BigMath;puts E(gets.to_i).to_s 'F'

non funziona su ruby1.8. Produce risultati non validi su ruby1.9
jfs

Hai ragione, ma dovrebbe funzionare in Ruby 1.9. Sembra che ci sia qualcosa di sbagliato nella precisione nella funzione E.
david4dev,

Qui va bene, aggiunge solo alcune cifre imprecise. Mayby piace questo? richiedono'bigdecimal / math '; mette BigMath :: E (a = gets.to_i) .to_s (? F) [0, a + 1]
steenslag

1

GolfScript 43 41

~10\?1:b 461,{)b*:b@+\}460*;*b/`);(;'2.'\

Modifica: potrei anche sostituire lo 0 con il rimanente 1 dall'inizializzazione di b, la differenza risultante è troppo piccola per arrivare all'output.

Ho lasciato la vecchia versione in quanto è quello che ho documentato di seguito.

~10\?1:b;0 461,{)b*:b@+\}460*;*b/`);(;'2.'\

~10\?Prendi input e calcola 10 ^ input, lascia il risultato in pila.
1:b;Conservare 1 in b.
0 461,Metti 0 nello stack, metti l'array [0 1 ... 459 460] nello stack.
{ }460*Eseguire la funzione 460 volte.
)b*:bPrendi l'ultimo elemento dell'array, moltiplicalo per b, archivia il risultato in b e lascia il risultato in pila.
@+\Passa lo 0 (che è solo uno zero alla prima iterazione) all'inizio dello stack, aggiungilo al valore rimanente b e ripristina nuovamente il risultato.
;Rimuovere il resto dell'array (rimane solo [0]).
Il numero che è stato inizializzato su 0 ora contiene il valore e * 460! e b tieni 460!
*Moltiplica 10 ^ input per e * 460! (a questo punto sono gli unici 2 elementi rimasti nella pila).
b/Dividi il risultato per b.
Lo stack ora contiene il valore e * 10 ^ input che quando convertito in una stringa conterrà tutti i decimali, ma non il punto.
`);(;'2.'\Un mucchio di operazioni sulle stringhe per adattarsi al punto.

e * 460! è calcolato come 1 + 460 + 460 * 459 + 460 * 459 * 458 ecc.



0

J, 17

(":&(x:^1)@*&0j1)

Esempio:

(":&(x:^1)@*&0j1) 50
2.71828182845891281655718620537435347047040502245993

Usa il verbo esponenziale incorporato, quindi "calcolare" è su basi traballanti. Fondamentalmente:

^1 - computes e**1
x: - does extended precision
0jy ": - formats the number to y digit

*&0j1è semplicementej.
FrownyFrog il

0

GTB , 14

eS?`AS;_,1,A+1

Spiegazione

e- Inserisci ecome ultimo valore calcolato

S? - Converti e in stringa_

`A - Ingresso A

S;_,1,A+1Visualizza le prime Acifre die


0

Mathcad, [tbd] byte

inserisci qui la descrizione dell'immagine

Utilizza un algoritmo spigot: http://comjnl.oxfordjournals.org/content/11/2/229.full.pdf+html .


Il conteggio dei byte non indicato come equivalenza del conteggio dei byte di Mathcad deve ancora essere determinato. Tuttavia, usando l'equivalenza di un simbolo è di circa 121 byte ... e non vincerà alcun premio di brevità, indipendentemente da come sia determinata l'equivalenza.


0

Mathematica, 7 byte

N[E,#]&

La mia risposta è un ulteriore golf di questa risposta.

Provalo online!

Per qualche motivo, l'output su TIO sembra divertente ma l'ho testato sulla mia macchina e il codice funziona bene.


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.