Vẽ đồ thị của


31

Thử thách

Cho đầu vào của một số nguyên, n (trong đó 0<n<50 ), xuất đồ thị của y= =Re((-n)x) từ x= =-3 đến x= =3 .

Trong đó là phần thực của số phức .Re(p)p

Lưu ý rằngRe((-n)x)= =nxcos(πx)

Đầu ra

Đầu ra có thể ở bất kỳ dạng nào bạn muốn (ví dụ: hình ảnh hoặc cửa sổ, v.v.). Nghệ thuật ASCII không được phép.

Biểu đồ không cần phải có trục (để cho phép các ngôn ngữ không có chức năng vẽ biểu đồ tích hợp để cạnh tranh).

Nếu một hình ảnh là đầu ra, mỗi bên phải dài hơn 500 pixel. Tương tự, cốt truyện phải điền vào hình ảnh tốt nhất có thể.

Khoảng cách tối thiểu giữa các ô là 0,05.

Đồ họa vector được cho phép.

Ví dụ

Đối với đầu vào của 2:

Đối với đầu vào của 1:


Bạn phải đặt đầu ra tương ứng của bạn trong câu trả lời của bạn (n = 1 và n = 2).

Chiến thắng

Mã ngắn nhất tính bằng byte thắng.


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

1
Các trục có thể nằm ở cạnh trái và cạnh dưới của đồ thị không? thay vì ở trung tâm?
Kritixi Lithos

2
"Nếu một hình ảnh là đầu ra, mỗi bên phải dài hơn 500 pixel." Đồ họa vector có được phép không?
Martin Ender

1
@MartinEnder Vâng, tôi cho là vậy
Beta Decay

4
Tại sao tôi không ngạc nhiên khi thấy MATLAB, MATL và Mathicala là một số câu trả lời đầu tiên. :)
Kevin Cruijssen

Câu trả lời:


12

TOÁN, 22 18 16 byte

Cảm ơn @LuisMendo vì đã bổ sung -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

Dùng thử trên matl.suever.net


21

TI-Basic, 26 21 byte

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

Đầu ra cho N = 2:

TI84SE GRAPH OUTPUT


1
Tôi đếm 47 ký tự trong mã của bạn, không phải 26.
Konrad Rudolph


5
"Nếu một hình ảnh là đầu ra, mỗi bên phải dài hơn 500 pixel." Không có vẻ như khả năng vẽ đồ thị tích hợp sẽ hoạt động ở đây.
user5090812

7
@ user5090812 "Đầu ra có thể ở bất kỳ dạng nào bạn muốn (ví dụ: hình ảnh hoặc cửa sổ, v.v.)" - Tôi xuất ra bởi cửa sổ đồ thị, không phải hình ảnh, vì vậy hạn chế này không áp dụng.
Timtech

1
Ai có thể nghĩ rằng một máy tính vẽ đồ thị có thể vẽ đồ thị!
PyRulez

15

Bash + Gnuplot, 56 45 byte

(-11 byte nhờ Noiralef!)

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

Lưu biểu đồ kết quả dưới dạng pnghình ảnh có tên Atrong thư mục làm việc hiện tại.

Kết quả đầu ra

Với n = 1 :

Với n = 2 :


1
+1 để sử dụng một langage tôi sử dụng hàng ngày. (không có "vô nghĩa nhị phân bị cắt xén" như với các sân golf ^^). Điều này có thể được sử dụng lại trong các tình huống hàng ngày.
Olivier Dulac

5
Bạn có thể lưu 11 byte bằng cách viết tắt:gnuplot -e "se t png;p[-3:3]real((-2)**x)">A
Noiralef

@Noiralef Cảm ơn! :)
R. Kap

13

Python 3 với matplotlib , 103 72 byte

