Tracez un graphique de


31

Défi

Étant donné l'entrée d'un entier, (où ), sortez le graphique de de à inclus.n0<n<50y=Re((n)x)x=3x=3

Où est la partie réelle du nombre complexe .Re(p)p

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

Sortie

La sortie peut être sous la forme que vous souhaitez (par exemple une image ou une fenêtre, etc.). L'art ASCII est interdit.

Le graphique n'a pas besoin d'avoir des axes (pour permettre aux langues sans fonctions graphiques intégrées de rivaliser).

Si une image est sortie, chaque côté doit dépasser 500 pixels. De même, l'intrigue doit remplir l'image du mieux qu'elle peut.

L'intervalle minimum entre les parcelles est de 0,05.

Les graphiques vectoriels sont autorisés.

Exemples

Pour une entrée de 2:

Pour une entrée de 1:


Vous devez mettre vos sorties correspondantes dans votre réponse (n = 1 et n = 2).

Gagnant

Le code le plus court en octets gagne.


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

1
Les axes peuvent-ils se trouver sur les bords gauche et inférieur du graphique? au lieu d'être au centre?
Kritixi Lithos

2
"Si une image est sortie, chaque côté doit dépasser 500 pixels." Les graphiques vectoriels sont-ils autorisés?
Martin Ender

1
@MartinEnder Oui, je suppose que oui
Beta Decay

4
Pourquoi ne suis-je pas surpris de voir MATLAB, MATL et Mathematica parmi les premières réponses. :)
Kevin Cruijssen

Réponses:


12

MATL, 22 18 16 octets

Merci @LuisMendo pour -2 octets supplémentaires!

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

Essayez-le sur matl.suever.net


21

TI-Basic, 26 21 octets

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

Sortie pour N = 2:

SORTIE GRAPHIQUE TI84SE


1
Je compte 47 caractères dans votre code, pas 26.
Konrad Rudolph

11
@KonradRudolph Voir: Consignes de notation TI-Basic.
Addison Crump

5
"Si une image est sortie, chaque côté doit dépasser 500 pixels." Il ne semble pas que la fonction graphique intégrée fonctionnera ici.
user5090812

7
@ user5090812 "La sortie peut être sous la forme que vous souhaitez (par exemple, une image ou une fenêtre, etc.)" - Je produis par la fenêtre graphique, pas une image, donc cette restriction ne s'applique pas.
Timtech

1
Qui aurait pensé qu'une calculatrice graphique pourrait représenter graphiquement les choses!
PyRulez

15

Bash + Gnuplot, 56 45 octets

(-11 octets grâce à Noiralef!)

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

Enregistre le graphique résultant sous la forme d'une pngimage nommée Adans le répertoire de travail actuel.

Exemples de sorties

Pour n = 1 :

Pour n = 2 :


1
+1 pour l'utilisation d'un langage que j'utilise tous les jours. (pas de "bêtises binaires brouillées" comme avec golf-langages ^^). Cela peut être réutilisé dans des situations quotidiennes.
Olivier Dulac

5
Vous pouvez économiser 11 octets en utilisant les abréviations:gnuplot -e "se t png;p[-3:3]real((-2)**x)">A
Noiralef

@Noiralef Merci! :)
R. Kap

13

Python 3 avec matplotlib , 103 72 octets

-12 octets grâce à DSM (un module est installé à côté matplotlibappelé pylabavec la fonctionnalité nécessaire "rendre Python dans une réplique plus comme Matlab" - étrange, mais vrai!)
-18 plus en conséquence (pylab a aussi de nombreuses fonctions numpy!)
- 1 octet merci à Ajasja (remplacer arange(-60,61)/20+0jpar 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
Pouvez-vous vous débarrasser de from matplotlib.pyplot import*si vous démarrez ipython avec le drapeau --pylab --matplotlib?
Ajasja

Avez-vous iPython; est-ce que ça marche? Je soupçonne que ce serait acceptable si c'était le cas, mais je devrais me demander. Je n'ai pas iPython et je n'ai jamais eu besoin de l'utiliser.
Jonathan Allan

yup, fonctionne avec --pylab (testé avec python 2)
Ajasja

Il n'y a rien de non standard dans un fichier de configuration qui fait fonctionner l'affichage, non? Sinon, je dirais le poster comme une réponse distincte à cette occasion, car il s'agit d'une utilisation intelligente d'un changement de langue IMO. EDIT: Je vois que vous l'avez également joué au golf :)
Jonathan Allan

1
Oui, je me souviens %pylabque ça te donne aussi du sang-froid et si tu es dans un cahier, tu n'as pas besoin d'un spectacle à la fin :)
Ajasja

11

Mathematica, 41 octets

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

La sortie ressemble exactement à celle du défi, à l'exception de la police des chiffres (que je soupçonne d'avoir été créée avec Wolfram Alpha).


11

MATLAB, 35 30 octets

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

