Нарисуйте график


31

Вызов

Учитывая ввод целого числа (где ), выведите график от до x = 3 включительно.N0<N<50Yзнак равноре((-N)Икс)Иксзнак равно-3x=3

Где Re(p) - действительная часть комплексного числа п .

Обратите внимание, что Rе((-N)Икс)знак равноNИкссоз(πИкс)

Выход

Вывод может быть в любой форме, которую вы пожелаете (например, изображение или окно и т. Д.). ASCII искусство запрещено.

Граф не должен иметь осей (чтобы позволить языкам без встроенных графических функций конкурировать).

Если изображение выводится, каждая его сторона должна быть длиннее 500 пикселей. Точно так же сюжет должен заполнить изображение как можно лучше.

Минимальный интервал между участками составляет 0,05.

Векторная графика разрешена.

Примеры

Для ввода 2:

Для ввода 1:


Вы должны указать соответствующие ответы в своем ответе (n = 1 и n = 2).

выигрыш

Самый короткий код в байтах побеждает.


37
ASCII art is disallowed.(ಥ﹏ಥ)
Альберт Реншоу

1
Могут ли оси быть на левом и нижнем краях графика? а не в центре?
Критиси Литос

2
«Если изображение выводится, оно должно быть длиннее 500 пикселей». Разрешена ли векторная графика?
Мартин Эндер

1
@MartinEnder Да, я так думаю
бета-распад

4
Почему я не удивлен, увидев MATLAB, MATL и Mathematica в качестве некоторых из первых ответов. :)
Кевин Круйссен

Ответы:


12

MATL, 22 18 16 байт

Спасибо @LuisMendo за дополнительные -2 байта!

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

Попробуйте это на matl.suever.net


21

TI-Basic, 26 21 байт

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

Выход для N = 2:

TI84SE ГРАФИЧЕСКИЙ ВЫХОД


1
Я считаю в вашем коде 47 символов, а не 26.
Конрад Рудольф

11
@KonradRudolph См .: Руководство по оценке TI-Basic.
Эддисон Крамп

5
«Если изображение выводится, оно должно быть длиннее 500 пикселей». Не похоже, что встроенная графическая возможность будет работать здесь.
user5090812

7
@ user5090812 «Вывод может быть в любой форме, которую вы пожелаете (например, изображение или окно и т. д.)» - я выводлю через окно графика, а не изображение, поэтому это ограничение не применяется.
Timtech

1
Кто бы мог подумать, что графический калькулятор может графически!
PyRulez

15

Баш + Гнуплот, 56 45 байт

(-11 байт благодаря Noiralef!)

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

Сохраняет полученный график как pngизображение с именем Aв текущем рабочем каталоге.

Пример выходов

Для n = 1 :

Для n = 2 :


1
+1 за использование языка, которым я пользуюсь каждый день. (нет "искаженной бинарной чепухи", как в случае с гольфом ^^). Это может быть повторно использовано в повседневных ситуациях.
Оливье Дюлак

5
Вы можете сохранить 11 байтов, используя сокращения:gnuplot -e "se t png;p[-3:3]real((-2)**x)">A
Noiralef

@Noiralef Спасибо! :)
Р. Кап

13

Python 3 с matplotlib , 103 72 байта

-12 байт благодаря DSM (модуль используется вместе matplotlibназывается pylabс необходимой функциональностью «что делает Python в РЕПЛ больше как Matlab» - странно, но это правда)
-18 скорее как результат (pylab имеет множество функций Numpy тоже!)
- 1 байт благодаря Ajasja (замена arange(-60,61)/20+0jна arange(121)/20-3+0j)

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

п = 2,1

п = 2 п = 1


2
Можете ли вы избавиться, from matplotlib.pyplot import*если вы запустите ipython с флагом --pylab --matplotlib?
Аяся

У вас есть iPython; это работает? Я подозреваю, что это будет приемлемо, если это произойдет, но нужно будет спросить себя. У меня нет iPython, и у меня никогда не было необходимости его использовать.
Джонатан Аллан

да, работает с --pylab (протестировано с python 2)
Ajasja

Нет ничего нестандартного в любом конфигурационном файле, заставляющем работать дисплей, верно? Если нет, я бы сказал опубликовать это как отдельный ответ по этому поводу, так как это умное использование смены языка IMO. РЕДАКТИРОВАТЬ: я вижу, что вы играли в гольф там тоже :)
Джонатан Аллан

1
Да, я вспомнил, что %pylabдаёт вам и клочок, и если вы в тетради, вам не нужно шоу в конце :)
Ajasja

11

Mathematica, 41 байт

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

Вывод выглядит точно так, как показано в задании, за исключением шрифта чисел (который, я подозреваю, был создан с помощью Wolfram Alpha).


11

