Gambarkan grafik


31

Tantangan

Diberikan input integer, n (di mana ), mengeluarkan grafik dari ke inklusif.0<n<50y=Re((n)x)x=3x=3

Di mana adalah bagian nyata dari bilangan kompleks .pRe(p)p

Perhatikan bahwaRe((n)x)=nxcos(πx)

Keluaran

Outputnya mungkin dalam bentuk apa pun yang Anda inginkan (misalnya gambar atau jendela, dll.). Seni ASCII dilarang.

Grafik tidak perlu memiliki sumbu (untuk memungkinkan bahasa tanpa fungsi grafik bawaan untuk bersaing).

Jika gambar dihasilkan, setiap sisi harus lebih panjang dari 500 piksel. Demikian pula, plot harus mengisi gambar sebaik mungkin.

Interval minimum antara plot adalah 0,05.

Grafik vektor diizinkan.

Contohnya

Untuk masukan dari 2:

Untuk input 1:


Anda harus memasukkan output yang sesuai dalam jawaban Anda (n = 1 dan n = 2).

Kemenangan

Kode terpendek dalam byte menang.


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

1
Dapatkah sumbu berada di tepi kiri dan bawah grafik? bukannya di pusat?
Kritixi Lithos

2
"Jika sebuah gambar dihasilkan, setiap sisi harus lebih dari 500 piksel." Apakah grafik vektor diperbolehkan?
Martin Ender

1
@ MartinEnder Ya, saya kira begitu
Beta Decay

4
Mengapa saya tidak terkejut melihat MATLAB, MATL dan Mathematica sebagai beberapa jawaban pertama. :)
Kevin Cruijssen

Jawaban:


12

MATL, 22 18 16 byte

Terima kasih @LuisMendo untuk tambahan -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

Cobalah di matl.suever.net


21

TI-Basic, 26 21 byte

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

Output untuk N = 2:

OUTPUT GRAF TI84SE


1
Saya menghitung 47 karakter dalam kode Anda, bukan 26.
Konrad Rudolph


5
"Jika sebuah gambar dihasilkan, setiap sisi harus lebih dari 500 piksel." Sepertinya kemampuan grafik bawaan tidak akan berfungsi di sini.
user5090812

7
@ user5090812 "Outputnya mungkin dalam bentuk apa pun yang Anda inginkan (mis. gambar atau jendela, dll.)" - Saya keluaran oleh jendela grafik, bukan gambar, jadi batasan ini tidak berlaku.
Timtech

1
Siapa yang mengira bahwa kalkulator grafik dapat membuat grafik!
PyRulez

15

Bash + Gnuplot, 56 45 byte

(-11 byte, terima kasih kepada Noiralef!)

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

Menyimpan grafik yang dihasilkan sebagai pnggambar yang disebutkan Adalam direktori kerja saat ini.

Contoh Keluaran

Untuk n = 1 :

Untuk n = 2 :


1
+1 untuk menggunakan bahasa yang saya gunakan setiap hari. (tidak ada "omong kosong biner" seperti golf-langages ^^). Ini dapat digunakan kembali dalam situasi sehari-hari.
Olivier Dulac

5
Anda dapat menghemat 11 byte dengan menggunakan singkatan:gnuplot -e "se t png;p[-3:3]real((-2)**x)">A
Noiralef

@Noiralef Terima kasih! :)
R. Kap

13

Python 3 dengan matplotlib , 103 72 byte

