Năm mươi sắc thái của màu xám


92

Các chàng trai và cô gái rất hào hứng khi thấy Fifty Shades of Grey trên màn bạc, chúng tôi chỉ muốn viết mã mà không bị làm phiền, vì vậy đây là một thách thức để chọn bộ não của chúng tôi.

Bạn phải:

  • In trên màn hình năm mươi hình vuông đầy mỗi màu xám khác nhau
  • Nếu ngôn ngữ bạn chọn thiếu khả năng xử lý hình ảnh , bạn có thể xuất tệp hình ảnh
  • Hình vuông phải được nhìn thấy, ít nhất 20 x 20 pixel
  • Bạn không thể sử dụng các số ngẫu nhiên trừ khi bạn đảm bảo mỗi bóng là duy nhất.
  • Bạn không thể kết nối với bất kỳ dịch vụ nào qua bất kỳ mạng nào
  • Bạn không thể đọc bất kỳ tập tin trong chương trình của bạn.
  • Bạn không thể sử dụng bất kỳ thư viện nào trong số các thư viện tiêu chuẩn của ngôn ngữ bạn chọn.

Đây là mã golf nên mã ngắn nhất sẽ thắng.


21
Họ có làm phiền chúng tôi không?
Sở thích của Calvin

6
Phản đối: tiêu đề sai lệch!
George Chalhoub 16/2/2015

23
Chúng ta sẽ thấy một đệ trình của Piet ?
ngẫu nhiên 16/2/2015

8
Không phải những hình ảnh tôi nghĩ chúng ta sẽ tạo ra cho một cuộc thi màu xám 50.
corsiKa

Câu trả lời:


24

MATLAB, 24 byte

Nỗ lực thứ hai, bây giờ thực sự tuân thủ các quy tắc.

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

'Tôi' là viết tắt của 'InitialMagnification', nhưng rõ ràng Matlab sẽ tự động điền tên trong các cặp tên / giá trị. Chắc chắn là một mẹo chơi golf tốt!

nhập mô tả hình ảnh ở đây


59

Toán học, 30 byte

Đây là một cách tiếp cận Mathicala khác:

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

nhập mô tả hình ảnh ở đây

hoặc là

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

nhập mô tả hình ảnh ở đây

Cái đầu tiên chỉ đơn giản là tạo một mảng

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

và cái thứ hai

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

Sau đó, ArrayPlotvẽ chúng dưới dạng lưới và theo mặc định, sử dụng thang độ xám để trực quan hóa các giá trị.


Đáng yêu sử dụng ArrayPlot.
DavidC

4
Thật là buồn cười, MatrixPlot dường như sử dụng màu sắc theo mặc định, thật may mắn cho thử thách này khi ArrayPlot sử dụng thang độ xám và nó ngắn hơn một chữ cái so với MatrixPlot.
Omar

Bạn có thể làm ArrayPlot@{Range@50}, chỉ có 20 byte.
Chip Hurst

@ChipHurst khi tôi làm điều đó, kích thước mặc định quá nhỏ để đáp ứng yêu cầu 20x20 pixel.
Martin Ender

36

CJam - 23 (không có đầu ra đồ họa thực tế)

Vì CJam không thể vẽ trên màn hình (chưa?), Tôi đã viết một chương trình xuất ra hình ảnh ở định dạng pgm đơn giản .
Lưu đầu ra vào một tệp có tên 50.pgm và mở bằng trình xem / chỉnh sửa hình ảnh.

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

Dùng thử trực tuyến

Kết quả trông như thế này:

50.png

Giải trình:

"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
Vì vậy, hạnh phúc gia tăng các yếu tố!?
Caridorc 16/2/2015

7
@Caridorc của mảng chứa số, vâng. Và buồn bã làm họ thất vọng: p
aditsu 16/2/2015

Bạn không tuân theo thông số kỹ thuật của PGM:No line should be longer than 70 characters.
kiwixz

@iKiWiXz được cập nhật
aditsu 19/2/2015

1
@iKiWiXz Nên, không phải. Các dòng có thể dài hơn thế nhưng các chương trình tạo hình ảnh PGM nên cố gắng giữ chúng dưới 70 ký tự.
FUZxxl

30

Toán học 72 61 59 43 35 34 byte

Phiên bản hiện tại (34 byte)

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

lưới 2


Phiên bản trước đó (59 byte), nhờ Martin Büttner.

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

