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.