-12 byte terima kasih kepada DSM (modul dipasang bersamaan matplotlibdisebut pylabdengan fungsionalitas yang diperlukan "membuat Python di repl lebih seperti Matlab" - aneh, tapi benar!)
-18 lebih sebagai hasilnya (pylab memiliki banyak fungsi numpy juga!)
- 1 byte berkat Ajasja (diganti arange(-60,61)/20+0jdengan 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
Bisakah Anda menyingkirkan from matplotlib.pyplot import*jika Anda memulai ipython dengan flag --pylab --matplotlib?
Ajasja

Sudahkah Anda mendapatkan iPython; Apakah itu bekerja? Saya menduga itu akan diterima jika itu terjadi, tetapi perlu bertanya pada diri sendiri. Saya tidak memiliki iPython dan tidak pernah perlu menggunakannya.
Jonathan Allan

yup, bekerja dengan --pylab (diuji dengan python 2)
Ajasja

Tidak ada yang non-standar dalam file konfigurasi yang membuat tampilan berfungsi, bukan? Jika tidak, saya akan mengatakan mempostingnya sebagai jawaban terpisah pada kesempatan ini karena ini adalah penggunaan pintar perubahan bahasa IMO. EDIT: Saya melihat Anda telah bermain golf di sana juga :)
Jonathan Allan

1
Ya, saya ingat %pylabmemberi Anda numpy juga dan jika Anda berada di notebook Anda tidak memerlukan pertunjukan di akhir :)
Ajasja

11

Mathematica, 41 byte

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

Output terlihat persis seperti yang ditunjukkan dalam tantangan kecuali untuk font angka (yang saya duga diciptakan dengan Wolfram Alpha).


11

MATLAB, 35 30 byte

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

Ini mendefinisikan fungsi apa pun. Outputnya adalah melalui jendela baru dengan output grafis vektor resizable. MATLAB plotsecara otomatis mengabaikan bagian imajiner dari koordinat y selama Anda memberikan koordinat x yang sesuai. Output berikut adalah untuk n=3.


10

R, 30 byte

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

n = 1

masukkan deskripsi gambar di sini

n = 2

masukkan deskripsi gambar di sini


3
Oooh lingkaran cantik
Beta Decay

2
Render default @BetaDecay R jelek. Alasan untuk default adalah bahwa lingkaran yang tidak terisi tidak menyembunyikan titik berlebih sebanyak lingkaran / titik yang diisi.
Konrad Rudolph

5
Saya tidak berpikir itu jelek. Itu terlihat sangat keren.
mbomb007

1
Sumbu x dilabeli dengan tidak benar. Saya pikir Anda perlux=seq(-3,3,.05);plot(x,Re((0i-n)^x))
user2390246

2
@ user2390246 Mengingat bahwa sumbu sepenuhnya opsional, saya tidak berpikir itu penting. Jika pelabelan sumbu penting, jawaban lain juga memiliki masalah karena penskalaan (mis. Jawaban 30-char MATLAB).
Konrad Rudolph

10

R, 29 byte

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

ndisediakan melalui stdin. Hasil untuk n = 1: masukkan deskripsi gambar di sini

Dan untuk n = 2:

masukkan deskripsi gambar di sini


Mengapa tidak menggunakan variabel nseperti jawaban lain dan memotong lima karakter dari jawaban Anda? Lagi pula, jawaban gila. Saya selalu lupa curve.
Konrad Rudolph

@KonradRudolph Terima kasih. Sebenarnya sebagian besar jawaban lain tidak ditentukan sebelumnya n. Matlab, matl, TI-Basic dan Mathematica menjawab mengambil input sebagai stdin (sejauh yang saya mengerti), sedangkan python dan VBA menjawab membuat fungsi. Bahkan jika diizinkan, itu hanya masalah selera pribadi: Saya hanya tidak suka mendefinisikan variabel sebagai cara input.
plannapus

Maaf koreksi: jawaban matlab juga mendefinisikan fungsi.
plannapus

Baik. Ini adalah kode golf ...
Konrad Rudolph

Saya tidak ingin menjadi orang yang bertele-tele atau apa pun tetapi sebenarnya sebagai komunitas kami menganggap bahwa menggunakan variabel yang sudah ditentukan sebelumnya tidak dianggap sebagai metode input yang valid kecuali dinyatakan sebaliknya secara eksplisit dalam pertanyaan.
plannapus

8

Excel VBA, 168 160 147 138 Bytes (sel sebagai piksel pada skala 100x)

Disimpan 8 byte berkat KyleKanos
Disimpan 22 byte berkat 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

