Пятьдесят оттенков серого


92

Мальчики и девочки очень рады видеть « Пятьдесят оттенков серого» на серебряном экране, мы просто хотим кодировать, не беспокоясь, поэтому перед нами стоит задача поразмыслить.

Вы должны:

  • Распечатайте на экране пятьдесят квадратов, каждый из которых имеет свой оттенок серого.
  • Если вашему языку не хватает возможностей для обработки изображений , вы можете вывести файл изображения
  • Квадраты должны быть видны, не менее 20 х 20 пикселей
  • Вы не можете использовать случайные числа, если не уверены, что каждый оттенок уникален.
  • Вы не можете подключиться к какой-либо службе через сеть
  • Вы не можете читать файлы в вашей программе.
  • Вы не можете использовать любые библиотеки из стандартных библиотек вашего языка по вашему выбору.

Это кодовый гольф, поэтому выигрывает самый короткий код.


21
Они беспокоили нас?
— Увлечения Кэлвина

6
Возражение: вводящее в заблуждение название!
— Джордж Чалхуб

23
Мы увидим представление Питом ?
— Рандомра

8
Не те картинки, которые, как я думал, мы будем создавать для конкурса из 50 оттенков серого.
— CorsiKa

3
@randomra спросите, и вы получите: codegolf.stackexchange.com/questions/45736/fifty-shades-of-grey/…
— captncraig

Ответы:


24

MATLAB, 24 байта

Вторая попытка, теперь фактически соответствует правилам.

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

«I» означает «InitialMagnification», но, очевидно, Matlab будет автоматически заполнять имена в парах «имя / значение». Конечно, это хорошая игра в гольф!

введите описание изображения здесь


59

Mathematica, 30 байт

Вот еще один подход Mathematica:

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

введите описание изображения здесь

или же

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

введите описание изображения здесь

Первый просто создает массив

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

а второй

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

Затем ArrayPlotстроит их в виде сетки и по умолчанию использует оттенки серого для визуализации значений.


Прекрасное использование ArrayPlot.
— DavidC

4
Забавно, но MatrixPlot, по-видимому, использует цвета по умолчанию, к счастью для этой задачи ArrayPlot использует оттенки серого и на одну букву короче, чем MatrixPlot.
— Омар

Вы можете сделать ArrayPlot@{Range@50}, что составляет всего 20 байтов.
— Чип Херст

@ChipHurst, когда я это делаю, размер по умолчанию слишком мал, чтобы соответствовать требованию 20x20 пикселей.
— Мартин Эндер

36

CJam - 23 (без фактического графического вывода)

Поскольку CJam не может рисовать на экране (пока?), Я написал программу, которая выводит изображение в простом формате pgm .
Сохраните вывод в файл с именем 50.pgm и откройте с помощью средства просмотра / редактирования изображений.

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

Попробуйте онлайн

Результат выглядит так:

50.png

Объяснение:

"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
Так быть счастливым увеличивает элементы !?
— Caridorc

7
@Caridorc массивов, содержащих числа, да. И печаль сводит их на нет: p
— aditsu

Вы не следуете спецификации PGM:No line should be longer than 70 characters.
— kiwixz

@iKiWiXz обновлено
— aditsu

1
@iKiWiXz Должен, не должен. Строки могут быть длиннее, но программы, которые генерируют изображения PGM, должны стараться, чтобы их длина не превышала 70 символов.
— FUZxxl

30

Mathematica 72 61 59 43 35 34 байта

Текущая версия (34 байта)

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

СЕТКА2


Более ранняя версия (59 байт), благодаря Мартину Бюттнеру.

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

Синие границы добавлены, чтобы выделить положение квадратов.

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

синий

Количество квадратов:

    Length[%[[1]]]

50


Первая попытка (72 байта)

Если квадраты могут перекрываться. Как отмечает Згарб, существует небольшая вероятность того, что один квадрат будет скрывать другой.

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

