Les garçons et les filles sont enthousiastes à l'idée de voir Fifty Shades of Grey sur leur grand écran. Nous voulons simplement coder sans être dérangés, alors voici un défi: choisir notre cerveau.
Vous devez:
- Imprimez sur l'écran cinquante carrés remplis chacun d'une nuance de gris différente
- Si votre langue de choix manque de capacités de traitement d'image , vous pouvez générer un fichier image.
- Les carrés doivent être visibles, au moins 20 x 20 pixels
- Vous ne pouvez pas utiliser de nombres aléatoires à moins de vous assurer que chaque nuance est unique.
- Vous ne pouvez vous connecter à aucun service sur aucun réseau
- Vous ne pouvez lire aucun fichier dans votre programme.
- Vous ne pouvez utiliser aucune bibliothèque en dehors des bibliothèques standard de la langue de votre choix.
C'est le code de golf si le code le plus court gagne.
code-golf
graphical-output
Jsedano
la source
la source
Réponses:
MATLAB, 24 octets
Deuxième tentative, maintenant conforme aux règles.
Le 'I' signifie 'InitialMagnification', mais apparemment, Matlab complétera automatiquement les noms en paires nom / valeur. Bien sûr, c'est un bon tour de golf!
la source
Mathematica, 30 octets
Voici une autre approche de Mathematica:
ou
Le premier crée simplement un tableau
et le second
Ensuite,
ArrayPlot
tracez-les sous forme de grille et, par défaut, utilise l'échelle de gris pour visualiser les valeurs.la source
ArrayPlot
.ArrayPlot@{Range@50}
, ce qui est seulement 20 octets.CJam - 23 (pas de sortie graphique réelle)
Comme CJam ne peut pas (encore?) Dessiner à l'écran, j'ai écrit un programme qui affiche une image au format .pg .
Enregistrez la sortie dans un fichier nommé 50.pgm et ouvrez-la avec un visualiseur / éditeur d'images.
Essayez-le en ligne
Le résultat ressemble à ceci:
Explication:
la source
No line should be longer than 70 characters.
Mathematica
72 61 59 43 3534 octetsVersion actuelle (34 octets)
Version antérieure (59 octets), merci à Martin Büttner.
Des bordures bleues ont été ajoutées pour mettre en évidence la position des carrés.
Nombre de carrés:
Première tentative (72 octets)
Si les carrés peuvent se chevaucher. Comme le note Zgarb, il existe une faible possibilité qu’une case en cache une autre.
la source
Sage -
26243529 caractèresCela ressemble à ceci:
Les tentatives précédentes : Tout d' abord j'ai eu
Matrix([range(50)]).plot()
, alorsmatrix_plot([range(50)])
. Ils ressemblaient à ceci:L'utilisateur @flawr a fait remarquer que les carrés produits avec les paramètres par défaut sont trop petits. L'ajout d'une
figsize
option le corrige, mais il comporte 6 caractères de plus que la version 5x10 en haut de cette réponse:la source
R,
47 42 39 38 37 3635 octetsEn supposant qu'ils soient autorisés à se chevaucher, cela fonctionne.
Symbols
nécessite un vecteur contenant la taille de chaque carré, et je gagne de la place en réutilisant le même vecteur pour tous les paramètres de fonction. Le plus grand carré fait toujours 1 pouce de large. Avec 50:99 comme plage d’entiers, le plus petit carré aura environ un demi-pouce de large, soit 36 pixels à 72 dpi.Merci à tous pour les commentaires et les suggestions, je suis un nouveau venu dans R, donc tout cela est très instructif.
Versions précédentes:
Image précédente:
la source
symbols(x<-50:99,sq=x,bg=gray(x/99))
f = function (a, b) { a; b}
puis en appelantf(x <- 5, x)
. Cela fonctionne comme prévu. Une fois que vous inversez les arguments dansf
la définition de (etrm(x)
), cela ne fonctionne plus.symbols(x,,,x<-50:99,bg=gray(x/99))
Java - 180
Assez simple, il suffit de dessiner des boîtes.
Avec des sauts de ligne:
la source
int i;
place de,int i=1
mais utiliser ensuite++i
lors de la première utilisation dei
au lieu dei++
dans la dernière occurrence, permettrait d'économiser 2 octets. BTW: Je ne savais même pas que vous pouviez créer un programme Java sansclass MyClass ... public static void main(...
!!!BBC BASIC, 57
Les carrés doivent avoir au moins 20 pixels, mais rien ne dit qu'ils doivent avoir la même taille, alors je suppose que cela suffit.
Il peut être possible de raccourcir ce processus en utilisant davantage de codes VDU de bas niveau. Mais passer de ce modèle à un modèle moins intéressant ne le rendra probablement pas plus court.
la source
F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
ipython 2, 54 octets
Le mieux que je pouvais faire était avec un programme ipython. Lancer ipython avec
ipython -pylab
et exécuter ce programme affichera un graphique avec 50 nuances de gris sur 50 carrés:Sortie:
Solution 2:
Voici un autre programme (61 octets):
qui affiche la fenêtre suivante:
la source
JavaScript (
72,70, 67 octets)72: original (empruntant l'
■
utilisation intelligente de la réponse de Sphinxxx ):70: voler sans vergogne à Ismael Miguel (qui mérite les votes), une boucle plus courte et permettant au navigateur de corriger l'absence de # procédant au code de couleur ...
67 octets (65 caractères): permutation de l'entité contre le caractère unicode:
la source
i=51
. Si j'ai correctement compté, il n'y a que 49 carrés?for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>■')
ou similaire. Non testé mais ça pourrait marcher!#
caractère pour avoir une solution longue de 70 octets.for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')
- MAIS au moins sur les paramètres par défaut de mon navigateur (OSX / Chrome), la zone est un peu plus petite que 20x20 les pixels de toute façon, donc ces solutions ■ basées sont discutables.C ++,
9883 caractèresD'accord, vous aurez besoin d'un émulateur de terminal prenant en charge les couleurs vraies. Pour mac os, il existe par exemple les versions nocturnes de iTerm2. Pour Unix, je pense que konsole le soutient. Voici une liste, juste au cas où: https://gist.github.com/XVilka/8346728#now-supporting-truecolor
Compiler avec g ++ (\ e dépend du compilateur).
Pour que les carrés aient une surface suffisante, vous devrez modifier la taille de la police du terminal.
L'utilisation de bibliothèques C au lieu de C ++ permet de raser certains caractères.
C,
6158 caractèresIl s’agit du même programme, mais en C, qui suppose que les déclarations de fonctions non typées renvoient int, et qui n’a pas besoin d’inclusions pour certaines des fonctions de bibliothèque standard, comme dans ce cas printf. Proposé par @cartographer. Trois caractères en moins grâce à @ user3601420
Compile avec quelques avertissements (pour supposer que le type de retour de main est int et pour inclure implicitement la déclaration de printf).
la source
int
devant de main et le faire compiler avec juste quelques avertissements avec gcc.i
le premier argument de main, comme dans:main(i){for(i=51;i--;)printf(...
\e
→\33
Python 2,
125115104 octetsExemple de sortie:
Bonne vieille tortue C’était la seule méthode à laquelle je pouvais penser en Python qui imprimait des images sur un écran en utilisant uniquement les bibliothèques standard.
La forme de la tortue carrée se trouve être 21 x 21, ce qui est très pratique. Ceci peut être vu en fouillant dans
turtle.py
:Si vous avez un moniteur haute résolution ou si quelques cases ne sont pas gênantes, ceci correspond à 93 octets:
Démo
(Cette démonstration utilise Skulpt en adaptant l'extrait de code trouvé ici . Il est uniquement inclus pour donner une idée de ce que le code fait - j'ai dû modifier quelques bits pour le faire fonctionner.)
Afficher l'extrait de code
la source
J (
434140383329 caractères)Après les suggestions de randomra .
Cette solution n'affiche rien car la bibliothèque standard de J ne contient pas de routines d'interface graphique. Au lieu de cela, je génère une image et l'écris sur la sortie standard. La sortie est aléatoire, il s’assure que toutes les nuances sont distinctes. Voici un exemple de sortie et l'image convertie en png et tournée de 90 ° pour faciliter la visualisation:
la source
50
de l' en- tête dans la partie générée à l' aide de 50 * 50 carrés permet d' économiser 1 octet:1!:2&4'P2 50 2500 ',":(,*:#i.)50
.1!:2&4'P2 ',":(,*:,],*:#i.)50
pour 29 caractères! Btwplot
ne fait pas partie de la bibliothèque standard J?plot
est l’un des paquets auxiliaires que vous pouvez télécharger à partir du gestionnaire de paquets. Je verrais à peine cela comme une partie de la bibliothèque standard .Excel vba, 81
Dans la fenêtre immédiate:
sur la feuille active:
{81 nuances correspondent à autant de code que 50}
la source
cells(i,j)
nécessairei>0
etj>0
.For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
R ,
3732 caractères 1 :Cependant, l'affichage de cette image ressemble à… meh (image pivotée à 90 ° pour un meilleur ajustement au texte; longueur du côté carré compressé d'origine> 20 px):
Voici une version plus agréable qui trace les carrés dans un ordre aléatoire dans une matrice (50 caractères):
(Et oui, les trois carrés adjacents de couleurs apparemment identiques sont en réalité trois nuances de gris différentes.)
1 Oui, une autre réponse R,
et même pas le plus court(maintenant le plus court pour R) - excuses. Il me manquait un joli rendu en R.la source
image(matrix(1:50,5),c=gray(1:50/51))
Matlab 35 grâce aux franchises
Matlab 36
Affiche 50 carrés remplis avec les valeurs de gris 1 à 50 et 2 rectangles supplémentaires remplis avec les valeurs de gris 0 et 51:
Matlab, 45 ans
la source
JavaScript, 87
90octetsCela génère des carrés au format HTML, car il s'agit en réalité de la seule méthode de sortie graphique de JavaScript. Merci à edc65 pour avoir supprimé 3 octets.
la source
for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')
. Impossible d'utiliser des chiffres uniques, car les gris ne seraient pas uniques (# 111 de la même couleur que # 111111)1cm
ou 19mm
serait mieux et plus largement soutenu. Sans changer votre nombre d'octets.PHP,
968874 octetsMerci à Ismael Miguel pour avoir économisé 22 octets!
Écrit 50
<p>
secondes avec une hauteur et une largeur de 9 mm (qui doivent être supérieures à 20 px sur la majorité des écrans), empilés les uns sur les autres, le tout avec une légère différence de nuance.Résultat généré (l’image est zoomée et tournée à 90 °):
la source
Matlab - 33 octets
Malgré les commandes verbeuses, le résultat est encore assez compact. Cela semble un peu mieux si vous remplacez
surf
parsurface
mais cela coûte 3 caractères.Si vous ne remarquez pas le 50ème carré gris, c'est qu'il est un peu plus grand que les autres!
la source
ndgrid
! (2 octets de moins). Et chaque carré est-il un gris différent ?Javascript (
7771 octets):Cette réponse n'est plus basée sur IE11. Cela fonctionne parce que le navigateur convertit les codes de couleur défectueux en codes utilisables (en ajoutant
#
le numéro).Voici le code:
Firefox a toujours le côté bizarre de faire des cercles.
(Petite édition: Changé
for(i=61;i-->9;)
pourfor(i=59;i-->9;)
parce qu'il produisait 52 places)Ancienne réponse:
Ceci est basé sur ma réponse PHP , et utilise presque les mêmes méthodes pour faire les carrés:
Ce n'est pas la réponse la plus courte, mais ça vaut la peine d'ajouter ici.
Cette solution n'est pas compatible avec Chrome (produit plusieurs couleurs vertes) et Firefox (même résultat, mais produit des cercles? OO WTH?)
Puisqu'il s'agit de code-golf, une solution fonctionnant avec une version spécifique ou un logiciel spécifique est acceptable.
la source
<hr>
, probablement pour le rendre plus lisse. Aucune idée de ce qui se passe avec les couleurs. Quoi qu'il en soit, mon +1 pour me dérouter.Piet- 2 * 103 = 206
Ceci est unique en ce que le code source et la sortie répondent au défi:
La plupart de ces éléments sont décoratifs. Je n'ai donc compté que les deux premiers rangs, qui sont très bien isolés. Émet un niveau de gris en ppm comme certains l’ont fait.
la source
JavaScript - 70 octets
la source
font:3em a
oufont-size:3em
. Je vote contre celui-ci en raison de la taille des boîtes. Jusqu'à ce que vous répariez.i--
au lieu dei-=1
.<b>
balise. Cela ne changera en rien le code, sauf en veillant à ce que le texte soit en noir. Ce n'est pas une obligation, mais cela pourrait être une bonne idée.Traitement, 66 caractères:
la source
PHP (
62606372716259 octets):J'ai fait le plus court possible
C'est exactement le même code que ma réponse Javascript (avec 71 octets) .
Mais BEAUCOUP plus court!
Cela a une bizarrerie dans Firefox: au lieu de carrés, Firefox fait des cercles ! (Allez la folie!)
Sinon, tous les navigateurs produisent la bonne couleur (même avec les manquants
#
sur l'color
attribut).Soumissions non valides et journal des modifications :
Ancienne réponse, avec 62 octets.
Toutes les nuances sont parfaitement alignées.
Cette solution ne fonctionnera pas pour Chrome (produira des carrés de plusieurs couleurs) et pour Firefox (qui fait des cercles oO Oui, les cercles avec
<hr>
! La règle horizontale est un cercle sur Firefox!).Vous pouvez le tester sur IE11 et ça devrait aller.
(simplement enlevé d'en haut)
J'ai remarqué quelque chose de terrible: il s'agissait de produire
#111
au lieu de#010101
pour certaines couleurs.Cela signifiait que certaines couleurs se répètent.
Par conséquent, j'ai dû sacrifier quelques octets:
Reproduit les 50 nuances dans un ordre parfait, du plus clair au plus foncé.
En raison d’un argument correct de @ edc65 , j’ai dû ajouter
width=20
pour produire des carrés parfaits .Réduction d'un octet supplémentaire en remplaçant
f!=$c
parf>$c
, ce qui fonctionne parfaitement.Version finale, sans
width=20
:Ceci est invalide car il est nécessaire de générer des carrés.
Cela sort les nuances de clair à foncé.
Réduit de 1 octet en passant à une
while
boucle, comme ceci:Première solution:
Cela n'a pas ordonné les nuances, mais il y en a 50 différentes.
Rien n'indique qu'ils doivent être commandés, mais leur taille est requise.
J'espère pouvoir le réduire beaucoup plus.
Vous pouvez le tester sur http://writecodeonline.com/php/ (cliquez sur "Afficher en HTML").
la source
CSS (87 caractères)
Utilise l'animation;)
La version exécutable est plus longue car Webkit a toujours besoin du préfixe du fournisseur. :(
Si un
<a>
élément vide et aléatoire est autorisé , nous pouvons le réduire à 72 caractères:Voir? CSS est un langage de programmation légitime!
la source
R, 36 octets
Je peux faire la réponse de freekvd plus courte trivialement.
(Désolé de ne pas avoir commenté sa solution. Stackexchange ne me permet pas de commenter, de voter, etc.).
la source
PostScript, 34 octets
En codage ISO-Latin-1:
C'est l'équivalent binaire de:
(Cela suppose que vous l'utilisez sur un périphérique d'au moins 1 000 points [= 10 pouces = 25,4 cm] de large.)
la source
0f 4e 75 a3 ...
.DrRacket - 83
Juste pour alléger DrRacket un an après "Introduction à la conception systématique de programmes".
EDIT :
la source
2htdp/image
àhtdp/image
, changez la chaîne"solid"
en symbole'solid
. Pour de plus grandes économies, changez le(range 9 209 4)
en(range 50)
: les nuances de gris doivent simplement être distinctes, ce qui n'est pas facile à distinguer pour l'œil humain!for/set
:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
C # - 173
Utiliser LINQPAD
Élargi :
Sortie :
la source
for(int i=0;i<250;i+=5)
et puisFromArgb(i,i,i)
etRectangle(i*4,0,20,20)
donne 168FillRectangle()
a une surcharge qui prend les coordonnées du rectangle directement, de sorte que vous pouvez supprimer lenew Rectangle()
et sortirJavaScript, 152 octets.
Ok, alors peut-être que ce n'est pas la meilleure solution mais voici la mienne.
Voici la sortie avec css float left (juste pour faciliter le comptage des carrés) et sans:
la source
var
supprimant tous les mots-clés et en supprimant les espaces inutiles. De plus, veuillez inclure le nom de la langue et le nombre d'octets dans votre réponse.var
mots - clés.c+=5
au lieu dec=c+5
. En outre, vous pouvez enregistrer 2 caractères en plaçantn=c.toString()
à la fin de la ligne précédente, puis à nouveau cette ligne à la fin de la ligne précédente. Donc, votre deuxième ligne seraitfunction w(){if(c<250){n=c.toString()
px
la hauteur et la largeur.