Diformat, terlihat seperti ini:

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

Fun Fact: VBA tidak memiliki built-in pivariabel jadi kita harus mengevaluasinya sebagai fungsi lembar kerja di mana ia tidak eksis.

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


Saya mulai dengan versi grafik di 193 byte tetapi tidak mendapatkan hasil yang lebih cantik.

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
Apakah tidak lebih pendek untuk digunakan (-n)^xdaripada pi hardcoding?
Beta Decay

1
@BetaDecay Ini akan terjadi jika Excel dapat menangani angka negatif yang dinaikkan menjadi non-bilangan bulat negatif \ \ _ (ツ) _ / ¯
Engineer Toast

2
Bukankah lebih pendek untuk digunakan atn(1)*4untuk pi?
Kyle Kanos

2
@KyleKanos Memang benar, terima kasih. Saya tidak menemukan identitas itu dalam tabel pencarian konstanta saya dan, sebagai seorang insinyur, di situlah saya wajib berhenti secara hukum.
Engineer Toast

1
@TaylorScott Itu tiga trik baru, terima kasih. Itu lebih berharga daripada 7 byte yang mereka selamatkan untuk saya kali ini.
Engineer Toast

6

MATLAB, 35 33 byte

Terima kasih @ flawr untuk menghapus 2 byte!

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

Ini mendefinisikan fungsi anonim. Untuk menyebutnya dengan input 2, gunakan ans(2)(atau tetapkan fungsi ke variabel seperti fdan kemudian gunakan f(2)).

Outputnya adalah grafik vektor (jendela resizable). Interval pengambilan sampel pada sumbu x ditentukan secara otomatis oleh ezplotfungsi, tetapi tampaknya lebih dari cukup.

Peringatan diproduksi di STDERR karena fungsi yang diteruskan ke ezplot( @(x)real((-n)^x)) tidak di-vektor-kan, tetapi grafik dihasilkan.

Contoh untuk n = 2:

masukkan deskripsi gambar di sini


1
ezplot = la-z-plot: D (Saya selalu lupa tentang yang ini ...)
flawr

Hah. Tidak pernah tahu bahwa Anda dapat melewati domain ezplotseperti itu. Sayangnya, hal yang sama tidak dapat dikatakan untuk fplot, jadi tidak ada byte yang bisa disimpan di sana.
Sanchises

@sanchises Saya juga tidak tahu :-) Itu adalah ide cacat
Luis Mendo

5

Notebook Jupyter dan Python 3; 53 byte

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

Tiga byte disimpan berkat @Jonathan Allan.

n = 1 n = 2


Dua bit minor: jika saya membaca spesifikasi dengan benar, Anda memerlukan minimal 0,05 (bukan 0,1) antara poin (efektif), dan kami seharusnya termasuk 3.
DSM

Anda dapat menggunakan x=arange(-60,61)/20untuk memperbaiki masalah yang disorot oleh DSM dengan biaya 2 byte. Jika Anda menambahkannya 0j, arangeitu dapat digunakan untuk beralih ke plot(x,(-n)**x)tabungan 4.
Jonathan Allan

@DSM Ops, diperbaiki.
Ajasja

@ JonathanAllan Terima kasih.
Ajasja

Ah aku total menyelamatkan kamu, kamu baru saja menyelamatkan aku 1 dengan mengubah ke arange(121)!
Jonathan Allan

3

Enkapsulasi PostScript; 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

Sekarang karena ini adalah gambar vektor itu sendiri ...

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


Ooh itu bagus
Beta Decay

3

TikZ + PGFPlots , 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}

Kompilasi dengan, misalnya , latexmk -cd -f -pdf in.texuntuk keluaran pdf. Selama kompilasi, pengguna diminta n.

Output sampel (dikonversi ke png) untuk n = 1 dan n = 2:

n = 1 n = 2


2

Math.JS Grapher , 20 Bytes

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

Dengan kebetulan belaka, utilitas grafik ini adalah TC (Untuk sebagian besar, loop Infinite hanya menabraknya.), Dan pada dasarnya, output utamanya adalah grafik.