введите описание изображения здесь


Я предполагаю, что один квадрат может в принципе полностью покрыть другой, чтобы было видно менее 50?
— Згарб

2
Определенно самый эстетически приятный ответ.
— Дан

30

Мудрец - 26 24 35 29 персонажей

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

Это выглядит так:

5х10 оттенков серого

Предыдущие попытки : сначала у меня было Matrix([range(50)]).plot(), потом matrix_plot([range(50)]). Это выглядело так:

50 оттенков серого

Пользователь @flawr указал, что квадраты, созданные с настройками по умолчанию, слишком малы. Добавление figsizeопций исправляет это, но оно на 6 символов длиннее, чем версия 5x10 в верхней части этого ответа:

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

Похоже, 51 оттенок и квадраты меньше, чем 20x20px, это больше, когда создается вашей программой?
— flawr

Я не думаю, что дополнительный вывод запрещен, @flawr, я не удосужился удалить рамку, отметки и цифры. Возможно, вы правы, что квадраты слишком малы, я проверю.
— Омар

Argh! Правильно @flawr, квадраты меньше 20px на 20px.
— Омар

Я бы сказал, что дополнительный вывод должен быть запрещен. В вопросе указано «50», а не «50 или более».
— Джо,

1
Правильно ли я понимаю, @Joe, что ты не возражаешь против фрейма и чисел вне фрейма, только против количества квадратов? Если это так, просто замените 50 на 49.
— Омар

23

R, 47 42 39 38 37 36 35 байт

Предполагая, что они могут перекрываться, это работает. Symbolsтребуется вектор, который содержит размер для каждого квадрата, и я экономлю пространство, повторно используя один и тот же вектор для всех параметров функции. Самый большой квадрат всегда шириной 1 дюйм. С диапазоном целых чисел 50:99 наименьший квадрат будет иметь ширину около половины дюйма, то есть 36 пикселей при 72 dpi.

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

Спасибо всем за комментарии и предложения, я довольно плохо знаком с R, так что все это очень познавательно.

новый и улучшенный?

Предыдущие версии:

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

Предыдущее изображение: 50 оттенков R


Могли бы сэкономить еще немного сsymbols(x<-50:99,sq=x,bg=gray(x/99))
— MickyT

Минус два! Спасибо @MickyT, я думал, что это уже сделано.
— freekvd

1
@freekvd В общем случае это зависит от порядка доступа к аргументам внутри функции (поскольку аргументы вычисляются лениво). Вы можете проверить это, имея, f = function (a, b) { a; b}а затем позвонив f(x <- 5, x). Это работает как ожидалось. Как только вы измените аргументы в fопределении (и rm(x)), это больше не будет работать.
— Конрад Рудольф

1
Похоже, оценка начинается с sq = x, поэтому я могу обрезать еще один символ с этим. Спасибо @KonradRudolph
— freekvd

1
Сокращение на 1 байтsymbols(x,,,x<-50:99,bg=gray(x/99))
— Vlo

21

Ява - 180

Довольно просто, просто рисуя коробки.

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

введите описание изображения здесь

С переносами строк:

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

Если кто-то возражает против того, чтобы последний блок был технически белым, просто измените множитель цвета на 263172. Тот же счетчик байтов, я просто думаю, что так будет выглядеть лучше.
— Geobits

Я думаю, что вы также можете использовать int i;вместо, int i=1но затем использовать ++iпри первом использовании, iа не i++в последнем случае, сэкономит 2 байта. Кстати, я даже не знал, что вы можете сделать Java-программу без class MyClass ... public static void main(... !!!
— flawr

@flawr Нет, Java не будет инициализировать локальные переменные значениями по умолчанию. Это может сработать, если я переместу его за пределы функции. Если бы вместо этого я давал полную программу, я бы попробовал ее таким образом (это всего лишь функция плюс необходимый импорт). Спасибо, хотя :)
— Geobits

