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


92

Хлопчики та дівчата із задоволенням бачать П'ятдесят відтінків сірого на сріблястому екрані, ми просто хочемо кодувати, не турбуючи, так що ось завдання вибрати наш мозок.

Ти мусиш:

  • Роздрукуйте на екрані п'ятдесят квадратів, заповнених кожним іншим відтінком сірого
  • Якщо у вашій мові вибору немає можливостей обробки зображень , ви можете вивести файл зображення
  • Квадрати повинні бути видимими, принаймні 20 х 20 пікселів
  • Ви не можете використовувати випадкові числа, якщо не переконаєтесь, що кожен відтінок унікальний.
  • Ви не можете підключитися до будь-якої служби через будь-яку мережу
  • Ви не можете читати файли у вашій програмі.
  • Ви не можете використовувати будь-які бібліотеки зі стандартних бібліотек на вашу обрану мову.

Це код гольфу, тому виграє найкоротший код.


21
Вони турбували нас?
Захоплення Кальвіна

6
Заперечення: оманливий заголовок!
Джордж Chalhoub

23
Ми побачимо подання на Піет ?
randomra

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)

'Я' означає 'InitialMagnification', але, очевидно, Matlab автоматично заповнить імена в парах імен / значень. Звичайно, це хороший трюк з гольфу!

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


59

Математика, 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
Однозначно найестетичніша відповідь.
Dan

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 справа, квадрати менше 20 пікселів на 20 пікселів.
Омар

Я б сказав, що зайвий вихід повинен бути заборонений. Питання вказує "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. Те саме вважається, що байт виглядає так краще.
Геобіт

Я думаю, ви також можете використовувати int i;замість цього, int i=1але тоді, коли ви будете використовуватись ++iпри першому використанні, iа не i++в останньому випадку, ви заощадите 2 байти. BTW: Я навіть не знав, що можна зробити програму java без цього class MyClass ... public static void main(... !!!
flawr

@flawr Nah, Java не ініціалізує локальні змінні до значень за замовчуванням. Це може спрацювати, якби я перемістив його поза функцією. Якщо я давав повну програму замість цього, я б спробував це саме так (це лише функція, плюс необхідний імпорт). Дякую, хоча :)
Геобіт

2
@flawr Якщо це була повна програма, то так, вам це знадобиться. Це лише функція , оскільки питання не вказує.
Геобіт

1
@AJMansfield Я знаю, але я вважаю, що обробляти іншою мовою, і мені подобається займатися гольфом на Java Java.
Геобіт

17

BBC BASIC, 57

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

Квадрати повинні бути не менше 20 пікселів, але нічого не можна сказати, що вони повинні бути однакового розміру, тому, мабуть, це відповідає вимогам.

Скоротити це можна за допомогою більш низьких рівнів кодів VDU. Але зміна цього шаблону на менш цікавий навряд чи скоротить його.

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


2
Пам'ятаєте ваші скорочення BBC Basic? Ф., Н., С., V. -> 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')

Вихід:

сірий50

Рішення 2:

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

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

що відображає таке вікно:

сірий50b


1
Однак зауважте, що ipython - це не мова, і те, що ви використовували, - це бібліотека matplotlib бібліотеки Python, яка є зовнішньою.
Стефано Санфіліппо

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 символів): заміна об'єкта на символ unicode:

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


Я думаю, слід почати з i=51. Якщо я порахував правильно, то всього 49 квадратів?
недолік

1
Мені дуже подобається ваша відповідь! Шановний пане, чому я не хотів про це? +1 на цьому! Я би скоротив цю for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>&#9632;')або подібну. Неперевірений, але це може працювати!
Ісмаїл Мігель

1
Оскільки ти крадеш у мене, принаймні, красти належним чином. Видаліть #символ, щоб мати 70-байтне рішення.
Ісмаїл Мігель

1
Я тільки збирався це рекомендувати. За замовчуванням вважається підрахунок байтів, але слід використовувати символ Unicode, оскільки в ньому все-таки менше байтів.
NinjaBearMonkey

1
Питання сказало рівно 50 квадратів? :) (Інші рішення також залучають додаткові речі.) З цим і unicode літералом, до 65 байт (63 символів): for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')- Але, принаймні, у налаштуваннях мого браузера (OSX / Chrome) поле трохи менше 20x20 пікселів у будь-якому випадку, тому ці рішення на основі ■ є сумнівними.
tuomassalo

