Disegna un grafico di


31

Sfida

Dato un input di un numero intero, (dove ), visualizza il grafico di da a inclusi.0 < n < 50 y = R e ( ( - n ) x ) x = - 3 x = 3n0<n<50y=Re((n)x)x=3x=3

Dove è la parte reale del numero complesso .pRe(p)p

Nota cheRe((n)x)=nxcos(πx)

Produzione

L'output può essere nella forma desiderata (ad es. Un'immagine o una finestra, ecc.). L'arte ASCII non è consentita.

Il grafico non deve avere assi (per consentire alle lingue senza funzioni grafiche integrate di competere).

Se viene emessa un'immagine, ogni lato deve essere più lungo di 500 pixel. Allo stesso modo, la trama deve riempire l'immagine nel miglior modo possibile.

L'intervallo minimo tra i grafici è 0,05.

La grafica vettoriale è consentita.

Esempi

Per un input di 2:

Per un input di 1:


Devi inserire gli output corrispondenti nella tua risposta (n = 1 e n = 2).

vincente

Vince il codice più breve in byte.


37
ASCII art is disallowed.(ಥ﹏ಥ)
Albert Renshaw,

1
Gli assi possono trovarsi sui bordi sinistro e inferiore del grafico? invece che al centro?
Kritixi Lithos,

2
"Se viene emessa un'immagine, ogni lato deve essere più lungo di 500 pixel." È consentita la grafica vettoriale?
Martin Ender,

1
@MartinEnder Sì, suppongo di si
Decadimento beta

4
Perché non sono sorpreso di vedere MATLAB, MATL e Mathematica come alcune delle prime risposte. :)
Kevin Cruijssen,

Risposte:


12

MATL, 22 18 16 byte

Grazie @LuisMendo per ulteriori -2 byte!

I_.01I3$:i_y^&XG


I_                       push 3 and negate         
  .01                    push 0.01
     I                   push 3  
      3$:                generate the list [-3,-2.99,-2.98,...,3]                        
         i_y^            calculate (-input)^(list)                 
             $XG         plot the first list against th real part of the second list

Provalo su matl.suever.net


21

TI-Basic, 26 21 byte

~3→Xmin
3→Xmax
Prompt N
DrawF N^Xcos(πX

Uscita per N = 2:

USCITA GRAFICA TI84SE


1
Conto 47 caratteri nel tuo codice, non 26.
Konrad Rudolph,


5
"Se viene emessa un'immagine, ogni lato deve essere più lungo di 500 pixel." Non sembra che la funzionalità grafica integrata funzioni qui.
user5090812

7
@ user5090812 "L'output può essere in qualsiasi forma tu voglia (es. un'immagine o una finestra ecc.)" - Sto emettendo dalla finestra del grafico, non un'immagine, quindi questa restrizione non si applica.
Timtech,

1
Chi avrebbe mai pensato che un calcolatore grafico potesse rappresentare graficamente le cose!
PyRulez,

15

Bash + Gnuplot, 56 45 byte

(-11 byte grazie a Noiralef!)

gnuplot -e "se t png;p[-3:3]real((-$1)**x)">A

Salva il grafico risultante come pngimmagine denominata Anella directory di lavoro corrente.

Esempi di output

Per n = 1 :

Per n = 2 :


1
+1 per l'utilizzo di una lingua che uso tutti i giorni. (nessuna "assurdità binaria confusa" come nel caso delle lingue da golf ^^). Questo può essere riutilizzato in situazioni quotidiane.
Olivier Dulac,

5
È possibile salvare 11 byte utilizzando le abbreviazioni:gnuplot -e "se t png;p[-3:3]real((-2)**x)">A
Noiralef

@Noiralef Grazie! :)
R. Kap

13

Python 3 con matplotlib , 103 72 byte

