Le défi est simple: dessiner un arc-en-ciel en aussi peu d'octets que possible
Les spécifications de l'arc-en-ciel sont les suivantes:
- Le chiffre doit être exactement 400 pixels de large et 200 pixels de haut (éventuellement 401x201 si vous voulez un seul pixel central)
- L'anneau rouge doit toucher toutes les bordures de la figure (rayon extérieur = 200 pixels)
- Tous les anneaux doivent avoir la même largeur (10 pixels)
- L'anneau violet doit avoir un rayon intérieur de 130 pixels
- L'arc doit être la moitié supérieure d'un cercle parfait
- Le fond doit être blanc (transparent est également accepté)
- La figure ne doit pas avoir de bordures (exception est faite si la bordure ne peut pas être supprimée)
- Les fonctions intégrées de création d'arc-en-ciel ne sont pas autorisées!
Les couleurs suivantes doivent être utilisées dans l'arc-en-ciel:
C'est le golf de code, donc le code le plus court en octets gagne!
Exemple:
code-golf
graphical-output
Stewie Griffin
la source
la source
Réponses:
MATL ,
1079592878483 octetsCela fonctionne dans la version actuelle (14.0.0) du langage / compilateur.
EDIT (6 juillet 2017) : Vous pouvez l'essayer sur MATL Online! .
Pour vérifier que les couleurs sont correctes, supprimez les cinq derniers caractères (vous devez attendre quelques secondes et faire défiler jusqu'à la fin de la sortie).
Explication
Le code comporte trois étapes principales:
Étape 1 : Générez une matrice 201x401 avec des nombres de
1
à8
. Les pixels avec valeur1
sont le fond (blanc), les pixels avec valeurs2
, ...,8
représentent chaque bande de l'arc-en-ciel.Les coordonnées horizontales varient entre
-200
de200
gauche à droite, et les coordonnées verticales vont de0
de200
bas en haut. Ainsi, l'origine (0,0) est en bas au centre, le coin supérieur gauche est (-200,200), etc.Les différentes bandes de l'arc-en-ciel sont générées en calculant la distance de chaque pixel à l'origine et en les quantifiant par pas de 10 pixels.
Étape 2 : Générez une matrice 8x3 définissant la palette de couleurs. Chaque rangée est l'une des couleurs nécessaires (blanc et les sept couleurs de l'arc-en-ciel). Chaque valeur de la matrice 201x401 précédente sera interprétée comme un index d'une ligne de cette palette de couleurs.
Nous générons la matrice de palette de couleurs en utilisant des valeurs comprises entre 0 et 1 pour chaque composante de couleur, puis en multipliant par 255 et en arrondissant. De cette façon, la plupart des valeurs sont initialement 0 et 1, qui deviendront plus tard 0 et 255. Les valeurs intermédiaires sont codées comme des valeurs comprises entre 0 et 1 avec 2 ou 3 décimales, choisies de sorte que lorsqu'elles sont multipliées et arrondies, elles donnent la valeur exacte souhaitée.
Étape 3 : Affichez l'image avec cette palette de couleurs.
la source
Piet , 838 codels, plusieurs milliers de pixels
Quelqu'un devait le faire:
Si vous enregistrez cette image, vous pouvez l' essayer en ligne !
Le programme Piet réel n'est que les 125 premiers pixels, que j'ai créés à l'aide d'un programme Python que j'ai écrit.
Modifier cela a vraiment blessé ma vision, je trébucherai pendant des jours!
Cela génère l'image au format SVG, car SVG est vraiment (à mon avis) le moyen le plus simple de le faire. J'ai volé sans vergogne le code SVG de Doorknob. Les sorties:
eh bien, c'est vraiment:
Bonne chance en battant cette réponse, non-utilisateurs d'Esolang!
la source
Pyth,
150149128 octetsSorties en SVG:
Merci à @MamaFunRoll pour 16 octets et @PatrickRoberts pour 6 de plus!
la source
</svg>
balise de fin .red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff
pour la liste des couleurs et de prendre des guillemets simples au large de toutes les valeurs de paramètres qui ne sont pas des espaces dans les (cx
,cy
,r
etfill
) , mais assurez - vous de laisser un espace entre la valeur de remplissage et de la/
sorte que la couleur ne soit pas mal interprétée . Retirez également le</svg>
comme suggéré ci-dessus.red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff
. De plus, si vous remplacez les espaces par des virgules dans le,viewBox
vous pouvez également supprimer les guillemets simples pour ce paramètre.Minecraft 1.10 (presque), 2677 caractères à commande unique , 868 blytes
Eh bien, j'ai choisi une langue verbeuse.
Créez un nouveau monde Superflat, collez ce désordre dans un bloc de commandes Impulse, définissez votre distance de rendu assez élevée et exécutez-le. Brisez le support d'armure lorsque votre ordinateur cesse de prendre du retard.
Le résultat est de 400 blocs de diamètre et 200 blocs de hauteur, comme demandé.
J'ai utilisé l'un des générateurs de commandes de MrGarretto pour tout emballer ensemble, puis j'ai modifié le résultat un peu pour économiser quelques octets supplémentaires. Voici l'apport:
C'est un total de 15 1,9+ blocs de commandes et 838 octets, donc 15 * 2 + 838 = 868 blytes .
Voici la (presque) partie, il manque un coin et un bord. Logiquement, cela ne devrait pas - Bug Minecraft? Ce serait exactement 400x200 blocs sans ça. Je ne peux pas faire grand chose.
la source
Mathematica
152144126 octetsMerci @CatsAreFluffy d'avoir rasé 8 octets et @njpipeorgan pour 18 autres :)
la source
#
vs#[[1]]
,#2
vs#[[2]]
, et@@@
contre/@
.Thread
au lieu deTranspose
.Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
enregistre encore 18 octets, mais l'idée est la même.vim,
165142139Yeesh, c'est maladroit. Il doit y avoir des améliorations qui peuvent être apportées.
Sorties en SVG, comme ma réponse Pyth .
Merci à @MyHamDJ d' avoir rasé 3 octets!
la source
kv3G:norm A'/><cr>
<circle cx...
chaîne sur la ligne 2 la première fois, plutôt que de taper toutes les couleurs puis de les saisir ensuite.HTML + SVG + ES6, 169
la source
height=200
etcx=200 cy=200 r=${--r}0
au lieu deviewBox='0 0 40 20'
. Cela devrait économiser 7 octets..replace
méthode ...r-=1
dans le golf de code ...Rubis avec chaussures, 155 octets
Exemple de sortie:
la source
JavaScript (ES6),
171158 octetsCrédit à @ edc65 pour l'idée de convertir
à
Cela peut sembler plus long, mais la quantité d'octets enregistrés lors de la compression du tableau en une chaîne vaut bien la conversion. (Il enregistre 13 octets dans ce cas)
Démo
la source
HTML (162) + CSS (146)
HTML (224) + CSS (128)
la source
SpecBAS -
318254 octetsSi nous dessinons des arcs-en-ciel, cela semble être un bon endroit pour utiliser le successeur de ZX Spectrum BASIC.
La ligne 2 configure la palette pour les valeurs RVB spécifiques nécessaires (et n'aide probablement pas le nombre d'octets) car les couleurs Spectrum standard ne correspondent pas.
La
DRAW
commande peut prendre un paramètre supplémentaire qui lui fait tourner d'un certain nombre dedegrésradians entre x1, y1 et x2, y2. Enfin, il trouve un espace dans les demi-cercles qui viennent d'être dessinés et l'inondation se remplit de la couleur actuelle.la source
Tcl / Tk , 263 octets
Hélas, ce genre de question favorise toujours certains langages ésotériques ... Cela dit, Tcl / Tk rend vraiment toutes les opérations graphiques faciles, courtes et lisibles .
Cela dit, j'ai sacrifié la lisibilité pour réduire les options à aussi peu de caractères que possible. Je n'imagine pas que croquer la liste des couleurs aidera beaucoup par rapport au code pour le déballer ...
A titre de comparaison, voici le code non croqué (380 octets):
le
after
commande était malheureusement nécessaire car aucun défilement (de l'origine des coordonnées du canevas) ne peut être effectué avant que la fenêtre ne soit mappée à l'écran.En outre, le code croqué dessine en fait un plein arc-en-ciel (en utilisant un cercle au lieu d'un arc) et repose uniquement sur l'écrêtage de fenêtre ...
Quoi qu'il en soit, j'espère que vous apprécierez tous. : O)
la source
lmap
au lieu deforeach
raccourcir.pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
create oval
; fait non golfécreate arc
. Pouvez-vous s'il vous plaît expliquer?LaTeX, 290 octets
Essayez-le ici .
Explications
la source
Java, 354 octets
Utilise simplement la
Graphics2D
classe pour dessiner 7 arcs, avec un tableau pour stocker les couleurs. Je suis sûr qu'il peut encore être amélioré.Code non golfé:
la source
0x0000ff
pourriez être juste0xff
ou même juste255
, pareil avec l'0x00ff00
être0xff00
.0xff0000
pourrait être255<<16
de sauvegarder un autre octet. Votre boucle pourrait consister à enregistrer quelques octets supplémentaires. Vous pouvez enregistrer un octet de plus en ajoutant un,q
à votreint
déclaration. Il faudrait le faire auint c[]=
lieu deint[] c
siq
est unint
et non unint[]
. Cela vous permet d'ajouter unq=390-v*20;
à votre boucle. et remplacez le390-v*20
par un q. C'est beaucoup de travail pour un octet, mais un octet est un octet, non?!drawOval
et simplement rendre la moitié supérieure de l'image ... pourrait être un peu plus cher ...void r()throws Exception{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));for(int c[]={255<<16,16744192,16776960,65280,255,4915330,9371903},v=0,t;v<7;g.drawArc(t=v*10+5,t,t=390-v++*20,t,0,360))g.setColor(new Color(c[v]));ImageIO.write(i,"PNG",new File("a.png"));}}
( 325 octets )Bubblegum ,
139octetsHexdump:
Malheureusement, c'est plus court que ma réponse Pyth . :(
Génère le même fichier SVG.
la source
CSS,
244242240 octetsEdit: enregistré 2 octets en contournant un bug dans Chrome. Sauvegardé 2 octets supplémentaires grâce à @TrangOul.
Remarque: l'extrait utilise un en
<div>
raison des limitations des extraits de pile.Afficher l'extrait de code
la source
Javascript
271251la source
{ ... }
à l'intérieur de la dernière section for, séparée par,
. par exemplefor(i=0;i<8;x.beginPath(),x.arg(...etc...))
. Vous pouvez probablement aussi utiliserslice
/splice
of substr si je ne me trompe pas. Il peut également être plus court de faire utiliser les <canvas>.innerHTML
. Ou même une réponse HTML + JS et donnez le <canvas> et l'id dec
, puis il devrait automatiquement être ajouté en tant que variable globale JSsubstr
a l'avantage ici en ce que son deuxième paramètre est une longueur, pas un décalage. En ce qui concerne le golf,document.body
semble permettre une économie considérable.C,
220217213 octetsLa sortie est PPM (le type binaire).
Edit: économisé quelques octets grâce à @tucuxi.
Edit 2: Code réarrangé pour économiser encore plus.
la source
i;s;t;main()
->s;t;main(i)
, et un autre en plaçant une partie de votre corps de boucle for dans le for:;)code1,code2;
->;code2)code1;
(enregistré une virgule!).Google Blockly , 48 blocs, 75 octets
Cliquez sur le gif ci-dessous pour naviguer vers la solution, où vous pouvez voir de plus près comment cela fonctionne.
Quant à l'explication, je pense qu'une image vaut mille mots, et donc un gif vaut mille images.
lien vers un grand gif lisible
Remarque: je ne sais pas comment compter dans Blockly, j'ai donc compté chaque bloc comme 1 octet et chaque variable de manière régulière, de sorte que
0
== 1 octet,530
== 3 octets,Arial
== 5 octets etbold
== 4 octets.J'ai compté le caractère spécial que j'ai utilisé pour couper l'arc-en-ciel comme 2 octets. Veuillez signaler toute erreur ou suggestion du nombre d'octets dans les commentaires
la source
Postscript (87 octets)
Vidage hexadécimal:
Sortie:
la source
HTML + CSS,
310307 octetsBalisage invalide super-duper (peut ou peut ne pas sembler correct dans votre navigateur). Je voulais juste voir si c'était même possible.
la source
white
pourrait aussi être raccourcies) bien sûr - je ne sais pas pourquoi je n'ai pas vu ça. J'ai essayébgcolor
avant de poster, mais malheureusement, il n'est plus pris en charge (ici dans Chrome de toute façon)PHP, 285 octets
Les sorties:
la source
header()
appel et même la balise PHP d'ouverture. Sous Linux, le plus simple est d'exécuter àphp -r '$a=imagecreate(400,200);const b=255;for($c=[b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b];$i<9;)imagefilledellipse($a,200,200,$r=420-$i*20,$r,imagecolorallocate($a,$c[$j=$i++*3],$c[$j+1],$c[$j+2]));imagepng($a);' | display
partir de l'invite de commande et de le compter comme 227 caractères. (En utilisant PHP 5.6.11.)Bash + ImageMagick,
159125 caractèresExemple de sortie:
la source
Traitement,
196186181179169163 octets10 octets enregistrés grâce à Kritixi Lithos
... et 6 octets supplémentaires grâce à dzaima
la source
for(int i=0;i<8;i++)
enfor(int i=0;i++<8;)
ou similairesize()
background(-1)
est un octet plus court quebackground(255)
, et vous pouvez changer le255
tableauc
dans-1
pour enregistrer un autre octetR,
184170 octetsFaire une image avec des dimensions de pixels fixes s'avère étonnamment délicat avec R, dont les fonctions de traçage sont principalement destinées aux statisticiens. En particulier, R laisse un espace supplémentaire pour les étiquettes et les axes de coordonnées, sauf si vous définissez explicitement des marges de largeur nulle en appelant
par
.D'un autre côté, certaines des couleurs requises (spécifiquement le rouge, le jaune et le bleu) se trouvent dans la palette par défaut et peuvent être référencées simplement par des indices entiers.
la source
Forth Salon Haiku (184 octets)
Je ne peux pas satisfaire les contraintes de dimension avec ce format, mais j'ai pensé qu'il valait quand même la peine d'être partagé.
la source
Excel VBA,
213202196192172 octetsCode
Fonction de fenêtre immédiate VBE anonyme qui ne prend aucune entrée et génère un arc-en-ciel, sous forme d'image vectorielle, vers l'objet feuilles (1)
Version du sous-programme
-11 octets pour supprimer l'
.Adjustments(3)=3/80
appel et ajouter un 8ème arc blanc-6 octets pour utiliser
-1
plus&HFFFFFF
-3 octets pour utiliser
Sheet1
plusSheets(1)
-6 octets pour convertir une
with
instruction enset
instruction-14 octets pour la conversion de la
Sub
fonction VBE anonymeSortie
la source
DIV Games Studio (184 octets)
Pas le plus court mais assez simple. Utilise la palette par défaut DIV
Explication
Définir le démarrage du programme (nommé "r" pour économiser de l'espace)
configuration de la recherche de palette
Code de programme BEGIN
Réglez le mode vidéo sur 400 200
boucle x (variable prédéfinie) de -80 (dont bg hack) à 80 (7 couleurs + centre blanc)
définir les contraintes d'élipse
draw elipse - à la première itération, cela dessine un cercle plus grand que l'écran en blanc complet (index -8)
dessin (type (5 = élipse remplie), couleur, opacité, x0, y0, x1, y1)
une fois que le premier est terminé, augmentez x jusqu'à zéro pour commencer à dessiner une bande rouge
fin pour boucle
boucle infinie, écran de dessin.
fin (correspond à COMMENCER en haut du programme)
la source
Perl, 175 + 1 = 176 octets
la source
PHP, 190 octets
Exécutez-le comme ceci:
Fonctionne également en théorie à 179 octets (mais l'image semble un peu foirée, mauvais GD):
Ce n'est pas non plus une image parfaite, mais bien meilleure que la précédente (et @ 166 octets):
la source