Накресліть графік


31

Виклик

За умови введення цілого числа, н (де 0<н<50 ), виведіть графік у=Rе((-н)х) від х=-3 до х=3 включно.

Де - реальна частина комплексного числа .Rе(p)p

Зауважте, щоRе((-н)х)=нхcos(πх)

Вихідні дані

Вихід може бути в будь-якій бажаній формі (наприклад, зображення, вікно тощо). Мистецтво ASCII заборонено.

Графік не повинен мати осі (щоб дозволити конкуренції мовам без вбудованих графічних функцій).

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

Мінімальний інтервал між ділянками - 0,05.

Векторна графіка дозволена.

Приклади

Для введення 2:

Для введення 1:


Ви повинні вказати відповідні результати у своїй відповіді (n = 1 і n = 2).

Перемога

Виграє найкоротший код у байтах.


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

1
Чи можуть бути осі з лівого та нижнього країв графіка? а не в центрі?
Kritixi Lithos

2
"Якщо зображення виводиться, його сторона повинна бути довшою 500 пікселів." Чи дозволена векторна графіка?
Мартін Ендер

1
@MartinEnder Так, я думаю, так
бета-розпад

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

Відповіді:



21

TI-Basic, 26 21 байт

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

Вихід для N = 2:

TI84SE GRAPH ВИХІД


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


5
"Якщо зображення виводиться, його сторона повинна бути довшою 500 пікселів." Схоже, вбудована можливість графічного функціонування тут не працює.
користувач5090812

7
@ user5090812 "Вихід може бути в будь-якій бажаній вами формі (наприклад, зображення або вікно тощо)" - Я виводить у вікно графіка, а не на зображення, тому це обмеження не застосовується.
Timtech

1
Хто б міг подумати, що графічний калькулятор може графікувати речі!
PyRulez

15

Bash + Gnuplot, 56 45 байт

(-11 байт завдяки Нойралефу!)

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

n = 2,1

n = 2 n = 1


2
Чи можете ви позбутися, from matplotlib.pyplot import*якщо запустити ipython із прапором --pylab --matplotlib?
Ajasja

У вас є iPython; це працює? Я підозрюю, що це було б прийнятно, якщо це так, але потрібно було б запитати себе. У мене немає iPython і ніколи не було необхідності ним користуватися.
Джонатан Аллан

yup, працює з --pylab (тестується python 2)
Ajasja

У жодному конфігураційному файлі немає нічого нестандартного, що змушує дисплей працювати, правда? Якщо ні, я б сказав, що це повідомлення буде окремою відповіддю з цього приводу, оскільки це розумне використання зміни мови IMO. EDIT: Я бачу, що ви там також пограли :)
Джонатан Аллан

1
Так, я пам’ятав, що %pylabти також нудиш, і якщо ти в блокноті, то в кінці не потрібне шоу :)
Ajasja

11

Математика, 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))
користувач2390246

2
@ user2390246 Враховуючи, що осі є абсолютно необов’язковими, я не думаю, що це має значення. Якщо маркування осей має значення, інші відповіді також мають проблеми через масштабування (наприклад, відповідь 30-знакової MATLAB).
Конрад Рудольф

10

R, 29 байт

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

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

А для n = 2:

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


Чому б не використати змінну, nяк і інші відповіді, і не погладити п'ять символів зі своєї відповіді? У всякому разі, шалена відповідь. Я завжди про це забуваю curve.
Конрад Рудольф

@KonradRudolph Дякую Насправді більшість інших відповідей не визначають n. Відповіді matlab, matl, TI-Basic та matemati приймають введення як stdin (наскільки я їх розумію), тоді як відповіді python та VBA створюють функцію. Навіть якщо це дозволено, це лише питання особистого смаку: я просто не люблю заздалегідь задані змінні як спосіб введення.
планнапус

Виправлення вибачення: відповіді matlab також визначають функції.
планнапус

Добре. Це є код гольф ...
Konrad Rudolph

Я не хотів бути педантичним чи що-небудь, але насправді як спільнота ми вважаємо, що використання заздалегідь визначеної змінної є не вважається правильним методом введення, якщо явно не зазначено в питанні.
планування

8

Excel VBA, 168 160 147 138 байт (комірки у вигляді пікселів у 100-кратній шкалі)

Збережено 8 байт завдяки KyleKanos.
Збережено 22 байти завдяки Тейлору Скотту

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


1
Чи не коротше використовувати (-n)^xзамість жорсткого кодування pi?
Бета-розпад

1
@BetaDecay Було б, якби Excel міг обробити негативні числа, підняті до від'ємних нецілих чисел ¯ \ _ (ツ) _ / ¯
Інженер Тост

2
Хіба не коротше використовувати atn(1)*4для пі?
Кайл Канос

2
@KyleKanos Дійсно, спасибі. Я не знайшов цієї ідентичності в таблиці пошуку своїх констант, і, як інженер, саме там я юридично зобов'язаний припинити.
Інженер Тост

1
@TaylorScott Це три нові хитрощі, дякую. Це цінніше за 7 байт, які вони мене врятували цього разу.
Інженер Тост

6

МАТЛАБ, 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 Я також не знав :-) Це була помилка ідеї
Луїс Мендо

5

Зошит Юпітера та Python 3; 53 байти

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

Три байти збережено завдяки @Jonathan Allan.

n = 1 n = 2


Два незначні шматочки: якщо я прочитаю специфікації правильно, то вам потрібно мінімум 0,05 (не 0,1) між (ефективними) балами, і ми повинні включати 3.
DSM

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

@DSM Ops, виправлено.
Ajasja

@JonathanAllan Дякую
Ajasja

Ах, я врятував вас 2, ви просто врятували мене 1, змінивши на 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 + PGFPlots , 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 n = 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

Діалог 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графіки:

н=1n = 1

н=2n = 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, я повинен розділити Y n^-3замість. Це еквівалентно 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

Безумовно

Повна Subрутинна версія. I / O не змінюється.

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

Вихідні дані

н=1

Вихідна ділянка n = 1

н=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

Rе((-н)х)=нхcос(πх)

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

Данг, це розумне використання символів Брайля.
Zacharý
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.