-12 byte grazie a DSM (un modulo è installato a fianco matplotlibchiamato pylabcon la funzionalità necessaria "rendere Python in un sostituto più simile a Matlab" - strano, ma vero!)
-18 di conseguenza di più (pylab ha anche molte funzioni numpy!)
- 1 byte grazie ad Ajasja (sostituendo arange(-60,61)/20+0jcon arange(121)/20-3+0j)

from pylab import*
def f(n):x=arange(121)/20-3+0j;plot(x,(-n)**x);show()

n = 2,1

n = 2 n = 1


2
Puoi sbarazzartene from matplotlib.pyplot import*se avvii ipython con il flag --pylab --matplotlib?
Ajasja,

Hai iPython; funziona? Sospetto che sarebbe accettabile se lo facesse, ma avrei bisogno di chiedermelo. Non ho iPython e non ho mai avuto la necessità di usarlo.
Jonathan Allan,

Sì, funziona con --pylab (testato con Python 2)
Ajasja

Non c'è nulla di non standard in nessun file di configurazione per far funzionare il display, giusto? In caso contrario, direi di pubblicarlo come risposta separata in questa occasione poiché è un uso intelligente di un cambio di lingua IMO. EDIT: Vedo che ci hai giocato anche a golf :)
Jonathan Allan

1
Sì, ho ricordato che %pylabti dà anche intorpidimento e se sei in un taccuino non hai bisogno di uno spettacolo alla fine :)
Ajasja

11

Mathematica, 41 byte

