Le but de ce code golf est de dessiner un polygone régulier (un de même longueur de côté) étant donné le nombre de côtés et le rayon (distance du centre au sommet).
- Le nombre de côtés et le rayon peuvent être saisis via un fichier, STDIN ou simplement une ancienne variable simple. Utilisez ce qui est plus court dans votre langue.
- -25% du nombre total de caractères / octets si l'image est réellement dessinée au lieu de l'art ASCII.
Réponses:
LOGO 37-25% = 27,75 (avec variables)
LOGO 49-25% = 36,75 (en fonction)
Triangle
Appelé avec des variables
Utilisé en fonction
P 100 3
Carré
Appelé avec des variables
Utilisé en fonction
P 100 4
Pentagone
Appelé avec des variables
Utilisé en fonction
P 100 5
Décagone
Appelé avec des variables
Utilisé en fonction
P 100 10
Cercle
Appelé avec des variables
Utilisé en fonction
P 100 360
la source
Mathematica, 40 - 25% = 30
la source
Graphics
.Graphics@RegularPolygon
pas autorisé?Java 8:
533322 - 25% = 241,5Eh bien, c'est Java: / Trace simplement des lignes, point à point. Devrait fonctionner pour tout polygone de taille arbitraire. Coupez-le un peu de sa taille d'origine. Un énorme crédit à Vulcan (dans les commentaires) pour la leçon de golf.
Sauts de ligne:
L'entrée est des arguments [rayon] [côtés]:
Sortie:
la source
java.awt.image.*
au lieu dejava.awt.image.BufferedImage
Short.valueOf
au lieu deInteger.valueOf
pour enregistrer quatre octets, car l'entrée ne doit jamais dépasser la plage de courts-circuits. 2)y[]=x.clone()
enregistre un octet de plusy[]=new int[s]
. 3) Utilisez le obsolètef.show();
au lieu def.setVisible(1>0);
pour enregistrer neuf octets supplémentaires. 4) Utilisez6.28
plutôtMath.PI*2
que, comme l'estimation est suffisamment précise à cet effet, économisez trois octets. 5) DéclarezGraphics g
au lieu deGraphics2D g
lors de la création de l'instance graphique pour enregistrer deux octets.BufferedImage
etGraphics
tout à fait et en jetant toutpaint()
). Cela a changé la couleur de l'image, même si elle semble toujours bonne IMO. Merci de m'avoirFrame
tant que variable locale, en supprimant l'd
entier et en utilisant / abusant de la boucle for pour enregistrer quelques caractères, principalement des points-virgules. Voici également une version avec des espaces .drawPolygon
au lieu dedrawLine
. Version espace blanc .TeX / TikZ (60 - 80,25)
Fichier
polygon.tex
:(80 octets)
Le rayon et le nombre de côtés sont fournis sous forme de variables / macros
\r
et\n
. N'importe quelle unité TeX peut être donnée pour le rayon. Sans unité, l'unité par défautcm
est utilisée. Exemples:(16 octets sans valeurs)
Si le numéro de page doit être supprimé, cela peut être fait par
(11 octets)
Exemples de génération de fichiers PDF:
But:
Il n'est pas clair de savoir ce qui doit être compté. La plage de score serait:
Le code de base est de 80 octets moins 25% = 60
Ou tout compris (définitions des variables d'entrée, pas de numéro de page): (80 + 16 + 11) moins 25% = 80,25
Si la connexion entre le premier et le dernier point n'a pas besoin d'être fluide, elle
--cycle
pourrait être supprimée, économisant 7 octets.la source
Géogebra , 42-25 % = 31,5 octets
Si vous comptez en caractères au lieu d'octets, ce serait 41 - 25% = 30,75 caractères.
(Autrement dit, si vous considérez Geogebra comme une langue ...)
Suppose que le rayon est stocké dans la variable
r
et le nombre de côtés stockés dans la variables
.Celui-ci utilise le théorème de cosinus c 2 = a 2 + b 2 - 2 ab cos C pour calculer la longueur du côté à partir du rayon donné.
Exemple de sortie pour
s
= 7,r
= 5la source
C:
229180(r est le rayon du cercle)
Veuillez exécuter dans le terminal ANSI
Éditer:
compiler:
la source
#include
s. En outre, vous pouvez déclarerv
comme extérieur globalmain
et déclareru
comme paramètre demain
, alors vous n'avez pas besoinint
(c'est-à-direv;main(u){//...
). Enfin, vous pouvez changer la dernièrefor
boucle enfor(j=0;j<s;)/*...*/x=j++-s/2.,//...
C, 359 caractères
Ma première tentative de golf. Au moins, il bat la solution Java ;-)
non golfé:
Et c'est le seul programme qui génère le polygone en ASCII au lieu de le dessiner. En raison de cela et de certains problèmes d'arrondi en virgule flottante, la sortie n'est pas particulièrement jolie (les caractères ASCII ne sont pas aussi hauts que larges).
la source
int
peut être supprimé car ils sont supposés provenirint
du compilateur. En outre, la dernièrefor
boucle peut être remplacée parfor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
if(i<0)
pourrait être changé enif(i)
. Ce qui n'est toujours nécessaire que dans une seule itération, mais n'a pas pu trouver un moyen efficace de le supprimer :(Mathematica, 54 * 75% = 40,5
Je ne pense même pas qu'il y ait un point pour une version non golfée. Il ne contiendrait que plus d'espace.
Attend le rayon en variable
r
et le nombre de côtés en variablen
. Le rayon est un peu vide de sens sans afficher les axes, car Mathematica met à l'échelle toutes les images pour les adapter.Exemple d'utilisation:
la source
Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
Array
.HTML / JavaScript:
215 - 25% = 161,25, 212 - 25% = 159Version non golfée:
la source
i=S=5;
etfor(;i-->0;)
.i-->0
partie? C'est la même chose quei-- > 0
. Certaines personnes l'appellent également l' opérateur flèche ou l' opérateur va à ;)c=document.currentScript.parentNode;
et remplacés<canvas>
par<canvas id="c">
Post-scriptum 156 - 25% = 117
Passez le rayon, le nombre de côtés et le point central sur la ligne de commande
ou ajouter à la source
Déplacer vers le centre, agrandir le rayon, passer à (1,0); puis répétez n fois: faites une rotation de 360 / n, tracez la ligne jusqu'à (1,0); dessinez la dernière ligne, caressez et émettez la page.
la source
Sauge , 44-25% = 33
Suppose que le nombre de côtés est stocké dans la
s
variable et le rayon est stocké dans lar
variable.Exemple de sortie:
s
= 5,r
= 3s
= 5,r
= 6s
= 12,r
= 5la source
regular_polygon
fonction génère toujours des polygones avec le premier sommet à (0,1). Un correctif consisterait à ne pas afficher les axes avec 7 octets supplémentaires (,axes=0
aprèsfigsize=r
)bc + ImageMagick + xview + bash, 104,25 (139 octets - 25%)
Ce défi serait incomplet sans une réponse ImageMagick ...
Par exemple,
./polygon.sh 8 100
produit cette image:la source
JavaScript 584 (867 non golfé)
Ce code utilise N Racines complexes d'unité et traduit les angles en X, Y points. L'origine est ensuite déplacée au centre du canevas.
Golfé
Exemple de sortie:
Non golfé
Ce code nécessite un élément canvas HTML5, c est un objet canvas, r est un rayon et n est un # de côtés.
la source
PHP 140 - 25% = 105
Suppose deux variables prédéfinies:
$p
le nombre de points et$r
le rayon en pixels. Alternativement, on pourrait ajouter à la placelist(,$r,$p)=$argv;
et utiliser des arguments de ligne de commande. La sortie sera un png, qui devrait être dirigé vers un fichier.Production
$r=100; $p=5;
$r=100; $p=6;
$r=100; $p=7;
$r=100; $p=50;
la source
TI-80 BASIC, 25 octets - 25% = 18,75
Suppose que tous les paramètres sont définis sur les valeurs par défaut. Exécutez le programme comme
5:PRGM_POLYGON
(pour un pentagone)Cela fonctionne en dessinant un cercle avec un très petit nombre d'étapes. Par exemple, un pentagone aurait des pas de 2π / 5 radians.
Les paramètres de la fenêtre sont assez bons par défaut, et
TMIN
etTMAX
sont fixés à0
et2π
, donc tout ce que nous devons changer estTSTEP
.la source
SmileBASIC 3,
183159-25% = 119.25 octetsPrend les côtés et le rayon
INPUT
, calcule et stocke les points, puis les dessine à l'aide deGLINE
.J'ai l'impression que ça pourrait être plus court mais c'est comme 1h du matin, peu importe.Suppose un environnement d'affichage propre et par défaut, de sorte que vous pourriez avoir besoin de l'ACLS
exécuter à partir de DIRECT.la source
OpenSCAD: 31 moins 25% = 23,25
Premier post ici! Je sais que je suis en retard à la fête, mais cela semblait être une bonne question pour commencer. Appelez en utilisant
p(n,r)
.la source
ActionScript 1, Flash Player 6: 92 - 25% = 69
la source
C # dans LINQPAD
Le crédit pour la partie mathématique revient aux Geobits (j'espère que cela ne vous dérange pas!) Avec la réponse Java. Je suis sans espoir en maths :)
J'ai fait cela dans LINQPAD car il a une fenêtre de sortie intégrée. Donc, essentiellement, vous pouvez faire glisser et déposer ce qui suit et il dessinera le polygone. Passez-le simplement sur 'Programme C #' et importez la bibliothèque System.Drawing dans les propriétés de la requête.
la source
Matlab 58 octets - 25% = 43,5
Je n'ai vu aucune solution Matlab, alors en voici une qui est assez simple:
Vous pouvez raser certains octets si r et n sont déjà dans l'espace de travail.
Exemple d'appel:
la source
Python 2, 222 octets
Vérifie si un pixel se trouve à l'intérieur de tous les hyperplans (lignes) du polygone. Le rayon est touché car en fait l'apothème est utilisé.
la source
Mathematica 27 (= 36 - 25%)
Lorsque nous soumettons du code Mathematica, nous oublions souvent les nouvelles fonctions qui continuent de s'intégrer dans le langage, le vocabulaire actuel du langage regroupant environ 5000 fonctions de base . Un vocabulaire linguistique étendu et en expansion est très pratique pour le golf de code. Les CirclePoints ont été introduits dans la version actuelle 11.X. Un exemple spécifique du rayon 5 à 7 côtés est:
Il vous suffit également de saisir le paramètre d'angle pour contrôler l'orientation de votre polygone:
la source
Python 2, 74 octets - 25% = 55,5
L'entrée est dans les variables
r,n
. S'il était inclus dans le décompte, il le seraitr,n=input()
pour 12 octets de plus.Essayez-le en ligne - (utilise un code différent car il
exec
n'est pas implémenté dans l'interpréteur en ligne)la source
SmileBASIC,
8575 - 25% = 56,25 octetsLes variables S et R sont utilisées pour l'entrée.
Expliqué:
Les côtés sont dessinés en utilisant la couleur
-I
, qui est généralement proche de -1 (& HFFFFFFFF blanc) (sauf quandI
est 0, quand il est transparent).Vous pouvez également dessiner un polygone rempli en utilisant
GTRI N,M,X,Y,R,R,-I
au lieu deGLINE...
la source
Tikz, 199 octets
Cette solution utilise la bibliothèque tikz
shapes.geometric
.Voici à quoi ressemble un polygone avec des
5
côtés et un rayon8in
lorsqu'il est vu dans evince .la source