Đường viền màu xanh được thêm vào để làm nổi bật vị trí của hình vuông.

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

màu xanh da trời

Số ô vuông:

    Length[%[[1]]]

50


Lần thử đầu tiên (72 byte)

Nếu hình vuông có thể chồng lên nhau. Như Zgarb lưu ý, có một khả năng từ xa là một hình vuông sẽ ẩn một hình vuông khác.

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

nhập mô tả hình ảnh ở đây


Tôi đoán rằng về nguyên tắc, một hình vuông có thể bao phủ hoàn toàn một hình vuông khác, sao cho có thể nhìn thấy dưới 50?
Zgarb

2
Chắc chắn là câu trả lời thẩm mỹ nhất.
Dan

30

Hiền nhân - 26 24 35 29 ký tự

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

Nó trông như thế này:

5x10 sắc thái của màu xám

Những lần thử trước : Đầu tiên tôi đã có Matrix([range(50)]).plot(), sau đó matrix_plot([range(50)]). Chúng trông như thế này:

50 sắc thái của màu xám

Người dùng @flawr chỉ ra rằng các ô vuông được tạo với cài đặt mặc định là quá nhỏ. Thêm một figsizetùy chọn sẽ sửa nó, nhưng nó dài hơn 6 ký tự so với phiên bản 5x10 ở đầu câu trả lời này:

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

Hình như 51 sắc thái và hình vuông trông nhỏ hơn 20x20px, nó có lớn hơn khi được sản xuất bởi chương trình của bạn không?
flawr

Tôi không nghĩ đầu ra thêm bị cấm, @flawr, tôi cũng không buồn xóa khung hình, đánh dấu và số. Bạn có thể đúng về các hình vuông quá nhỏ, tôi sẽ kiểm tra.
Omar

Argh! @flawr đúng là các hình vuông nhỏ hơn 20px x 20px.
Omar

Tôi sẽ nói đầu ra thêm nên bị cấm. Câu hỏi chỉ định '50', không phải '50 trở lên '.
Joe

1
Tôi có hiểu chính xác không, @Joe, rằng bạn không phản đối khung hình và các số bên ngoài khung, chỉ với số lượng hình vuông? Nếu đó là trường hợp, chỉ cần thay thế 50 bằng 49.
Omar

23

R, 47 42 39 38 37 36 35 byte

Giả sử chúng được phép trùng nhau, điều này hoạt động. Symbolsyêu cầu một vectơ giữ kích thước cho mỗi ô vuông và tôi đang tiết kiệm không gian bằng cách sử dụng lại cùng một vectơ cho tất cả các tham số hàm. Hình vuông lớn nhất luôn rộng 1 inch. Với 50:99 là phạm vi số nguyên, hình vuông nhỏ nhất sẽ rộng khoảng nửa inch, vì vậy 36 pixel ở 72 dpi.

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

Cảm ơn tất cả mọi người về những bình luận và đề xuất, tôi khá mới mẻ với R nên điều này rất giáo dục.

mới và cải tiến?

Những phiên bản trước:

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

Hình ảnh trước đó: 50 sắc thái của R


Có thể tiết kiệm thêm một chút vớisymbols(x<-50:99,sq=x,bg=gray(x/99))
MickyT

Trừ hai! Cảm ơn @MickyT, tôi nghĩ rằng nó đã được thực hiện.
freekvd

1
@galetvd Nó nói chung, nó phụ thuộc vào thứ tự mà các đối số được truy cập bên trong hàm (vì các đối số được đánh giá lười biếng). Bạn có thể kiểm tra điều này bằng cách có f = function (a, b) { a; b}và sau đó gọi f(x <- 5, x). Điều này hoạt động như mong đợi. Khi bạn đảo ngược các đối số trong fđịnh nghĩa (và rm(x)), nó sẽ không hoạt động nữa.
Konrad Rudolph

1
Có vẻ như đánh giá bắt đầu tại sq = x, vì vậy tôi có thể cắt bỏ một char khác với điều này. Cảm ơn @KonradRudolph
freekvd

1
Giảm xuống 1 bytesymbols(x,,,x<-50:99,bg=gray(x/99))
Vlo 17/2/2015

21

Java - 180

Khá đơn giản, chỉ cần vẽ hộp.

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

nhập mô tả hình ảnh ở đây

Với ngắt dòng:

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

