Мальчики и девочки очень рады видеть « Пятьдесят оттенков серого» на серебряном экране, мы просто хотим кодировать, не беспокоясь, поэтому перед нами стоит задача поразмыслить.
Вы должны:
- Распечатайте на экране пятьдесят квадратов, каждый из которых имеет свой оттенок серого.
- Если вашему языку не хватает возможностей для обработки изображений , вы можете вывести файл изображения
- Квадраты должны быть видны, не менее 20 х 20 пикселей
- Вы не можете использовать случайные числа, если не уверены, что каждый оттенок уникален.
- Вы не можете подключиться к какой-либо службе через сеть
- Вы не можете читать файлы в вашей программе.
- Вы не можете использовать любые библиотеки из стандартных библиотек вашего языка по вашему выбору.
Это кодовый гольф, поэтому выигрывает самый короткий код.
code-golf
graphical-output
jsedano
источник
источник
Ответы:
MATLAB, 24 байта
Вторая попытка, теперь фактически соответствует правилам.
«I» означает «InitialMagnification», но, очевидно, Matlab будет автоматически заполнять имена в парах «имя / значение». Конечно, это хорошая игра в гольф!
источник
Mathematica, 30 байт
Вот еще один подход Mathematica:
или же
Первый просто создает массив
а второй
Затем
ArrayPlot
строит их в виде сетки и по умолчанию использует оттенки серого для визуализации значений.источник
ArrayPlot
.ArrayPlot@{Range@50}
, что составляет всего 20 байтов.CJam - 23 (без фактического графического вывода)
Поскольку CJam не может рисовать на экране (пока?), Я написал программу, которая выводит изображение в простом формате pgm .
Сохраните вывод в файл с именем 50.pgm и откройте с помощью средства просмотра / редактирования изображений.
Попробуйте онлайн
Результат выглядит так:
Объяснение:
источник
No line should be longer than 70 characters.
Mathematica
72 61 59 43 3534 байтаТекущая версия (34 байта)
Более ранняя версия (59 байт), благодаря Мартину Бюттнеру.
Синие границы добавлены, чтобы выделить положение квадратов.
Количество квадратов:
Первая попытка (72 байта)
Если квадраты могут перекрываться. Как отмечает Згарб, существует небольшая вероятность того, что один квадрат будет скрывать другой.
источник
Мудрец -
26243529 персонажейЭто выглядит так:
Предыдущие попытки : сначала у меня было
Matrix([range(50)]).plot()
, потомmatrix_plot([range(50)])
. Это выглядело так:Пользователь @flawr указал, что квадраты, созданные с настройками по умолчанию, слишком малы. Добавление
figsize
опций исправляет это, но оно на 6 символов длиннее, чем версия 5x10 в верхней части этого ответа:источник
R,
47 42 39 38 37 3635 байтПредполагая, что они могут перекрываться, это работает.
Symbols
требуется вектор, который содержит размер для каждого квадрата, и я экономлю пространство, повторно используя один и тот же вектор для всех параметров функции. Самый большой квадрат всегда шириной 1 дюйм. С диапазоном целых чисел 50:99 наименьший квадрат будет иметь ширину около половины дюйма, то есть 36 пикселей при 72 dpi.Спасибо всем за комментарии и предложения, я довольно плохо знаком с R, так что все это очень познавательно.
Предыдущие версии:
Предыдущее изображение:
источник
symbols(x<-50:99,sq=x,bg=gray(x/99))
f = function (a, b) { a; b}
а затем позвонивf(x <- 5, x)
. Это работает как ожидалось. Как только вы измените аргументы вf
определении (иrm(x)
), это больше не будет работать.symbols(x,,,x<-50:99,bg=gray(x/99))
Ява - 180
Довольно просто, просто рисуя коробки.
С переносами строк:
источник
int i;
вместо,int i=1
но затем использовать++i
при первом использовании,i
а неi++
в последнем случае, сэкономит 2 байта. Кстати, я даже не знал, что вы можете сделать Java-программу безclass MyClass ... public static void main(...
!!!BBC BASIC, 57
Квадраты должны быть не менее 20 пикселей, но нечего сказать, что они должны быть одинакового размера, поэтому я думаю, что это подходит.
Может быть возможно сократить это путем использования большего количества кодов VDU низкого уровня. Но переход от этого шаблона к менее интересному вряд ли сделает его короче.
источник
F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
ipython 2, 54 байта
Лучшее, что я мог сделать, - это программа ipython. При запуске ipython
ipython -pylab
и выполнении этой программы будет показан график с 50 оттенками серого в 50 квадратах:Выход:
Решение 2:
Вот еще одна программа (61 байт):
это отображает следующее окно:
источник
JavaScript (
72,70, 67 байт)72: оригинал (заимствуя умное
■
использование из ответа Sphinxxx ):70: бесстыдно воровать у Исмаила Мигеля (который заслуживает голосов), короче за цикл и позволяющего браузеру исправить # отсутствие цветового кода ...
67 байт (65 символов): замена объекта на символ юникода:
источник
i=51
. Если я посчитал правильно, то осталось всего 49 квадратов?for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>■')
или аналогичный. Не проверено, но это может сработать!#
символ, чтобы получить решение длиной 70 байт.for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')
- НО, по крайней мере, в настройках моего браузера по умолчанию (OSX / Chrome), поле немного меньше, чем 20x20 пикселей в любом случае, так что эти решения на основе сомнительны.C ++,
9883 символаИтак, вам понадобится эмулятор терминала, который поддерживает настоящие цвета. Например, для Mac OS существуют ночные сборки iTerm2. Я считаю, что для Unix это поддерживает консоль. Вот список, на всякий случай: https://gist.github.com/XVilka/8346728#now-supporting-truecolor
Компилировать с помощью g ++ (\ e зависит от компилятора).
Чтобы квадраты имели достаточную площадь, вам придется изменить размер шрифта вашего терминала.
Использование библиотек C вместо C ++ позволяет сбрить некоторые символы.
C
6158 символовЭто та же самая программа, но на C, которая предполагает, что объявления нетипизированных функций возвращают int, и для которой не нужно включать некоторые стандартные библиотечные функции, как, например, в этом случае, printf. Предложено @cartographer. Три символа меньше благодаря @ user3601420
Компилируется с парой предупреждений (для предположения, что возвращаемый тип main равен int, и для неявного включения объявления printf).
источник
int
перед main и заставить их скомпилировать всего пару предупреждений с помощью gcc.i
первый аргумент main, как в:main(i){for(i=51;i--;)printf(...
\e
→\33
Python 2,
125115104 байтаОбразец вывода:
Старая добрая черепаха. Это был единственный метод, который я мог придумать в Python, который печатал изображения на экране, используя только стандартные библиотеки.
Квадратная форма черепахи, случается, 21 на 21, что очень удобно. Это можно увидеть, покопавшись в
turtle.py
:Если у вас монитор высокого разрешения или вы не возражаете против того, чтобы несколько квадратов были за кадром, то это 93 байта:
демонстрация
(Эта демонстрация использует Skulpt , адаптируя фрагмент, найденный здесь . Он включен только для того, чтобы дать представление о том, что делает код - мне пришлось изменить несколько бит, чтобы заставить его работать.)
Показать фрагмент кода
источник
J (
434140383329 символов)После предложений от рандома .
Это решение ничего не отображает, так как стандартная библиотека J не содержит процедур GUI. Вместо этого я генерирую изображение и записываю его в стандартный вывод. Выходной сигнал рандомизирован, это гарантирует, что все оттенки различны. Вот пример выходных данных и изображение, преобразованное в png и повернутое на 90 ° для удобства просмотра:
источник
50
из заголовка в генерируемый с использованием части 50 * 50 квадратов сохраняет 1 байт:1!:2&4'P2 50 2500 ',":(,*:#i.)50
.1!:2&4'P2 ',":(,*:,],*:#i.)50
течение 29 символов! Кстатиplot
, не является частью стандартной библиотеки J?plot
- один из вспомогательных пакетов, которые вы можете скачать из менеджера пакетов. Я бы вряд ли видел это как часть стандартной библиотеки .Excel vba, 81
В ближайшем окне:
на активном листе:
{81 оттенков - это столько же кода, сколько 50}
источник
cells(i,j)
вас нужноi>0
иj>0
.For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
R ,
3732 символа 1 :Тем не менее, дисплей для этого выглядит… ме (изображение повернуто на 90 °, чтобы лучше вписаться в текст; сжатый, исходная длина стороны квадрата> 20 пикселей):
Вот более приятная версия, которая отображает квадраты в случайном порядке внутри матрицы (50 символов):
(И да, три смежных квадрата, казалось бы, одинаковых цветов на самом деле три разных оттенка серого.)
1 Да, еще один ответ R,
и даже не самый короткий(сейчас самое короткое для R) - извинения. Мне не хватало красивого рендеринга в R.источник
image(matrix(1:50,5),c=gray(1:50/51))
Matlab 35 благодаря санчизам
Matlab 36
Отображает 50 квадратов, заполненных значениями серого от 1 до 50, и 2 дополнительных прямоугольника, заполненных значениями серого 0 и 51:
Матлаб, 45
источник
JavaScript, 87
90байтЭто выводит квадраты в HTML, потому что это действительно единственный метод графического вывода в JavaScript. Спасибо edc65 за сбривание 3 байта.
источник
for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')
. Невозможно использовать однозначные цифры, потому что серые не будут уникальными (# 111 того же цвета, что и # 111111)1cm
или 19mm
будет лучше и получит более широкую поддержку. Без изменения вашего количества байтов.PHP
968874 байтаСпасибо Исмаилу Мигелю за сохранение 22 байта!
Записывает 50
<p>
секунд с высотой и шириной 9 мм (которые должны быть больше 20 пикселей на большинстве экранов), сложенных друг на друга, с незначительной разницей в оттенках.Сгенерированный результат (изображение уменьшено и повернуто на 90 °):
источник
Matlab - 33 байта
Несмотря на подробные команды, результат все еще довольно компактен. Это выглядит немного лучше , если вы замените
surf
с ,surface
но это стоит 3 символов.Если вы не заметите 50-й серый квадрат, потому что он немного больше остальных!
источник
ndgrid
! (На 2 байта меньше). И каждый квадрат различен серым?Javascript (
7771 байт):Этот ответ больше не основан на IE11. Это работает, потому что браузер преобразует плохие цветовые коды в пригодные для использования (добавляя
#
к числу).Вот код:
Firefox все еще обладает способностью делать круги.
(Малые изменения: Изменены
for(i=61;i-->9;)
вfor(i=59;i-->9;)
потому , что она производила 52 квадратов)Старый ответ:
Это основано на моем ответе PHP и использует почти те же самые способы, чтобы сделать квадраты:
Не самый короткий ответ, но стоит добавить сюда.
Это решение не совместимо с Chrome (выдает несколько зеленых цветов) и Firefox (тот же результат, но выдает круги? OO WTH?)
Поскольку это код-гольф, приемлемо решение, работающее с определенной версией или конкретным программным обеспечением.
источник
<hr>
, вероятно, чтобы это выглядело более гладким. Понятия не имею, что происходит с цветами. Во всяком случае, мой +1 за то, что сбил меня с толку.Пит-2 * 103 = 206
Это уникально тем, что исходный код и выходные данные выполняют задачу:
Большая часть из них декоративная, поэтому я сосчитал только два верхних ряда, которые прекрасно стоят в одиночестве. Выводит ppm в градациях серого, как это сделали некоторые другие.
источник
JavaScript - 70 байт
источник
font:3em a
илиfont-size:3em
. Я понижаю этот из-за размера коробок. Пока вы не исправите.i--
вместоi-=1
.<b>
тег. Это никак не изменит код, за исключением того, что текст будет черным. Это не требование, но это может быть хорошей идеей.Обработка, 66 символов:
источник
PHP (
62606372716259 байт):Я сделал самое короткое, что я мог найти:
Это точно такой же код, как и мой ответ на Javascript (с 71 байтом) .
Но НАМНОГО короче!
Это имеет причуду в Firefox: вместо квадратов Firefox делает круги ! (Go маразм!)
Othen , чем все браузеры производят правильный цвет (даже с недостающим
#
наcolor
атрибут).Неверные представления и список изменений :
Старый ответ, с 62 байтами.
Все оттенки идеально выровнены.
Это решение не будет работать для Chrome (будет создавать квадраты с несколькими цветами) и Firefox (что делает круги oO Да, круги с
<hr>
! Горизонтальная линейка - это круг в Firefox!).Вы можете проверить это на IE11, и это должно быть хорошо.
(просто снято сверху)
Я заметил что-то ужасное: он выводил
#111
вместо#010101
некоторых цветов.Это означало, что некоторые цвета повторялись.
Поэтому пришлось пожертвовать несколькими байтами:
Выводит 50 оттенков в идеальном порядке, от светлого к темному.
Из-за правильной точки, сделанной @ edc65 , мне пришлось добавить
width=20
, чтобы получить идеальные квадраты .Уменьшен еще один байт путем замены
f!=$c
наf>$c
, который работает отлично.Финальная версия, без
width=20
:Это неверно, потому что это необходимо для вывода квадратов.
Это выводит оттенки от светлого к темному.
Уменьшен 1 байт путем переключения на
while
цикл, например так:Первое решение:
Здесь нет аккуратно упорядоченных оттенков, но есть 50 различных.
Ничто не говорит о том, что они должны быть заказаны, но есть требование к размеру.
Я надеюсь, что смогу уменьшить это намного больше.
Вы можете проверить это на http://writecodeonline.com/php/ (нажмите «Показать как HTML»).
источник
CSS (87 символов)
Использует анимацию;)
Выполняемая версия длиннее, поскольку Webkit все еще нуждается в префиксе поставщика. :(
Если нам разрешен случайный пустой
<a>
элемент, мы можем уменьшить его до 72 символов:Видеть? CSS является законным языком программирования!
источник
R, 36 байт
Я могу сделать ответ freekvd короче.
(Извините за то, что не сделал комментарий под его решением. Stackexchange пока не позволяет мне комментировать, голосовать и т.д.).
источник
PostScript, 34 байта
В кодировке ISO-Latin-1:
Это двоичный эквивалент:
(Предполагается, что вы используете его на устройстве шириной не менее 1000 точек [= 10 дюймов = 25,4 см].)
источник
0f 4e 75 a3 ...
.DrRacket - 83
Просто ради увольнения DrRacket через 1 год после «Введение в разработку систематических программ».
РЕДАКТИРОВАТЬ :
источник
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)))
C # - 173
Использование LINQPAD
Расширен :
Выход :
источник
for(int i=0;i<250;i+=5)
а затемFromArgb(i,i,i)
иRectangle(i*4,0,20,20)
дает 168FillRectangle()
имеет перегрузку, которая принимает координаты прямоугольника напрямую, так что вы можете удалитьnew Rectangle()
и уйти с 153JavaScript, 152 байта.
Ладно, может быть, это не лучшее решение, но вот мое.
Вот вывод с помощью css float left (просто для того, чтобы легче было считать квадраты) и без:
источник
var
ключевые слова и удаляя ненужные пробелы. Также, пожалуйста, укажите название языка и количество байтов в своем ответе.var
ключевые слова.c+=5
вместоc=c+5
. Кроме того, вы можете сохранить 2 символа, поставивn=c.toString()
в конце предыдущей строки, а затем снова эту строку в конце предыдущей строки. Таким образом, ваша вторая строка будетfunction w(){if(c<250){n=c.toString()
px
высоту и ширину.