Plot[Re[(-#)^x],{x,-3,3},PlotRange->All]&

L'output appare esattamente come mostrato nella sfida, tranne per il carattere dei numeri (che sospetto sia stato creato con Wolfram Alpha).


11

MATLAB, 35 30 byte

x=-3:.01:3;@(n)plot(x,(-n).^x)

Questo definisce una funzione ononema. L'output avviene tramite una nuova finestra con un output grafico vettoriale ridimensionabile. MATLAB plotignora automaticamente la parte immaginaria delle coordinate y fintanto che fornisci le coordinate x corrispondenti. Il seguente output è per n=3.


10

R, 30 byte

plot(Re((0i-n)^seq(-3,3,.05)))

n = 1

inserisci qui la descrizione dell'immagine

n = 2

inserisci qui la descrizione dell'immagine


3
Cerchi belli
Decadimento beta

2
Il rendering predefinito di @BetaDecay R è brutto. La logica del default è che i cerchi non riempiti non nascondono i punti sovrastampati tanto quanto i cerchi / punti riempiti.
Konrad Rudolph,

5
Non penso sia brutto. Sembra davvero bello.
mbomb007,

1
L'asse x è etichettato in modo errato. Penso che tu abbia bisognox=seq(-3,3,.05);plot(x,Re((0i-n)^x))
user2390246

2
@ user2390246 Dato che gli assi sono completamente opzionali, non credo sia importante. Se l'etichettatura degli assi è importante, anche altre risposte hanno problemi dovuti al ridimensionamento (ad esempio la risposta MATLAB a 30 caratteri).
Konrad Rudolph,

10

R, 29 byte

curve(Re((0i-scan())^x),-3,3)

nviene fornito tramite stdin. Risultato per n = 1: inserisci qui la descrizione dell'immagine

E per n = 2:

inserisci qui la descrizione dell'immagine


Perché non usare una variabile ncome le altre risposte e radere cinque caratteri dalla tua risposta? Comunque, pazza risposta. Mi dimentico sempre curve.
Konrad Rudolph,

@KonradRudolph Grazie. In realtà la maggior parte delle altre risposte non predefiniscono n. Le risposte matlab, matl, TI-Basic e matematica prendono input come stdin (per quanto io le capisca), mentre le risposte Python e VBA creano una funzione. Anche se è permesso, è solo una questione di gusti personali: semplicemente non mi piace predefinire le variabili come un modo di input.
plannapus,

Scusa correzione: le risposte al matlab definiscono anche le funzioni.
plannapus,

Bene. Questo è un codice golf ...
Konrad Rudolph,

Non volevo essere pedante o altro, ma in realtà come comunità riteniamo che l'uso di una variabile predefinita non sia considerato un metodo di input valido se non diversamente specificato nella domanda.
plannapus,

8

Excel VBA, 168 160 147 138 byte (celle come pixel su scala 100x)

Risparmiato 8 byte grazie a KyleKanos
Risparmiato 22 byte grazie a Taylor Scott

Sub g(n)
For i=0To 1
For x=-3To 3Step.01
y=n^x*Cos([Pi()]*x)
m=IIf(y<m,y,m)
If i Then Cells(500*(1-y/m)+1,(x+3)*100+1)="#
Next x,i
End Sub

Formattato, si presenta così:

Sub g(n)
    For i = 0 To 1
    For x = -3 To 3 Step 0.01
        y = n ^ x * Cos([Pi()] * x)
        m = IIf(y < m, y, m)
        If i Then Cells(500 * (1 - y / m) + 1, (x + 3) * 100 + 1) = "#"
    Next x, i
End Sub

Curiosità: VBA non ha un built-in pivariabili quindi dobbiamo valutarla come una funzione del foglio di lavoro in cui si fa esistere.

n = 1                                                                          n = 2
n = 1     n = 2


Ho iniziato con una versione grafico a 193 byte, ma ha fatto ottenere i risultati più bella.

Sub c(n)
For x=-3To 3Step 0.05
r=r+1
Cells(r,1)=n^x*Cos(Atn(1)*4*x)
Next
With ActiveSheet.Shapes.AddChart(xlLine).Chart
.SetSourceData Range("A1:A121")
.Axes(xlCategory).Delete
End With
End Sub

n = 1 n = 2
n = 1

n = 2


1
Non è più breve da usare (-n)^xinvece di hardcoding pi?
Decadimento beta

1
@BetaDecay Sarebbe se Excel fosse in grado di gestire numeri negativi aumentati a non interi negativi ¯ \ _ (ツ) _ / ¯
Engineer Toast

2
Non è più breve da usare atn(1)*4per pi?
Kyle Kanos,

2
@KyleKanos In effetti lo è, grazie. Non ho trovato quell'identità nella mia tabella di ricerca delle costanti e, come ingegnere, è lì che sono legalmente obbligato a smettere.
Ingegnere Toast,

1
@TaylorScott Ecco tre nuovi trucchi, grazie. È più prezioso dei 7 byte che mi hanno salvato questa volta.
Ingegnere Toast,

6

MATLAB, 35 33 byte

Grazie a @flawr per aver rimosso 2 byte!

@(n)ezplot(@(x)real((-n)^x),-3:3)

Questo definisce una funzione anonima. Per chiamarlo con input 2, utilizzare ans(2)(o assegnare la funzione a una variabile come fe quindi utilizzare f(2)).

L'output è grafica vettoriale (finestra ridimensionabile). L'intervallo di campionamento sull'asse x viene determinato automaticamente dalla ezplotfunzione, ma sembra essere più che sufficiente.

Un avviso viene prodotto in STDERR perché la funzione passata a ezplot( @(x)real((-n)^x)) non viene vettorializzata, ma viene generato il grafico.

Esempio per n = 2:

inserisci qui la descrizione dell'immagine


1
ezplot = la-z-plot: D (continuo a dimenticarmene ...)
flawr

Huh. Non ho mai saputo che potresti passare il dominio a ezplotquello. Purtroppo, non si può dire lo stesso fplot, quindi non è possibile salvare lì alcun byte.
Sanchises,

@sanchise Neanche io sapevo :-) È stata un'idea di Flawr
Luis Mendo,

5

Notebook Jupyter e Python 3; 53 byte

%pylab
def f(n):x=arange(121)/20-3+0j;plot(x,(-n)**x)

Tre byte salvati grazie a @Jonathan Allan.

n = 1 n = 2


Due bit minori: se leggo le specifiche giuste, hai bisogno di un minimo di 0,05 (non 0,1) tra i punti (effettivi) e dovremmo essere inclusivi di 3.
DSM

È possibile utilizzare x=arange(-60,61)/20per risolvere i problemi evidenziati da DSM al costo di 2 byte. Se lo aggiungi 0ja arangepuò essere utilizzato per passare al plot(x,(-n)**x)salvataggio 4.
Jonathan Allan,

@DSM Ops, risolto.
Ajasja,

@JonathanAllan Grazie.
Ajasja,

Ah, ti ho salvato 2 in totale, mi hai appena salvato 1 cambiando in arange(121)!
Jonathan Allan,

3

PostScript incapsulato; 232 byte

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 500 500
%%EndComments
/n 1 def .02 setlinewidth /f{dup dup n exch exp exch 180 mul cos mul 3 div}def
250 250 translate 80 80 scale newpath -3 f moveto -3 .05 3{f lineto}for stroke
%%EOF

Ora, poiché questa è un'immagine vettoriale stessa ...

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Ooh che bello
Decadimento Beta

3

TikZ + PGFPlot , 175 byte

\documentclass{standalone}\usepackage{tikz,pgfplots}\begin{document}\typein[\n]{}\tikz{\begin{axis}\addplot[domain=-3:3,samples=120]{\n^x*cos(180*x)};\end{axis}}\end{document}

Compilare, ad esempio , latexmk -cd -f -pdf in.texper un output pdf. Durante la compilazione, viene richiesto all'utente n.

Output di esempio (convertiti in png) per n = 1 e n = 2:

n = 1 n = 2


2

Math.JS Grapher , 20 byte

r(n)=f(x)=re((-n)^x)

Per pura fluke, questa utility per la rappresentazione grafica è TC (per la maggior parte, i loop Infinite si arrestano in modo anomalo) e, per natura, l'output principale è rappresentato dai grafici.

Come funziona

r(n)=assegna una funzione rche porta l'argomento nall'espressione f(x)=re((-n)^x). re((-n)^x)è praticamente lettera per lettera la descrizione della sfida. Ma questo assegna la funzione f(x)a questo, che il grafico mostra implicitamente come un grafico a linee.

Come testarlo

Puoi usare questo sito, inserire quella funzione lì dentro, quindi chiamarlo con r(input).

Produzione

Produzione


2

J , 37 36 byte

Grazie al mio collega Marshall per la guida. -2 grazie a FrownyFrog.

Funzione prefisso tacito anonimo.

-(]plot@;9 o.^)i:@3j120[load@'plot'

Finestra del diagramma

-(]plot@;9 o.^)i:@3j120[load@'plot'
                        load@'plot'       NB. load plotting library
               i:@3j120                   NB. -3...3 in 120 steps
-                                         NB. negate argument
 (           ^)                           NB. raise the negated value to those exponents
 (       9 o. )                           NB. real part
 (]     ;     )                           NB. pair with the exponents
 ( plot@      )                           NB. plot it

Penso che 20%~i:@60possa essere i:@3j120.
FrownyFrog,

@FrownyFrog Correct. Grazie.
Adám,

1

Dyalog APL, 41 byte

⎕SE.UCMD∊'chart x(9○(-'⍞')*x←3-20÷⍨⍳121)'

Come funziona:

⎕SE.UCMD∊'chart x(9○(-'⍞')*x←3-20÷⍨⍳121)' ⍝ Main function
⎕SE.UCMD∊                                 ⍝ User Command (called from the session object)
         'chart                           ⍝ Plot a chart with arguments:
                 (           3-20÷⍨⍳121)' ⍝ Yields the list [-3, -2.95, -2.9,..., 2.9, 2.95, 3]
                           x←             ⍝ Assign that list to x
                          *               ⍝ and use it as exponent
                    (-'⍞')                ⍝ with (-input) as base
                  9○                      ⍝ discard the complex part; this generates Re((-n)^x)
                x                         ⍝ And x.

Il comando di utente ]chart, in questo caso, prende due argomenti vettore, xed ye trame grafici:

n=1n = 1

n=2n = 2


0

SmileBASIC, 82 byte

INPUT N
FOR I=0TO 399X=I/66.5-3GPSET I,120-POW(N,X-3*SGN(N-1))*COS(PI()*X)*120NEXT

Il grafico riempie l'intero schermo, anche quando N è inferiore a 1.

Quando N è maggiore di 1, puoi ridimensionare Y in modo che sia compreso tra -1 e 1 dividendolo per n^3. Lo sto già facendo n^xe n^x / n^3può essere semplificato n^(x-3). Tuttavia, quando N è inferiore a 1, devo invece dividere Y per n^-3. Questo equivale a n^(x+3).

Posso usare n^(x-3*sign(n-1))per usare -3if n>1, and +3ifn<1

Immagini in arrivo


0

Excel VBA, 133 byte

Script finestra immediato che accetta input [A1]e genera un Chartoggetto Sheet1sull'oggetto.

[B:B]="=ROW()/20-3.05":[C:C]="=A$1^B1*Cos(Pi()*B1)":Set c=Sheet1.Shapes.AddChart(4).Chart:c.SetSourceData[C1:C121]:c.Axes(1).Delete

Ungolfed

SubVersione di routine completa . L'I / O è invariato.

Sub b()
    [B:B] = "=ROW()/20-3.05"                ''  Define `x`-axis
    [C1:C121] = "=A$1^B1*Cos(Pi()*B1)"      ''  Define `y`-axis in terms of input from A1
    Set c = Sheet1.Shapes.AddChart(4).Chart ''  Add line plot to Sheet1 (xlLine)
    c.SetSourceData [C1:C121]               ''  Set `y` source to match `x` in [-3,3]
    c.Axes(1).Delete                        ''  Remove erroneous axes (xlCategory)