MATLAB, 35 30 байт

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

Это определяет любую функцию. Вывод осуществляется через новое окно с выводом векторной графики с изменяемым размером. MATLAB plotавтоматически игнорирует мнимую часть y-координат, пока вы предоставляете соответствующие x-координаты. Следующий вывод предназначен для n=3.


10

R, 30 байт

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

n = 1

введите описание изображения здесь

n = 2

введите описание изображения здесь


3
Ооо, красивые круги
бета-распад

2
Рендеринг @BetaDecay R по умолчанию уродлив. Логическое обоснование по умолчанию заключается в том, что незаполненные кружки не скрывают заштрихованные точки так, как закрашенные кружки / точки.
Конрад Рудольф

5
Я не думаю, что это некрасиво. Это выглядит действительно круто.
mbomb007

1
Ось X помечена неправильно. Я думаю, что вам нужноx=seq(-3,3,.05);plot(x,Re((0i-n)^x))
user2390246

2
@ user2390246 Учитывая, что оси полностью необязательны, я не думаю, что это имеет значение. Если маркировка оси имеет значение, другие ответы также имеют проблемы из-за масштабирования (например, 30-символьный ответ MATLAB).
Конрад Рудольф

10

R, 29 байт

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

nпредоставляется через стандартный ввод. Результат для n = 1: введите описание изображения здесь

И для n = 2:

введите описание изображения здесь


Почему бы не использовать переменную, nкак в других ответах, и сбрить пять символов из вашего ответа? Во всяком случае, сумасшедший ответ. Я всегда забываю о curve.
Конрад Рудольф

@KonradRudolph Спасибо. На самом деле большинство других ответов не предопределяют n. Ответы matlab, matl, TI-Basic и mathematica принимают ввод как stdin (насколько я понимаю), а ответы python и VBA создают функцию. Даже если это разрешено, это просто вопрос личного вкуса: мне просто не нравятся предопределенные переменные как способ ввода.
plannapus

Извините, поправка: ответы Matlab также определяют функции.
plannapus

Что ж. Это является код гольф ...
Konrad Rudolph

Я не хотел быть педантичным или кем-то еще, но на самом деле, как сообщество, мы считаем, что использование предопределенной переменной не считается допустимым методом ввода, если в вопросе явно не указано иное.
plannapus

8

Excel VBA, 168 160 147 138 байт (ячейки в пикселях в масштабе 100x)

Сохранено 8 байтов благодаря KyleKanos.
Сохранено 22 байта благодаря 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

Отформатированный, это выглядит так:

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

Интересный факт: VBA не имеет встроенный piпеременный, мы должны оценить его как функцию рабочего листа , где он делает существует.

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


Я начал с версии диаграммы в 193 байта, но она получилась лучше.

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
п = 1

п = 2


1
Разве это не короче, чтобы использовать (-n)^xвместо жесткого пи пи?
бета-распад

1
@BetaDecay Это было бы, если бы Excel мог обрабатывать отрицательные числа, возведенные в отрицательные нецелые числа ¯ \ _ (ツ) _ / ¯
Engineer Toast

2
Разве это не короче, чтобы использовать atn(1)*4для пи?
Кайл Канос

2
@KyleKanos Действительно, спасибо. Я не нашел эту личность в моей таблице поиска констант, и, как инженер, на этом я по закону обязан остановиться.
Инженер Тост

1
@TaylorScott Это три новых трюка, спасибо. Это более ценно, чем 7 байтов, которые они спасли меня на этот раз.
Тост инженера

6

MATLAB, 35 33 байта

Спасибо fo @flawr за удаление 2 байтов!

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

Это определяет анонимную функцию. Чтобы вызвать его с помощью ввода 2, используйте ans(2)(или назначьте функцию переменной, например, а fзатем используйте f(2)).

Выход - векторная графика (окно с изменяемым размером). Интервал выборки по оси x определяется функцией автоматически ezplot, но, похоже, его более чем достаточно.

В STDERR выдается предупреждение, потому что функция, переданная ezplot( @(x)real((-n)^x)), не векторизована, но график сгенерирован.

Пример для n = 2:

введите описание изображения здесь


1
ezplot = la-z-plot: D (я постоянно забываю об этом ...)
flawr

Да. Никогда не знал, что вы можете передать домен, чтобы ezplotпонравиться. К сожалению, нельзя сказать то же самое fplot, поэтому там нельзя сохранить ни одного байта.
Sanchises

@sanchises Я тоже не знал :-) Это была идея Фларра
Луис Мендо,

5

Блокнот Jupyter и Python 3; 53 байта

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

Три байта сохранены благодаря @Jonathan Allan.

п = 1 п = 2


