Dibuja una gráfica de

31

Reto

Dada la entrada de un número entero, (donde 0 < n < 50 ), genera la gráfica de y = R e ( ( - n ) x ) de x = - 3 a x = 3 inclusive.n0<n<50y=Re((n)x)x=3x=3

Donde es la parte real del número complejo p .Re(p)p

Tenga en cuenta que Re((n)x)=nxcos(πx)

Salida

La salida puede tener la forma que desee (por ejemplo, una imagen o una ventana, etc.). El arte ASCII no está permitido.

El gráfico no necesita tener ejes (para permitir que los idiomas sin funciones gráficas integradas compitan).

Si se emite una imagen, cada lado debe tener más de 500 píxeles. Del mismo modo, la trama debe llenar la imagen lo mejor que pueda.

El intervalo mínimo entre parcelas es 0.05.

Se permiten gráficos vectoriales.

Ejemplos

Para una entrada de 2:

Para una entrada de 1:


Debe poner sus resultados correspondientes en su respuesta (n = 1 yn = 2).

Victorioso

El código más corto en bytes gana.

Decaimiento Beta
fuente
37
ASCII art is disallowed.(ಥ﹏ಥ)
Albert Renshaw
1
¿Pueden los ejes estar en los bordes izquierdo e inferior del gráfico? en lugar de en el centro?
Kritixi Lithos
2
"Si se emite una imagen, cada lado debe tener más de 500 píxeles". ¿Se permiten gráficos vectoriales?
Martin Ender
1
@MartinEnder Sí, supongo que sí
Beta Decay
44
¿Por qué no me sorprende ver a MATLAB, MATL y Mathematica como algunas de las primeras respuestas? :)
Kevin Cruijssen

Respuestas:

12

MATL, 22 18 16 bytes

¡Gracias @LuisMendo por -2 bytes adicionales!

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

Pruébalo en matl.suever.net

falla
fuente
21

TI-Basic, 26 21 bytes

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

Salida para N = 2:

TI84SE SALIDA GRÁFICA

Timtech
fuente
1
Cuento 47 caracteres en su código, no 26.
Konrad Rudolph el
11
@KonradRudolph Consulte: Pautas de puntaje de TI-Basic.
Addison Crump
55
"Si se emite una imagen, cada lado debe tener más de 500 píxeles". No parece que la capacidad gráfica incorporada funcione aquí.
user5090812
77
@ user5090812 "El resultado puede ser de la forma que desee (por ejemplo, una imagen o una ventana, etc.)": estoy generando el resultado por la ventana del gráfico, no por una imagen, por lo que esta restricción no se aplica.
Timtech
1
¡Quién hubiera pensado que una calculadora gráfica podría graficar cosas!
PyRulez
15

Bash + Gnuplot, 56 45 bytes

(-11 bytes gracias a Noiralef!)

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

Guarda el gráfico resultante como una pngimagen llamadaA en el directorio de trabajo actual.

Salidas de ejemplo

Para n = 1 :

Para n = 2 :

R. Kap
fuente
1
+1 por usar un idioma que uso todos los días. (sin "tonterías binarias ilegibles" como con los langages de golf ^^). Esto puede ser reutilizado en situaciones cotidianas.
Olivier Dulac
55
Puede guardar 11 bytes utilizando abreviaturas:gnuplot -e "se t png;p[-3:3]real((-2)**x)">A
Noiralef
@Noiralef Gracias! :)
R. Kap
13

Python 3 con matplotlib , 103 72 bytes

-12 bytes gracias a DSM (se instala un módulo junto con matplotlibllamado pylabcon la funcionalidad necesaria "haciendo que Python en una respuesta se parezca más a Matlab" - ¡extraño, pero cierto!)
-18 más como resultado (¡pylab también tiene muchas funciones numpy!)
- 1 byte gracias a Ajasja (reemplazando arange(-60,61)/20+0jpor 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

Jonathan Allan
fuente
2
¿Se puede deshacer from matplotlib.pyplot import*si inicia ipython con el indicador --pylab --matplotlib?
Ajasja
¿Tienes iPython? ¿Funciona? Sospecho que sería aceptable si lo hace, pero tendría que preguntarme. No tengo iPython y nunca he tenido la necesidad de usarlo.
Jonathan Allan
sí, funciona con --pylab (probado con python 2)
Ajasja
No hay nada no estándar en ningún archivo de configuración que haga que la pantalla funcione, ¿verdad? Si no, diría publicarlo como una respuesta separada en esta ocasión, ya que es un uso inteligente de un cambio de idioma IMO. EDITAR: Veo que lo has jugado allí también :)
Jonathan Allan
1
Sí, recordé %pylabque también te da numpy y si estás en un cuaderno no necesitas un show al final :)
Ajasja
11

Mathematica, 41 bytes

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

La salida se ve exactamente como se muestra en el desafío, excepto por la fuente de los números (que sospecho que se creó con Wolfram Alpha).

Martin Ender
fuente
11

MATLAB, 35 30 bytes

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