-12 bytes nhờ DSM (một module được cài đặt bên cạnh matplotlibgọi pylabvới các chức năng cần thiết "làm Python trong một repl nhiều như Matlab" - kỳ quặc, nhưng là sự thật)
hơn là -18 Kết quả là (pylab có nhiều chức năng NumPy quá!)
- 1 byte nhờ Ajasja (thay thế arange(-60,61)/20+0jbằng 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
Bạn có thể thoát khỏi from matplotlib.pyplot import*nếu bạn bắt đầu ipython với cờ --pylab --matplotlib không?
Ajasja

Bạn có iPython không; nó có hoạt động không Tôi nghi ngờ nó sẽ được chấp nhận nếu nó làm, nhưng sẽ cần phải tự hỏi mình. Tôi không có iPython và chưa bao giờ có nhu cầu sử dụng nó.
Jonathan Allan

yup, hoạt động với --pylab (đã thử nghiệm với python 2)
Ajasja

Không có gì không chuẩn trong bất kỳ tệp cấu hình nào làm cho màn hình hoạt động, phải không? Nếu không tôi sẽ nói đăng nó như một câu trả lời riêng trong dịp này vì đó là cách sử dụng thông minh thay đổi ngôn ngữ IMO. EDIT: Tôi thấy bạn cũng đã chơi golf ở đó :)
Jonathan Allan

1
Vâng, tôi nhớ cũng %pylabmang đến cho bạn sự khó chịu và nếu bạn đang ở trong một cuốn sổ tay, bạn sẽ không cần một chương trình ở cuối :)
Ajasja

11

Toán học, 41 byte

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

Đầu ra trông chính xác như được hiển thị trong thử thách ngoại trừ phông chữ của các số (mà tôi nghi ngờ đã được tạo bằng Wolfram Alpha).


11

MATLAB, 35 30 byte

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

Điều này xác định một chức năng bất thường. Đầu ra là thông qua một cửa sổ mới với đầu ra đồ họa vector có thể thay đổi kích thước. MATLAB plottự động bỏ qua phần ảo của tọa độ y miễn là cung cấp tọa độ x tương ứng của bạn n=3. Đầu ra sau đây dành cho .


10

R, 30 byte

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

n = 1

nhập mô tả hình ảnh ở đây

n = 2

nhập mô tả hình ảnh ở đây


3
Oooh vòng tròn đẹp
Beta Decay

2
Kết xuất mặc định của @BetaDecay R là xấu. Lý do cho mặc định là các vòng tròn không được lấp đầy không che giấu các điểm được đặt quá nhiều như các vòng tròn / dấu chấm được điền.
Konrad Rudolph

5
Tôi không nghĩ nó xấu. Trông thật tuyệt.
mbomb007

1
Trục x được dán nhãn không chính xác. Tôi nghĩ bạn cầnx=seq(-3,3,.05);plot(x,Re((0i-n)^x))
user2390246

2
@ user2390246 Cho rằng các trục là hoàn toàn tùy chọn, tôi không nghĩ nó quan trọng. Nếu ghi nhãn trục có vấn đề, các câu trả lời khác cũng có vấn đề do chia tỷ lệ (ví dụ: câu trả lời MATLAB 30-char).
Konrad Rudolph

10

R, 29 byte

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

nđược cung cấp thông qua stdin. Kết quả cho n = 1: nhập mô tả hình ảnh ở đây

Và với n = 2:

nhập mô tả hình ảnh ở đây


Tại sao không sử dụng một biến nnhư các câu trả lời khác và loại bỏ năm ký tự khỏi câu trả lời của bạn? Dù sao, trả lời điên rồ. Tôi luôn quên về curve.
Konrad Rudolph

@KonradRudolph Cảm ơn. Trên thực tế hầu hết các câu trả lời khác không xác định trước n. Các câu trả lời matlab, matl, TI-Basic và mathicala lấy đầu vào là stdin (theo như tôi hiểu chúng), trong khi các câu trả lời python và VBA tạo ra một hàm. Ngay cả khi điều đó được cho phép, đó chỉ là vấn đề sở thích cá nhân: Tôi chỉ không thích xác định trước các biến như một cách nhập liệu.
plannapus

Xin lỗi sửa: các câu trả lời MATLAB cũng xác định chức năng.
plannapus

Tốt. Đây một mã golf Golf
Konrad Rudolph

Tôi không muốn trở thành người phạm tội hay bất cứ điều gì nhưng thực sự là một cộng đồng, chúng tôi cho rằng sử dụng một biến được xác định trước là không được coi là phương thức nhập hợp lệ trừ khi có quy định rõ ràng khác trong câu hỏi.
plannapus

8

VBA Excel, 168 160 147 138 Byte (ô dưới dạng pixel ở tỷ lệ 100x)

Đã lưu 8 byte nhờ KyleKanos
Lưu 22 byte nhờ 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