Два второстепенных бита: если я правильно прочитал спецификации, вам нужно минимум 0,05 (а не 0,1) между (эффективными) точками, и мы должны включить 3.
DSM

Вы можете использовать x=arange(-60,61)/20для устранения проблем, выделенных DSM, стоимостью 2 байта. Если вы добавите 0jк arangeнему, его можно использовать для перехода к plot(x,(-n)**x)сохранению 4.
Джонатан Аллан

@DSM Ops, исправлено.
Аяся

@JonathanAllan Спасибо.
Аяся

Ах, я спас тебя всего 2, ты только что спас меня, изменив на arange(121)!
Джонатан Аллан

3

Инкапсулированный PostScript; 232 байта

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

Теперь, поскольку это само векторное изображение ...

введите описание изображения здесь

введите описание изображения здесь


О, это хорошо
Beta Decay

3

TikZ + PGFPлот , 175 байтов

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

Скомпилируйте, например , latexmk -cd -f -pdf in.texдля вывода в формате PDF. Во время компиляции у пользователя запрашивается n.

Примеры выходных данных (преобразованы в png) для n = 1 и n = 2:

n = 1 п = 2


2

Math.JS Grapher , 20 байтов

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

По счастливой случайности, эта графическая утилита - TC (По большей части, бесконечные циклы просто сбивают ее.), И по своей природе ее основной вывод - графики.

Как это работает

r(n)=назначает функцию, rкоторая принимает аргумент nдля выражения f(x)=re((-n)^x).re((-n)^x)в значительной степени буква за буквой описание вызова. Но это назначает функцию f(x)для этого, которая графически неявно выводит как линейный график.

Как это проверить

Вы можете использовать этот сайт, пробить эту функцию там, а затем вызвать его сr(input) .

Выход

Выход


2

J , 37 36 байт

Спасибо моему коллеге Маршаллу за руководство. -2 спасибо FrownyFrog.

Функция анонимного молчаливого префикса.

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

Окно участка

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

Я думаю, что 20%~i:@60может быть i:@3j120.
FrownyFrog

@FrownyFrog Правильно. Спасибо.
Адам

1

Dyalog APL, 41 байт

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

Как это работает:

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

Команда пользователя ]chart, в данном случае, имеет два вектора аргументов, xа yи участки графиков:

Для Nзнак равно1: п = 1

Для Nзнак равно2: п = 2


0

SmileBASIC, 82 байта

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

График заполняет весь экран, даже когда N меньше 1.

Когда N больше 1, вы можете масштабировать Y от -1 до 1, разделив его на n^3. Я уже делаю n^x, и n^x / n^3можно упростить до n^(x-3). Однако, когда N меньше 1, я должен n^-3вместо этого разделить Y на . Это эквивалентно n^(x+3).

Я могу использовать, n^(x-3*sign(n-1))чтобы использовать, -3если n>1и +3еслиn<1

Изображения скоро появятся


0

Excel VBA, 133 байта

Скрипт непосредственного окна, который принимает входные данные [A1]и выводит Chartобъект в Sheet1объект.

[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

Полная Subрутинная версия. Ввод / вывод не изменяется.

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

Выход

Где вход, Nзнак равно1

Выходной участок n = 1

Где вход, Nзнак равно3

Выходной участок n = 3


0

Юлия 0,6 с Plots.jl, 46 байтов

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

GR сюжет

Это нужно представление Юлии!

Здесь не много для игры в гольф, за исключением (ab) использования перегрузки оператора для сохранения байтов при определении функции и использования 0im-nдля усложнения входного числа, которое я обычно мог бы использовать Complex(n). Это необходимо, потому что в Julia, по соображениям стабильности типов , ^оператор возвращает результаты Complex только тогда, когда ввод сам по себе Complex. Так что здесь мы делаем его комплексным числом, добавляя 0imт.е. 0i.

Одна из замечательных особенностей пакета Plots.jl заключается в том, что он автоматически выбирает используемый бэкэнд в зависимости от того, какие пакеты печати вы установили и откуда запускаете plotкоманду. Вышеуказанный участок был создан с бэкэндом GR , но если бы я его не установил (или если бы я явно plotly()выполнил команду, как я сделал для этого), он использовал бы более интерактивный бэкэнд Plotly и вывел бы это (что выглядит как чуть-чуть приятнее ИМО)

Сюжет

Там даже есть бэкэнд UnicodePlots для печати графика в терминале (или сохранения в текстовом файле) с использованием символов Unicode и цветовых кодов. SE продолжает портить выравнивание графика, если я пытаюсь вставить его напрямую, так что вот снимок экрана терминала:

UnicodePlots сюжет

PS: альтернативная формула, ре((-N)Икс)знак равноNИкссоs(πИкс), выходит на ту же длину:

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

Черт, это умное (ab) использование символов Брайля.
Захари
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.