Nếu bất kỳ ai phản đối hộp cuối cùng có màu trắng về mặt kỹ thuật, chỉ cần thay đổi hệ số nhân màu thành 263172. Cùng một số byte, tôi chỉ nghĩ rằng nó trông tốt hơn theo cách này.
Geobits 16/2/2015

Tôi nghĩ bạn cũng có thể sử dụng int i;thay vì int i=1nhưng sau đó sử dụng ++ilần đầu tiên ithay vì i++trong lần xuất hiện cuối cùng, sẽ tiết kiệm được 2 byte. BTW: Tôi thậm chí không biết bạn có thể tạo một chương trình java mà không cần class MyClass ... public static void main(... !!!
flawr

@flawr Nah, Java sẽ không khởi tạo các biến cục bộ thành các giá trị mặc định. Nó có thể hoạt động nếu tôi di chuyển nó ra ngoài chức năng. Nếu tôi đang đưa ra một chương trình đầy đủ thay vào đó, tôi sẽ thử theo cách đó (đây chỉ là một chức năng, cộng với việc nhập cần thiết). Tuy nhiên, cảm ơn :)
Geobits 16/2/2015

2
@flawr Nếu đó là một chương trình đầy đủ thì có, bạn sẽ cần nó. Đây chỉ là một chức năng , vì câu hỏi không chỉ định.
Geobits 16/2/2015

1
@AJMansfield Tôi biết, nhưng tôi xem xét Xử lý một ngôn ngữ khác và tôi thích chơi gôn trong Java Java.
Geobits 16/2/2015

17

BBC BASIC, 57

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

Các hình vuông phải có ít nhất 20 pixel nhưng không có gì để nói chúng phải có cùng kích thước, vì vậy tôi đoán điều này đủ điều kiện.

Có thể rút ngắn điều này bằng cách sử dụng nhiều mã VDU cấp thấp hơn. Nhưng việc thay đổi từ mô hình này sang một mô hình ít thú vị hơn khó có thể làm cho nó ngắn hơn.

nhập mô tả hình ảnh ở đây


2
Ghi nhớ viết tắt BBC Basic của bạn? 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 không hỗ trợ các chữ viết tắt đó, tôi không bao giờ nghĩ sẽ kiểm tra! Cách của bạn được tính là 50. Kích thước tệp được mã hóa là 41 byte (mỗi từ khóa được mã hóa thành một byte ngoài phạm vi ASCII) mặc dù tôi thường không tính theo cách đó. Tôi sẽ sử dụng mẹo của bạn trong tương lai!
Cấp sông St

17

ipython 2, 54 byte

Điều tốt nhất tôi có thể làm là với một chương trình ipython. Bắt đầu ipython với ipython -pylabvà thực hiện chương trình này sẽ hiển thị một biểu đồ với 50 sắc thái màu xám trong 50 ô vuông:

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

Đầu ra:

màu xám

Giải pháp 2:

Đây là một chương trình khác (61 byte):

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

hiển thị cửa sổ sau:

grey50b


1
Tuy nhiên lưu ý rằng ipython không phải là ngôn ngữ và những gì bạn đã sử dụng là thư viện Python matplotlib, đây là một lib bên ngoài.
Stefano Sanfilippo

15

JavaScript ( 72 , 70 , 67 byte)

72: bản gốc (mượn &#9632;cách sử dụng thông minh từ câu trả lời của Sphinxxx ):

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

70: ăn cắp một cách đáng xấu hổ từ Ismael Miguel (người xứng đáng với số phiếu), một vòng lặp ngắn hơn và cho phép trình duyệt sửa lỗi vì thiếu # tiến hành mã màu ...

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

67 byte (65 ký tự): hoán đổi thực thể cho ký tự unicode:

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


Tôi nghĩ bạn nên bắt đầu từ i=51. Nếu tôi đếm đúng, chỉ có 49 ô vuông?
flawr

1
Tôi thực sự thích câu trả lời của bạn! Thưa ngài, tại sao tôi không nghĩ về nó? +1 trên cái này! Tôi sẽ giảm cái này xuống for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>&#9632;')hoặc tương tự. Chưa được kiểm tra nhưng nó có thể hoạt động!
Ismael Miguel

1
Vì bạn đang ăn cắp từ tôi, ít nhất là ăn cắp đúng cách. Xóa #ký tự để có một giải pháp dài 70 byte.
Ismael Miguel

1
Tôi chỉ muốn giới thiệu điều đó. Mặc định là đếm byte, nhưng bạn nên sử dụng ký tự Unicode vì nó vẫn còn ít byte hơn.
NinjaBearMonkey 18/2/2015

1
Câu hỏi có nói chính xác 50 ô vuông không? :) (Các giải pháp khác cũng rút ra nhiều thứ bổ sung.) Với điều đó và unicode bằng chữ, giảm xuống còn 65 byte (63 ký tự): for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')- NHƯNG ít nhất trên các cài đặt mặc định của trình duyệt của tôi (OSX / Chrome), hộp nhỏ hơn một chút so với 20x20 pixel nào, vì vậy những giải pháp dựa trên ■ này là nghi vấn.
tuomassalo