Được định dạng, nó trông như thế này:

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 không có một built-in pibiến vì vậy chúng tôi phải đánh giá nó như là một chức năng bảng tính mà nó không tồn tại.

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


Tôi đã bắt đầu với một phiên bản biểu đồ ở mức 193 byte nhưng nó đã nhận được kết quả đẹp hơn.

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 = 1
n = 2
n = 2


1
Nó không phải là ngắn hơn để sử dụng (-n)^xthay vì pi mã hóa?
Beta Decay

1
@BetaDecay Sẽ là nếu Excel có thể xử lý các số âm được tăng lên thành số nguyên không âm ¯ \ _ () _ / ¯
Kỹ sư Toast

2
Nó không phải là ngắn hơn để sử dụng atn(1)*4cho pi?
Kyle Kanos

2
@KyleKanos Quả thực là vậy, cảm ơn. Tôi đã không tìm thấy danh tính đó trong bảng tra cứu hằng số của mình và, với tư cách là một kỹ sư, đó là nơi tôi bắt buộc phải dừng lại về mặt pháp lý.
Kỹ sư Toast

1
@TaylorScott Đó là ba thủ thuật mới, cảm ơn. Điều đó có giá trị hơn 7 byte mà họ đã cứu tôi lần này.
Kỹ sư Toast

6

MATLAB, 35 33 byte

Cảm ơn fo @flawr vì đã xóa 2 byte!

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

Điều này xác định một chức năng ẩn danh. Để gọi nó với đầu vào 2, sử dụng ans(2)(hoặc gán hàm cho một biến như fsau đó sử dụng f(2)).

Đầu ra là đồ họa vector (cửa sổ thay đổi kích thước). Khoảng thời gian lấy mẫu trên trục x được xác định tự động bởi ezplothàm, nhưng dường như là quá đủ.

Một cảnh báo được tạo ra trong STDERR vì hàm được truyền cho ezplot( @(x)real((-n)^x)) không được vector hóa, nhưng biểu đồ được tạo.

Ví dụ cho n = 2:

nhập mô tả hình ảnh ở đây


1
ezplot = la-z-plot : D (Tôi tiếp tục quên về điều này ...)
flawr

Huh. Không bao giờ biết rằng bạn có thể vượt qua tên miền để ezplotnhư thế. Đáng buồn thay, điều tương tự không thể được nói cho fplot, vì vậy không có byte nào có thể được lưu ở đó.
Sanchise

@sanchises Tôi cũng không biết :-) Đó là ý tưởng của flawr
Luis Mendo

5

Máy tính xách tay Jupyter và Python 3; 53 byte

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

Ba byte được lưu nhờ @Jonathan Allan.

n = 1 n = 2


Hai bit nhỏ: nếu tôi đọc đúng thông số kỹ thuật, bạn cần tối thiểu 0,05 (không phải 0,1) giữa các điểm (hiệu quả) và chúng tôi phải bao gồm 3 điểm.
DSM

Bạn có thể sử dụng x=arange(-60,61)/20để khắc phục các sự cố được tô sáng bởi DSM với chi phí là 2 byte. Nếu bạn thêm 0jvào, arangenó có thể được sử dụng để thay đổi thành plot(x,(-n)**x)tiết kiệm 4.
Jonathan Allan

@DSM Ops, đã sửa.
Ajasja

@Jonathan ALLan Cảm ơn.
Ajasja

Ah tôi đã cứu bạn tổng cộng 2, bạn chỉ cứu tôi 1 bằng cách đổi thành arange(121)!
Jonathan Allan

3

PostScript đóng gói; 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

Bây giờ vì đây là một hình ảnh vector chính nó ...

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Ồ thật tuyệt
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}

Biên dịch với, ví dụ , latexmk -cd -f -pdf in.texcho một đầu ra pdf. Trong quá trình biên dịch, người dùng được nhắc nhở n.

Đầu ra mẫu (được chuyển đổi thành png) cho n = 1 và n = 2:

n = 1 n = 2


2

Math.JS Gograph , 20 Byte

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

Theo sheer fluke, tiện ích vẽ đồ thị này là TC (Đối với hầu hết các phần, các vòng lặp Vô hạn chỉ làm sập nó.), Và về bản chất, đầu ra chính của nó là đồ thị.

Làm thế nào nó hoạt động

