Implementa la trasformata discreta di Fourier (DFT) per una sequenza di qualsiasi lunghezza. Questo può essere implementato come una funzione o un programma e la sequenza può essere fornita come argomento o usando input standard.
L'algoritmo calcolerà un risultato basato su DFT standard nella direzione in avanti. La sequenza di input ha lunghezza Ned è composta da [x(0), x(1), ..., x(N-1)]. La sequenza di output avrà la stessa lunghezza e consiste nel punto in [X(0), X(1), ..., X(N-1)]cui ciascuno X(k)è definito dalla relazione seguente.
Regole
- Questo è code-golf, quindi vince la soluzione più breve.
- Non sono ammessi builtin che calcolano il DFT in direzioni avanti o indietro (anche note come inverse).
- Le imprecisioni in virgola mobile non verranno conteggiate nei tuoi confronti.
Casi test
DFT([1, 1, 1, 1]) = [4, 0, 0, 0]
DFT([1, 0, 2, 0, 3, 0, 4, 0]) = [10, -2+2j, -2, -2-2j, 10, -2+2j, -2, -2-2j]
DFT([1, 2, 3, 4, 5]) = [15, -2.5+3.44j, -2.5+0.81j, -2.5-0.81j, -2.5-3.44j]
DFT([5-3.28571j, -0.816474-0.837162j, 0.523306-0.303902j, 0.806172-3.69346j, -4.41953+2.59494j, -0.360252+2.59411j, 1.26678+2.93119j] = [2, -3j, 5, -7j, 11, -13j, 17]
Aiuto
C'è stata una precedente sfida per trovare il DFT usando un algoritmo FFT per sequenze con lunghezze pari a una potenza di 2. Potresti trovare alcuni trucchi che potrebbero aiutarti qui. Tieni presente che questa sfida non ti limita a nessuna complessità e richiede anche che la tua soluzione funzioni per sequenze di qualsiasi lunghezza.

