Vous avez peut-être entendu parler du "Logo Hacker", également appelé "Emblème Hacker". Cela ressemble à ceci:
Il s’agit d’un modèle tiré d’une simulation mathématique appelée le jeu de la vie. Le planeur est le modèle de vie le plus simple qui bouge et le plus reconnaissable de tous les modèles de vie.
Le défi
Le défi est simple: affichez le logo du pirate informatique. Ceci est défini comme:
- Une grille 3x3 avec une bordure, un fond blanc et des lignes grises.
- Cinq points noirs disposés dans le motif de planeur GoL.
- Rien d'autre.
Les règles
- Les points noirs doivent remplir 40% - 80% de leurs grilles-boxes individuels.
- Vous allez afficher l'emblème avec une sortie graphique mais pas d'art ASCII .
- La sortie doit être au moins 30x30 pixels .
- La sortie ne doit comporter que les couleurs gris, noir et blanc .
- Chaque case de la grille aura la même taille. La grille sera un carré 3x3 régulier .
- Vous ne pouvez pas extraire le logo d’Internet ou de votre système de fichiers.
- Votre programme affichera le logo sur un écran / une fenêtre vide. S'il se termine, il doit le faire normalement.
- Notez que "points" ne signifie pas nécessairement "cercles". Un "point" est une forme géométrique unique centrée au milieu de la grille avec une surface. Par exemple, alors qu'un cercle ou un carré sera considéré comme un point, deux triangles ou un damier ne le seront pas.
Le gagnant
Comme il s'agit de code-golf , la réponse la plus courte dans chaque langue est gagnante!
Veuillez inclure une capture d'écran de la sortie de votre programme dans votre réponse.
Réponses:
Mathematica, 62 octets
Mathematica, 71 octets
la source
Graphics@Disk[]
comme argument.Rasterize@Grid[{{,●,},{,,●},{●,●,●}},Frame->All,FrameStyle->Gray]
. Le ● est un caractère unicode à deux octets. Comme il n’est pas nécessaire que ce soit un cercle, il est possible que certains caractères ASCII répondent aux exigences de 40% à 80%.Rasterize
ou similaire pour répondre à l'exigence degraphical output but no ASCII art
car les symboles sont toujours sélectionnables dans la grille en tant que caractères Unicode.CSS + HTML,
56 + 84 = 140 octets52 + 84 = 136 octetsSauvegardé 4 octets en incorporant les suggestions des commentaires.
Ceci utilise le caractère UTF-8
•
qui fait 2 octets et tire parti de la grâce de la syntaxe HTML.la source
•
!line-height:.4;
un autre en omettant la fermeture}
GLSL (fragment shader),
278235256 octetsVoyez-le en action: http://glslsandbox.com/e#40717.2
la source
precision highp float;void main(){vec2 a=gl_FragCoord.xy/20.-.2;ivec2 b=ivec2(a);a-=vec2(b)+.5;gl_FragColor=vec4(vec3(a.x<-.5||a.y<-.5||a.x>.3||a.y>.3?.5:length(a+.1)<.4&&(b.x+b.y-3)*b.y==0?.0:1.)*float(b.x<3&&b.y<3),1.);}
Python 2 ,
169140 octetsLa taille réelle, 61 par 61, est tracée dans une toile beaucoup plus grande de 300 par 400:
Affichage de la grille de pixels:
Les points utilisent 177 pixels dans la plage de 40% à 80%, que l’on considère le remplissage blanc de 19 sur 19 (144,4 à 288,8) ou le fond de 21 sur 21 incluant les deux bords (176,4 à 352,8).
Remarque: le programme termine et ferme la fenêtre de dessin dès que le dessin est terminé, pour permettre la fermeture manuelle de la fenêtre et l'ajout de la ligne
done()
.turtle
est un paquet Python développé pour la programmation graphique d'introduction. Un stylo commence aux,y=0,0
milieu d'une toile de 300 x 400 pixels (par défaut),up
lève le stylo,goto
déplace le stylo,shape
définit la forme du stylo sur une forme nommée ("square"
correspond à une forme prédéfinie avec une largeur de pixel par défaut de 21 ),color
définit la couleur, où deux paramètres définissent le trait (avec par défaut une largeur de 1) et le remplissage; un octet est enregistré à l’aide de l’(r,g,b)
option tuple à remplacer"white"
par[1,1,1]
la multiplication de liste[1]*3
. Enfindot
dessine un point avec la largeur donnée en pixels et en couleur. La valeur de largeur par défaut du point est trop petite pour être qualifiée, de9
sorte que j'en ai fait une esthétique et une qualification15
. La couleur du point pourrait être"black"
mais le(r,g,b)
tuple non compressé de0,0,0
est plus court de deux octets.Le stylo doit s’éloigner de tout point à la fin, sinon le stylo gris / blanc le cache.
La grille est parcourue en utilisant div (
/
) et mod (%
) dei
débutant à8
(i
est initialisée à9
mais est décrémentée au début de lawhile
boucle) et en descendant à0
, en décalant les résultats de2,1,0
en-1,0,1
utilisant(1-...)
et en les redimensionnant à la taille de la grille en utilisant un facteur de 20 (notez qu'il20-i/3*20
s'agit en fait d'un octet inférieur à20*(1-i/3)
, il en va de même%
). Cela produit l’ordre [en bas à gauche, centre à gauche, haut à gauche, bas au centre, centre-milieu, haut-milieu, haut à droite, centre-droite, haut-droit], et nécessite une "hasDot
" évaluation de[1,0,0,1,0,1,1,1,0]
, qui est302
dans la binaire peut être consultée par l' inspection de lai
ième puissance de deux composantes de302
avec l'aide d'un bitwise et302&2**i
.la source
turtle
.Applesoft BASIC ,
479476516515483482 octets-32 en utilisant des noms de variables illisibles: P
-1 parce qu'Apple a décidé d'être magique et m'a laissé utiliser un GOTO implicite / inexistant
Voici mon propre programme (très satisfaisant) pour un exemple de sortie n'utilisant pas de cercles:
Sortie:
la source
Code machine IA-32,
81 à80 octetsHexdump:
C'est une
fastcall
fonction appeléedoit
qui renvoie l'image au format PGM dans le tampon fourni. Usage:Sortie:
J'ai utilisé une résolution de 256 x 256 car
c'est cool,cela me permet de scinderecx
automatiquement l'index du pixel en coordonnéesy
dansch
etx
danscl
. De plus, le format de fichier PGM nécessite le nombre 255 dans l'en-tête de l'image.Les carrés intérieurs mesurent 54 x 54 (41% de la cellule par zone).
Code source (peut être compilé par Visual Studio):
Le modèle de cellule
peut être représenté par un bitmap "optimisé" de 7 bits.
Les bits sont indexés par l'expression
y * 2 + x
, où(x,y)
est l'emplacement de la cellule. Cette expression donne le même indice à 2 paires de cellules. C'est une chance si les valeurs de bits sont les mêmes.la source
42*42/85/85
ne fais que 24,4%.HTML et CSS, 155 octets
Il s'avère que HTML oublie vraiment les erreurs de syntaxe.
1 octet sauvegardé grâce à @Octopus · 1 octet sauvegardé grâce à @Downgoat · 2 octets sauvegardé grâce à @StephenS
2 octets enregistrés grâce à @Ryan · 3 octets enregistrés grâce à @styfle · 4 octets enregistrés grâce à @Ferrybig
13 octets sauvegardés grâce à @SteveBennett
la source
R (
130119113 octets)la source
axes=F
pour remplacerxaxt="n",yaxt="n"
. Si vous doublez toutes les valeurs de coordonnées, vous enregistrez 4 octets nets (mais vous ne pouvez pas utiliser l'1:3,2:3
astuce).;box()
queaxes=F
supprime également le cadre. En outre, commeaxes
est unplot
paramètre et non transmis àpar
travers...
commexaxt
/yaxt
, il n'a même pas besoin d'être orthographié complètement.c(1,7)
par une variable (l=c(1,7)
); (2) en remplaçantann
paran
; (3) en remplaçant[xy]li
par[xy]li
; et (4) retirer le deuxième argument redondant àgrid
:grid(3,lt=1)
. En fait, je me suis permis d’éditer ceci dans (en cours de révision).Python 2.7,
214311309 octetsCeci est ma première tentative ici à code golf, donc je suis sûr que cela peut être amélioré. J'aurais aimé ne pas établir les limites, mais il semble que matplotlib ne puisse pas détecter que j'ai tracé les cercles où je l'ai fait. Sans définir xlim () et ylim (), seuls les deux cercles du bas sont affichés.
Sortie:
Edit: Correction de la couleur des bordures et suppression des numéros de ticks. Je dois dire que matplotlib est libellé de manière très dense et qu’il n’est pas trop convivial avec les couleurs changeantes des axes.
Rasé 3 octets grâce à @DJMcMayhem
Edit: J'ai enlevé deux octets en définissant mes ticks comme un tuple dans les fonctions set_ticks.
la source
for s in'xy':exec"x.set_"+s+"ticks(a);"+s+"lim(-.5,2.5);"
. (Je n'ai pas testé cela, donc je ne suis pas positif)Bash + ImageMagick,
233226 caractèresExemple de sortie:
Bash + ImageMagick, 215 caractères
Le propriétaire de la question n'a pas encore répondu à la question sur l' anti-aliasing et certaines autres solutions ont également des nuances de gris supplémentaires ajoutées par l'anti-aliasing.
Exemple de sortie:
la source
Ruby,
144166164148144 octetsSortie:
Edit: a maintenant des lignes grises.
la source
d=d+1
a une forme plus courte (d+=1
) et==1
est équivalent à>0
. Pensez également à ce qui se passe lorsque vous définissez c sur un Fixnum plutôt que sur un tableau :-)[]
comme s'il s'agissait d'un tableau de bits (en lecture seule, mais c'est OK ici).g=[2,13,24]
deg=2,13,24
et remplacereach
parmap
.PNG,
105 à100 octets(ie ce fichier image)
Considérant que le langage HTML et d’autres langages ne faisant pas partie de la programmation sont autorisés , j’étais curieux de voir à quel point je pouvais jouer au golf avec une image simple pouvant être affichée sur le navigateur, afin de servir de comparaison de base. Le résultat est compressé avec les outils open source optipng (
-o7 -zm1-9 -strip all
) et pngwolf . J'ai aussi expérimenté le zopflipng , mais les résultats étaient plus grands. D'autres outils de compression à source fermée pourraient peut-être supprimer quelques octets supplémentaires.Données d'image en base64:
Afficher l'extrait de code
Modifier je fait les points se touchent la partie supérieure de la cellule et en bas, pour provoquer plus répétitivité dans le motif de pixels et d' améliorer ainsi le taux de compression. Mais ne vous inquiétez pas, un point ne remplit toujours que (7 * 9) / (9 * 9) 78% de sa cellule.
PNG non standard, 88 octets
Comme l'a souligné @anatolyg , il existe un potentiel de golf en supprimant le bloc IEND (12 octets). Techniquement, IEND est requis par la norme . Cependant, chaque bloc PNG inclut ses propres informations de taille et de somme de contrôle. Il n'est donc pas absolument nécessaire d'avoir un marqueur de fin. Et en effet, tous les navigateurs que j'ai testés peuvent afficher l'image sans problème.
Malheureusement (ou heureusement), cette image non standard est rejetée par imgur, je ne peux donc pas la télécharger. C'est l'encodage base64:
Afficher l'extrait de code
la source
PNG
n'est pas un langage de programmation.Octave ,
127124 octetsSuppression de 3 octets grâce à Luis.
grid
est suffisant (au lieu degrid on
).Sorties (après sauvegarde):
Notez que la sortie affiche des lignes de grille grises dans la fenêtre de tracé. Ils deviennent noirs lors de la sauvegarde (pour une raison quelconque).
Eh bien, c'était long et désordonné! Il a fallu passer par de nombreuses modifications pour que cela respecte les spécifications.
Explication et, espérons-le, du golf à venir ...
la source
'square'
pour le rendre carré sur toutes les plateformes.spy([0,1,0;0,0,1;1,1,1],'.k',80),set(gca,'XTick',.5:4,'XTickLabel','','YTick',.5:4,'YTickLabel',''),axis(.5+[0,3,0,3],'square'),grid on
.Traitement,
212198 octetsFondamentalement, nous utilisons un traitement simple pour dessiner un fond blanc, puis définissons la transparence des rectangles utilisés pour la grille et dessinons leurs traits en gris. Nous continuons en définissant le rectangle, en définissant à nouveau la valeur de remplissage pour remplir les cercles en noir et en définissant cinq cercles.
Voilà!
Tu pourrais ajouter
ou plus pour mieux voir la couleur des traits.
(C'est mon premier code-golf, j'espère avoir tout fait correctement.)
EDIT: Merci à Kritixi Lithos! Suppression des sauts de ligne, modification en int f = 25 et utilisation de -1 en arrière-plan (float)
la source
float f=25;
àint f=25;
et en utilisant à labackground(-1)
place debackground(255);
Tikz,
193175170 octetsVoici la sortie:
la source
MATL ,
7469686462 octetsEssayez-le sur MATL Online! (Cela prend quelques secondes.)
Sortie de l'interprète en ligne:
la source
Traitement, 134 octets
Inspiré par @Zep, voici mon traitement one-liner Processing (ainsi que mon premier code golf):
Merci pour @Kritixi Lithos pour ses brillants conseils sur la réduction de quelques octets!
la source
for(int i=0,x,y;...
manière à pouvoir déposer leint
dans le corps de la boucle. De plus,fill(255);
peut devenir justefill(-1);
+20
définition des valeurs dex
andy
pour permettre de changer les attributsrect
torect(x+5,y+5,30,30);
etellipse
toellipse(x+20,y+20,23,23);
et de sauvegarder deux octets.LaTeX + Tikz, 155 octets
la source
1/0
ce que ça fait de la division?x
ety
coordonnées..5
deveniez juste1
.[step=2]
) pour produire une grille plus grande. Simplifier les coordonnées du dessin des cercles ne permettrait pas d’économiser suffisamment d’octets. (Vous obtenez 157 octets si vous le faites)SmileBASIC, 125 octets
58081 (U + E2E1, qui est dans le bloc "Zone d'utilisation privée") est le code de caractère d'un symbole de cercle. Le placer dans une chaîne fonctionnerait aussi, mais comme il est codé sur 3 octets en UTF-8, il aurait la même longueur (et ne s'afficherait pas correctement ici).
la source
C #, 333 octets
Version complète / formatée:
L'idée est simple, nous créons un objet graphique à partir de l'image et l'utilisons pour rendre l'image tout blanche. Passez ensuite en boucle sur chaque carré de l’image en traçant le rectangle de délimitation. Si c'est l'un des emplacements pour un point, nous le dessinons aussi. Enfin, nous enregistrons l’image dans un fichier et laissons Windows décider de son ouverture. Dans mon cas, elle s’ouvre avec Windows Photo Viewer.
L'utilisation de a
Process
pour afficher l'image et enregistrer dans un fichier est beaucoup plus courte que la création d'un formulaire Windows ou d'une application WPF en raison de la diversité des classes et des fonctions supplémentaires nécessaires à leur création.Sortie:
la source
PHP, 221 + 2 octets
Enregistrer dans un fichier; appeler dans le navigateur. Si votre navigateur affiche du charabia,
insérez-le
header("Content-Type:image-png");
avantimagepng($i);
.Les points ne sont pas très ronds; c'est dû aux petites proportions.
panne
Je pense que cela peut être
0x4c4b40
qualifié de gris approximatif. Sinon, ajoutez quatre octets.la source
R 313 236 octets
Code révisé, basé principalement sur les commentaires de @ user2390246 enregistré 77 octets. Beaucoup apprécier l'aide.
En outre, souhaitez ajouter un appel à la solution plus courte de R par @mschilli. Cela montre une manière élégante de résoudre le problème des valeurs graphiques par défaut de R.
Sortie
Va à un nom de fichier "r". Omettre et extension m'a sauvé quatre octets. Mais ensuite, j'ai dû modifier l'extension du fichier en "bmp" pour le télécharger. Alors peut-être que je ne devrais pas obtenir de crédit pour ces quatre octets.
Commentaire
Je me suis dit: "Ce graphique n'est qu'un simple graphique avec cinq points. Devrait être une tâche simple à implémenter dans un langage doté de puissantes capacités graphiques pour les données. Essayons-le dans R." Mais ensuite, je devais dépenser environ 80% des octets, en contournant juste les valeurs par défaut graphiques de R.
Un peu le mauvais outil pour le travail ....
Je ne pouvais pas trouver une façon moins verbeuse de garantir la taille et le format du graphique qu'en appelant le constructeur bmp puis dev.off (). La combinaison représente 25 octets. Si votre session R est correctement configurée, vous obtiendrez peut-être un graphique plus ou moins correct sans dépenser ces octets, mais ce n’est ni fiable ni cohérent.
la source
b
, insérez simplement les deux vecteurs non nommés directement dans laplot
fonction. Utilisezc(l,3)
pourxaxp
etyaxp
. Vous pouvez simplement utiliserF
pour false, pas besoin de le définir. Et définissez une nouvelle fonctiona(x,...)
qui appelleaxis(x)
mais a des valeurs par défaut pour les étiquettes, tck, etc., de sorte que vous n’ayez pas besoin de toutes les spécifier deux fois.axes=F
plutôt quexaxt='n',yaxt='n'
. Et vous avez oublié d’utiliser cette.5
définition lorsquel
vous avez utilisé cette astuce plus tard..5
?.bmp
extension de fichier, vous pouvez également nommer le fichierr
.TI-BASIC,
218140137 octetsRemarque: ce nombre d'octets est un peu gonflé. Le programme utilise seulement 85 jetons, mais cela est enregistré dans 137 octets. De plus, si vous utilisez une calculatrice non-couleur, vous pouvez enregistrer 4 autres jetons, car vous n'avez pas à spécifier la couleur (qui est bleue par défaut), mais je ne sais pas si leurs écrans sont suffisamment grands pour ce défi parce que je n'en possède pas.
prgmHACKER (138 octets, 86 jetons):
Pour un affichage correct, ce programme nécessite que Xmin = Ymin = 0, Xmax = Ymax = 3, Xscl = Yscl = 1. dX doit également être correctement défini, mais la calculatrice le fait pour vous lorsque vous définissez une autre variable de fenêtre. Je ne pouvais pas voir combien d'espace ces variables utilisaient dans la RAM.
De plus, les paramètres de format doivent être {RectGC, CoordOff, GridLine, GridColor: MEDGRAY, Axes: OFF, ExprOff, BorderColor: 1, Background: OFF}, mais ils sont des valeurs basculées et ne consomment aucun espace supplémentaire en fonction du réglage.
la source
{0,1,2,1,2}
et à mesure ,{0,0,0,2,1}
puis les ajouter0.5
à chaque élément.L1
etL2
versL₁
etL₂
, puisque vous les utilisez déjà. Je pense que vous pouvez supprimer}
, etL₁(I)+.5→A
=>.5+L₁(I
etL₂(I)+.5→B
=>.5+L₂(I→B
.R,
119114111 octets( Merci à @JayCe de m'avoir sauvé 3 octets)
Pas plus courte que l' autre solution R , mais une approche complètement différente:
Utilise une mise en page dans laquelle les 4 premières parcelles sont les cellules vides et les 5 autres, celles avec des points.
la source
Excel VBA, 180 octets
Fonction de fenêtre VBE Immediate anonyme qui ne prend aucune entrée et est renvoyée vers l'objet de feuille de calcul par défaut (
Sheet1
).Version commentée
Sortie
-6 octets pour utiliser
[{21,32,13,23,33}]
plusSplit("21 32 13 23 33")
-2 octets pour utiliser
Mid(s,2)
plusRight(s,1)
-3 octets pour utiliser
(s\10)
plusLeft(s,1)
la source
Octave
10794103 octetsou
les deux solutions sont 103 octets.
la source
line([x1,x2],y)
vous devez faireline([x1,x2],[y,y])
Apple Swift (iOS - CoreGraphics / QuartzCore) - 832 octets
J'ai entièrement dessiné la forme à l'aide de Quartz pour un appareil Apple iOS. Malheureusement, ce n'est pas un langage particulièrement soucieux de la taille, donc le résultat est assez volumineux, mais c'est aussi petit que je peux l'obtenir.
Une version plus lisible pour quiconque est intéressé:
Voici la sortie produite dans le simulateur iOS:
la source
Rubis avec chaussures, 118 personnages
Bit emprunté à la vérification RJHunter est un commentaire fait sur Mark Thomas 's solution Ruby .
Exemple de sortie:
la source
SVG + HTML,
146138135133 octetsGrâce à l'analyseur HTML indulgent, la
xmlns="http://www.w3.org/2000/svg"
déclaration peut être omise, ainsi que les guillemets d'attributs et la balise de fermeture. Cette version résout certains problèmes d’autres solutions HTML:Éditer Supprimez 8 octets en exploitant le fait que les sous-chemins n’ont pas besoin d’être fermés pour être remplis .
Modifier Selon la grammaire svg , il n'est pas nécessaire de séparer les non-chiffres par une virgule (
.5,.5
). J'ai également abandonné le remplissage explicite, afin de pouvoir changer la direction du tracé d'une ligne de négative à positive, en enregistrant un tiret. Et enfin, j'ai ajusté le nombre pour ne pas inclure de fin de ligne, désolé pour cette erreur de recrue.Modifier Apprentissage à partir d’ une autre réponse sur codegolf, j’ai remplacé le final
9 />
par9>
. Cela fonctionne très bien dans tous les navigateurs testés.la source
Python 3 + PyGame, 238 octets
Les constantes apparemment arbitraires viennent de ma part lorsque j'essaie de rendre l'image la plus grande possible sans sacrifier les octets.
Avec des caractères non imprimables, 229 octets
J'ai remplacé les listes par des littéraux en octets, ce qui enregistre de nombreux caractères, mais les caractères non imprimables ne peuvent pas être affichés correctement ici. J'ai substitué les caractères non imprimables par leurs équivalents graphiques U + 2400-U + 2421 à des fins d'affichage.
la source