Grinin Elli Tonu


92

Erkekler ve kızlar, Fifty Shades of Grey'i gümüş ekranda görmek için heyecanlı , biz sadece rahatsız olmadan kodlamak istiyoruz, işte beynimizi seçmek için bir zorluk.

Yapman gerek:

  • Ekrana, her biri farklı gri bir gölgeyle dolu elli kare yazdırın
  • Tercih ettiğiniz dilde görüntü işleme özelliği yoksa, bir görüntü dosyası çıktısı alabilirsiniz.
  • Kareler görünür olmalı, en az 20 x 20 piksel
  • Her gölgenin benzersiz olduğundan emin olmadıkça rasgele sayılar kullanamazsınız.
  • Sen herhangi bir ağ üzerinden herhangi bir hizmet bağlanamıyorum
  • Sen Programda herhangi bir dosya okuyamaz.
  • Seçtiğiniz dilin standart kütüphanelerinden hiçbir kütüphaneyi kullanamazsınız.

Bu kod golf, bu yüzden en kısa kod kazanır.


21
Bizi rahatsız ediyorlar mıydı?
Calvin'in Hobileri

6
İtiraz: yanıltıcı unvan!
George Chalhoub

23
Piet gönderisini görecek miyiz ?
randomra

8
50 tonluk gri yarışma için üreteceğimizi düşündüğüm resimler değil.
corsiKa

3
@randomra isteyin ve aşağıdakileri alacaksınız: codegolf.stackexchange.com/questions/45736/fifty-shades-of-grey/…
captncraig

Yanıtlar:


24

MATLAB, 24 bayt

İkinci deneme, şimdi aslında kurallara uygun.

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

'I' 'InitialMagnification' anlamına geliyor, ancak görünüşe göre Matlab isim / değer çiftlerinde isimleri otomatik olarak tamamlayacak. Tabii ki iyi bir golf hilesi!

görüntü tanımını buraya girin


59

Mathematica, 30 bayt

İşte başka bir Mathematica yaklaşımı:

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

görüntü tanımını buraya girin

veya

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

görüntü tanımını buraya girin

İlki basitçe bir dizi oluşturur

{{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}}

ve ikincisi

{{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}}

Ardından, ArrayPlotbunları bir ızgara olarak çizer ve varsayılan olarak değerleri görüntülemek için gri tonlama kullanır.


Güzel kullanımı ArrayPlot.
DavidC

4
Bu komik, MatrixPlot renkleri varsayılan olarak kullanıyor gibi görünüyor, ArrayPlot'ın gri tonlama kullandığı ve bu MatrixPlot'tan kısa olan bir harf olduğu için bu şans için şanslı.
Omar,

Yapabilirsin ArrayPlot@{Range@50}, sadece 20 bayt.
Chip Hurst

@ChipHurst bunu yaptığımda, varsayılan boyut 20x20 piksel gereksinimini karşılamak için çok küçük.
Martin Ender

36

CJam - 23 (gerçek grafik çıktı yok)

CJam ekranda çizim yapamadığından (henüz?), Görüntüyü sade pgm biçiminde çıkaran bir program yazdım .
Çıktıyı 50.pgm adlı bir dosyaya kaydedin ve bir resim görüntüleyici / düzenleyici ile açın.

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

Çevrimiçi deneyin

Sonuç şöyle görünür:

50.png

Açıklama:

"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
Yani mutlu olmak elemanları arttırıyor !?
Caridorc

7
@ Sayı içeren dizilerin kardişi, evet. Ve hüzünlü olmak onları
azaltıyor

PGM'nin teknik özelliklerini takip No line should be longer than 70 characters.
etmiyorsunuz

@iKiWiXz güncellendi
aditsu

1
@iKiWiXz Yapmalı, yapmamalı. Çizgiler bundan daha uzun olabilir, ancak PGM görüntüleri üreten programlar onları 70 karakterin altında tutmaya çalışmalıdır.
FUZxxl

