Cinquante nuances de gris


92

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.


21
Étaient-ils nous déranger?
Les passe-temps de Calvin

6
Objection: titre trompeur!
George Chalhoub

23
Verrons-nous une soumission de Piet ?
randomra

8
Pas les images que je pensais générer pour un concours de 50 nuances de gris.
CorsiKa

Réponses:


24

MATLAB, 24 octets

Deuxième tentative, maintenant conforme aux règles.

imshow(0:1/49:1,'I',2e3)

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!

entrez la description de l'image ici


59

Mathematica, 30 octets

Voici une autre approche de Mathematica:

ArrayPlot[#+5#2&~Array~{5,10}]

entrez la description de l'image ici

ou

ArrayPlot[5#+#2&~Array~{10,5}]

entrez la description de l'image ici

Le premier crée simplement un tableau

{{6, 11, 16, 21, 26, 31, 36, 41, 46, 51}, 
 {7, 12, 17, 22, 27, 32, 37, 42, 47, 52}, 
 {8, 13, 18, 23, 28, 33, 38, 43, 48, 53}, 
 {9, 14, 19, 24, 29, 34, 39, 44, 49, 54}, 
 {10, 15, 20, 25, 30, 35, 40, 45, 50, 55}}

et le second

{{6, 7, 8, 9, 10},
 {11, 12, 13, 14, 15},
 {16, 17, 18, 19, 20},
 {21, 22, 23, 24, 25},
 {26, 27, 28, 29, 30},
 {31, 32, 33, 34, 35},
 {36, 37, 38, 39, 40},
 {41, 42, 43, 44, 45},
 {46, 47, 48, 49, 50},
 {51, 52, 53, 54, 55}}

Ensuite, ArrayPlottracez-les sous forme de grille et, par défaut, utilise l'échelle de gris pour visualiser les valeurs.


Belle utilisation de ArrayPlot.
DavidC

4
C'est drôle, MatrixPlot semble utiliser les couleurs par défaut. Heureusement pour ce défi que ArrayPlot utilise des niveaux de gris et qu'il est une lettre plus courte que MatrixPlot.
Omar

Vous pouvez faire ArrayPlot@{Range@50}, ce qui est seulement 20 octets.
Chip Hurst

@ChipHurst quand je fais cela, la taille par défaut est trop petite pour répondre à l'exigence de 20x20 pixels.
Martin Ender

36

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.

"P2"1e3K51_,1>K*$K*~]N*

Essayez-le en ligne

Le résultat ressemble à ceci:

50.png

Explication:

"P2"     push "P2" (netpbm magic number)
1e3K     push 1000 and K=20 (image size)
51       push 51 (value of white)
_,       duplicate 51 and convert to an array [0 1 2 ... 50]
1>       remove 0 (slice from 1)
K*       repeat the array 20 times
$        sort, to get [(20 1's) (20 2's) ... (20 50's)]
K*       repeat the array 20 times
~        dump the elements on the stack
]        put everything from the stack in an array
N*       join with newlines

3
Donc, être heureux augmente les éléments!?
Caridorc

7
@ Caridorc de tableaux contenant des nombres, oui. Et être triste les décrémente: p
aditsu

Vous ne suivez pas les spécifications de PGM:No line should be longer than 70 characters.
kiwixz le

@iKiWiXz mis à jour
Aditsu

1
@ iKiWiXz Devrait, pas doit. Les lignes peuvent être plus longues que cela, mais les programmes qui génèrent des images PGM doivent essayer de les conserver sous 70 caractères.
FUZxxl

30

Mathematica 72 61 59 43 35 34 octets

Version actuelle (34 octets)

GrayLevel[#/50]~Style~50 &~Array~50    

grille 2


Version antérieure (59 octets), merci à Martin Büttner.

Graphics[{GrayLevel[#/50],Cuboid@{#~Mod~9,#/9}}&/@Range@50]

Des bordures bleues ont été ajoutées pour mettre en évidence la position des carrés.

Graphics[{EdgeForm[Blue], GrayLevel[#/50], Cuboid@{#~Mod~9, #/9}} & /@Range@50]

bleu

Nombre de carrés:

    Length[%[[1]]]

50


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.

  Graphics@Table[{GrayLevel@k,Cuboid[{0,15}~RandomReal~2]},{k,.4,.89,.01}]

entrez la description de l'image ici


J'imagine qu'un carré pourrait en principe en recouvrir complètement un autre, de sorte que moins de 50 seraient visibles?
Zgarb

2
Certainement la réponse la plus esthétique.
Dan

30

Sage - 26 24 35 29 caractères

matrix(5,10,range(50)).plot()

Cela ressemble à ceci:

5x10 nuances de gris

Les tentatives précédentes : Tout d' abord j'ai eu Matrix([range(50)]).plot(), alors matrix_plot([range(50)]). Ils ressemblaient à ceci:

50 nuances de Grey

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 figsizeoption le corrige, mais il comporte 6 caractères de plus que la version 5x10 en haut de cette réponse:

matrix_plot([range(50)],figsize=20)

On dirait que 51 nuances et les carrés semblent plus petits que 20x20px, est-il plus grand quand ils sont produits par votre programme?
mardi

Je ne pense pas que les sorties supplémentaires soient interdites, @flawr, je n'ai pas pris la peine de supprimer le cadre, les graduations et les chiffres. Vous avez peut-être raison sur le fait que les carrés sont trop petits, je vais vérifier.
Omar

Argh! @flawr a raison les carrés sont plus petits que 20px par 20px.
Omar

Je dirais que les sorties supplémentaires devraient être interdites. La question précise "50" et non "50 ou plus".
Joe

1
Est-ce que je comprends bien, @ Joe, que vous ne vous opposez pas au cadre et aux chiffres en dehors du cadre, mais uniquement au nombre de carrés? Si tel est le cas, il suffit de remplacer 50 par 49.
Omar

23

R, 47 42 39 38 37 36 35 octets

En supposant qu'ils soient autorisés à se chevaucher, cela fonctionne. Symbolsné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.

symbols(x,,,x<-50:99,bg=gray(x/99))

Merci à tous pour les commentaires et les suggestions, je suis un nouveau venu dans R, donc tout cela est très instructif.

nouveau et amélioré?

Versions précédentes:

symbols(x,sq=x<-50:99,bg=gray(x/99))            #36
x=50:99;symbols(x,sq=x,bg=gray(x/99))           #37
x<-50:99;symbols(x,sq=x,bg=gray(x/99))          #38
x<-1:50;symbols(x,sq=x/x,bg=gray(x/50))         #39
x<-1:50/50;symbols(x,sq=x/x,bg=rgb(x,x,x))      #42
x<-1:50/50;symbols(x,squares=x/x,bg=rgb(x,x,x)) #47

Image précédente: 50 nuances de R


Pourrait économiser un peu plus avecsymbols(x<-50:99,sq=x,bg=gray(x/99))
MickyT

Moins deux! Merci @MickyT, je pensais que c'était déjà fait.
freekvd

1
@freekvd Cela dépend en général de l'ordre dans lequel les arguments sont accédés à l' intérieur de la fonction (puisque les arguments sont évalués paresseusement). Vous pouvez tester cela en ayant f = function (a, b) { a; b}puis en appelant f(x <- 5, x). Cela fonctionne comme prévu. Une fois que vous inversez les arguments dans fla définition de (et rm(x)), cela ne fonctionne plus.
Konrad Rudolph

1
On dirait que l'évaluation commence à sq = x, donc je peux couper un autre caractère avec ça. Merci @ KonradRudolph
freekvd

1
symbols(x,,,x<-50:99,bg=gray(x/99))
Réduit

21

Java - 180

Assez simple, il suffit de dessiner des boîtes.

import java.awt.*;void f(){new Frame(){public void paint(Graphics g){for(int i=1;i<51;g.setColor(new Color(328965*i)),g.fillRect(i%8*20,i++/8*20,20,20))setSize(600,600);}}.show();}

entrez la description de l'image ici

Avec des sauts de ligne:

import java.awt.*;
    void f(){
        new Frame(){
            public void paint(Graphics g){
                for(int i=1;
                    i<51;
                    g.setColor(new Color(328965*i)),
                    g.fillRect(i%8*20,i++/8*20,20,20))
                    setSize(600,600);
            }
        }.show();
    }

Si quelqu'un s'oppose à ce que la dernière case soit techniquement blanche, il suffit de changer le multiplicateur de couleurs en 263172. Même nombre d'octets, je pense simplement que le résultat est meilleur.
Geobits

Je pense que vous pourriez également utiliser à la int i;place de, int i=1mais utiliser ensuite ++ilors de la première utilisation de iau lieu de i++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 sans class MyClass ... public static void main(... !!!
mardi

@flawr Nah, Java n'initialise pas les variables locales aux valeurs par défaut. Cela pourrait fonctionner si je le déplaçais en dehors de la fonction. Si je donnais un programme complet à la place, je l’essayerais de cette façon (c’est juste une fonction, plus l’importation nécessaire). Merci
quand

2
@flawr Si le programme était complet, alors oui, vous en auriez besoin. Ceci est juste une fonction , puisque la question ne spécifie pas.
Geobits

1
@AJMansfield Je sais, mais je considère le traitement d'un langage différent et j'aime jouer au golf en Java Java.
Geobits

17

BBC BASIC, 57

FORn=51TO2STEP-1VDU19;-1,n,n,n:RECTANGLEFILL0,0,n*20NEXT

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.

entrez la description de l'image ici


2
Rappelez-vous vos abréviations BBC Basic? F., N., S., V. -> F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
SeanC

@SeanCheshire bbcbasic.co.uk/bbcwin/bbcwin.html prend en charge ces abréviations, je n'ai jamais pensé à vérifier! Votre chemin compte pour 50. La taille de fichier avec jeton est de 41 octets (chaque mot-clé token est lié à un seul octet en dehors de la plage ASCII) bien que je ne compte pas souvent de cette façon. Je vais utiliser votre astuce à l'avenir si!
Level River St

17

ipython 2, 54 octets

Le mieux que je pouvais faire était avec un programme ipython. Lancer ipython avec ipython -pylabet exécuter ce programme affichera un graphique avec 50 nuances de gris sur 50 carrés:

t=arange(50);c=t/50.;scatter(t%5,t,500,zip(c,c,c),'s')

Sortie:

gris50

Solution 2:

Voici un autre programme (61 octets):

imshow(arange(50).reshape(5,10)*.02,'Greys',None,1,'nearest')

qui affiche la fenêtre suivante:

grey50b


1
Cependant, notez qu'ipython n'est pas un langage et que vous avez utilisé est la bibliothèque matplotlib de la bibliothèque Python, qui est une bibliothèque externe.
Stefano Sanfilippo

15

JavaScript ( 72 , 70 , 67 octets)

72: original (empruntant l' &#9632;utilisation intelligente de la réponse de Sphinxxx ):

for(i=90;i>40;)document.write('<font color=#'+i+i+i--+' size=7>&#9632;')

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 ...

for(i=60;--i>9;)document.write('<font color='+i+i+i+' size=7>&#9632;')

67 octets (65 caractères): permutation de l'entité contre le caractère unicode:

for(i=60;--i>9;)document.write('<font color='+i+i+i+' size=7>■')


Je pense que vous devriez commencer par i=51. Si j'ai correctement compté, il n'y a que 49 carrés?
mardi

1
J'aime beaucoup ta réponse! Cher seigneur, pourquoi je n'y avais pas pensé? +1 sur celui-ci! Je réduirais celui-ci à for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>&#9632;')ou similaire. Non testé mais ça pourrait marcher!
Ismael Miguel

1
Depuis que tu me voles, au moins voler correctement. Supprimez le #caractère pour avoir une solution longue de 70 octets.
Ismael Miguel

1
J'étais sur le point de le recommander. La valeur par défaut est le nombre d'octets, mais vous devez utiliser le caractère Unicode, car il s'agit toujours d'un nombre inférieur d'octets.
NinjaBearMonkey

1
Est-ce que la question disait exactement 50 carrés? :) (Les autres solutions dessinent également des éléments supplémentaires.) Avec cela et le littéral unicode, jusqu'à 65 octets (63 caractères): 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.
tuomassalo

13

C ++, 98 83 caractères

D'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.

#include <cstdio>
int main(){for(int i=51;i--;)printf("\e[48;2;%i;%i;%im ",i,i,i);}

L'utilisation de bibliothèques C au lieu de C ++ permet de raser certains caractères.

C, 61 58 caractères

Il 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

main(i){for(i=51;i--;)printf("\e[48;2;%i;%i;%im ",i,i,i);}

Compile avec quelques avertissements (pour supposer que le type de retour de main est int et pour inclure implicitement la déclaration de printf).


2
Si vous passez à C, vous pouvez supprimer l’inclusion et le intdevant de main et le faire compiler avec juste quelques avertissements avec gcc.
cartographe

Oui, mais ce serait une autre langue. Quoi qu'il en soit, je vais l'annexer, merci!
Rorlork

1
Vous pouvez supprimer quelques caractères de la version C si vous faites ile premier argument de main, comme dans:main(i){for(i=51;i--;)printf(...
Functino

Un seul personnage supplémentaire pour le rendre standard: \e\33
Holger

C'est du code-golf!
Rorlork

11

Python 2, 125 115 104 octets

from turtle import*
shape("square")
bk(500)
ht()
pu()
exec'color((xcor()/2e3+.5,)*3);stamp();fd(21);'*50

Exemple de sortie:

entrez la description de l'image ici

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:

"square" : Shape("polygon", ((10,-10), (10,10), (-10,10), (-10,-10)))

Si vous avez un moniteur haute résolution ou si quelques cases ne sont pas gênantes, ceci correspond à 93 octets:

from turtle import*
shape("square")
ht()
pu()
exec'color((xcor()/2e3,)*3);stamp();fd(21);'*50

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.)


Ah je vois comment tu as réalisé que Skulpt a été mis à jour. Merci pour cela, je vais probablement l'utiliser pour mettre à jour l'extrait de code.
ArtOfCode

11

J ( 43 41 40 38 33 29 caractères)

Après les suggestions de randomra .

1!:2&4'P2 ',":(,*:,],*:#?~)50

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:

50 nuances de gris


En appuyant sur le 50de 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.
randomra

C'est une bonne idée.
FUZxxl

Encore plus: inscrivez tous les chiffres 1!:2&4'P2 ',":(,*:,],*:#i.)50pour 29 caractères! Btw plotne fait pas partie de la bibliothèque standard J?
randomra

@randomra plotest 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 .
FUZxxl

10

Excel vba, 81

Dans la fenêtre immédiate:

for i=1 to 9:for j=1 to 9:k=i+j*10:cells(i,j).interior.color=rgb(k,k,k):next:next

sur la feuille active:

81 nuances représentent autant de code que 50

{81 nuances correspondent à autant de code que 50}


Eh bien, certaines personnes interprètent le "50" comme signifiant exactement 50. Dans ce cas, c'est probablement un caractère de plus pour obtenir 50 = 10 * 5 que pour obtenir 81 = 9 * 9.
Omar

@Omar, 0 à 9 et 1 à 5 produiront exactement 50 dans le même nombre de caractères .... Cela signifie également que je peux écrire la suite aussi, dans le même nombre d'octets - 0 à 9 deux fois
SeanC

1
Oh, 0 à 9! Je pensais que pour le cells(i,j)nécessaire i>0et j>0.
Omar

@ Marmar, putain, tu as raison. Je ne pouvais pas utiliser zéro
SeanC

1
Un peu plus court (61)For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
OldCurmudgeon

8

R ,3732 caractères 1 :

image(t(1:50),c=gray.colors(50))

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):

ennuyeuse

Voici une version plus agréable qui trace les carrés dans un ordre aléatoire dans une matrice (50 caractères):

image(matrix(sample(1:50),10),c=gray.colors(50))

passionnant!

(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.


1
Comment avez-vous corrigé le format d'image?
koekenbakker

? Fondamentalement identique à la deuxième version @ 37image(matrix(1:50,5),c=gray(1:50/51))
Vlo

@koekenbakker Ce n'est pas corrigé, je règle manuellement la fenêtre de sortie. Ce n'est pas parfait , mais le code ne produisent des places pour une fenêtre donnée, et tout autre code ici a des problèmes comparables.
Konrad Rudolph

8

Matlab 35 grâce aux franchises

imshow(int8(ones(20,1)*(0:.05:51)))

Matlab 36

imshow(uint8(ones(20,1)*(0:.05:51)))

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:

entrez la description de l'image ici

Matlab, 45 ans

imshow(uint8(ones(20,1)*floor(1:0.05:50.95)))

Vous pouvez supprimer 1 octet en utilisant int8 au lieu de uint8.
Sanchises

La solution des sanchises, c'est mieux!
Memming

@Memming Cela dépend de certaines fonctionnalités obscures (non documentées?) Que je n'ai découvertes qu'en les essayant. Donnez à Steffen le crédit qui lui était dû :)
Sanchises

@TheBestOne / JaBe: Votre réponse ne fonctionne pas car elle n'affiche pas de carrés. Steffen utilise int8 pour arrondir les 1000 valeurs à 50 carrés.
Sanchises

7

JavaScript, 87 90 octets

for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')

Cela 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.


1
Enregistrer 3 octets: 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)
edc65

Vous pouvez utiliser d'autres unités. 1cmou 1 9mmserait mieux et plus largement soutenu. Sans changer votre nombre d'octets.
Ismael Miguel

7

PHP, 96 88 74 octets

Merci à Ismael Miguel pour avoir économisé 22 octets!

for($i=60;--$i>9;)echo"<p style=background:#$i$i$i;height:9mm;width:9mm>";

É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 °):

Résultat


7

Matlab - 33 octets

surf(meshgrid(1:7)),colormap gray

Malgré les commandes verbeuses, le résultat est encore assez compact. Cela semble un peu mieux si vous remplacez surfpar surfacemais 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!


Utilisez ndgrid! (2 octets de moins). Et chaque carré est-il un gris différent ?
Luis Mendo

7

Javascript (77 71 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:

for(i=59;i-->9;)document.write("<hr color="+i+i+i+" size=20 width=20>")

Firefox a toujours le côté bizarre de faire des cercles.

(Petite édition: Changé for(i=61;i-->9;)pour for(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:

for(i=51;i--;)document.write("<hr color=rgb("+[i,i,i]+") size=20 width=20>");

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.


2
C'est peut-être juste moi, mais l'exécution de cet extrait de code produit principalement des cercles verts et bleus. Je vois que @ MartinBüttner m'a battu à ce commentaire, alors ce n'est pas que moi ...
MrLemon

@MrLemon Je suppose que chrome n'aime pas le RVB -.- Mais cela fonctionne sur IE11. Puisque je n'essaie pas de créer une solution multi-navigateurs, cela est acceptable. Je vais ajouter ceci à la réponse.
Ismael Miguel

@IsmaelMiguel C'est bon, je suppose. Mais juste pour la clarté, je suis sur FF en ce moment. Peut confirmer que cela fonctionne sur IE11 si.
Lemon le

@MrLemon Cela fonctionne sur IE11, depuis que j'ai essayé à la maison. Je peux fournir un écran d'impression si nécessaire. Firefox fait des cercles avec elle. Je n'ai aucune idée de comment. Il n'y a aucun moyen de l'inverser. Je m'attendais à ce que IE ait les bizarreries, pas Firefox.
Ismael Miguel

Firefox semble mettre des demi-cercles aux extrémités de <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.
MrLemon

7

Piet- 2 * 103 = 206

Ceci est unique en ce que le code source et la sortie répondent au défi:

piet

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.


6

JavaScript - 70 octets

for(i=51;i-=1;)document.write('<a style=opacity:'+i/50+'>&#9632;</a>')


6
La taille de la boîte est inférieure à 20 pixels
edc65

1
Ensuite, vous devez ajuster la taille de la police de votre navigateur;)
Sphinxxx

1
Vous devez utiliser font:3em aou font-size:3em. Je vote contre celui-ci en raison de la taille des boîtes. Jusqu'à ce que vous répariez.
Ismael Miguel

3
Vous pouvez utiliser i--au lieu de i-=1.
mardi

1
Vous pouvez utiliser la <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.
Ismael Miguel

6

Traitement, 66 caractères:

size(1000,20);for(int i=0;i<981;i+=20){fill(i/4);rect(i,0,20,20);}

nuances de gris dans le traitement


6

PHP (62 60 63 72 71 62 59 octets):

J'ai fait le plus court possible

for($i=59;$i-->9;)echo"<hr color=$i$i$i size=20 width=20>";

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' colorattribut).


Soumissions non valides et journal des modifications :

Ancienne réponse, avec 62 octets.

while($i++<51)echo"<hr color=rgb($i,$i,$i) size=20 width=20>";

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 #111au lieu de #010101pour certaines couleurs.

Cela signifiait que certaines couleurs se répètent.

Par conséquent, j'ai dû sacrifier quelques octets:

<?while(f>$c=dechex(65-$i++))echo"<hr color=#$c$c$c size=20 width=20>";

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=20pour produire des carrés parfaits .

Réduction d'un octet supplémentaire en remplaçant f!=$cpar f>$c, ce qui fonctionne parfaitement.


Version finale, sans width=20:

<?while(f!=$c=dechex(65-$i++))echo"<hr color=#$c$c$c size=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 whileboucle, comme ceci:

<?while($c=dechex(50-$i++))echo"<hr color=#$c$c$c size=20>";

Première solution:

<?for($i=50;$c=dechex($i--);)echo"<hr color=#$c$c$c size=20>";

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").


5

CSS (87 caractères)

Utilise l'animation;)

:after{content:'\25A0';font:9em z;animation:g 8s steps(50)}@keyframes g{to{color:#fff}}

La version exécutable est plus longue car Webkit a toujours besoin du préfixe du fournisseur. :(

:after{content:'\25A0';font:9em z;-webkit-animation:g 8s steps(50);animation:g 8s steps(50)}@-webkit-keyframes g{to{color:#fff}}@keyframes g{to{color:#fff}}

Si un <a>élément vide et aléatoire est autorisé , nous pouvons le réduire à 72 caractères:

a{padding:3em;animation:g 8s steps(50)}@keyframes g{to{background:#000}}

Voir? CSS est un langage de programmation légitime!


4

R, 36 octets

Je peux faire la réponse de freekvd plus courte trivialement.

x=9:59/59;symbols(x,sq=x,bg=gray(x))

Sortie

(Désolé de ne pas avoir commenté sa solution. Stackexchange ne me permet pas de commenter, de voter, etc.).


Est-ce que cela ne produit pas 51 carrés?
MickyT

Cela fait-il le plus petit carré de moins de 20 pixels de large? Cela dépend de votre résolution, mais le plus grand carré mesure 1 pouce. Ainsi, une image de 72 dpi aura un plus petit carré de 11 pixels.
freekvd

Cependant, si vous faites 1:99, vous pourriez dire que les 50 plus grands carrés répondent aux critères.
freekvd

4

PostScript, 34 octets

En codage ISO-Latin-1:

20’›‡üˆì0{’81e3’6’–10’k0ˆ                   (note, this is a Line Feed)
’c’§}’H

C'est l'équivalent binaire de:

20 setlinewidth 1020 -20 0 { dup 1e3 div setgray 10 moveto 0 10 lineto stroke } for

(Cela suppose que vous l'utilisez sur un périphérique d'au moins 1 000 points [= 10 pouces = 25,4 cm] de large.)


Donnez-nous une série d’octets codés en hexadécimal (ie:) 0f 4e 75 a3 ....
haneefmubarak

@haneefmubarak Je le ferai, je dois juste rentrer chez moi pour pouvoir utiliser mon programme de golfeur. (Le compacteur post-scriptum en ligne ne semble jamais fonctionner.)
AJMansfield

@haneefmubarak OK, mis à jour avec une représentation directe du fichier, bien que ce ne soit pas les octets hexadécimaux. (J'ajouterai cela plus tard, une fois que je pourrai utiliser le programme de conversion réel.)
AJMansfield

4

DrRacket - 83

Juste pour alléger DrRacket un an après "Introduction à la conception systématique de programmes".

EDIT :

(require htdp/image)(map(λ(i)(rectangle 50 50'solid(make-color i i i)))(range 50))

Enregistrez quelques caractères: passez de 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!
Omar

Vous pouvez sauvegarder quelques personnages en utilisant for/set:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
Alexis King

4

C # - 173

Utiliser LINQPAD

var b=new Bitmap(1000,20);var g=Graphics.FromImage(b);for(int i=0;i<50;i++)g.FillRectangle(new SolidBrush(Color.FromArgb(i*5,i*5,i*5)),new Rectangle(i*20,0,20,20));b.Dump();

Élargi :

var b = new Bitmap(1000, 20);
var g = Graphics.FromImage(b);
for (int i = 0; i < 50; i++)
    g.FillRectangle(new SolidBrush(Color.FromArgb(i * 5, i * 5, i * 5)), new Rectangle(i * 20, 0, 20, 20));
b.Dump();

Sortie :

sortie


Suggestion: for(int i=0;i<250;i+=5)et puis FromArgb(i,i,i)et Rectangle(i*4,0,20,20)donne 168
Thomas Weller

En outre, FillRectangle()a une surcharge qui prend les coordonnées du rectangle directement, de sorte que vous pouvez supprimer le new Rectangle()et sortir
Thomas Weller

4

JavaScript, 152 octets.

Ok, alors peut-être que ce n'est pas la meilleure solution mais voici la mienne.

function b(a){c=document
e=c.createElement('p')
with(e.style){background="rgb("+[a,a,a]+")"
width=height="20px"}c.body.appendChild(e)
a<245&&b(a+5)}b(0)

Voici la sortie avec css float left (juste pour faciliter le comptage des carrés) et sans:

avec css float

sans css float


2
Vous pouvez enregistrer des octets en utilisant des noms de variable d'une lettre, en varsupprimant 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.
ProgramFOX

Merci pour la contribution. J'ai réduit les espaces et ajouté le nombre d'octets, mais je ne suis pas sûr de ce que vous voulez dire par suppression des varmots - clés.
Devon Taylor

Ça ne fait rien. Je me sens stupide.
Devon Taylor

Utilisez c+=5au lieu de c=c+5. En outre, vous pouvez enregistrer 2 caractères en plaçant n=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()
mbomb007

De plus, je suis sûr que vous pouvez omettre pxla hauteur et la largeur.
mbomb007
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.