Ecrivez un programme ou une fonction qui prend un entier positif N et génère une image N × N pixels du logo "G" de Google selon cette * construction:
Par exemple, si N est 400, vous devez générer un logo de 400 × 400 pixels, avec les dimensions et les couleurs correctes:
Il devrait sembler précis indépendamment de la taille ou de la taille du N. par exemple, voici N = 13:
Votre code ne devrait pas avoir besoin de se connecter à Internet. Par exemple, la mise à l'échelle d'un svg hébergé en externe n'est pas autorisée. (Mettre à l'échelle un svg encodé dans votre code conviendrait cependant.)
L'anti-aliasing peut être utilisé ou non. C'est à vous.
Notez que la barre horizontale du "G" ne s'étend pas jusqu'au bord droit de l'image. Le cercle se courbe normalement vers l'intérieur sur le bord droit avant d'être coupé.
Le code le plus court en octets gagne.
* La construction du logo a été simplifiée pour ce défi. La construction correcte peut être vue ici et ici .
la source
.svg
et à le coder dans notre solution, ou devons-nous le créer à l’origine?Réponses:
Mathematica,
229226225224221206169 octetsMerci @MartinEnder pour 1 octet, @ChipHurst pour 37 octets!
Quel défi amusant!
Explication
Itérer de 1 à 4 ...
Convertissez les codes hexadécimaux de couleur en
RGBColor
objets afin qu'ils puissent être appliqués au logo de Google. Changer la palette de couleurs à la<input>
couleur th.Créez un rectangle plein (cuboïde 2D), dont les angles diagonaux sont (0, -1) et (sqrt (24), 1).
Générez quatre quarts remplis
Annulus
, centrés à l'origine, de rayon intérieur 3 et de rayon extérieur 5. Ne tracez pas au-delàArcCsc@5
(là où se termine le segment bleu).Créez un graphique de taille N x N, de x = -5 à x = 5 (supprime le remplissage).
Les sorties
N = 10
N = 100
N = 200
N = 10000 (cliquez sur l'image pour la pleine résolution)
la source
C (Windows), 311 octets
Prend "N" comme argument de ligne de commande et dessine directement à l'écran.
Non-golfé:
la source
0xF48542
et0xFFFFFF
en nombres entiers.gcc g.c -lgdi32
mingw.-1>>8
peut aussi travaillerPython 2,
244220 octetsen utilisant la transformation de Martin Rosenau sur le plan [-1,1] ^ 2 et le jeu mineur comme l’enlèvement
0.
ou les supportsExplication:
Sortie en PPM binaire, utilisation:
Exemples
solution précédente de 244 octets
Version beta non-gérée avant élimination si / sinon:
la source
1for
marche.1for
sortie de l'échantillon @Cyoce ajoutée0.x
peuvent être réduites à.x
:)JavaScript (ES6),
408 ... 321317 octets384 383 371 367 359 327 316 308304 octets de JavaScript +2413 octets pour l'élément canvas1 octet enregistré en tirant dans le sens contraire des aiguilles d'une montre.
11 octets enregistrés sur le code HTML grâce à Conor O'Brien.
12 octets enregistrés en utilisant
with
bloc grâce à Prinzhorn.4 octets enregistrés avec une meilleure utilisation de
z=q-y/2
.8 octets sauvés en utilisant
parentNode
etbackground
grâce à Alexis Tyler.32 octets sauvegardés en utilisant un dessin plus précis de l'arc bleu / barre donc je n'ai plus besoin d'en effacer une partie.
11 octets enregistrés en définissant canvas css à la place de son parentNode grâce à Tejas Kale.
8 octets enregistrés en utilisant
with
etmap
avec une seule instruction, `2d` au lieu de('2d')
,n/5
au lieu de.2*n
et en initialisant l’arrière-plan du fichierprompt(...)
.4 octets enregistrés en remplacement
Math.PI/4
de.7854
ce qui semble assez précis grâce à RobAu.Explication:
Les dimensions de la zone de travail sont définies avec la saisie de l'utilisateur et l'arrière-plan est défini sur blanc.
q
est initialisé.Pour chaque couleur, dessine la partie cercle, avec quelques ajustements pour la dernière (bleue). La barre est dessinée pour chaque couleur au même endroit avec les mêmes dimensions, de sorte que seule la dernière (bleue) est visible.
la source
<canvas id=d></canvas>
devrait fonctionner et<canvas id=d>
pourrait fonctionner.d.style
fonctionne aussi. Ce qui permet(f = d.style).width = f.height = n = prompt() + 'px';
.785398
au lieu deMath.PI/4
supprimer 2 octets (ou plus si moins de précision estBBC BASIC, 177 octets
Téléchargez l'interprète à l' adresse http://www.bbcbasic.co.uk/bbcwin/download.html
BBC BASIC utilise 2 unités = 1 pixel, nous traçons donc un G d'
n
unités de rayon (= n / 2 pixels) au centren,n
.L'idée est de tracer une série de lignes radiales, en changeant de couleur selon les besoins. Il a été constaté qu'il y avait de petits espaces entre les lignes en raison de la troncature des nombres lors de la conversion en pixels, de sorte que des triangles minces sont tracés à la place.
Une fois le balayage des lignes terminé, le curseur se trouve dans le coin supérieur droit de la zone bleue. Une seule coordonnée pour le coin opposé en diagonale est donnée pour dessiner un rectangle afin de compléter la forme.
Ungolfed
la source
HTML / JS,
680624 octetsPour obtenir 624 octets, supprimez le dernier
;
, ceci est nécessaire pour l'extrait de code ci-dessous en raison de la façon dont il importe le code HTML. En outre, Firefox semble ne pas prendre en chargeimage-rendering: pixelated
et a-moz-crisp-edges
plutôt besoin (merci @alldayremix !), Ce qui rend une solution Firefox +7, mais cela fonctionne dans Chrome comme prévu.Utilise JavaScript pour demander
N
et un<style>
bloc pour positionner / colorer les éléments. Utilise des éléments HTML de base, plutôt que d'appliquer des styles à une toile (approche apparemment beaucoup plus courte!). Il s’agit d’une approche remaniée utilisant unedata:
image d’arrière-plan URI au lieu d’éléments colorés. J'ai conservé l'approche précédente ci-dessous au cas où cette nouvelle solution fonctionnerait avec moins de navigateurs.Je pensais que cela allait être beaucoup plus petit que ce n’était au final, mais c’était quand même un exercice intéressant!
La version précédente:
la source
image-rendering: -moz-crisp-edges
au lieu depixelated
. Ajoutera une note à cet effet. J'aime assez le style dégradé! :)Bash with Imagemagick (mais vraiment PostScript),
268255249 octetsDouble la mise à l'échelle à supprimer
setlinewidth
, remplace un facteur d'échelle pardup
et fusionne un espace dans laA
variable (impossible avecC
car$C45
est analysé comme "la variableC45
").Merci à joojaa d’avoir suggéré ces modifications!
Ancienne échelle, 255 octets
Prend N comme argument unique et renvoie o.png.
Postscript Ungolfed for Old Scale
la source
61.2 dup scale
vous pouvez également ajouter un espace en CC=' setrgbcolor 5 5 4 '
et 4 espaces. Si vous aviez conçu cela à demi-échelle, vous pourriez omettre2 setlinewidth
MATLAB,
189184 octetsnon-golfé
la source
Perl 5,
486477476450 (+7 pour le-MImager
drapeau) = 457 octetsJ'ai économisé quelques octets grâce à Dada en utilisant des
new
appels fonctionnels et en supprimant les parens, et en utilisantpop
au lieu de$ARGV[0]
ainsi que le point-virgule final. J'ai économisé un peu plus en mettant cela$n=pop
là où il a été utilisé pour la première fois, et en utilisant la notation Perl 4 avec la'
place de::
.Il nécessite le module Imager , qui doit être installé à partir de CPAN. Prend un entier comme argument de ligne de commande. L'image n'est pas anti-aliasée, donc c'est un peu moche.
Copiez le code ci-dessous dans un fichier g.pl. Nous avons besoin de +7 octets supplémentaires pour le
-MImager
drapeau, mais cela économise quelques octets car nous n'en avons pas besoinuse Imager;
.Voici différentes tailles:
N = 10
N = 100
N = 200
Le code totalement non-golfé est simple.
Ce message avait précédemment le code en forme d’image de sortie. Comme cela est contraire aux règles du code golf, je devais le supprimer. Voir l' historique de révision si vous voulez jeter un coup d'oeil. J'ai utilisé Acme :: EyeDrops pour créer cela, avec une forme que j'ai créée à partir d'une image créée avec le programme lui-même que j'ai converti en art ASCII. Le code que j'avais masqué était déjà joué au golf, ce qui peut être vu en remplaçant le premier
eval
par unprint
.la source
pop
au lieu de$ARGV[0]
.$h=($n=pop)/2
au lieu de$n=pop;...;$h=$n/2
.new Imager::Color"#$_"
au lieu deImager::Color->new("#$_")
. (et vous avez oublié de laisser tomber le dernier point-virgule). Mais encore une fois, ce ne sont que quelques petits détails, votre code est vraiment génial! (Je n'aurais pas pu le faire! Je ne connaissais même pas ceImager
qui est assez pratique!)Imager'Color
avec le délimiteur d'espaces de noms Perl 4 enregistre un autre octet. :)-MImager
est plus courte queuse Imager;
:)$n=pop
dans lesnew
arguments sauve les parens et un pointPHP + SVG, 300 octets
La partie mise à l'échelle est
width=<?=$_GET[w]?>
Sortie pour la valeur 333
la source
"
) des attributs et l'attribut suivant? Par exemple<svg width="333" viewBox="0 0 10 10">
-><svg width="333"viewBox="0 0 10 10">
M 0,5 A 5 5 0 0 1 5,0 V 2 A 3,3 0 0 0 2,5
=>M0,5A5 5 0 0 1 5,0V2A3,3 0 0 0 2,5
echo
instruction, utilisez une chaîne entre guillemets pour autoriser les variables en ligne et supprimer le point-virgule:echo'<use xlink:href="#c"fill="#'.$k.'"transform="rotate($v,5,5)"/>';
=>echo"<use xlink:href='#c'fill='#$k'transform='rotate($v,5,5)'/>"
<rect x=5 y=4 fill=#4285f4 width=4.9 height=2 />
(ici, vous aurez besoin d'un espace avant le/
, cependant.)Logo, 258 octets
... parce que je pense que les logos doivent être créés à l'aide de Logo . Ceci est implémenté en tant que fonction. Je l'ai développé en utilisant l'interprète de logo en ligne de Calormen.com
Au départ, j'ai essayé de dessiner chaque segment et de le peindre, mais cela s'est avéré plus volumineux que prévu. Il y avait beaucoup de mouvements perdus de retour en arrière, etc. Au lieu de cela, j'ai décidé de faire un balayage polaire, en ajustant la couleur en fonction de l'en-tête. La partie la plus difficile du calcul consistait à faire la géométrie de la courbe au sommet du rectangle du G. Vous pouvez couper certaines décimales et avoir moins de précision, mais je voulais que ce soit précis à environ 3 chiffres pour s'adapter aux tailles d'écran typiques.
Golfé
Échantillon
g 200
Ungolfed
la source
JavaScript (ES7),
285258254252251 octetsDemande la largeur du logo (jusqu'à 999) et le dessine dans un canevas, pixel par pixel.
Edit : La version initiale convertissait les coordonnées cartésiennes en coordonnées
(x,y)
polaires(r,a)
, mais nous n'avons pas vraiment besoin de l'angle. Il est plus simple (et nettement plus court) de simplement comparerx
ety
de savoir dans quel trimestre nous nous situons.Edit : Sauvegardé 1 octet grâce à ETHproductions.
JS,
251224220218217 octetsHTML, 34 octets
Version ES6:
258231227225224 + 34 = 258 octetsLargeur maximale recommandée pour l'extrait de code: 190.
la source
<-
et les-->
opérateurs ?? » Je suppose que c'est ce qui se passe lorsque vous réfléchissez pendant 24 heures aux opérateurs hypothétiques pour un langage hypothétique ...: P-->
le début (?) D'un commentaire html s'il est placé entre des<script>
balises dans un fichier html.123 --> comment
jette une erreur dans la console de mon navigateur (Firefox 49), alors que ce--> comment
n'est pas le cas.C #, 276 + 21 = 297 octets
276 octets pour la méthode + 21 octets pour l'importation System.Drawing.
Basé sur l'algorithme de Martin Rosenau. Merci d'avoir fait le difficile en proposant un moyen de construire l'image!
26:
400:
la source
0xFF...
JS /CSS / HTML (+ JS),400 +701644617593 +1739097 121 =714 octets914774754730Utilise des gradients linéaires plutôt que des transformations. Edit: 140 octets enregistrés grâce à @darrylyeo. Sauvegardé 20 octets en utilisant un élément supplémentaire au lieu d'un dégradé. Sauvegardé 24 octets grâce à @DBS. Sauvegardé 16 octets grâce à @Hedi. De l'arrière à l'avant, les différentes couches sont:
a
Le cercle bleub
Un rectangle blanc pour masquer la partie au-dessus de la barrec
Le quart supérieur gauche rouge / jauned
L'octant rouge en haut à droitee
Le quart inférieur gauche jaune / vertf
Le quartier vert / bleu en bas à droiteg
Le cercle blanc intérieurh
La barre bleue horizontalela source
a
,b
,i
,s
, etc. Utilisez*
plutôtdiv
le sélecteur CSS.background
comme un raccourci pourbackground-image
.border-radius
. Par exemplec{border-radius:100% 0 0;
au lieu dec{border-top-left-radius:100%;
Ruby 2.3.1,
376359 octetsUtilisation de la gemme RMagick.
Exemples
50x50
250x250
500x500
1000x1000
Le fichier prend deux paramètres, le premier étant la dimension et le second le nom de fichier dans lequel enregistrer la sortie.
Ungolfed
J'avais initialement commencé à résoudre cela en utilisant oily_png / chunky_png mais cela finirait probablement par être beaucoup trop compliqué comparé à RMagick. La fonction .ellipse de RMagick en a fait un jeu d'enfant et le travail principal a consisté à ajuster les formes / tailles de tout.
Ceci est ma première soumission Code Golf (première réponse SE également) et je me considère seulement comme intermédiaire avec Ruby. Si vous avez des idées sur les améliorations / conseils, n'hésitez pas à les partager!
la source
Python 2,
378373 octetsJe voulais vraiment faire cela en utilisant
turtle
. Pour cela, j'ai dû épousseter mes connaissances en géométrie, en calculant les angles et les longueurs non fournis dans la description du défi.Éditer: supprimé
up()
, car cela supprime le petit éclat de blanc entre le vert et le bleu et donne au cercle intérieur une meilleure apparence. Cela ralentit encore plus le programme.Edit: remplacé
9*n
par2*n
pour faire plus vite. J'ai déterminé que cela créerait encore un cercle lisse.Remarques:
n
si vous supprimezspeed(0)
, que j'ai ajouté uniquement pour la vitesse.circle
croissanceO(n)
, puisqu'il détermine le nombre de côtés du polygone inscrit pour dessiner le cercle.Essayez-le en ligne
Ungolfed: Essayez-le en ligne
Fun fact:
Trinket
est une anagramme deTkinter
, le package graphique de Python et les fondements deturtle
.la source
n
pour moi? Si cela n’a pas l’air sympa, j’aurai peut-être besoin d’y mettre quelquessqrt
s pour être plus précis. J'ai arrondi au millième.PHP + GD,
529449 octetsCela prend un paramètre de chaîne de requête
n
et génère une version PNG du logo de la taille spécifiée.Ungolfed:
N = 13:
N = 200:
la source
imagecolorallocate
; donnez simplement 0xRRGGBB comme couleur aux fonctions de dessin. Un peu plus de golf et il est réduit à 329 octets:,imagefill($i=imagecreatetruecolor($n=$argv[1],$n),0,0,($m=[4359668,3450963,0xfbbc05,0xea4335,0xffffff])[4]);for($j=-11.6;$e=[45,135,225,315][$k];$j=$e)($a=imagefilledarc)($i,$h=$n/2,$h,$n,$n,$j,$e,$m[$k++],0);$a($i,$h,$h,$n*.6,$n*.6,0,0,$m[4],0);imagefilledrectangle($i,$h,$h-$n*.1,$h+$h*.98,$h+$h*.2,$m[0]);imagepng($i,"g.png");
exécuter avec-r
, prend les entrées de la ligne de commande et les sorties àg.png
.[$k
doit être[+$k
. Mais celui-ci devrait également fonctionner:imagefill($i=imagecreatetruecolor($n=$argv[1],$n),0,0,$w=2**24-1);$j=-11.6;foreach([$b=4359668,3450963,0xfbbc05,0xea4335]as$c)($a=imagefilledarc)($i,$h=$n/2,$h,$n,$n,$j,$j=45+90*$k++,$c,0);$a($i,$h,$h,$p=$n*.6,$p,0,0,$w,0);imagefilledrectangle($i,$h,$n*.4,$n*.99,$p,$b);imagepng($i,"g.png");
(291 octets)imagecolorallocate
. Je mettrai à jour ma réponse avec votre code. Mais avez-vous besoin de générer un nom de fichier? Ne pouvez-vous pas simplement laisser le nom de fichierimagepng
dedans et le faire sortir vers stdout?Java, 568 octets
Ce n’est pas la langue la plus forte pour le golf, mais voici ma tentative la plus sérieuse:
Usage:
Version sans golf - L'idée de base est de travailler dans le système de coordonnées u, v [−0,5, 0,5] et de calculer la distance et l'angle de chaque pixel à partir du centre de l'image:
Mon implémentation calcule et dessine les pixels bruts. Il est possible de créer une implémentation alternative utilisant des routines graphiques de haut niveau telles que Graphics2D et Arc2D pour effectuer le dessin, en particulier avec l'anti-aliasing.
la source
Go, 379 octets
La fonction
f
prend un seulint
argument (le facteur d'échelle) et génère une image SVG mise à l'échelle de manière appropriée.Essayez-le en ligne sur Ideone.
Exemple de sortie:
Il semble faux d’apaiser nos seigneurs Google dans n’importe quel langage de programmation, sauf le leur.
la source
CJam, 141
Essayez-le en ligne
Sort l'image en format ASCII ppm.
Pour une version ASCII-art plus agréable à regarder dans le navigateur, essayez ce code . Cela aide aussi à visualiser l'algorithme.
Explication:
la source
JavaScript (ES6) (+ SVG), 293 octets, non en concurrence
Malheureusement, la jointure de ligne ronde n’est pas tout à fait l’effet demandé, mais elle est assez proche.
la source
FreeMarker + HTML / CSS, 46 + 468 = 514 octets
HTML:
CSS:
En supposant que le processeur FreeMarker soit exécuté avec un
n
jeu de variables représentant l'entrée.Explication des nombres magiques:
Tout est basé sur un wrapper 10x10px, puis redimensionné par
n/10
.JSFiddle Ungolfed
la source
transform:scale(n)
partransform:scale(<?=$_GET[n])?>
(PHP). En javascript, vous pouvez ajouter la partie CSS au style Element343 octets de Haskell
Explication
la source
0x7C
/124
/|
), auquel cas il s'agirait de 338 septets de Haskell . Mais compte tenu de la façon dont la norme de stockage des données à 8 bits par octet est devenue au cours des deux dernières décennies, je pense que le terme «octets» est suffisamment spécifique pour ne pas vaincre le cheval mort.SAS -
590536521 octetsCeci utilise la fonctionnalité d' annotation GTL . L'entrée est spécifiée dans une variable macro sur la première ligne. Pour quelques octets supplémentaires, vous pouvez définir le tout en tant que macro. Il reste encore en dessous de Java et de quelques réponses HTML, même si vous devez définir un modèle de graphe null pour pouvoir tout tracer!
J'ai laissé des sauts de ligne pour un minimum de lisibilité, mais je ne compte pas ceux-ci dans le total car cela fonctionne sans eux.
Edit: supprimez quelques octets de plus via l’utilisation de vars de macro, les paramètres par défaut et le choix des opérateurs.
Edit 2: s'est débarrassé des
do-end
blocs pour laif-then-else
logique et cela fonctionne toujours - je ne comprends pas tout à fait comment. De plus, j'ai découvert laeuclid
fonction!la source
SCSS - 415 octets
Prend les entrées au fur
$N: 100px;
et à mesure<div id="logo"></div>
, ne sachant pas si elles doivent compter dans le total, bien que ...Démo sur JSFiddle
la source
Haskell avec le package JuicyPixels , 306 octets
Exemple d'utilisation:
Cela pourrait probablement être amélioré. L'idée est de passer une fonction à
generateImage
celle qui sélectionne le pixel (couleur vraiment) qui doit aller à la position x, y. Pour cela, nous utilisons un lambda qui ajouten
un paramètre et qui les convertit tous en float en même temps. La#
fonction vérifie si nous sommes dans le ring, dans le bar ou dans aucun des deux. Si c'est la bague, nous passons le relais%
, si la barre, nous retournons simplement en bleu, sinon en blanc.%
vérifie dans quel quadrant nous nous trouvons et retourne la couleur appropriée si elle n'est pas bleue. Le bleu est un cas particulier, car nous devons nous assurer qu'il ne passe pas au rouge. Nous ne renvoyons donc le bleu que s'il sey
situe en dessous de la "barre de mesure", sinon nous restituons le blanc. C'est la vue d'ensemble.la source
Processing.py - 244 octets + 1 octet pour le nombre de chiffres en N
Commençons par le code. Cela peut être collé dans l'environnement de traitement et exécuté (en changeant
N
pour différentes tailles).Petite astuce: le cercle qui coupe une partie du logo est dessiné dans la nuance en niveaux de gris de Processing 205, qui est la couleur d'arrière-plan par défaut. L'exporter dans une image n'aurait pas la même apparence. Cela enregistre un appel à
background(255)
.Explication
Exemples
N
= 400N
= 13 (la taille minimale du traitement est 100x100)Remarque
Si nous permettons d’éditer manuellement dans plusieurs valeurs pour
N
les appels explicites àsetup
etdraw
ne sont pas nécessaires et il est réduit à 213 octets + 3 octets par chiffre enN
.la source