30

Mathematica 72 61 59 43 35 34 bayt

Geçerli sürüm (34 bayt)

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

Izgara2


Martin Büttner sayesinde önceki sürüm (59 byte).

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

Karelerin konumunu vurgulamak için mavi kenarlıklar eklendi.

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

mavi

Kare sayısı:

    Length[%[[1]]]

50


İlk deneme (72 bayt)

Kareler üst üste gelebilirse. Zgarb'ın belirttiği gibi, bir karenin bir başkasını gizlemesinin uzak bir olasılığı vardır.

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

görüntü tanımını buraya girin


Bir meydanın prensipte diğerini tamamen kapsayabileceğini, böylece 50'den daha azının görülebileceğini tahmin ediyorum.
Zgarb

2
Kesinlikle en estetik açıdan en güzel cevap.
Dan

30

Adaçayı - 26 24 35 29 karakter

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

Bu gibi görünüyor:

5x10 gri tonları

Önceki denemeler : Önce Matrix([range(50)]).plot()o zaman oldu matrix_plot([range(50)]). Bunlar şuna benziyordu:

grinin 50 Tonu

@Flawr kullanıcısı, varsayılan ayarlarla üretilen karelerin çok küçük olduğunu belirtti. Bir figsizeseçenek eklemek onu düzeltir, ancak bu cevabın başındaki 5x10 sürümünden 6 karakter daha uzundur:

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

51 gölgeye benziyor ve kareler 20x20 pikselden daha küçük görünüyor, programınız tarafından üretildiğinde daha mı büyük?
kusur

Fazladan çıkışın yasak olduğunu sanmıyorum, @flawr, çerçeveyi, imleri ve sayıları da çıkarmayı zahmet etmedim. Karelerin çok küçük olması konusunda haklı olabilirsin, kontrol edeceğim.
Omar,

Ahh! @flawr haklı, kareler 20 piksele 20 piksele daha küçük.
Omar,

Ekstra verimin yasaklanması gerektiğini söyleyebilirim. Soru, '50 veya daha fazla' değil '50' yi belirtir.
Joe,

1
Doğru anlıyor muyum @Joe, çerçeveye ve çerçevenin dışındaki sayılara, sadece kare sayısına itiraz etmiyor musunuz? Bu durumda, sadece 50 ile 49 yerine 49.
Omar

23

R, 47 42 39 38 37 36 35 bayt

Üst üste gelmelerine izin verildiğini varsayarsak, bu işe yarar. Symbolsher kare için boyutu tutan bir vektör gerektirir ve aynı işlevi tüm işlev parametreleri için yeniden kullanarak yer tasarrufu yapıyorum. En büyük kare her zaman 1 inç genişliğindedir. Tam sayı aralığı olarak 50:99 ile en küçük kare yarım inç genişliğinde olacaktır, yani 72 dpi'de 36 piksel.

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

Yorumlarınız ve önerileriniz için herkese teşekkürler, ben R için oldukça yeniyim, bu yüzden hepsi çok eğitici.

yeni ve geliştirilmiş?

Önceki sürümler:

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

Önceki Resim: 50 ton R


Birkaç tane daha symbols(x<-50:99,sq=x,bg=gray(x/99))
kazanabilir

Eksi iki! Teşekkürler @MickyT, zaten yapıldığını düşündüm.
freekvd

1
@freekvd Genelde, bu , işlev içindeki bağımsız değişkenlerin erişilme sırasına bağlıdır (çünkü değişkenler tembelce değerlendirilir). Bunu f = function (a, b) { a; b}arayarak ve sonra arayarak test edebilirsiniz f(x <- 5, x). Bu beklendiği gibi çalışır. Argümanların ftanımındaki (ve rm(x)) argümanları tersine çevirdiğinizde, artık işe yaramaz.
Konrad Rudolph