13

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

Гаразд, знадобиться термінальний емулятор, який підтримує справжні кольори. Наприклад, для mac os існують нічні побудови iTerm2. Для Unix я вважаю, konsole це підтримує. Ось список, про всяк випадок: 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, ви можете скинути включити та intперед головну частину і дозволити компілювати лише пару попереджень з gcc.
картограф

Так, але це була б інша мова. У будь-якому разі я додаю це, дякую!
rorlork

1
Ви можете видалити кілька символів із версії C, якщо ви зробите iперший аргумент до основного, як у: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 , адаптуючи знайдений тут фрагмент . Він включається лише для того, щоб дати уявлення про те, що робить код - мені довелося змінити кілька біт, щоб він працював.)


Ну я бачу, як ви зрозуміли, що оновлення skulpt оновилося. Дякую за це, я, мабуть, використовуватиму його для оновлення фрагмента.
ArtOfCode

11

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

Після пропозицій від випадкових .

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

Це рішення не відображає нічого, оскільки стандартна бібліотека J не містить підпрограми графічного інтерфейсу. Натомість генерую зображення і записую його на стандартний вихід. Вихід рандомізований, це гарантувало, що всі відтінки відрізняються. Ось деякий зразок виводу та зображення, перетворене у png та повернене на 90 ° для легшого перегляду:

50 відтінків сірого


Штовхаючи 50з заголовка в генерований з використанням частини 50 * 50 квадратів зберігає 1 байт: 1!:2&4'P2 50 2500 ',":(,*:#i.)50.
randomra

Це акуратна ідея.
FUZxxl

Ще більше: натисніть всі цифри 1!:2&4'P2 ',":(,*:,],*:#i.)50на 29 символів! Btw plotне входить до стандартної бібліотеки J?
randomra

@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) - вибачення. Мені не вистачало гарненького відображення в Р.


1
Як ви зафіксували співвідношення сторін?
koekenbakker

? В основному те саме, що і друга версія @ 37image(matrix(1:50,5),c=gray(1:50/51))
Vlo

@koekenbakker Це не виправлено, я вручну коригую вікно виводу. Це не ідеальне , але код робить виробляти квадрати для даного вікна, а інший код тут має подібні проблеми.
Конрад Рудольф

8

Matlab 35 завдяки sanchises

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

Матлаб 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.
Санчіз

рішення санчісе краще!
Спогад

@Memming Це залежить від якоїсь незрозумілої (недокументованої?) Функції, про яку я дізнався лише спробувавши її на чорт. Надайте Стеффен кредит, як це належить :)
Sanchises

@TheBestOne / JaBe: Ваша відповідь насправді не працює, оскільки не відображає квадратів. Стеффен використовує int8, щоб округлити значення 1000 або близько 50 квадратів.
Санчіз

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

Можна використовувати інші підрозділи. 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

Матлаб - 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 Я думаю, що хрому не подобається RGB -.- Але він працює на IE11. Оскільки я не намагаюся зробити рішення для крос-браузера, це прийнятно. Я додам це до відповіді.
Ісмаїл Мігель

@IsmaelMiguel Це гадаю, гадаю. Але тільки для наочності я зараз на ФФ. Можна підтвердити, що він працює на IE11.
MrLemon

@MrLemon Це працює на IE11, оскільки я спробував вдома. Я можу надати екран для друку, якщо потрібно. Firefox робить з ним кола. Я не маю уявлення про те, як це # $% ing. Неможливо його повернути. Я очікував, що IE матиме химерність, а не Firefox.
Ісмаїл Мігель

Firefox, здається, розміщує півкільця на кінцях <hr>, ймовірно, щоб зробити його більш гладким. Немає поняття, що відбувається з квітами. У будь-якому випадку є мій +1, щоб мене здивувати.
MrLemon

7

Піт- 2 * 103 = 206

Це унікально тим, що вихідний код і вихід відповідають завданням:

піт

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


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.
недолік

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 робить кола ! (
Перестаньте бути божевільними!) Окрім цього, усі браузери створюють потрібний колір (навіть якщо #цей 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 ОК, оновлений із прямим поданням файлу, хоча його не є шістнадцятковими октетами. (Я додам, що пізніше я зможу використовувати програму реального перетворювача.)
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
Thomas Weller

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)

Ось вихід з floss css зліва (просто так простіше рахувати квадрати) і без:

з css float

без css float


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.