Bagaimana itu bekerja

r(n)=memberikan fungsi ryang membawa argumen nke ekspresi f(x)=re((-n)^x). re((-n)^x)cukup banyak huruf untuk huruf deskripsi tantangan. Tapi ini menetapkan fungsinyaf(x) untuk ini, yang secara implisit output sebagai grafik garis.

Cara mengujinya

Anda dapat menggunakan situs ini , memencet fungsi itu di sana, lalu memanggilnya denganr(input) .

Keluaran

Keluaran


2

J , 37 36 byte

Terima kasih kepada kolega saya Marshall untuk bimbingannya. -2 Berkat FrownyFrog.

Fungsi awalan diam-diam anonim.

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

Plot jendela

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

Saya pikir 20%~i:@60bisa i:@3j120.
FrownyFrog

@FrownyFrog Benar. Terima kasih.
Adám

1

Dyalog APL, 41 byte

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

Bagaimana itu bekerja:

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

Perintah pengguna ]chart, dalam hal ini, membutuhkan dua argumen vektor, xdany dan memplot grafik:

Untuk n=1: n = 1

Untuk n=2: n = 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

Grafik mengisi seluruh layar, bahkan ketika N kurang dari 1.

Saat N lebih besar dari 1, Anda bisa skala Y menjadi antara -1 dan 1 dengan membaginya dengan n^3. Saya sudah melakukan n^x, dan n^x / n^3dapat disederhanakan n^(x-3). Namun, ketika N kurang dari 1, saya harus membagi Y dengann^-3 sebagai gantinya. Ini setara dengann^(x+3) .

Saya dapat menggunakan n^(x-3*sign(n-1))untuk menggunakan -3jika n>1, dan+3 ifn<1

Gambar segera hadir


0

Excel VBA, 133 byte

Skrip jendela langsung yang mengambil input dari [A1]dan menampilkan Chartobjek ke Sheet1objek.

[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

Tidak disatukan

SubVersi rutin penuh . I / O tidak berubah.

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

Keluaran

Dimana input, n=1

Keluaran plot n = 1

Dimana input, n=3

Keluaran plot n = 3


0

Julia 0,6 dengan Plots.jl, 46 byte

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

Plot GR

Ini membutuhkan representasi Julia!

Tidak banyak bermain golf di sini, kecuali (ab) menggunakan operator overloading untuk menghemat byte pada definisi fungsi, dan menggunakan 0im-nuntuk membuat bilangan input kompleks di mana saya biasanya menggunakan Complex(n). Itu perlu karena di Julia, untuk alasan stabilitas tipe , ^operator mengembalikan hasil Kompleks hanya ketika inputnya adalah Kompleks itu sendiri. Jadi di sini kita membuatnya menjadi bilangan kompleks dengan menambahkan0im mis. 0i.

Satu hal keren tentang paket Plots.jl adalah bahwa ia secara otomatis memilih backend untuk digunakan berdasarkan paket plotting apa yang telah Anda instal dan dari mana Anda menjalankan plotperintah. Plot di atas dibuat dengan backend GR , tetapi jika saya tidak menginstalnya (atau jika saya secara eksplisit menjalankan aplotly() perintah seperti yang saya lakukan untuk ini), ia akan menggunakan backend Plotly yang lebih interaktif dan menampilkan ini (yang terlihat seperti IMO kecil lebih baik):

Plotly plot

Bahkan ada backend UnicodePlots , untuk mencetak plot di terminal (atau menyimpan ke file teks) menggunakan karakter Unicode dan kode warna. SE terus mengacaukan penyelarasan plot jika saya mencoba untuk langsung menempelnya, jadi inilah tangkapan layar terminal:

Plot UnicodePlots

PS: Formula alternatif, Re((-n)x)=nxcHais(πx), keluar dengan panjang yang sama:

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

Sial, itu beberapa penggunaan huruf Braille yang cerdik.
Zacharý
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.