1
Değerlendirme sq = x ile başlıyor gibi görünüyor, bu yüzden bununla başka bir karakter çıkarabilirim. Thanks @KonradRudolph
freekvd

1
1 byte symbols(x,,,x<-50:99,bg=gray(x/99))
azaltın

21

Java - 180

Oldukça basit, sadece çizim kutuları.

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();}

görüntü tanımını buraya girin

Satır sonları ile:

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();
    }

Son kutuya teknik olarak beyaz olan herhangi biri karşı çıkarsa, renk çarpanını 263172 olarak değiştirin. Aynı bayt sayısı, sadece daha iyi göründüğünü düşünüyorum.
Geobits

Sanırım int i;yerine de kullanabileceğinizi int i=1ama sonra son oluşum yerine ++iilk kullanımda kullanmanız 2 bayt tasarruf edeceğini düşünüyorum. BTW: Java programını onsuz yapabileceğinizi bile bilmiyordum !!! ii++ class MyClass ... public static void main(...
kusur

@flawr Nah, Java yerel değişkenleri varsayılan değerlere sıfırlamaz. İşlevin dışına çıkardıysam işe yarayabilir. Onun yerine tam bir program veriyor olsaydım, o şekilde denerdim (bu sadece bir fonksiyon, gerekli ithalat). Teşekkürler, yine de :)
Geobits

2
@flawr Eğer tam bir program olsaydı, evet, buna ihtiyacınız olurdu. Bu sadece bir fonksiyondur , çünkü soru belirtmez.
Geobits,

1
@AJMansfield Biliyorum, ancak farklı bir dil işleme almayı düşünüyorum ve Java Java'da golf oynamayı seviyorum.
Geobits

17

BBC TEMEL, 57

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

Karelerin en az 20 piksel olması gerekir , ancak aynı boyutta olmaları gerektiğini söyleyecek hiçbir şey yoktur, bu yüzden sanırım bu uygun.

Daha düşük seviye VDU kodları kullanarak bunu kısaltmak mümkün olabilir. Ancak bu kalıptan daha az ilginç olana geçmek, onu daha kısa yapmak pek mümkün değildir.

görüntü tanımını buraya girin


2
BBC Basic kısaltmalarınızı hatırlıyor musunuz? 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 bu kısaltmaları destekliyor, kontrol etmeyi hiç düşünmedim! Yolunuz 50 olarak sayılır. Belirtilen dosya boyutu 41 bayttır (her anahtar kelime ASCII aralığının dışında tek bir bayt olarak belirtilmiştir), ancak bu şekilde sayılmaz. Yine de bahşişini kullanacağım!
Seviye Nehri St

17

ipython 2, 54 bayt

Yapabileceğimin en iyisi bir ipython programındaydı. ipython -pylabBu programla ipython'u başlatmak ve yürütmek, 50 karede 50 gri tonu içeren bir grafik gösterecektir:

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

Çıktı:

grey50

2. Çözüm:

İşte başka bir program (61 bayt):

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

aşağıdaki pencereyi görüntüler:

grey50b


1
Ancak, ipython'un bir dil olmadığını ve kullandığınızın harici bir lib olan Python kütüphanesi matplotlib olduğunu unutmayın.
Stefano Sanfilippo

15

JavaScript ( 72 , 70 , 67 bayt)