13

C ++, 98 83 ký tự

Được rồi, bạn sẽ cần một trình giả lập thiết bị đầu cuối hỗ trợ màu sắc trung thực. Ví dụ, đối với mac os, có các bản dựng hàng đêm của iTerm2. Đối với unix tôi tin rằng konsole hỗ trợ nó. Đây là một danh sách, chỉ trong trường hợp: https://gist.github.com/XVilka/8346728#now-supporting-truecolor

Biên dịch với g ++ (\ e phụ thuộc vào trình biên dịch).

Để các ô vuông có đủ diện tích, bạn sẽ phải thay đổi kích thước phông chữ đầu cuối.

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

Sử dụng thư viện C thay vì C ++ cho phép cạo một số ký tự.

C, 61 58 ký tự

Đây là cùng một chương trình nhưng trong C, giả sử khai báo hàm chưa được trả về để trả về int và không cần bao gồm một số hàm thư viện chuẩn, như trong trường hợp này, printf. Được đề xuất bởi @cartogologists. Ba ký tự ít hơn nhờ @ user3601420

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

Biên dịch với một vài cảnh báo (giả sử kiểu trả về của chính là int và hoàn toàn bao gồm khai báo printf).


2
Nếu bạn chuyển đổi nó thành C, bạn có thể bỏ bao gồm và intphía trước chính và biên dịch nó chỉ với một vài cảnh báo với gcc.
vẽ bản đồ

Vâng, nhưng đó sẽ là một ngôn ngữ khác. Dù sao, tôi sẽ nối nó, cảm ơn bạn!
rorlork 17/2/2015