Esto define una función anónima. La salida se realiza a través de una nueva ventana con una salida de gráfico vectorial redimensionable. MATLAB plotignora automáticamente la parte imaginaria de las coordenadas y siempre que proporcione las coordenadas x correspondientes. La siguiente salida es para n=3.

falla
fuente
10

R, 30 bytes

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

n = 1

ingrese la descripción de la imagen aquí

n = 2

ingrese la descripción de la imagen aquí

Konrad Rudolph
fuente
3
Oooh pretty circles
Beta Decay
2
El renderizado predeterminado de @BetaDecay R es feo. La justificación del valor predeterminado es que los círculos sin rellenar no ocultan los puntos sobreplotados tanto como lo harían los círculos / puntos rellenados.
Konrad Rudolph el
55
No creo que sea feo. Se ve realmente genial.
mbomb007
1
El eje x está etiquetado incorrectamente. Creo que lo necesitasx=seq(-3,3,.05);plot(x,Re((0i-n)^x))
user2390246
2
@ user2390246 Dado que los ejes son completamente opcionales, no creo que importe. Si el etiquetado del eje es importante, otras respuestas también tienen problemas debido a la escala (por ejemplo, la respuesta MATLAB de 30 caracteres).
Konrad Rudolph el
10

R, 29 bytes

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

nse proporciona a través de stdin. Resultado para n = 1: ingrese la descripción de la imagen aquí

Y para n = 2:

ingrese la descripción de la imagen aquí

plannapus
fuente
¿Por qué no usar una variable ncomo las otras respuestas y eliminar cinco caracteres de tu respuesta? De todos modos, respuesta loca. Siempre olvido curve.
Konrad Rudolph
@KonradRudolph Gracias. En realidad, la mayoría de las otras respuestas no predefinen n. Las respuestas matlab, matl, TI-Basic y Mathica toman la entrada como stdin (por lo que yo entiendo), mientras que las respuestas python y VBA crean una función. Incluso si está permitido, es solo una cuestión de gusto personal: simplemente no me gusta predefinir variables como una forma de entrada.
plannapus
Lo sentimos, corrección: las respuestas de matlab también definen funciones.
plannapus
Bien. Este es un código de golf ...
Konrad Rudolph
No quería ser pedante ni nada, pero en realidad como comunidad consideramos que el uso de una variable predefinida no se considera un método de entrada válido a menos que se indique explícitamente lo contrario en la pregunta.
plannapus
8

Excel VBA, 168 160 147 138 bytes (células como píxeles a 100x escala)

Guardado 8 bytes gracias a KyleKanos
Guardado 22 bytes gracias 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

Formateado, se ve así:

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

Dato curioso: VBA no tiene incorporado un pivariable de modo que tenemos que evaluarla como una función de hoja de cálculo donde se hace existir.

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


Empecé con una versión gráfica a 193 bytes, pero hice obtener resultados más bonitas.

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

Tostadas de ingeniero
fuente
1
¿No es más corto de usar en (-n)^xlugar de codificar pi?
Beta Decay
1
@BetaDecay Sería si Excel pudiera manejar números negativos elevados a no enteros negativos ¯ \ _ (ツ) _ / ¯
Engineer Toast
2
¿No es más corto de usar atn(1)*4para pi?
Kyle Kanos
2
@KyleKanos De hecho lo es, gracias. No encontré esa identidad en mi tabla de búsqueda de constantes y, como ingeniero, es allí donde estoy legalmente obligado a detenerme.
Engineer Toast
1
@ TaylorScott Son tres trucos nuevos, gracias. Eso es más valioso que los 7 bytes que me salvaron esta vez.
Engineer Toast
6

MATLAB, 35 33 bytes

¡Gracias por @flawr por eliminar 2 bytes!

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

Esto define una función anónima. Para llamarlo con entrada 2, use ans(2)(o asigne la función a una variable como fy luego usef(2) ).

La salida es gráficos vectoriales (ventana redimensionable). El intervalo de muestreo en el eje x se determina automáticamente por elezplot función, pero parece ser más que suficiente.

Se genera una advertencia en STDERR porque la función pasada a ezplot( @(x)real((-n)^x)) no está vectorizada, pero se genera el gráfico.

Ejemplo para n = 2:

ingrese la descripción de la imagen aquí

Luis Mendo
fuente
1
ezplot = la-z-plot: D (sigo olvidándome de este ...)
error
Huh Nunca supe que podría pasar el dominio a ezplotgustarle. Lamentablemente, no se puede decir fplotlo mismo, por lo que no se puede guardar ningún byte allí.
Sanchises
@sanchises Yo tampoco lo sabía :-) Fue idea de Flawr
Luis Mendo
5

Cuaderno Jupyter y Python 3; 53 bytes

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

Tres bytes guardados gracias a @Jonathan Allan.

n = 1 n = 2