72: orijinal ( Sphinxxx'in cevabından zekice &#9632;kullanımı ödünç almak ):

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

70: döngüden daha kısa olan ve tarayıcının renk kodunun ilerlememesi eksikliğini düzeltmek için izin veren Ismael Miguel'den (oyları hak eden) utanmadan çalmak ...

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

67 bayt (65 karakter): unicode karakterinin varlığının değiştirilmesi:

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


Bence başlamalısın i=51. Doğru saydıysam, sadece 49 kare var?
kusur

1
Cevabını gerçekten beğendim! Sevgili Lordum, neden düşünmedim? Bunun üzerine +1! Bunu buna for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>&#9632;')benzer ya da düşürürdüm. Denenmemiş ama işe yarayabilir!
Ismael Miguel,

1
Benden çaldığın için, en azından düzgün çal. #70 bayt uzunluğunda bir çözüme sahip olan karakteri kaldırın .
Ismael Miguel,

1
Bunu önermek üzereydim. Varsayılan bayt sayıyor, ancak Unicode karakterini kullanmalısınız, çünkü hala daha az bayt.
NinjaBearMonkey 18:15

1
Soru tam olarak 50 kare mi dedi ? :) (Diğer çözümler de ekstra şeyler çizer.) Bununla ve unicode değişmez, 65 byte'a kadar (63 karakter): for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')- AMA en azından tarayıcımın varsayılan ayarlarında (OSX / Chrome) kutu 20x20'den biraz daha küçük Yine de pikseller, bu nedenle bu ■ temelli çözümler sorgulanabilir.
tuomassalo

13

C ++, 98 83 karakter

Tamam, gerçek renkleri destekleyen bir terminal emülatörüne ihtiyacınız olacak. Örneğin, işletim sistemleri için, örneğin iTerm2'nin gece yapıları vardır. Unix için konsole'nin desteklediğine inanıyorum. İşte durumda, sadece bir liste: https://gist.github.com/XVilka/8346728#now-supporting-truecolor

G ++ ile derleyin (\ e derleyiciye bağımlıdır).

Karelerin yeterli alana sahip olması için terminal font boyutunu değiştirmeniz gerekecektir.

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

C ++ yerine C kütüphanelerinin kullanılması bazı karakterlerin tıraş edilmesine izin verir.

C, 61 58 karakter

Bu aynı programdır, fakat int döndürülmeyen işlev bildirimlerini int döndürmek için kabul eden ve bu örnekte, printf gibi bazı standart kütüphane işlevlerini içermesi gerekmeyen C'de. @Cartographer tarafından önerildi. @ User3601420 sayesinde üç karakter daha az

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

Birkaç uyarıyla derlenir (ana geri dönüş tipinin int olduğu varsayılır ve dolaylı olarak da printf bildirgesi dahil).


2
Bunu C ye değiştirirseniz, dahil intolanı ve ana cihazın önüne bırakabilir ve gcc ile birkaç uyarıyla derleyebilirsiniz.
haritacı

Evet, ama bu başka bir dil olabilir. Neyse, ekleyeceğim, teşekkür ederim!
rorlork