2
@flawr Если бы это была полная программа, тогда да, вам это нужно. Это просто функция , так как вопрос не уточняется.
— Geobits

1
@ AJMansfield Я знаю, но я рассматриваю обработку на другом языке, и мне нравится играть в гольф на Java Java.
— Geobits

17

BBC BASIC, 57

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

Квадраты должны быть не менее 20 пикселей, но нечего сказать, что они должны быть одинакового размера, поэтому я думаю, что это подходит.

Может быть возможно сократить это путем использования большего количества кодов VDU низкого уровня. Но переход от этого шаблона к менее интересному вряд ли сделает его короче.

введите описание изображения здесь


2
Помните ваши основные сокращения BBC? Ф., Н. С., В. -> F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
— SeanC

@SeanCheshire bbcbasic.co.uk/bbcwin/bbcwin.html поддерживает эти сокращения, я никогда не думал проверять! Ваш путь считается равным 50. Размер файла токена составляет 41 байт (каждое ключевое слово маркируется на один байт вне диапазона ASCII), хотя я не часто так считаю. Я буду использовать ваш совет в будущем, хотя!
— Уровень Река Св

17

ipython 2, 54 байта

Лучшее, что я мог сделать, - это программа ipython. При запуске ipython ipython -pylabи выполнении этой программы будет показан график с 50 оттенками серого в 50 квадратах:

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

Выход:

grey50

Решение 2:

Вот еще одна программа (61 байт):

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

это отображает следующее окно:

grey50b


1
Однако обратите внимание, что ipython не является языком, и вы использовали библиотеку Python matplotlib, которая является внешней библиотекой.
— Стефано Санфилиппо

15

JavaScript ( 72 , 70 , 67 байт)

72: оригинал (заимствуя умное &#9632;использование из ответа Sphinxxx ):

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

70: бесстыдно воровать у Исмаила Мигеля (который заслуживает голосов), короче за цикл и позволяющего браузеру исправить # отсутствие цветового кода ...

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

67 байт (65 символов): замена объекта на символ юникода:

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


Я думаю, вы должны начать с i=51. Если я посчитал правильно, то осталось всего 49 квадратов?
— flawr

1
Мне очень нравится ваш ответ! Дорогой лорд, почему я не думал об этом? +1 на этот! Я бы уменьшил этот до for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>&#9632;')или аналогичный. Не проверено, но это может сработать!
— Исмаэль Мигель

1
Так как ты крадешь у меня, по крайней мере, укради правильно. Удалите #символ, чтобы получить решение длиной 70 байт.
— Исмаэль Мигель

1
Я как раз собирался рекомендовать это. По умолчанию считается число байтов, но вы должны использовать символ Unicode, потому что он по-прежнему меньше байтов.
— NinjaBearMonkey

1
В вопросе говорилось ровно 50 квадратов? :) (Другие решения также привлекают дополнительные вещи.) С этим и литералом Юникода, до 65 байтов (63 символа): for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')- НО, по крайней мере, в настройках моего браузера по умолчанию (OSX / Chrome), поле немного меньше, чем 20x20 пикселей в любом случае, так что эти решения на основе сомнительны.
— Туомассало

13

C ++, 98 83 символа

Итак, вам понадобится эмулятор терминала, который поддерживает настоящие цвета. Например, для Mac OS существуют ночные сборки iTerm2. Я считаю, что для Unix это поддерживает консоль. Вот список, на всякий случай: https://gist.github.com/XVilka/8346728#now-supporting-truecolor

Компилировать с помощью g ++ (\ e зависит от компилятора).

Чтобы квадраты имели достаточную площадь, вам придется изменить размер шрифта вашего терминала.

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

Использование библиотек C вместо C ++ позволяет сбрить некоторые символы.

C 61 58 символов

