Desenhe um gráfico de


31

Desafio

Dada uma entrada de um número inteiro, (em que ), a saída do gráfico de a partir de a , inclusive.n0<n<50y=Re((n)x)x=3x=3

Onde é a parte real do número complexo .Re(p)p

Observe queRe((n)x)=nxcos(πx)

Saída

A saída pode estar na forma que você desejar (por exemplo, uma imagem ou uma janela etc.). A arte ASCII não é permitida.

O gráfico não precisa ter eixos (para permitir que idiomas sem funções gráficas incorporadas concorram).

Se uma imagem é impressa, cada lado deve ter mais de 500 pixels. Da mesma forma, o gráfico deve preencher a imagem da melhor maneira possível.

O intervalo mínimo entre gráficos é 0,05.

Gráficos vetoriais são permitidos.

Exemplos

Para uma entrada de 2:

Para uma entrada de 1:


Você deve colocar as saídas correspondentes em sua resposta (n = 1 en = 2).

Ganhando

O código mais curto em bytes vence.


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

1
Os eixos podem estar nas bordas esquerda e inferior do gráfico? em vez de no centro?
precisa saber é o seguinte

2
"Se uma imagem é impressa, cada lado deve ter mais de 500 pixels". São permitidos gráficos vetoriais?
Martin Ender

1
@MartinEnder Sim, eu suponho que sim
Beta Decay

4
Por que não estou surpreso ao ver MATLAB, MATL e Mathematica como algumas das primeiras respostas. :)
Kevin Cruijssen

Respostas:


12

MATL, 22 18 16 bytes

Obrigado @LuisMendo por mais -2 bytes!

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

Experimente em matl.suever.net


21

TI-Basic, 26 21 bytes

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

Saída para N = 2:

TI84SE GRAPH OUTPUT


1
Conto 47 caracteres em seu código, não 26.
Konrad Rudolph


5
"Se uma imagem é impressa, cada lado deve ter mais de 500 pixels". Não parece que o recurso gráfico incorporado funcione aqui.
user5090812

7
@ user5090812 "A saída pode estar na forma que você desejar (por exemplo, uma imagem ou uma janela etc.)" - Estou exibindo pela janela do gráfico, não por uma imagem, portanto esta restrição não se aplica.
Timtech

1
Quem pensaria que uma calculadora gráfica poderia representar graficamente as coisas!
PyRulez

15

Bash + Gnuplot, 56 45 bytes

(-11 bytes graças a Noiralef!)

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

Salva o gráfico resultante como uma pngimagem nomeada Ano diretório de trabalho atual.

Saídas de exemplo

Para n = 1 :

Para n = 2 :


1
+1 para usar um idioma que eu uso todos os dias. (nenhum "absurdo binário distorcido" como nos idiomas de golfe ^^). Isso pode ser reutilizado em situações cotidianas.
precisa

5
Você pode salvar 11 bytes usando as abreviações:gnuplot -e "se t png;p[-3:3]real((-2)**x)">A
Noiralef

@Noiralef Thanks! :)
R. Kap

13

Python 3 com matplotlib , 103 72 bytes

-12 bytes graças a DSM (um módulo é instalado ao lado matplotlibchamado pylabcom a funcionalidade necessária "fazer Python em um repl mais como Matlab!" - estranho, mas é verdade)
-18 mais como resultado (Pylab tem muitas funções numpy também!)
- 1 byte graças a Ajasja (substituindo 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


2
Você pode se livrar from matplotlib.pyplot import*se iniciar o ipython com o sinalizador --pylab --matplotlib?
precisa saber é o seguinte

Você tem o iPython? funciona? Eu suspeito que seria aceitável, mas precisaria me perguntar. Eu não tenho o iPython e nunca tive a necessidade de usá-lo.
Jonathan Allan

sim, funciona com --pylab (testado com o pitão 2)
Ajasja

Não há nada fora do padrão em nenhum arquivo de configuração que faça a exibição funcionar, certo? Caso contrário, eu diria publicá-lo como uma resposta separada nesta ocasião, pois é um uso inteligente de uma mudança de idioma da IMO. EDIT: Vejo que golfed-lo lá também :)
Jonathan Allan

1
Sim, lembrei-me %pylabdá-lhe Numpy bem e se você estiver em um caderno que você não precisa de um show no final :)
Ajasja

11

Mathematica, 41 bytes

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

A saída parece exatamente como mostrada no desafio, exceto pela fonte dos números (que eu suspeito que foi criada com o Wolfram Alpha).


11

MATLAB, 35 30 bytes

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