Cela définit une fonction unique. La sortie s'effectue via une nouvelle fenêtre avec une sortie graphique vectorielle redimensionnable. MATLAB plotignore automatiquement la partie imaginaire des coordonnées y tant que vous fournissez les coordonnées x correspondantes n=3. La sortie suivante est pour .


10

R, 30 octets

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

n = 1

entrez la description de l'image ici

n = 2

entrez la description de l'image ici


3
Oooh jolis cercles
Beta Decay

2
Le rendu par défaut de @BetaDecay R est moche. La justification de la valeur par défaut est que les cercles non remplis ne cachent pas les points surplacés autant que le feraient les cercles / points remplis.
Konrad Rudolph

5
Je ne pense pas que ce soit moche. Ça a l'air vraiment cool.
mbomb007

1
L'axe des x n'est pas étiqueté correctement. Je pense que vous avez besoinx=seq(-3,3,.05);plot(x,Re((0i-n)^x))
user2390246

2
@ user2390246 Étant donné que les axes sont complètement optionnels, je ne pense pas que cela soit important. Si l'étiquetage des axes est important, d'autres réponses ont également des problèmes dus à la mise à l'échelle (par exemple, la réponse MATLAB de 30 caractères).
Konrad Rudolph

10

R, 29 octets

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

nest fourni via stdin. Résultat pour n = 1: entrez la description de l'image ici

Et pour n = 2:

entrez la description de l'image ici


Pourquoi ne pas utiliser une variable ncomme les autres réponses et raser cinq caractères de votre réponse? Quoi qu'il en soit, réponse folle. J'oublie toujours curve.
Konrad Rudolph

@KonradRudolph Merci. En fait, la plupart des autres réponses ne prédéfinissent pas n. Les réponses matlab, matl, TI-Basic et mathématique prennent l'entrée en tant que stdin (pour autant que je les comprenne), tandis que les réponses python et VBA créent une fonction. Même si cela est autorisé, c'est juste une question de goût personnel: je n'aime tout simplement pas la prédéfinition des variables comme moyen de saisie.
plannapus

Désolé correction: les réponses matlab définissent également les fonctions.
plannapus

Bien. C'est un terrain de code ...
Konrad Rudolph

Je ne voulais pas être pédant ou quoi que ce soit, mais en fait en tant que communauté, nous considérons que l'utilisation d'une variable prédéfinie n'est pas considérée comme une méthode d'entrée valide, sauf indication contraire explicite dans la question.
plannapus

8