r(n)=gán một hàm rlấy đối số ncho biểu thức f(x)=re((-n)^x). re((-n)^x)là khá nhiều thư cho thư mô tả thách thức. Nhưng cái này gán hàm f(x)cho cái này, cái mà người vẽ hoàn toàn xuất ra dưới dạng biểu đồ đường.

Làm thế nào để kiểm tra nó

Bạn có thể sử dụng trang này , bấm vào chức năng đó, sau đó gọi nó bằngr(input) .

Đầu ra

Đầu ra


2

J , 37 36 byte

Cảm ơn đồng nghiệp Marshall của tôi đã hướng dẫn. -2 nhờ FrownyFrog.

Chức năng tiền tố ẩn danh.

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

Cửa sổ lô

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

Tôi nghĩ rằng 20%~i:@60có thể i:@3j120.
FrownyFrog

@FrownyFrog Đúng. Cảm ơn.
Adám

1

APL Dyalog, 41 byte

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

Làm thế nào nó hoạt động:

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

Lệnh sử dụng ]chart, trong trường hợp này, có hai đối số vector, xyvà âm mưu đồ thị:

Dành cho n= =1: n = 1

Dành cho 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

Đồ thị lấp đầy toàn bộ màn hình, ngay cả khi N nhỏ hơn 1.

Khi N lớn hơn 1, bạn có thể chia tỷ lệ Y thành -1 và 1 bằng cách chia cho n^3. Tôi đã làm n^xn^x / n^3có thể được đơn giản hóa n^(x-3). Tuy nhiên, khi N nhỏ hơn 1, tôi phải chia Y cho n^-3. Điều này tương đương với n^(x+3).

Tôi có thể sử dụng n^(x-3*sign(n-1))để sử dụng -3nếu n>1, và +3nếun<1

Hình ảnh đến sớm


0

VBA Excel, 133 byte

Kịch bản cửa sổ ngay lập tức lấy đầu vào từ [A1]và xuất một Chartđối tượng đếnSheet1 đối tượng.

[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

Ung dung

SubPhiên bản đầy đủ thường xuyên. I / O không thay đổi.

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

Đầu ra

Đầu vào ở đâu, n= =1

Biểu đồ đầu ra n = 1

Đầu vào ở đâu, n= =3

Biểu đồ đầu ra n = 3


0

Julia 0,6 với Plots.jl, 46 byte

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

Âm mưu GR

Điều này cần một đại diện Julia!

Mặc dù vậy, không có gì nhiều để chơi gôn ở đây, ngoại trừ (ab) sử dụng quá tải toán tử để lưu byte trên định nghĩa hàm và sử dụng 0im-nđể làm cho số đầu vào phức tạp mà tôi thường sử dụng Complex(n). Điều đó là cần thiết bởi vì ở Julia, vì lý do ổn định loại , ^toán tử chỉ trả về kết quả phức tạp khi đầu vào là chính Complex. Vì vậy, ở đây chúng tôi làm cho nó một số phức bằng cách thêm 0imtức là. 0i.

Một điều thú vị về gói Plots.jl là nó tự động chọn phụ trợ để sử dụng dựa trên các gói âm mưu bạn đã cài đặt và nơi bạn đang chạy plotlệnh từ đó. Cốt truyện trên được tạo ra với phụ trợ GR , nhưng nếu tôi chưa cài đặt nó (hoặc nếu tôi chạy một plotly()lệnh rõ ràng như tôi đã làm cho việc này), thì nó sẽ sử dụng phụ trợ Plotly tương tác nhiều hơn và xuất ra cái này IMO nhỏ hơn một chút):

Cốt truyện âm mưu

Thậm chí còn có một phụ trợ UnicodePlots , để in một âm mưu trong thiết bị đầu cuối (hoặc lưu vào tệp văn bản) bằng cách sử dụng các ký tự và mã màu Unicode. SE tiếp tục làm rối loạn căn chỉnh cốt truyện nếu tôi cố gắng dán trực tiếp vào nó, vì vậy đây là một ảnh chụp màn hình thiết bị đầu cuối:

Biểu đồ UnicodePlots

PS: Công thức thay thế, Re((-n)x)= =nxcoS(πx), đi ra cùng chiều dài:

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

Dang, đó là một số (ab) sử dụng thông minh các ký tự chữ nổi.
Zacharý
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.