End Sub

Produzione

n=1

Grafico di output n = 1

n=3

Grafico di output n = 3


0

Julia 0.6 con Plots.jl, 46 byte

using Plots
~n=plot(real((0im-n).^(-3:.05:3)))

Trama GR

Questo aveva bisogno di una rappresentazione di Julia!

Qui non c'è molto da golf, tranne (ab) usare il sovraccarico dell'operatore per salvare i byte nella definizione della funzione e usare 0im-nper rendere complesso il numero di input dove di solito avrei potuto usare Complex(n). Ciò è necessario perché in Julia, per motivi di stabilità del tipo , l' ^operatore restituisce risultati complessi solo quando l'input è complesso stesso. Quindi qui lo rendiamo un numero complesso aggiungendo 0imie. 0i.

Una cosa interessante del pacchetto Plots.jl è che sceglie automaticamente il backend da usare in base a quali pacchetti di tracciamento hai installato e da dove stai eseguendo il plotcomando. La trama sopra è stata creata con il backend GR , ma se non lo avessi installato (o se avessi eseguito esplicitamente un plotly()comando come ho fatto per questo), avrebbe usato il backend Plotly più interattivo e avrebbe prodotto questo (che sembra un IMO un po 'più carino):

Trama

C'è persino un backend UnicodePlots , per stampare una trama nel terminale (o salvarla in un file di testo) usando caratteri Unicode e codici colore. SE continua a incasinare l'allineamento della trama se provo a incollarlo direttamente, quindi ecco uno screenshot del terminale:

Trama UnicodePlots

PS: la formula alternativa, Re((n)x)=nxcos(πx)

using Plots
~n=plot(n.^(x=-3:.05:3).*cospi(x))

Dang, questo è un uso intelligente (ab) dei personaggi Braille.
Zacharý,
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.