Это та же самая программа, но на C, которая предполагает, что объявления нетипизированных функций возвращают int, и для которой не нужно включать некоторые стандартные библиотечные функции, как, например, в этом случае, printf. Предложено @cartographer. Три символа меньше благодаря @ user3601420

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

Компилируется с парой предупреждений (для предположения, что возвращаемый тип main равен int, и для неявного включения объявления printf).


2
Если вы переключите это на C, вы можете сбросить include и the intперед main и заставить их скомпилировать всего пару предупреждений с помощью gcc.
— картограф

Да, но это был бы другой язык. В любом случае, я добавлю это, спасибо!
— rorlork

1
Вы можете удалить несколько символов из версии C, если вы сделаете iпервый аргумент main, как в:main(i){for(i=51;i--;)printf(...
— Functino

Только один дополнительный символ, чтобы сделать его стандартным: \e→\33
— Хольгер

Это код-гольф!
— rorlork

11

Python 2, 125 115 104 байта

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

Образец вывода:

введите описание изображения здесь

Старая добрая черепаха. Это был единственный метод, который я мог придумать в Python, который печатал изображения на экране, используя только стандартные библиотеки.

Квадратная форма черепахи, случается, 21 на 21, что очень удобно. Это можно увидеть, покопавшись в turtle.py:

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

Если у вас монитор высокого разрешения или вы не возражаете против того, чтобы несколько квадратов были за кадром, то это 93 байта:

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

демонстрация

(Эта демонстрация использует Skulpt , адаптируя фрагмент, найденный здесь . Он включен только для того, чтобы дать представление о том, что делает код - мне пришлось изменить несколько бит, чтобы заставить его работать.)


Ах, я вижу, как вы поняли, скульпт обновился. Спасибо за это, я, вероятно, буду использовать его для обновления фрагмента.
— ArtOfCode

11

J ( 43 41 40 38 33 29 символов)

После предложений от рандома .

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

Это решение ничего не отображает, так как стандартная библиотека J не содержит процедур GUI. Вместо этого я генерирую изображение и записываю его в стандартный вывод. Выходной сигнал рандомизирован, это гарантирует, что все оттенки различны. Вот пример выходных данных и изображение, преобразованное в png и повернутое на 90 ° для удобства просмотра:

50 оттенков серого


Толкая 50из заголовка в генерируемый с использованием части 50 * 50 квадратов сохраняет 1 байт: 1!:2&4'P2 50 2500 ',":(,*:#i.)50.
— Рандомра

Это изящная идея.
— FUZxxl

Еще больше: вставьте все числа в 1!:2&4'P2 ',":(,*:,],*:#i.)50течение 29 символов! Кстати plot, не является частью стандартной библиотеки J?
— Рандомра

@randomra plot- один из вспомогательных пакетов, которые вы можете скачать из менеджера пакетов. Я бы вряд ли видел это как часть стандартной библиотеки .
— FUZxxl

10

Excel vba, 81

В ближайшем окне:

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

на активном листе:

81 оттенка - это столько же кода, сколько 50

{81 оттенков - это столько же кода, сколько 50}


Ну, некоторые люди интерпретируют «50» как означающее ровно 50. В этом случае, вероятно, это еще один символ, чтобы получить 50 = 10 * 5, чем 81 = 9 * 9.
— Омар

@Omar, от 0 до 9 и от 1 до 5 будут давать ровно 50 символов с одинаковым количеством символов .... Это также означает, что я тоже могу написать продолжение, с одинаковым количеством байтов - от 0 до 9 дважды
— SeanC

1
Ох, от 0 до 9! Я думал , что для cells(i,j)вас нужно i>0и j>0.
— Омар

@ Омар, блин, ты прав. Я не мог использовать ноль
— SeanC

1
Немного короче (61)For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
— OldCurmudgeon

8

R ,3732 символа 1 :

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

Тем не менее, дисплей для этого выглядит… ме (изображение повернуто на 90 °, чтобы лучше вписаться в текст; сжатый, исходная длина стороны квадрата> 20 пикселей):

скучный

Вот более приятная версия, которая отображает квадраты в случайном порядке внутри матрицы (50 символов):

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

захватывающе!

(И да, три смежных квадрата, казалось бы, одинаковых цветов на самом деле три разных оттенка серого.)

1 Да, еще один ответ R,и даже не самый короткий(сейчас самое короткое для R) - извинения. Мне не хватало красивого рендеринга в R.


1
Как вы исправили соотношение сторон?
— koekenbakker

? В основном так же, как вторая версия @ 37image(matrix(1:50,5),c=gray(1:50/51))
— Vlo

@koekenbakker Это не исправлено, я вручную настраиваю окно вывода. Это не идеальное , но код делает производить квадраты для данного окна, а другой код здесь имеет сходные проблемы.
— Конрад Рудольф

8

Matlab 35 благодаря санчизам

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

Matlab 36

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

Отображает 50 квадратов, заполненных значениями серого от 1 до 50, и 2 дополнительных прямоугольника, заполненных значениями серого 0 и 51:

введите описание изображения здесь

Матлаб, 45

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

Вы можете сбрить колоссальный 1 байт, используя int8 вместо uint8.
— Sanchises

Решение Sanchises лучше!
— Мемминг

@Memming Это зависит от какой-то непонятной (недокументированной?) Функции, которую я обнаружил, только попробовав ее. Дайте Штеффену должное, где бы это ни было :)
— Sanchises

@TheBestOne / JaBe: Ваш ответ на самом деле не работает, так как он не отображает квадраты. Штеффен использует int8 для округления 1000 или около того значений до 50 квадратов.
— Sanchises

7

JavaScript, 87 90 байт

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

Это выводит квадраты в HTML, потому что это действительно единственный метод графического вывода в JavaScript. Спасибо edc65 за сбривание 3 байта.


1
Сохранить 3 байта: for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>'). Невозможно использовать однозначные цифры, потому что серые не будут уникальными (# 111 того же цвета, что и # 111111)
— edc65

Вы можете использовать другие подразделения. 1cmили 1 9mmбудет лучше и получит более широкую поддержку. Без изменения вашего количества байтов.
— Исмаэль Мигель

7

PHP 96 88 74 байта

Спасибо Исмаилу Мигелю за сохранение 22 байта!

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

Записывает 50 <p>секунд с высотой и шириной 9 мм (которые должны быть больше 20 пикселей на большинстве экранов), сложенных друг на друга, с незначительной разницей в оттенках.

Сгенерированный результат (изображение уменьшено и повернуто на 90 °):

Результат


7

Matlab - 33 байта

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

Несмотря на подробные команды, результат все еще довольно компактен. Это выглядит немного лучше , если вы замените surfс , surfaceно это стоит 3 символов.

Если вы не заметите 50-й серый квадрат, потому что он немного больше остальных!


Используйте ndgrid! (На 2 байта меньше). И каждый квадрат различен серым?
— Луис Мендо

7

Javascript (77 71 байт):

Этот ответ больше не основан на IE11. Это работает, потому что браузер преобразует плохие цветовые коды в пригодные для использования (добавляя #к числу).

Вот код:

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

Firefox все еще обладает способностью делать круги.

(Малые изменения: Изменены for(i=61;i-->9;)в for(i=59;i-->9;)потому , что она производила 52 квадратов)


Старый ответ:

Это основано на моем ответе PHP и использует почти те же самые способы, чтобы сделать квадраты:

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

Не самый короткий ответ, но стоит добавить сюда.


Это решение не совместимо с Chrome (выдает несколько зеленых цветов) и Firefox (тот же результат, но выдает круги? OO WTH?)

Поскольку это код-гольф, приемлемо решение, работающее с определенной версией или конкретным программным обеспечением.


2
Это может быть только я, но выполнение этого фрагмента кода приводит в основном к зеленым и синим кружкам. Я вижу, @ MartinBüttner побил меня этим комментарием, так что это не только я ...
— MrLemon

@MrLemon Я думаю, что Chrome не нравится RGB -.- Но он работает на IE11. Поскольку я не пытаюсь сделать кросс-браузерное решение, это приемлемо. Я добавлю это к ответу.
— Исмаэль Мигель

@IsmaelMiguel Все в порядке, я думаю. Но просто для ясности, я сейчас на FF. Может подтвердить, что работает на IE11, хотя.
— MrLemon

@MrLemon Это работает на IE11, так как я попробовал дома. Я могу предоставить принт-экран при необходимости. Firefox делает круги с ним. Я понятия не имею, как. Нет способа отменить это. Я ожидал, что у IE будут свои причуды, а не Firefox.
— Исмаэль Мигель

Firefox, кажется, помещает полукруги на концах <hr>, вероятно, чтобы это выглядело более гладким. Понятия не имею, что происходит с цветами. Во всяком случае, мой +1 за то, что сбил меня с толку.
— MrLemon

7

Пит-2 * 103 = 206

Это уникально тем, что исходный код и выходные данные выполняют задачу:

болтушка

Большая часть из них декоративная, поэтому я сосчитал только два верхних ряда, которые прекрасно стоят в одиночестве. Выводит ppm в градациях серого, как это сделали некоторые другие.


6

JavaScript - 70 байт

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


6
Размер блока меньше 20 пикселей
— edc65

1
Затем вам нужно настроить размер шрифта вашего браузера;)
— Sphinxxx

1
Вы должны использовать font:3em aили font-size:3em. Я понижаю этот из-за размера коробок. Пока вы не исправите.
— Исмаэль Мигель

3
Вы можете использовать i--вместо i-=1.
— flawr

1
Вы можете использовать <b>тег. Это никак не изменит код, за исключением того, что текст будет черным. Это не требование, но это может быть хорошей идеей.
— Исмаэль Мигель


6

PHP (62 60 63 72 71 62 59 байт):

Я сделал самое короткое, что я мог найти:

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

Это точно такой же код, как и мой ответ на Javascript (с 71 байтом) .

Но НАМНОГО короче!

Это имеет причуду в Firefox: вместо квадратов Firefox делает круги ! (Go маразм!)
Othen , чем все браузеры производят правильный цвет (даже с недостающим #на colorатрибут).


Неверные представления и список изменений :

Старый ответ, с 62 байтами.

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

Все оттенки идеально выровнены.

Это решение не будет работать для Chrome (будет создавать квадраты с несколькими цветами) и Firefox (что делает круги oO Да, круги с <hr>! Горизонтальная линейка - это круг в Firefox!).
Вы можете проверить это на IE11, и это должно быть хорошо.


(просто снято сверху)

Я заметил что-то ужасное: он выводил #111вместо #010101некоторых цветов.

Это означало, что некоторые цвета повторялись.

Поэтому пришлось пожертвовать несколькими байтами:

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

Выводит 50 оттенков в идеальном порядке, от светлого к темному.

Из-за правильной точки, сделанной @ edc65 , мне пришлось добавить width=20, чтобы получить идеальные квадраты .

Уменьшен еще один байт путем замены f!=$cна f>$c, который работает отлично.


Финальная версия, без width=20:

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

Это неверно, потому что это необходимо для вывода квадратов.
Это выводит оттенки от светлого к темному.


Уменьшен 1 байт путем переключения на whileцикл, например так:

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

Первое решение:

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

Здесь нет аккуратно упорядоченных оттенков, но есть 50 различных.

Ничто не говорит о том, что они должны быть заказаны, но есть требование к размеру.

Я надеюсь, что смогу уменьшить это намного больше.

Вы можете проверить это на http://writecodeonline.com/php/ (нажмите «Показать как HTML»).


5

CSS (87 символов)

Использует анимацию;)

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

Выполняемая версия длиннее, поскольку Webkit все еще нуждается в префиксе поставщика. :(

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

Если нам разрешен случайный пустой <a>элемент, мы можем уменьшить его до 72 символов:

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

Видеть? CSS является законным языком программирования!


4

R, 36 байт

Я могу сделать ответ freekvd короче.

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

Выход

(Извините за то, что не сделал комментарий под его решением. Stackexchange пока не позволяет мне комментировать, голосовать и т.д.).


Разве это не производит 51 квадрат?
— MickyT

Это делает наименьший квадрат шириной менее 20 пикселей? Это зависит от вашего dpi, но самый большой квадрат - 1 дюйм, поэтому изображение с 72 dpi будет иметь самый маленький квадрат 11 пикселей.
— freekvd

Хотя, если вы сделаете 1:99, вы можете утверждать, что 50 самых больших квадратов соответствуют критериям.
— freekvd

4

PostScript, 34 байта

В кодировке ISO-Latin-1:

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

Это двоичный эквивалент:

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

(Предполагается, что вы используете его на устройстве шириной не менее 1000 точек [= 10 дюймов = 25,4 см].)


Дайте нам серию шестнадцатеричных закодированных октетов (то есть:) 0f 4e 75 a3 ....
— haneefmubarak

@haneefmubarak Я буду, мне просто нужно вернуться домой, чтобы я мог использовать свою программу для игры в гольф. (Кажется, что онлайн-
— посткомпактный компакт-диск

@haneefmubarak OK, обновлено прямым представлением файла, хотя это не шестнадцатеричные октеты. (Я добавлю это позже, когда смогу использовать настоящую программу-конвертер.)
— AJMansfield

4

DrRacket - 83

Просто ради увольнения DrRacket через 1 год после «Введение в разработку систематических программ».

РЕДАКТИРОВАТЬ :

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

Сохраните пару символов: переключитесь с 2htdp/imageна htdp/image, измените строку "solid"на символ 'solid. Для больших сбережений, изменить (range 9 209 4)на (range 50): оттенки серого просто должны быть различны, не легко отличить друг от друга для человеческого глаза!
— Омар

Вы можете сохранить несколько символов, используя for/set:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
— Алексис Кинг

4

C # - 173

Использование 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();

Расширен :

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

Выход :

выход


Предложение: for(int i=0;i<250;i+=5)а затем FromArgb(i,i,i)и Rectangle(i*4,0,20,20)дает 168
— Томас Уэллер

Кроме того, FillRectangle()имеет перегрузку, которая принимает координаты прямоугольника напрямую, так что вы можете удалить new Rectangle()и уйти с 153
— Томас Веллер

4

JavaScript, 152 байта.

Ладно, может быть, это не лучшее решение, но вот мое.

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 (просто для того, чтобы легче было считать квадраты) и без:

с плавающей точкой css

без поплавка css


2
Вы можете сохранить несколько байтов, используя однобуквенные имена переменных, отбрасывая все varключевые слова и удаляя ненужные пробелы. Также, пожалуйста, укажите название языка и количество байтов в своем ответе.
— ProgramFOX

Спасибо за вклад. Я уменьшил пробел и добавил количество байтов, но я не уверен, что вы имеете в виду, отбрасывая varключевые слова.
— Девон Тейлор

Неважно. Я чувствую себя глупо
— Девон Тейлор

Используйте c+=5вместо c=c+5. Кроме того, вы можете сохранить 2 символа, поставив n=c.toString()в конце предыдущей строки, а затем снова эту строку в конце предыдущей строки. Таким образом, ваша вторая строка будетfunction w(){if(c<250){n=c.toString()
— mbomb007

Кроме того, я уверен, что вы можете опустить pxвысоту и ширину.
— mbomb007
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.