Isso define uma função anônima. A saída é feita através de uma nova janela com uma saída redimensionável de gráfico vetorial. O MATLAB plotignora automaticamente a parte imaginária das coordenadas y, desde que você forneça as coordenadas x correspondentes n=3. A saída a seguir é para .


10

R, 30 bytes

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

n = 1

insira a descrição da imagem aqui

n = 2

insira a descrição da imagem aqui


3
Oooh pretty circles
Decay Beta

2
A renderização padrão do @BetaDecay R é feia. A justificativa para o padrão é que os círculos não preenchidos não ocultam pontos com excesso de plotagem tanto quanto os círculos / pontos preenchidos.
Konrad Rudolph

5
Eu não acho feio. Parece muito legal.
mbomb007

1
O eixo x está identificado incorretamente. Eu acho que você precisax=seq(-3,3,.05);plot(x,Re((0i-n)^x))
user2390246

2
@ user2390246 Dado que os eixos são completamente opcionais, não acho que isso importe. Se a rotulagem do eixo for importante, outras respostas também terão problemas devido à escala (por exemplo, a resposta MATLAB de 30 caracteres).
Konrad Rudolph

10

R, 29 bytes

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

né fornecido através do stdin. Resultado para n = 1: insira a descrição da imagem aqui

E para n = 2:

insira a descrição da imagem aqui


Por que não usar uma variável ncomo as outras respostas e remover cinco caracteres da sua resposta? Enfim, resposta louca. Eu sempre esqueço curve.
Konrad Rudolph

@KonradRudolph Thanks. Na verdade, a maioria das outras respostas não é predefinida n. As respostas matlab, matl, TI-Basic e mathematica recebem entrada como stdin (tanto quanto eu as entendo), enquanto as respostas python e VBA criam uma função. Mesmo que seja permitido, é apenas uma questão de gosto pessoal: simplesmente não gosto de predefinir variáveis ​​como uma forma de entrada.
plannapus

Desculpe correção: as respostas do matlab também definem funções.
plannapus

Bem. Este é um campo de golfe código ...
Konrad Rudolph

Eu não queria ser pedante ou algo assim, mas, na verdade, como comunidade, consideramos que o uso de uma variável predefinida não é considerado um método de entrada válido, a menos que declarado explicitamente de outra forma na questão.
plannapus

8

Excel VBA, 168 160 147 138 Bytes (células como pixels na escala 100x)

Economizou 8 bytes graças a KyleKanos
Economizou 22 bytes graças 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

Formatado, fica assim:

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

Fato de divertimento: O VBA não tem um built-in pivariável por isso temos que avaliá-lo como uma função de planilha onde ele faz existir.

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


Comecei com uma versão gráfico em 193 bytes, mas fez obter resultados mais bonita.

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
Não é mais curto para usar em (-n)^xvez de pi codificado?
Beta Decay

1
@BetaDecay Seria se o Excel poderia lidar com números negativos levantados para não-inteiros negativos ¯ \ _ (ツ) _ / ¯
Engenheiro Toast

2
Não é mais curto para usar atn(1)*4no pi?
precisa saber é o seguinte

2
@KyleKanos De fato, obrigado. Não encontrei essa identidade na tabela de pesquisa de constantes e, como engenheiro, é onde sou legalmente obrigado a parar.
Engenheiro brinde

1
@ TaylorScott São três novos truques, obrigado. Isso é mais valioso do que os 7 bytes que eles me salvaram dessa vez.
Engineer Toast

6

MATLAB, 35 33 bytes

Obrigado fo @flawr por remover 2 bytes!

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

Isso define uma função anônima. Para chamá-lo com entrada 2, use ans(2)(ou atribua a função a uma variável como fe use f(2)).

Saída é gráficos vetoriais (janela redimensionável). O intervalo de amostragem no eixo x é determinado automaticamente pela ezplotfunção, mas parece ser mais do que suficiente.

Um aviso é produzido no STDERR porque a função passada para ezplot( @(x)real((-n)^x)) não é vetorizada, mas o gráfico é gerado.

Exemplo para n = 2:

insira a descrição da imagem aqui


1
ezplot = la-z-plot: D (eu continuo esquecendo sobre este ...)
flawr

Hã. Nunca soube que você poderia passar o domínio para ezplotisso. Infelizmente, o mesmo não pode ser dito fplot, portanto, nenhum byte pode ser salvo lá.
Sanchises

@sanchises eu também não sabia :-) Foi idéia de flawr
Luis Mendo

5

Caderno Jupyter e Python 3; 53 bytes

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

Três bytes salvos graças a @ Jonathan Allan.

n = 1 n = 2