Ajasja
fuente
Dos bits menores: si leo las especificaciones correctamente, necesita un mínimo de 0.05 (no 0.1) entre puntos (efectivos), y se supone que debemos incluir 3.
DSM
Puede utilizar x=arange(-60,61)/20para solucionar los problemas destacados por DSM a un costo de 2 bytes. Si agrega 0ja arangeesto, se puede usar para cambiar a plot(x,(-n)**x)guardar 4.
Jonathan Allan
@DSM Ops, fijo.
Ajasja
@ JonathanAllan Gracias.
Ajasja
Ah, te salvé 2 en total, ¡me salvaste 1 cambiando a arange(121)!
Jonathan Allan
3

PostScript encapsulado; 232 bytes

%!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

Ahora, dado que esta es una imagen vectorial en sí misma ...

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

joojaa
fuente
Ooh eso es bueno
Beta Decay
3

TikZ + PGFPlots , 175 bytes

\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}

Compilar con, por ejemplo ,latexmk -cd -f -pdf in.tex para una salida en pdf. Durante la compilación, se solicita al usuario n.

Resultados de muestra (convertidos a png) para n = 1 yn = 2:

n = 1 n = 2

Julian Wolf
fuente
2

Math.JS Grapher , 20 bytes

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

Por pura casualidad, esta utilidad gráfica es TC (en su mayor parte, los bucles infinitos simplemente la bloquean), y por naturaleza, su salida principal son los gráficos.

Cómo funciona

r(n)=asigna una función rque lleva el argumento na la expresión f(x)=re((-n)^x). re((-n)^x)es prácticamente letra por letra la descripción del desafío. Pero esto asigna la funciónf(x) a esto, que el graficador genera implícitamente como un gráfico lineal.

Cómo probarlo

Puede usar este sitio, marcar esa función allí y luego llamarlo con r(input).

Salida

Salida

Un taco
fuente
2

J , 37 36 bytes

Gracias a mi colega Marshall por su orientación. -2 gracias a FrownyFrog.

Función de prefijo tácito anónimo.

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

Ventana de trama

-(]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
Adán
fuente
Creo que 20%~i:@60puede ser i:@3j120.
FrownyFrog
@FrownyFrog Correcto. Gracias.
Adám
1

Dyalog APL, 41 bytes

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

Cómo funciona:

⎕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.

El comando de usuario ]chart, en este caso, toma dos argumentos vectoriales xyy y parcelas de los gráficos:

por norte=1: n = 1

por norte=2: n = 2

J. Sallé
fuente
0

SmileBASIC, 82 bytes

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

El gráfico llena toda la pantalla, incluso cuando N es menor que 1.

Cuando N es mayor que 1, puede escalar Y para que esté entre -1 y 1 dividiéndolo entre n^3. Ya lo estoy haciendo n^x, y n^x / n^3puedo simplificarlo n^(x-3). Sin embargo, cuando N es menor que 1, tengo que dividir Y entre n^-3. Esto es equivalente an^(x+3) .

Puedo usar n^(x-3*sign(n-1))para usar -3if n>1, y +3ifn<1

Imágenes próximamente

12Me21
fuente
0

Excel VBA, 133 bytes

Secuencia de comandos de ventana inmediata que toma entrada [A1]y genera un Chartobjeto al Sheet1objeto.

[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

Sin golf

SubVersión de rutina completa . I / O no ha cambiado.

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

Salida

Donde entrada, norte=1

Gráfico de salida n = 1

Donde entrada, norte=3

Gráfico de salida n = 3

Taylor Scott
fuente
0

Julia 0.6 con Plots.jl, 46 bytes

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

Trama GR

¡Esto necesitaba una representación de Julia!

Sin embargo, no es mucho para jugar golf aquí, excepto (ab) que usa la sobrecarga del operador para guardar bytes en la definición de la función, y el uso 0im-npara hacer que el número de entrada sea complejo donde generalmente podría haberlo usado Complex(n). Eso es necesario porque en Julia, por razones de estabilidad de tipo , el ^operador devuelve resultados complejos solo cuando la entrada es en sí misma compleja. Así que aquí lo hacemos un número complejo agregando0im ie. 0i.

Una cosa interesante sobre el paquete Plots.jl es que elige automáticamente el backend para usar en función de los paquetes de trazado que haya instalado y desde dónde ejecuta el plotcomando. La trama anterior se creó con el backend GR , pero si no tuviera eso instalado (o si ejecuté explícitamente un plotly()comando como lo hice para esto), habría utilizado el backend Plotly más interactivo y generaría esto (que parece un un poquito más agradable IMO):

Parcela

Incluso hay un backend de UnicodePlots , para imprimir un diagrama en el terminal (o guardarlo en un archivo de texto) usando caracteres Unicode y códigos de color. Sin embargo, SE sigue estropeando la alineación de la trama si intento pegarla directamente, así que aquí hay una captura de pantalla del terminal:

Parcela UnicodePlots

PD: la fórmula alternativa, Rmi((-norte)X)=norteXdoos(πX), sale a la misma longitud:

using Plots
~n=plot(n.^(x=-3:.05:3).*cospi(x))
sundar - Restablece a Monica
fuente
Dang, ese es un uso inteligente (ab) de los caracteres Braille.
Zacharý