Excel VBA, 168 160 147 138 octets (cellules en pixels à l'échelle 100x)

8 octets enregistrés grâce à KyleKanos
22 octets enregistrés grâce à 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

Formaté, il ressemble à ceci:

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

Fait d'amusement: VBA n'a pas intégré pivariable de sorte que nous devons l' évaluer en fonction de feuille de calcul où il fait exist.

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


J'ai commencé avec une version graphique à 193 octets, mais elle a obtenu de meilleurs résultats.

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'est-il pas plus court à utiliser (-n)^xqu'à la place du codage en dur pi?
Beta Decay

1
@BetaDecay Ce serait si Excel pouvait gérer les nombres négatifs élevés à des non-nombres négatifs ¯ \ _ (ツ) _ / ¯
Engineer Toast

2
N'est-il pas plus court à utiliser atn(1)*4pour pi?
Kyle Kanos

2
@KyleKanos En effet, merci. Je n'ai pas trouvé cette identité dans ma table de recherche de constantes et, en tant qu'ingénieur, c'est là que je suis légalement obligé de m'arrêter.
Engineer Toast

1
@TaylorScott C'est trois nouvelles astuces, merci. C'est plus précieux que les 7 octets qu'ils m'ont sauvés cette fois.
Engineer Toast

6

MATLAB, 35 33 octets

Merci pour @flawr d'avoir supprimé 2 octets!

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

Cela définit une fonction anonyme. Pour l'appeler avec entrée 2, utilisez ans(2)(ou affectez la fonction à une variable telle que f, puis utilisez f(2)).

La sortie est des graphiques vectoriels (fenêtre redimensionnable). L'intervalle d'échantillonnage sur l' axe des x est déterminé automatiquement par la ezplotfonction, mais il semble être plus que suffisant.

Un avertissement est généré dans STDERR car la fonction passée à ezplot( @(x)real((-n)^x)) n'est pas vectorisée, mais le graphique est généré.

Exemple pour n = 2:

entrez la description de l'image ici


1
ezplot = la-z-plot: D (j'oublie toujours celui-ci ...)
flawr

Huh. Je n'ai jamais su que tu pouvais passer le domaine pour ezplotaimer ça. Malheureusement, on ne peut pas en dire fplotautant, donc aucun octet ne peut y être enregistré.
Sanchises

@sanchises Je ne savais pas non plus :-) C'était l'idée de flawr
Luis Mendo

5

Cahier Jupyter et Python 3; 53 octets

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

Trois octets enregistrés grâce à @Jonathan Allan.

n = 1 n = 2


Deux bits mineurs: si j'ai bien lu les spécifications, vous avez besoin d'un minimum de 0,05 (et non 0,1) entre les points (effectifs), et nous sommes censés en inclure 3.
DSM

Vous pouvez utiliser x=arange(-60,61)/20pour résoudre les problèmes mis en évidence par DSM au coût de 2 octets. Si vous ajoutez 0jà arangecela, il peut être utilisé pour passer à la plot(x,(-n)**x)sauvegarde 4.
Jonathan Allan

@DSM Ops, fixe.
Ajasja

@JonathanAllan Merci.
Ajasja

Ah je vous ai sauvé 2 au total, vous venez de m'en sauver 1 en changeant en arange(121)!
Jonathan Allan

3

PostScript encapsulé; 232 octets

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

Maintenant, puisque c'est une image vectorielle elle-même ...

entrez la description de l'image ici

entrez la description de l'image ici


Ooh c'est bien
Beta Decay

3

TikZ + PGFPlots , 175 octets

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

Compilez avec, par exemple , latexmk -cd -f -pdf in.texpour une sortie pdf. Lors de la compilation, l'utilisateur est invité àn .

Exemples de sorties (converties en png) pour n = 1 et n = 2:

n = 1 n = 2


2

Math.JS Grapher , 20 octets

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

Par pure fluke, cet utilitaire graphique est TC (pour la plupart, les boucles infinies le font planter.), Et par nature, sa sortie principale est les graphiques.

Comment ça marche

r(n)=assigne une fonction rqui prend l'argument nà l'expression f(x)=re((-n)^x). re((-n)^x)est à peu près lettre pour lettre la description du défi. Mais cela attribue la fonctionf(x) à cela, que le grapher affiche implicitement sous forme de graphique linéaire.

Comment le tester

Vous pouvez utiliser ce site, y insérer cette fonction, puis l'appeler avec r(input).

Sortie

Sortie


2

J , 37 36 octets

Merci à mon collègue Marshall pour ses conseils. -2 merci à FrownyFrog.

Fonction de préfixe tacite anonyme.

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

Fenêtre de tracé

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

Je pense que c'est 20%~i:@60possible i:@3j120.
FrownyFrog

@FrownyFrog Correct. Merci.
Adám

1

Dyalog APL, 41 octets

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

Comment ça marche:

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

La commande de l' utilisateur ]chart, dans ce cas, prend deux arguments vectoriels, xet yet trace les graphiques:

n=1n = 1

n=2n = 2


0

SmileBASIC, 82 octets

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

Le graphique remplit tout l'écran, même lorsque N est inférieur à 1.

Lorsque N est supérieur à 1, vous pouvez mettre Y à l'échelle entre -1 et 1 en le divisant par n^3. Je fais déjà n^x, et n^x / n^3peut être simplifié n^(x-3). Cependant, lorsque N est inférieur à 1, je dois n^-3plutôt diviser Y par . C'est équivalent à n^(x+3).

Je peux utiliser n^(x-3*sign(n-1))pour utiliser -3si n>1et +3sin<1

Images à venir


0

Excel VBA, 133 octets

Script de fenêtre immédiate qui prend des entrées [A1]et des sorties d'un Chartobjet vers l' Sheet1objet.

[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

Version de Subroutine complète. Les E / S sont inchangées.

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

Sortie

n=1

Graphique de sortie n = 1

n=3

Graphique de sortie n = 3


0

Julia 0.6 avec Plots.jl, 46 octets

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

Parcelle GR

Cela nécessitait une représentation de Julia!

Pas grand-chose à jouer au golf ici, sauf (ab) en utilisant la surcharge d'opérateur pour économiser des octets sur la définition de la fonction et en utilisant 0im-npour rendre le numéro d'entrée complexe où j'aurais pu habituellement l'utiliser Complex(n). Cela est nécessaire car dans Julia, pour des raisons de stabilité de type , l' ^opérateur renvoie des résultats complexes uniquement lorsque l'entrée est Complexe elle-même. Donc, ici, nous en faisons un nombre complexe en ajoutant0im ie. 0i.

Une chose intéressante à propos du package Plots.jl est qu'il choisit automatiquement le backend à utiliser en fonction des packages de traçage que vous avez installés et d'où vous exécutez la plotcommande. Le tracé ci-dessus a été créé avec le backend GR , mais si je ne l'avais pas installé (ou si j'avais explicitement exécuté une plotly()commande comme je l'ai fait pour cela), il aurait utilisé le backend Plotly plus interactif et produit ceci (qui ressemble à un un peu plus joli IMO):

Tracer complotement

Il y a même un backend UnicodePlots , pour imprimer un tracé dans le terminal (ou l'enregistrer dans un fichier texte) en utilisant des caractères Unicode et des codes de couleur. SE continue de gâcher l'alignement du tracé si j'essaie de le coller directement, alors voici une capture d'écran du terminal:

Tracé UnicodePlots

Re((-n)X)=nXcos(πX)

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

Dang, c'est une utilisation (ab) intelligente des caractères braille.
Zacharý
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.