1
iİlk argümanı şu şekilde yaparsanız, C sürümünden birkaç karakter kaldırabilirsiniz :main(i){for(i=51;i--;)printf(...
Functino

Standart hale getirmek için sadece bir ek karakter: \e\33
Holger

Bu kod golf!
rorlork

11

Python 2, 125 115 104 bayt

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

Örnek çıktı:

görüntü tanımını buraya girin

Eski güzel kaplumbağa. Bu, yalnızca standart kütüphaneleri kullanarak görüntüleri bir ekrana basan Python'da düşünebildiğim tek yöntemdi.

Kare kaplumbağa şekli sadece 21'e 21'dir, bu da çok uygundur. Bu kazarak görülebilir turtle.py:

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

Yüksek çözünürlüklü bir monitörünüz varsa veya birkaç karenin ekran dışı olmasına aldırış etmiyorsanız, bu 93 bayttır:

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

gösteri

(Bu demo, burada bulunan snippet'i uyarlayarak Skulpt'u kullanıyor . Yalnızca kodun ne yaptığı hakkında bir fikir vermek için dahil edildi - çalışmasını sağlamak için birkaç bit değiştirmek zorunda kaldım.)


Ah, skulpt'un güncellendiğini nasıl farkettin. Bunun için teşekkürler, pasajı güncellemek için muhtemelen kullanacağım.
ArtOfCode

11

J ( 43 41 40 38 33 29 karakter)

Öneri için sonra randomra .

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

Bu çözüm, standart J kütüphanesi GUI yordamları içermediğinden hiçbir şey göstermez. Bunun yerine bir görüntü oluşturup standart çıktıya yazarım. Çıktı rastgeledir, tüm gölgelerin farklı olmasını sağlar. İşte bazı örnek çıktılar ve görüntü png'ye dönüştürülür ve daha kolay görüntüleme için 90 ° döndürülür:

Grinin 50 tonu


50Başlığı 50 * 50 kareleri kullanarak oluşturulan bölüme itmek 1 byte: kaydeder 1!:2&4'P2 50 2500 ',":(,*:#i.)50.
randomra

Güzel bir fikir.
FUZxxl

Dahası: 1!:2&4'P2 ',":(,*:,],*:#i.)5029 numara için tüm sayıları gir! BTW plotstandart J kütüphanesinin bir parçası değil mi?
randomra

@randomra plotpaket yöneticisinden indirebilirsiniz yardımcı paketlerinden biridir. Standart kütüphanenin bir parçası olarak görmezdim .
FUZxxl

10

Excel vba, 81

Hemen pencerede:

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

aktif sayfada:

81 renk tonu 50 kadar kod

{81 renk, en az 50 kadar koddur}


Eh, bazı insanlar "50" yi tam anlamıyla 50 olarak yorumluyorlar. Bu durumda, muhtemelen 50 = 10 * 5 almak, 81 = 9 * 9 almaktan daha fazla karakter olmalı.
Omar,

İki kez 0 ila 9 - @Omar, 0 05-09 Ocak ve aynı karakter sayısında tam 50 üretecek .... Bu aynı zamanda ben bayt aynı sayıda da devam filmi yazma anlamına gelir
SeanC

1
Ah, 0 ila 9! Senin için cells(i,j)ihtiyacın olduğunu düşündüm i>0ve j>0.
Omar

@Omar, kahretsin, haklısın. Sıfır kullanamıyorum
SeanC

1
Biraz daha kısa (61)For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
OldCurmudgeon

8

R ,3732 karakter 1 :

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

Bununla birlikte, bu görünüm… meh (görüntü metne daha iyi sığacak şekilde 90 ° döndürülmüş; sıkıştırılmış, orijinal kare kenar uzunluğu> 20 piksel

sıkıcı

Kareleri bir matrisin içinde (50 karakter) rasgele sırada çizen daha hoş bir sürüm:

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

heyecan verici!

(Ve evet, aynı renkteki üç bitişik kare aslında üç farklı gri tonudur.)

1 Evet, başka bir R cevap,ve en kısa zamanda bile(şimdi R için en kısa) - özür dilerim. R'de güzel bir render eksikti .


1
En boy oranını nasıl düzelttiniz?
koekenbakker

? Temel olarak, ikinci olarak aynı sürüm 37 @image(matrix(1:50,5),c=gray(1:50/51))
VLO

@koekenbakker Sabit değil, manuel olarak çıkış penceresini ayarlıyorum. Mükemmel değil ama kod yapar , belirli bir pencere için kareler üretmek ve diğer kod burada karşılaştırılabilir sorunları vardır.
Konrad Rudolph

8

Matlab 35 sanchise sayesinde

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

Matlab 36

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

1 - 50 gri değerleriyle dolu 50 kare ve 0 ve 51 gri değerleriyle dolu 2 ek dikdörtgen gösterir:

görüntü tanımını buraya girin

Matlab, 45

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

Uint8 yerine int8 kullanarak 1 baytını tıraş edebilirsiniz.
Sanchises

sanchises'ın çözümü daha iyi!
15

@Memming Sadece halt için denemek tarafından öğrendiğim bazı karanlık (belgesiz mi?) Özelliklerden yararlanıyor. Steffen'a kredisini
verdim, para bitti

@ TheBestOne / JaBe: Cevabınız kareleri göstermediğinden aslında çalışmıyor. Steffen, 1000 veya daha fazla değeri 50 kareye yuvarlamak için int8 kullanır.
Sanchises

7

JavaScript, 87 90 bayt

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

Bu, HTML'ye kareleri çıkarır, çünkü gerçekten JavaScript'in tek grafiksel çıktı yöntemidir. 3 byte'lık tıraş için edc65'e teşekkürler.


1
3 bayt Kaydet: for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>'). Tek basamak kullanamazsınız çünkü griler benzersiz olmaz (# # 111111 ile aynı renk)
edc65

Diğer birimleri kullanabilirsiniz. 1cmya da 1 9mmdaha iyi ve daha yaygın olarak desteklenirdi. Bayt sayınızı değiştirmeden.
Ismael Miguel

7

PHP, 96 88 74 bayt

22 bayt'ı kurtardığı için Ismael Miguel'e teşekkürler!

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

<p>Yüksekliği ve genişliği 9 mm olan (ekranların çoğunda 20 pikselden büyük olmalıdır), tümü birbirinden gölgede küçük bir fark olacak şekilde 50 s yazar .

Oluşturulan sonuç (görüntü uzaklaştırılır ve 90 ° döndürülür):

Sonuç


7

Matlab - 33 bayt

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

Ayrıntılı komutlara rağmen, sonuç hala oldukça kompakt. Değiştirmek eğer biraz daha iyi görünüyor surfile surfaceancak 3 karakter mal olur.

50. gri kareyi farketmezseniz, bunun nedeni diğerlerinden biraz daha büyük olmasıdır!


Kullanın ndgrid! (2 bayt daha az). Ve, her kare farklı bir gri mi?
Luis Mendo

7

Javascript (77 71 bayt):

Bu cevap artık IE11 tabanlı değil. Tarayıcı çalışır, çünkü kötü renk kodlarını kullanılabilir kodlara dönüştürür ( #sayıya ekleyerek ).

İşte kod:

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

Firefox hala daireler çizme tuhaflığına sahip.

(Küçük düzenleme: 52 kare ürettiği for(i=61;i-->9;)için değiştirildi for(i=59;i-->9;))


Eski cevap:

Bu benim PHP cevabıma dayanıyor ve kareleri yapmak için neredeyse aynı yöntemleri kullanıyor:

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

En kısa cevap değil, ama buraya eklemeye değer.


Bu çözüm Chrome (birden fazla yeşil renk üretir) ve Firefox (aynı sonuç, ancak daireler üretir? OO WTH?) İle uyumlu değildir

Bu kod golf olduğundan, belirli bir sürümle veya belirli bir yazılımla çalışan bir çözüm kabul edilebilir.


2
Sadece ben olabilirim, ancak bu kod parçasını çalıştırma çoğunlukla yeşil ve mavi daireler oluşturur. @ MartinBüttner bu yorumu beni yendi, bu yüzden sadece ben değilim ...
MrLemon

@MrLemon Sanırım krom RGB'den hoşlanmıyor -.- Fakat IE11'de de çalışıyor. Çapraz tarayıcı çözümü yapmaya çalışmadığım için, bu kabul edilebilir. Bunu cevaba ekleyeceğim.
Ismael Miguel,

@IsmaelMiguel Her şey yolunda sanırım. Ama sadece netlik için, şu anda FF'deyim. Yine de IE11 üzerinde çalıştığını onaylayabilir.
MrLemon

@MrLemon Evde çalıştığımdan beri IE11'de çalışıyor. Gerekirse baskı ekranı sağlayabilirim. Firefox bununla çevreler yapar. Nasıl f # $ ing ing fikrim yok. Geri döndürmenin yolu yok. IE'nin Firefox'u değil de tuhaflıklar olacağını umuyordum.
Ismael Miguel,

Firefox <hr>muhtemelen daha düzgün görünmesi için uçlarına yarım daireler koymuş gibi görünüyor . Renklerle ne olduğuna dair hiçbir ipucu yok. Her neyse, beni şaşırtmak için + 1'im var.
MrLemon

7

Piet-2 * 103 = 206

Bu, kaynak kod ve çıktının mücadeleyi yerine getirmesi bakımından benzersizdir:

pınar

Çoğu dekoratif, bu yüzden sadece tek başına iyi duran iki sırayı saydım. Bazılarının yaptığı gibi gri tonlamalı bir ppm çıktısı alır.


6

JavaScript - 70 bayt

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


6
Kutu boyutu 20 pikselden daha küçük
edc65

1
O zaman tarayıcınızın yazı tipi boyutunu ayarlamanız gerekir;)
Sphinxxx

1
Sen kullanmak zorunda font:3em aya font-size:3em. Kutuların boyutundan dolayı bunu küçültüyorum. Düzeltene kadar.
Ismael Miguel,

3
Sen kullanabilirsiniz i--yerine i-=1.
kusur

1
<b>Etiketi kullanabilirsiniz . Metnin siyah olmasını sağlamak dışında kodu hiçbir şekilde değiştirmez. Bu bir zorunluluk değil, ama iyi bir fikir olabilir.
Ismael Miguel,

6

İşlem, 66 karakter:

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

İşlemdeki gri gölgeler


6

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

Bulabildiğim kadarını yaptım:

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

Bu tamamen Javascript cevabımdaki kodun aynısıdır (71 bayt ile) .

Ama çok daha kısa!

Bu Firefox'ta bir tuhaflık var: kareler yerine, Firefox çevreler ! (Delilik Go!)
Bunun dışında Othen, tüm tarayıcılar (hatta eksik Doğru rengi üretmek #üzerine colorözniteliği).


Geçersiz gönderimler ve değişiklik listesi :

62 byte ile eski cevap.

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

Tüm gölgeler mükemmel şekilde hizalanır.

Bu çözüm, Chrome (birden çok renkli kareler üretecek) ve Firefox (daireler yapan o Evet, daireler olan <hr>! Yatay cetvel, Firefox'ta bir dairedir!) İçin çalışmaz .
IE11'de test edebilirsiniz ve iyi olması gerekir.


(sadece yukarıdan kaldırıldı)

Berbat bir şey fark ettim: Bazı renkler #111yerine çıktı #010101.

Bu, bazı renklerin tekrarlandığı anlamına geliyordu.

Bu nedenle, birkaç bayt feda etmek zorunda kaldım:

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

50 renk tonunu, daha açık renkliden koyu renkli olana kadar mükemmel sırayla verir.

@ Edc65 tarafından yapılan doğru nokta nedeniyle width=20, mükemmel kareler elde etmek için eklemek zorunda kaldım .

Değiştirerek bir byte daha Azaltılmış f!=$cile f>$cmükemmel çalışıyor, hangi.


Son versiyon, olmadan width=20:

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

Bu geçersiz, çünkü karelerin çıkması için gerekli.
Bu, tonları daha açıktan daha koyuya çıkarır.


Aşağıdaki whilegibi bir döngüye geçerek azaltılmış 1 bayt :

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

İlk çözüm:

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

Bu düzgünce sipariş tonları yoktur, ancak 50 farklı vardır.

Sipariş edilmeleri gerektiğini belirten hiçbir şey yok, ancak boyutta bir gereklilik var.

Umarım daha fazla azaltabilirim.

Bunu http://writecodeonline.com/php/ adresinde test edebilirsiniz ("HTML olarak görüntüle" ye tıklayın).


5

CSS (87 karakter)

Animasyon kullanır;)

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

Çalıştırılabilir sürüm, Webkit'in satıcı önekine hala ihtiyacı olduğu için daha uzun. :(

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

Eğer rastgele, boş bir <a>elemente izin verilirse, onu sadece 72 karaktere indirebiliriz:

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

Görmek? CSS okunaklı bir programlama dilidir!


4

R, 36 bayt

Freekvd'ın cevabını önemsizce kısaltabilirim.

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

Çıktı

(Çözümünde yorum yapmadığım için üzgünüm. Stackexchange henüz yorum yapmama, oy kullanmama izin vermiyor).


Bu 51 kare üretmiyor mu?
MickyT

Bu, en küçük kareyi 20 piksel genişliğinden daha az yapar? Bu, dpi'nize bağlıdır, ancak en büyük kare 1 inçtir, bu nedenle 72 dpi görüntüde en küçük 11 piksel kare olacaktır.
freekvd

Her ne kadar 1:99 yaparsanız, en büyük 50 karenin kriterlere uyduğunu iddia edebilirsiniz.
freekvd

4

PostScript, 34 bayt

ISO-Latin-1 kodlamasında:

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

Bu ikili eşdeğerdir:

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

(Bu, en az 1000 punto [= 10 inç = 25,4 cm] genişliğinde bir cihazda kullandığınızı varsayar.)


Bize bir dizi onaltılık kodlanmış sekizli ok verin (örn 0f 4e 75 a3 .... :) .
haneefmubarak

@haneefmubarak Yapacağım, sadece eve gitmem gerekiyor, böylece golfçü programımı kullanabilirim. (Çevrimiçi postscript kompaktörü hiç çalışmıyor gibi görünüyor.)
AJMansfield

@ haneefmubarak Tamam, onaltılı octets olmasa da, dosyanın doğrudan temsili ile güncellendi. (Gerçek dönüştürücü programını kullanabildiğimde bunu daha sonra ekleyeceğim.)
AJMansfield

4

DrRacket - 83

Sadece "Sistematik Program Tasarımına Giriş" den 1 yıl sonra DrRacket'i ateşlemek adına.

EDIT :

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

Anahtarı: Bir karakter çift kaydet 2htdp/imageiçin htdp/image, dize değiştirmek "solid"sembole 'solid. Daha büyük tasarruflar için, değiştirmek (range 9 209 4)için (range 50): gri tonlarında sadece farklı insan gözü için ayırt etmek kolay değildir olmaları gerekmektedir!
Omar,

Aşağıdakileri kullanarak birkaç karakter kaydedebilirsiniz for/set:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
Alexis King

4

C # - 173

LINQPAD'i Kullanma

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();

Genişletilmiş :

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();

Çıktı :

çıktı


Öneri: for(int i=0;i<250;i+=5)ve sonra FromArgb(i,i,i)ve Rectangle(i*4,0,20,20)168 verir
Thomas Weller

Ayrıca, FillRectangle()dikdörtgenin koordinatlarını doğrudan alan bir aşırı yüke sahiptir, böylece new Rectangle()153
Thomas Weller

4

JavaScript, 152 bayt.

Tamam, belki de bu en iyi çözüm değil ama işte benim.

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)

Css float left (sadece kareleri saymak daha kolay) ve olmayanlar:

css şamandıralı

css float olmadan


2
Bazı baytları tek harfli değişken adları kullanarak, tüm varanahtar kelimeleri bırakarak ve gereksiz boşlukları kaldırarak kaydedebilirsiniz . Ayrıca, lütfen cevabınıza dil adını ve bayt sayısını da ekleyin.
ProgramFOX

Giriş için teşekkürler. Beyaz alanı azalttım ve bayt sayısını ekledim, ancak varanahtar kelimeleri bırakarak ne demek istediğinizi anlamadım .
Devon Taylor

Boşver. Aptal hissediyorum.
Devon Taylor

Yerine c+=5kullanın c=c+5. Ayrıca, n=c.toString()önceki satırın sonuna ve ardından önceki satırın sonundaki o satırı tekrar koyarak 2 karakter kaydedebilirsiniz . Böylece 2. function w(){if(c<250){n=c.toString()
sıranız

Ayrıca, pxyükseklik ve genişlik için ihmal edebileceğinize eminim .
mbomb007
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.