1
Bạn có thể xóa một vài ký tự khỏi phiên bản C nếu bạn đưa iđối số đầu tiên thành chính, như trong:main(i){for(i=51;i--;)printf(...
Funcino 17/2/2015

Chỉ có một ký tự bổ sung để làm cho nó chuẩn: \e\33
Holger

Đây là môn đánh gôn!
rorlork

11

Python 2, 125 115 104 byte

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

Đầu ra mẫu:

nhập mô tả hình ảnh ở đây

Rùa già tốt. Đây là phương pháp duy nhất tôi có thể nghĩ ra trong Python in hình ảnh ra màn hình chỉ sử dụng các thư viện chuẩn.

Hình dạng con rùa vuông chỉ xảy ra vào ngày 21, 21, rất thuận tiện. Điều này có thể được nhìn thấy bằng cách đào qua turtle.py:

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

Nếu bạn có màn hình độ phân giải cao hoặc không bận tâm đến một vài ô vuông ngoài màn hình, thì đây là 93 byte:

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

Bản giới thiệu

(Bản demo này sử dụng Skulpt bằng cách điều chỉnh đoạn mã được tìm thấy ở đây . Nó chỉ được đưa vào để đưa ra ý tưởng về những gì mã làm - tôi đã phải sửa đổi một vài bit để nó hoạt động.)


Ah tôi thấy cách bạn nhận ra skulpt đã cập nhật. Cảm ơn vì điều này, tôi có thể sẽ sử dụng nó để cập nhật đoạn trích.
ArtOfCode

11

J ( 43 41 40 38 33 29 ký tự)

Sau khi gợi ý từ Randomra .

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

Giải pháp này không hiển thị bất cứ điều gì vì thư viện chuẩn của J không chứa các thường trình GUI. Thay vào đó, tôi tạo một hình ảnh và ghi nó vào đầu ra tiêu chuẩn. Đầu ra là ngẫu nhiên, nó đảm bảo rằng tất cả các sắc thái là khác biệt. Dưới đây là một số đầu ra mẫu và hình ảnh được chuyển đổi thành png và xoay 90 ° để xem dễ dàng hơn:

50 sắc thái của màu xám


Đẩy 50từ tiêu đề vào phần được tạo bằng các ô vuông 50 * 50 sẽ tiết kiệm được 1 byte : 1!:2&4'P2 50 2500 ',":(,*:#i.)50.
Randomra

Đó là một ý tưởng gọn gàng.
FUZxxl

Thậm chí nhiều hơn: đẩy tất cả các số trong 1!:2&4'P2 ',":(,*:,],*:#i.)5029 ký tự! Btw plotkhông phải là một phần của thư viện J tiêu chuẩn?
Randomra 16/2/2015

@randomra plotlà một trong những gói phụ trợ bạn có thể tải xuống từ trình quản lý gói. Tôi hầu như không xem nó là một phần của thư viện tiêu chuẩn .
FUZxxl

10

Excel vba, 81

Trong cửa sổ ngay lập tức:

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

trên bảng hoạt động:

81 sắc thái chỉ bằng 50 mã

{81 sắc thái chỉ bằng mã số 50}


Chà, một số người đang hiểu "50" có nghĩa là chính xác 50. Trong trường hợp đó, có lẽ thêm một ký tự để nhận 50 = 10 * 5 so với nhận 81 = 9 * 9.
Omar

@Omar, 0 đến 9 và 1 đến 5 sẽ tạo ra chính xác 50 trong cùng một số ký tự .... Điều này cũng có nghĩa là tôi cũng có thể viết phần tiếp theo, trong cùng một số byte - 0 đến 9 hai lần
SeanC

1
Ôi, 0 đến 9! Tôi nghĩ rằng cho các cells(i,j)bạn cần i>0j>0.
Omar

@Omar, chết tiệt, bạn đúng. Tôi không thể sử dụng số 0
SeanC

1
Hơi ngắn hơn một chút (61)For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
OldCurmudgeon

8

R ,3732 ký tự 1 :

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

Tuy nhiên, màn hình hiển thị này trông giống me meh (hình ảnh được xoay 90 ° để phù hợp hơn với văn bản; nén, chiều dài cạnh vuông ban đầu> 20px):

nhàm chán

Đây là một phiên bản đẹp hơn, vẽ các ô vuông theo thứ tự ngẫu nhiên trong một ma trận (50 ký tự):

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

thú vị!

(Và vâng, ba hình vuông liền kề có màu giống nhau thực sự là ba màu xám khác nhau.)

1 Có, một câu trả lời R khác,và thậm chí không phải là ngắn nhất(bây giờ là ngắn nhất cho R) - lời xin lỗi. Tôi đã bỏ lỡ một kết xuất đẹp trong R.


1
Làm thế nào bạn sửa chữa tỷ lệ khung hình?
koekenbakker 17/2/2015

? Về cơ bản giống như phiên bản thứ hai @ 37image(matrix(1:50,5),c=gray(1:50/51))
Vlo 17/2/2015

@koekenbakker Không được sửa, tôi đang tự điều chỉnh cửa sổ đầu ra. Đó không phải là hoàn hảo nhưng mã không tạo ra hình vuông cho một cửa sổ nào đó, và mã khác ở đây có vấn đề tương tự.
Konrad Rudolph

8

Matlab 35 nhờ sanchise

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

Matlab 36

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

Hiển thị 50 hình vuông chứa đầy giá trị màu xám 1 đến 50 và 2 hình chữ nhật bổ sung chứa giá trị màu xám 0 và 51:

nhập mô tả hình ảnh ở đây

Matlab, 45

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

Bạn có thể tắt 1 byte bằng cách sử dụng int8 thay vì uint8.
Sanchise

giải pháp của sanchise là tốt hơn!
Ghi nhớ

@Memming Nó có bản lề trên một số tính năng tối nghĩa (không có giấy tờ?) Mà tôi chỉ phát hiện ra bằng cách dùng thử để biết cái quái gì của nó. Cung cấp tín dụng Steffen đã đến hạn :)
Sanchise

@TheBestOne / JaBe: Câu trả lời của bạn thực sự không hoạt động vì nó không hiển thị hình vuông. Steffen sử dụng int8 để làm tròn 1000 giá trị hoặc hơn 50 ô vuông.
Sanchise

7

JavaScript, 87 90 byte

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

Điều này xuất ra hình vuông cho HTML, bởi vì đây thực sự là phương pháp đầu ra đồ họa duy nhất của JavaScript. Cảm ơn edc65 đã cạo sạch 3 byte.


1
Lưu 3 byte : for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>'). Không thể sử dụng một chữ số vì màu xám sẽ không phải là duy nhất (# 111 cùng màu với # 111111)
edc65

Bạn có thể sử dụng các đơn vị khác. 1cmhoặc 1 9mmsẽ tốt hơn và được hỗ trợ rộng rãi hơn. Không thay đổi số byte của bạn.
Ismael Miguel

7

PHP, 96 88 74 byte

Cảm ơn Ismael Miguel vì đã tiết kiệm 22 byte!

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

Viết 50 <p>giây với chiều cao và chiều rộng 9mm (nên lớn hơn 20px trên phần lớn màn hình), xếp chồng lên nhau, tất cả đều có một sự khác biệt nhỏ về sắc thái.

Kết quả được tạo (hình ảnh được thu nhỏ và xoay 90 °):

Kết quả


7

Matlab - 33 byte

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

Mặc dù các lệnh dài dòng, kết quả vẫn khá nhỏ gọn. Có vẻ tốt hơn một chút nếu bạn thay thế surfbằng surfacenhưng chi phí 3 ký tự.

Nếu bạn không chú ý đến hình vuông màu xám thứ 50 bởi vì nó lớn hơn một chút so với các hình vuông khác!


Sử dụng ndgrid! (Ít hơn 2 byte). Và, mỗi hình vuông là một màu xám khác nhau ?
Luis Mendo

7

Javascript (77 71 byte):

Câu trả lời này không còn dựa trên IE11. Nó hoạt động vì trình duyệt chuyển đổi mã màu xấu thành mã có thể sử dụng (bằng cách thêm #vào số).

Đây là mã:

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

Firefox vẫn không thể tạo ra các vòng tròn.

(Chỉnh sửa nhỏ: Thay đổi for(i=61;i-->9;)thành for(i=59;i-->9;)vì nó tạo ra 52 ô vuông)


Câu trả lời cũ:

Điều này dựa trên câu trả lời PHP của tôi và sử dụng các cách gần như giống nhau để tạo các hình vuông:

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

Không phải là câu trả lời ngắn nhất, nhưng nó đáng để thêm vào đây.


Giải pháp này không tương thích với Chrome (tạo ra nhiều màu xanh lục) và Firefox (cùng kết quả, nhưng tạo ra các vòng tròn? OO WTH?)

Vì đây là môn đánh gôn, nên một giải pháp làm việc với một phiên bản cụ thể hoặc một phần mềm cụ thể đều được chấp nhận.


2
Chỉ có thể là tôi, nhưng chạy đoạn mã này sẽ tạo ra các vòng tròn màu xanh lá cây và xanh dương. Tôi thấy @ MartinBüttner đã đánh bại tôi để nhận xét này vì vậy không chỉ riêng tôi ...
MrLemon

@MrLemon Tôi đoán chrome không thích RGB -.- Nhưng nó hoạt động trên IE11. Vì tôi không cố gắng tạo ra một giải pháp đa trình duyệt, điều này có thể chấp nhận được. Tôi sẽ thêm điều này vào câu trả lời.
Ismael Miguel

@IsmaelMiguel Tôi đoán vậy. Nhưng để rõ ràng, tôi đang ở FF ngay bây giờ. Có thể xác nhận nó hoạt động trên IE11 mặc dù.
MrLemon

@MrLemon Nó hoạt động trên IE11, vì tôi đã thử ở nhà. Tôi có thể cung cấp màn hình in nếu cần. Firefox tạo vòng tròn với nó. Tôi không có ý tưởng f # $% ing như thế nào. Không có cách nào để hoàn nguyên nó. Tôi đã mong đợi IE có những điều kỳ quặc chứ không phải Firefox.
Ismael Miguel

Firefox dường như đặt một nửa vòng tròn vào cuối <hr>, có lẽ để làm cho nó trông mượt mà hơn. Không có manh mối về những gì xảy ra với màu sắc. Dù sao cũng có +1 của tôi để gây trở ngại cho tôi.
MrLemon

7

Thành phố- 2 * 103 = 206

Điều này là duy nhất ở chỗ mã nguồn và đầu ra hoàn thành thử thách:

piet

Hầu hết trong số đó là trang trí, vì vậy tôi chỉ đếm hai hàng đầu, đứng một mình là tốt. Xuất ra một ppm thang độ xám như một số người khác đã làm.


6

JavaScript - 70 byte

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


6
Kích thước hộp nhỏ hơn 20 pixel
edc65

1
Sau đó, bạn cần điều chỉnh kích thước phông chữ của trình duyệt của mình;)
Sphinxxx 16/2/2015

1
Bạn phải sử dụng font:3em ahoặc font-size:3em. Tôi đang đánh giá thấp cái này do kích thước của các hộp. Cho đến khi bạn sửa chữa.
Ismael Miguel

3
Bạn có thể sử dụng i--thay vì i-=1.
flawr

1
Bạn có thể sử dụng <b>thẻ. Nó sẽ không thay đổi mã theo bất kỳ cách nào, ngoại trừ đảm bảo rằng văn bản sẽ có màu đen. Đây không phải là một yêu cầu, nhưng nó có thể là một ý tưởng tốt.
Ismael Miguel

6

Đang xử lý, 66 ký tự:

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

màu xám trong chế biến


6

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

Tôi đã thực hiện ngắn nhất tôi có thể tìm thấy:

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

Đây chính xác là mã giống như câu trả lời Javascript của tôi (với 71 byte) .

Nhưng RẤT NHIỀU !

Điều này có một điểm trừ trong Firefox: thay vì hình vuông, Firefox tạo ra các vòng tròn ! (Đi điên rồ!)
Othen hơn thế, tất cả các trình duyệt sản xuất đúng màu (ngay cả với các thiếu #trên colorthuộc tính).


Gửi và thay đổi không hợp lệ :

Câu trả lời cũ, với 62 byte.

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

Tất cả các sắc thái được liên kết hoàn hảo.

Giải pháp này sẽ không hoạt động đối với Chrome (sẽ tạo ra các hình vuông có nhiều màu) và Firefox (tạo ra các vòng tròn oO Có, các vòng tròn<hr>! Thước kẻ ngang là một vòng tròn trên Firefox!).
Bạn có thể kiểm tra nó trên IE11 và nó sẽ ổn.


(chỉ cần loại bỏ từ trên)

Tôi đã nhận thấy một điều khủng khiếp: Nó xuất ra #111thay vì #010101một số màu sắc.

Điều này có nghĩa là một số màu sắc được lặp lại.

Do đó, tôi đã phải hy sinh một vài byte:

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

Xuất ra 50 sắc thái theo thứ tự hoàn hảo, từ sáng hơn đến tối hơn.

Do một điểm chính xác được thực hiện bởi @ edc65 , tôi đã phải thêm width=20, để tạo ra các hình vuông hoàn hảo .

Giảm thêm một byte bằng cách thay thế f!=$cbằng f>$c, hoạt động hoàn hảo.


Phiên bản cuối cùng, không có width=20:

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

Điều này là không hợp lệ vì nó được yêu cầu để xuất hình vuông.
Điều này tạo ra các sắc thái từ sáng hơn đến tối hơn.


Giảm 1 byte bằng cách chuyển sang một whilevòng lặp, như thế này:

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

Giải pháp đầu tiên:

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

Cái này không có sắc thái được sắp xếp gọn gàng, nhưng có 50 cái khác nhau.

Không có gì nói rằng họ phải được đặt hàng, nhưng có một yêu cầu về kích thước.

Tôi hy vọng tôi có thể giảm nó nhiều hơn nữa.

Bạn có thể kiểm tra nó trên http://writecodeonline.com/php/ (nhấp vào "Hiển thị dưới dạng HTML").


5

CSS (87 ký tự)

Sử dụng hình ảnh động;)

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

Phiên bản có thể chạy được lâu hơn vì Webkit vẫn cần tiền tố của nhà cung cấp. :

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

Nếu chúng tôi cho phép một <a>yếu tố ngẫu nhiên, trống rỗng , chúng tôi có thể giảm xuống chỉ còn 72 ký tự:

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

Xem? CSS là một ngôn ngữ lập trình hợp pháp!


4

R, 36 byte

Tôi có thể làm cho câu trả lời của freekvd ngắn hơn một cách tầm thường.

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

Đầu ra

(Xin lỗi vì đã không đưa ra nhận xét theo giải pháp của anh ấy. Stackexchange không cho phép tôi đưa ra nhận xét, bỏ phiếu, v.v.).


Điều này không tạo ra 51 hình vuông?
MickyT

Điều này làm cho hình vuông nhỏ nhất rộng dưới 20 pixel? Nó phụ thuộc vào dpi của bạn, nhưng hình vuông lớn nhất là 1 inch nên hình ảnh 72 dpi sẽ có hình vuông nhỏ nhất là 11 pixel.
freekvd

Mặc dù nếu bạn làm cho nó 1:99, bạn có thể lập luận rằng 50 hình vuông lớn nhất đáp ứng các tiêu chí.
freekvd

4

PostScript, 34 byte

Trong mã hóa ISO-Latin-1:

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

Đây là nhị phân tương đương với:

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

(Điều này giả định rằng bạn đang sử dụng nó trên thiết bị có ít nhất 1000 điểm [= 10 inch = 25,4 cm].)


Cung cấp cho chúng tôi một loạt các octet được mã hóa hex (ví dụ 0f 4e 75 a3 ...:).
haneefmubarak 16/2/2015

@haneefmubarak Tôi sẽ, tôi chỉ cần về nhà để tôi có thể sử dụng chương trình golfer của tôi. (Trình nén phần mềm đăng bài trực tuyến dường như không hoạt động.)
AJMansfield 16/2/2015

@haneefmubarak OK, được cập nhật với một đại diện trực tiếp của tệp, mặc dù nó không phải là các octet hex. (Tôi sẽ thêm vào sau khi tôi có thể sử dụng chương trình chuyển đổi thực sự.)
AJMansfield 16/2/2015

4

DrRquet - 83

Chỉ vì mục đích kích hoạt DrRacket 1 năm sau "Giới thiệu về thiết kế chương trình có hệ thống".

CHỈNH SỬA :

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

Lưu một vài ký tự: chuyển từ 2htdp/imagesang htdp/image, thay đổi chuỗi "solid"thành biểu tượng 'solid. Để tiết kiệm lớn hơn, hãy thay đổi (range 9 209 4)thành (range 50): các sắc thái của màu xám chỉ được yêu cầu phải khác biệt, không dễ để phân biệt với mắt người!
Omar

Bạn có thể lưu một vài ký tự bằng cách sử dụng for/set:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
Alexis King

4

C # - 173

Sử dụng 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();

Mở rộng :

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

Đầu ra :

đầu ra


Gợi ý: for(int i=0;i<250;i+=5)và sau đó FromArgb(i,i,i)Rectangle(i*4,0,20,20)đưa ra 168
Thomas Weller

Hơn nữa, FillRectangle()có quá tải lấy tọa độ hình chữ nhật trực tiếp, vì vậy bạn có thể xóa new Rectangle()và thoát khỏi với 153
Thomas Weller

4

JavaScript, 152 byte.

Được rồi, có lẽ đây không phải là giải pháp tốt nhất nhưng đây là của tôi.

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)

Đây là đầu ra với css float trái (chỉ để dễ dàng đếm các ô vuông hơn) và không có:

với css nổi

không có css nổi


2
Bạn có thể lưu một số byte bằng cách sử dụng tên biến một chữ cái, bỏ tất cả vartừ khóa và xóa khoảng trắng không cần thiết. Ngoài ra, vui lòng bao gồm tên ngôn ngữ và số byte trong câu trả lời của bạn.
Chương trìnhFOX

Cảm ơn các đầu vào. Tôi đã giảm khoảng trắng và thêm số byte nhưng tôi không chắc ý của bạn là gì khi bỏ vartừ khóa.
Devon Taylor

Đừng bận tâm. Tôi thấy ngớ ngẩn.
Devon Taylor

Sử dụng c+=5thay vì c=c+5. Ngoài ra, bạn có thể lưu 2 ký tự bằng cách đặt n=c.toString()ở cuối dòng trước và sau đó dòng đó ở cuối dòng trước một lần nữa. Vì vậy, dòng thứ 2 của bạn sẽ làfunction w(){if(c<250){n=c.toString()
mbomb007

Ngoài ra, tôi khá chắc chắn rằng bạn có thể bỏ qua pxchiều cao và chiều rộng.
mbomb007
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.