Видел это в вызове PHP. Цель состоит в том, чтобы сделать шахматную доску с 64 квадратами (8 * 8) с минимальным количеством кода. Достаточно просто, я сделал мой в PHP в 356 байт (я знаю, не впечатляет), и я хотел бы увидеть некоторые другие подходы. Это можно сделать на языке по вашему выбору, если вы сохраняете его ванильным, поэтому нет импорта. Наименьший счетчик байтов выигрывает.
Вывод должен выглядеть так:
И мой код:
<table><?php
$c='black';function p($c,$n){echo'<td style="width:50px;height:50px;background:'.$c.'"></td>';if($n==1){echo"<tr>";}}for($i=1;$i<=64;$i++){if($i%8==0&&$c=="black"){$c="white";$n=1;}elseif($i%8==0&&$c=="white"){$c="black";$n=1;}elseif(isset($n)&&$n==1){$n=0;}elseif($c=="black"){$n=0;$c="white";}elseif($c=="white"){$n=0;$c="black";}p($c,$n);}
Или читабельно:
<table><tr>
<?php
$color = 'black';
function printcolor($color, $nl) {
echo '<td style="width:50px; height:50px; background:' . $color . '"></td>';
if ($nl == true) {
echo "</tr><tr>";
}
}
for ($i=1; $i<=64;$i++) {
if ($i % 8 == 0 && $color == "black") {
$color = "white";
$nl = true;
} elseif ($i % 8 == 0 && $color == "white") {
$color = "black";
$nl = true;
} elseif (isset($nl) && $nl == true) {
$nl = false;
} elseif ($color == "black") {
$nl = false;
$color = "white";
}
elseif ($color == "white") {
$nl = false;
$color = "black";
}
printcolor($color, $nl);
}
Редактировать:
Извините, сначала я не очень конкретизировал:
- Квадраты должны иметь 50px * 50px за исключением векторных изображений.
- Выходной формат или размер не имеет значения, и это не должно быть изображение.
- В целях оценки выходные данные должны быть видны, например, в файле изображения или на снимке экрана.
- Нет библиотек, написанных после публикации заявки
Ответы:
Октава,
2018 байтСпасибо @Bruno за то, что сбрил 2 байта.
Результат:
Этот ответ использует метод, найденный здесь . Он также основан на автоматическом масштабировании изображений в Octave в зависимости от размера окна рисунка.
источник
vim,
47464443зачеркнуто 44 все еще регулярно 44 ...
Выходы в формате NetPPM (PBM):
источник
<C-p>
vim, не начав набирать слово ... это действительно удобно!CSS, 244 байта
Показать фрагмент кода
Пояснение: Диагональный линейный градиент 100x100px создается с четырьмя упорами, так что большая часть градиента прозрачна, за исключением двух треугольных углов 50px. (Смотри ниже фрагмент). Добавление второго градиента со смещением 50x50px заполняет недостающие половины квадратов. Увеличение размера тела позволяет повторять шаблон, чтобы заполнить всю шахматную доску.
Показать фрагмент кода
источник
}
.html{background:#fff}
? По умолчанию 99% браузеров устанавливают фон на белый, afaikMathematica, 34 байта
Вывод является векторным изображением и заключен в рамку.
Вместо правильного позиционирования 32 прямоугольников, мы можем просто сгенерировать двоичную матрицу и заставить
ArrayPlot
нас работать:источник
GenerateChessBoardWithColorsAsParameters[ColorBlack, ColorWhite, 8, 8, 50, 50]
не работает? ;)Mathematica,
817255 байтИзображение оценки предыдущей версии, но все равно выглядит так же.
источник
Октава, 48 байт
Это работает точно так же, как мой ответ Matlab , но нет
spiral
в Octave. Вместо этого мы используем функцию, которой нет в Matlab: мы можем использовать присваиваниеt
уже в качестве выражения, а позже использоватьt
снова в том же выражении.(Это измененная версия, я не хочу загромождать ответы здесь =)
источник
Pure Bash (без внешних утилит), 133
Я видел комментарий @ Doorknob как нечто сложное. Это немного долго, но здесь идет:
Вывод в формате ImageMagick .txt . Обратите внимание, что это чистый Bash. Ни Imagemagick, ни какие-либо другие внешние утилиты не создаются для генерации этого вывода. Однако выходные данные могут быть перенаправлены в файл .txt и просмотрены с помощью
display
утилиты ImageMagick :Этот формат изображения хорош тем, что он не только чистый текст, но и список всех пикселей (x, y и значение цвета), по одному на строку. Довольно просто арифметически вывести все значения пикселей в одном большом цикле.
Предыдущий ответ, 167
Вывод осуществляется в формате текстового файла изображения X_PixMap , который также можно просмотреть с помощью
display
утилиты ImageMagick .Заметьте, что я вынул из формата XPM столько, сколько мог, чтобы
display
он все равно его принимал. Я был в состоянии вынуть все c шаблон, за исключением"
двойных кавычек вокруг каждой строки. Понятия не имею, что другие - если таковые имеются - утилиты примут это.источник
PowerShell + браузер на ваш выбор,
149143 байтаНевозможность использовать импорт действительно сложна, поскольку все вызовы GDI (то есть то, что PowerShell использует для рисования) скрыты за импортом в .NET ...
Редактировать - сохранено шесть байтов благодаря @NotThatCharles
Это использует два цикла для
1..8
цикла для генерации большой HTML-строки, аналогичной предоставленной в примере PHP, и вывода ее в конвейер. Каждый раз, когда мы вычисляем, нужно ли добавлять;background:#000
черные фоны, занимая текущую позицию на доске по модулю 2.Чтобы использовать, перенаправьте вывод в файл по вашему выбору (например, с чем-то вроде
> chessboard.htm
), а затем запустите его в браузере по вашему выбору. Для скриншота ниже я использовал "c.htm" и Firefox.источник
white
аblack
может быть#fff
и#000
... но зачем вообще указывать белый?(";background:#000","")[($a+$_)%2]
вместо.PHP + CSS + HTML, 136 байт
Поднятие стола на более высокий уровень:
Он генерирует следующий код:
Он сильно зависит от доброты браузеров и CSS.
источник
++$i<9
на@++$i<9
. Кроме того, чтобы он работал без<?php
, необходимо иметь директивуshort_open_tags=On
, которая используется по умолчанию в некоторых средах. Узнайте больше на stackoverflow.com/a/2185331/2729937Желе, 26 байт
Поскольку Jelly не поддерживает встроенные изображения, мы печатаем изображение PPM.
Попробуйте онлайн! (меньшая доска для скорости, сырой PPM)
Полученные результаты
Как это работает
Неконкурентная версия (24 байта)
Новейший переводчик Jelly, предшествовавший этому посту, не векторизовался
x
должным образом. В последней версии можно сохранить 2 дополнительных байта.Единственное отличие состоит в том, что
x50
получается плоский список (каждый элемент повторяется 50 раз), поэтомуF
он больше не нужен.источник
;
...;)MATL , 11 (27) байтов
Это дает следующий рисунок. У него нет внутреннего размера; он автоматически масштабируется в зависимости от размера окна рисунка. Кажется, что это разрешено вызовом.
объяснение
Если автоматическое масштабирование не разрешено:
создает следующий рисунок с квадратами 50x50 пикселей
объяснение
источник
Pyth,
2826 байтобъяснение
Эквивалент Python
Попробуйте здесь (только значения цвета)
Выход:
источник
Matlab, 47 (24) байтов
Это работает точно так же, как мой октавский ответ , но я смог использовать тот,
spiral
который сохранил один байт.spiral(n)
создаетnxn
матрицу и заполняет ее по спирали первымиn^2
целыми числами.Если разрешена векторная графика, мы можем сделать это за 24 байта:
(Это измененная версия, я не хочу загромождать ответы здесь =)
источник
ФФмпег, 78
82 100байтНаконец дошли руки до очистки доски.
Старше :
Будет выходить с ошибкой, но после создания изображения ниже.
(доска собрала немного пыли)
источник
CJam, 27 байт
Попробуйте онлайн! (меньшая доска для скорости, сырой PPM)
Полученные результаты
Как это работает
источник
HTML с utf-8 - 66b
▚ коротко-прямой utf для сущности & # 9626;
Символ Unicode 'ВЕРХНЯЯ ЛЕВАЯ И НИЗКАЯ ПРАВА КВАДРАНТА' (U + 259A)
Глупый я, искал решение 1 UTF-8 Char - было бы ... 1b!
источник
▞
Вместо этого вы должны использовать так, чтобы верхний левый квадрат был белым, как на стандартной шахматной доске. Кроме того, используйте<pre>
вместо<div>
так, чтобы вы могли использовать новые строки вместо<br>
.▚
считается 3 байта с использованием кодировки UTF-8. В будущем вы можете использовать это, чтобы проверить свойPHP,
166158155 байтРаботает в PHP 7.0.2 (короткие ярлыки включены) и Chrome 48.0.2564.97 m
источник
bgcolor=0
для создания черного фона. Это должно сбрить тонну байтов! И вместо того$v%2==0
, чтобы использовать$v&1
, который должен побрить несколько байтов.PHP> = 5,4,
175159149116 байтЗаметки
источник
<table><tr><?php for(;++$i<65;){echo'<td style="width:50px;height:50px;background:#'.(($i+$m)%2?'000':'').'"></td>';if($i%8<1){echo"</tr><tr>";$m=!$m;}}
TR
.++$i<65
на@++$i<65
, так как вы беспокоитесь о предупреждениях. Это означает, что вы можете уменьшить$m=$i=0
до просто$m=0
, сэкономив вам 2 байта. Вместоecho 'a'.'b'.'c';
вы можете сделатьecho 'a','b','c';
. Это означает, что выecho
можетеecho'<td style="width:50px;height:50px;background:#',($i+$m)%2?'':'000','">';
сэкономить более 2 байтов. Кроме того, атрибуты HTML не требуют кавычек. Удалите их и сабе 2 байта. Кроме того, есть намного более короткийbgcolor
атрибут, который уменьшает больше байтов! Вы можете использоватьprint()
в,for
чтобы сохранить еще больше байтов!($i+$m)%2
на$i+@$m&1
, что позволило мне удалить это$m=0
. Впереди, я смог удалить вашif
и заменить его на обычную операцию. Чтобы сохранить еще больше , я удалил вашstyle
и добавил свойстваwidth
иheight
. Чтобы получить еще больше от хакерской стороны, я понял, что Chrome 48.0.2564.103 m использует черный, если цвет фона0
, используя свойствоbgcolor
. Это позволило мне еще больше уменьшить! Чем больше скидок, тем лучше!JavaScript, 150
Это, безусловно, можно сыграть в гольф. Это создает HTML.
источник
Айк , 24 байта
Суть метода состоит в том, чтобы сгенерировать список координат x, разделить их, а затем взять кросс-произведение равенства для генерации соответствующего растрового изображения. Используя меньшие примеры в иллюстративных целях:
попробуйте здесь . Технически iKe работает на логическом холсте размером 160x160 пикселей, но в полноэкранном режиме (по умолчанию при переходе по сохраненной ссылке) он увеличивается в 3 раза. Я думаю, что это все еще соответствует духу вопроса, так как программа может собрать намного больший битовый массив с тем же количеством символов; это просто сводится к произвольному ограничению отображения.
Обновить:
iKe не предназначен в первую очередь для гольфа, но живое кодирование по-прежнему выигрывает от краткости и нормальных значений по умолчанию. В результате использования этой проблемы я решил разрешить ей использовать палитру по умолчанию, если она не указана. Это конкретное решение теперь может быть выражено с помощью:
Сохранение (неподходящее) 3 байта.
источник
Рубин с обувью, 97 знаков
Пример вывода:
источник
Lua + LÖVE,
138113112106 символовПример вывода:
источник
//
оператор целочисленного деления, но, по-видимому, до сих пор нет LÖVE, созданного с использованием LuaJIT. ManGIMP, 539 байтов
Развернутая схема сценария-фу:
В пакетном режиме создайте пустое изображение, создайте прямоугольное выделение 50x50, заполните его, а затем несколько раз перемещайте вокруг изображения, заполняя квадраты. Затем сохраните
c.png
и выйдите.Выход:
источник
J,
3331 байтЯ использовал трюк с бинарным.
... потому что 43605 в двоичном виде это 1010101001010101 (мы используем
#:
примитив, чтобы получить его). Примитив$
формирует этот массив двоичных цифр в матрицу, указанную с размерами8 8
. Иviewmat
это просто системная библиотека.Окно полностью изменяемого размера.
Спасибо @FrownyFrog за сокращение его до:
источник
viewmat 8$#:170 85
на 1 байт корочеviewmat#:8$170 85
Excel VBA, 82 байта
Функция анонимного непосредственного окна VBE, которая не принимает и выводит шахматную доску в диапазон
A1:H8
объекта ActiveSheetЭта функция работает, сначала создав 4 черные колонки в диапазоне
B1:B8,D1:D8,F1:F8,H1:H8
а затем смещая раскраску в строках2,4,6 and 8
слева на одну ячейку.Пример вывода
источник
Perl 5 - 80
Создает файл .PBM:
источник
PowerShell + GDI, 346 байт
(переводы строки считаются такими же, как точка с запятой, поэтому переводы для удобства чтения)
В отличие от моего другого ответа , этот использует сборки .NET для вызова GDI + функций . Интересно, что это примерно вдвое больше.
Первые две строки загружают
System.Windows.Forms
иSystem.Drawing
сборки. Первый используется для литерального окна и холста на нем, второй - для объекта рисования (в этом коде, кисти), который создает графику на холсте.Затем мы создаем нашу форму
$f
со следующей строкой и устанавливаем ееwidth
иheight
быть450
. Обратите внимание, что это не50*8
, поскольку эти числа соответствуют краю от границы окна формы, включая заголовок, кнопку закрытия и т. Д.Следующая строка создает наш холст
$g
, вызывая пустой конструктор. По умолчанию верхний левый угол несистемной области формы равен0,0
и увеличивается вправо и вниз, что идеально подходит для наших нужд.Следующая строка - фактический вызов, который рисует графику, с
$f.add_paint({...})
. Мы создаем графические вызовы путем двойного цикла0..7
и передачи вспомогательной переменной$y
через каждый внешний цикл. Каждый внутренний цикл, мы говорим нашему холсту,.FillRectangle(...,...)
чтобы рисовать наши квадраты. Первый параметр создает новыйSolidBrush
цвет в зависимости от того, где мы находимся на доске. Другими параметрами здесь могут быть штриховка, градиент и т. Д. Второй параметр - это новыйRectangle
объект, начинающийся с заданного x$_*50
и$y*50
координат и продолжающийся50
в каждом направлении. Помните, что0,0
это верхний левый.Последняя строка просто отображает результат с помощью
.showDialog()
.Обратите внимание, что, поскольку мы создаем объект формы , а PowerShell полностью посвящен конвейеру, закрытие всплывающей формы будет проходить вдоль
System.Enum.DialogResult
объектаCancel
, поскольку технически это сделал пользователь. Поскольку мы не собираем и не делаем что-либо с этим результатом, словоCancel
будет отображено в STDOUT, когда программа завершит работу, как это было оставлено в конвейере.источник
ВЫБРАТЬ. ,
88448278 байтовКонечно, это долго, но первые две версии, которые я сгенерировал для этой задачи, были вдвое длиннее.
Выход:
Как это работает:
Вот программа, использованная для его генерации:
Другими словами, цикл n от 0 до 63, рисуя квадрат в (n% 8-4) + (n // 8-4) i, если (-1) ^ (n // 8 + n% 8) не положительны.
источник
JavaScript (ES6), 147
источник
Python, 57 байт
c
это линия из 50 белых и 50 черных пикселей,200*c
это строка с белым спереди,200*c[::-1]
наоборот.Выход в виде PPM, использование:
источник