Dois menores pedaços: se eu ler as especificações direita, você precisa de um mínimo de 0,05 (não 0,1) entre os pontos (efetivos), e que é suposto ser inclusivo de 3.
DSM

Você pode usar x=arange(-60,61)/20para corrigir os problemas destacados pelo DSM a um custo de 2 bytes. Se você adicionar 0ja arangeele pode ser usado para mudar para plot(x,(-n)**x)salvar 4.
Jonathan Allan

@DSM Ops, fixo.
Ajasja

@JonathanAllan Thanks.
precisa saber é o seguinte

Ah, eu te salvei 2 no total, você me salvou 1 mudando para 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

Agora, já que esta é uma imagem vetorial em si ...

insira a descrição da imagem aqui

insira a descrição da imagem aqui


Ooh, que bom!
Decay Beta 16/04

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}

Compile com, por exemplo , latexmk -cd -f -pdf in.texuma saída em pdf. Durante a compilação, o usuário é solicitado n.

Saídas de amostra (convertidas em png) para n = 1 en = 2:

n = 1 n = 2


2

Math.JS Grapher , 20 bytes

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

Por puro acaso, esse utilitário gráfico é o TC (na maioria das vezes, os loops infinitos simplesmente quebram.) E, por natureza, sua principal saída é o gráfico.

Como funciona

r(n)=atribui uma função rque leva o argumento nà expressão f(x)=re((-n)^x). re((-n)^x)é praticamente letra por letra a descrição do desafio. Mas isso atribui a função f(x)a isso, que o grapher gera implicitamente como um gráfico de linhas.

Como testá-lo

Você pode usar este site, digitar essa função lá e chamá-lo com r(input).

Saída

Saída


2

J , 37 36 bytes

Agradeço ao meu colega Marshall pela orientação. -2 graças a FrownyFrog.

Função de prefixo tácito anônimo.

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

Janela de plotagem

-(]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

Eu acho que 20%~i:@60pode ser i:@3j120.
FrownyFrog

@FrownyFrog Correct. Obrigado.
Adám 18/07/19

1

Dyalog APL, 41 bytes

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

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

O comando de usuário ]chart, neste caso, tem dois argumentos vetoriais, xe ye traça os gráficos:

n=1n = 1

n=2n = 2


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

O gráfico preenche a tela inteira, mesmo quando N é menor que 1.

Quando N é maior que 1, você pode dimensionar Y para estar entre -1 e 1 dividindo-o por n^3. Eu já estou fazendo n^x, e n^x / n^3pode ser simplificado para n^(x-3). No entanto, quando N é menor que 1, tenho que dividir Y por sua n^-3vez. Isso é equivalente a n^(x+3).

Eu posso usar n^(x-3*sign(n-1))para usar -3se n>1, e +3sen<1

Imagens em breve


0

Excel VBA, 133 bytes

Script de janela imediato que recebe entrada [A1]e gera um Chartobjeto para o 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

Ungolfed

SubVersão de rotina completa . A E / S permanece inalterada.

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

Saída

n=1

Gráfico de saída n = 1

n=3

Gráfico de saída n = 3


0

Julia 0.6 com Plots.jl, 46 bytes

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

Gráfico GR

Isso precisava de uma representação de Julia!

No entanto, não há muito para jogar aqui, exceto (ab) usando sobrecarga de operador para salvar bytes na definição de função e usando 0im-npara tornar o número de entrada complexo onde eu normalmente poderia ter usado Complex(n). Isso é necessário porque, em Julia, por motivos de estabilidade de tipo , o ^operador retorna resultados complexos apenas quando a entrada é o próprio complexo. Então, aqui tornamos um número complexo adicionando 0imie. 0i.

Uma coisa interessante sobre o pacote Plots.jl é que ele escolhe automaticamente o back-end para usar com base em quais pacotes de plotagem você instalou e de onde você está executando o plotcomando. O gráfico acima foi criado com o back-end do GR , mas se eu não o tivesse instalado (ou se eu executasse explicitamente um plotly()comando como o fiz para isso), ele teria usado o back-end mais interativo do Plotly e emitido isso (que parece um IMO um pouco melhor):

Plotagem

Existe até um back-end UnicodePlots , para imprimir um gráfico no terminal (ou salvar em um arquivo de texto) usando caracteres Unicode e códigos de cores. O SE continua atrapalhando o alinhamento da trama, se eu tentar colá-lo diretamente, então aqui está uma captura de tela do terminal:

Gráfico UnicodePlots

PS: A fórmula alternativa, , tem o mesmo comprimento:Re((n)x)=nxcos(πx)

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

Caramba, isso é um uso inteligente (ab) dos personagens em Braille.
Zacharý 17/07/2018
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.