Построить шахматную доску


23

Видел это в вызове PHP. Цель состоит в том, чтобы сделать шахматную доску с 64 квадратами (8 * 8) с минимальным количеством кода. Достаточно просто, я сделал мой в PHP в 356 байт (я знаю, не впечатляет), и я хотел бы увидеть некоторые другие подходы. Это можно сделать на языке по вашему выбору, если вы сохраняете его ванильным, поэтому нет импорта. Наименьший счетчик байтов выигрывает.

Вывод должен выглядеть так:

ScreenCap

И мой код:

<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 за исключением векторных изображений.
  • Выходной формат или размер не имеет значения, и это не должно быть изображение.
  • В целях оценки выходные данные должны быть видны, например, в файле изображения или на снимке экрана.
  • Нет библиотек, написанных после публикации заявки

3
Добро пожаловать в PPCG, так как этот вызов не имеет ничего общего с PHP, поэтому я изменил ваши теги. Кроме того, я считаю, что ваша эталонная реализация принадлежит как ответ, а не как ваш вопрос. Как говорил Стьюи, вы должны указать требуемый размер вывода изображения, а также такие вещи, как особенности цвета и разрешено ли изображение с потерями.
FryAmTheEggman

2
Значит, какая-то ASCII-магия не допускается? :(
Денкер

4
Насколько основной является основным? Какое определение для "import"?
Дверная ручка

6
Это не должно быть изображение, но каждый квадрат должен быть не менее 50 пикселей? Это кажется мне противоречивым.
Питер Тейлор,

4
Языки программирования здесь очень разнообразны, в том числе те, которые сделаны специально для игры в гольф и имеют много встроенных функций. Поэтому я рекомендую снять ограничение на небиблиотечные функции и вместо этого задавать вопрос по умолчанию (все операции импорта учитываются в байтовом количестве; нет библиотек, написанных после публикации запроса).
lirtosiast

Ответы:


13

Октава, 20 18 байт

Спасибо @Bruno за то, что сбрил 2 байта.

imshow(invhilb(8))

Результат:

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

Этот ответ использует метод, найденный здесь . Он также основан на автоматическом масштабировании изображений в Octave в зависимости от размера окна рисунка.


1
@AlexA. Я также не совсем убежден, что квадраты должны быть точно 50x50 пикселей, поскольку следующее правило гласит: «Выходной формат или размер не имеет значения ...». Люди просили разъяснений в комментариях, но вопрос не обновлялся.
мензурка

Отредактировал вопрос. Протестировал ваш код, и он работает, поэтому в настоящее время у вас наименьшее количество байтов :)
Bruno

Также убрал> 0, и он все еще работает, так что вы можете побрить 2 байта там
Bruno

@ Бруно Что? Это дико. Таким образом, очевидно, что значения матрицы (все они << 0 или >> 1) ограничены до 0 и 1. Спасибо за совет, я обновлю! : D
мензурка

Поздравляю на 2к!
NoOneIsHere

26

vim, 47 46 44 43

зачеркнуто 44 все еще регулярно 44 ...

iP1 400 <C-p><cr><esc>50i1<esc>YpVr0yk3PyG49PyG:m$<cr>p2GyG3P
i          enter insert mode
P1         signal to NetPPM that we're using black&white (PBM) format
400        width
<C-p>      fancy trick that inserts the other 400 for height
<cr><esc>  exit insert mode on the next line
50i1<esc>  insert 50 '1's (black)
YpVr0      insert 50 '0's (white) by duplicating the line and replacing all chars
yk         copy both lines (yank-up)
3P         paste three times; this leaves us on line two
yG         copy from line 2 to end of file (this is a full row of pixels now)
49P        we need 50 rows of pixels to make a complete "row"; paste 49 times
yG         copy the entire row of the checkerboard
:m$<cr>    move line 2 (the line we're currently on) to the end of the file
           this gives us the "alternating rows" effect
p          we're now on the last line: paste the entire row we copied earlier
2G         hop back to line 2 (beginning of image data)
yG3P       copy the entire image data, paste 3 times

Выходы в формате NetPPM (PBM):

выход


2
Мне нравится, что вы можете выполнить графический вывод с помощью текстового редактора. Есть ли другие примеры PBM от Golf vim?
ankh-morpork

1
@ dohaqatar7 Я не знаю, но я уже делал TikZ с vim, так что графика в vim - это точно.
Ручка двери

2
Ух ты, я никогда не думал попробовать <C-p>vim, не начав набирать слово ... это действительно удобно!
Desty

16

CSS, 244 байта

html{background:#fff}body{width:400px;height:400px;background:linear-gradient(45deg,#000 25%,transparent 25%,transparent 75%,#000 75%)0 0/100px 100px,linear-gradient(45deg,#000 25%,transparent 25%,transparent 75%,#000 75%)50px 50px/100px 100px}

Пояснение: Диагональный линейный градиент 100x100px создается с четырьмя упорами, так что большая часть градиента прозрачна, за исключением двух треугольных углов 50px. (Смотри ниже фрагмент). Добавление второго градиента со смещением 50x50px заполняет недостающие половины квадратов. Увеличение размера тела позволяет повторять шаблон, чтобы заполнить всю шахматную доску.


Чистое решение. Это должно работать так же хорошо, если вы бросите последний } .
insertusername здесь

Можете ли вы объяснить, что здесь происходит?
flawr

@flawr Я добавил второй фрагмент, показывающий частичный эффект, надеюсь, это поможет.
Нил

Это потрясающе.
Не то чтобы Чарльз

Вам действительно нужно html{background:#fff}? По умолчанию 99% браузеров устанавливают фон на белый, afaik
Downgoat

15

Mathematica, 34 байта

ArrayPlot@Array[Mod[+##,2]&,{8,8}]

Вывод является векторным изображением и заключен в рамку.

Вместо правильного позиционирования 32 прямоугольников, мы можем просто сгенерировать двоичную матрицу и заставить ArrayPlotнас работать:

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


Ницца! Спасибо за публикацию.
Симмонс

Хорошо выглядеть. Можете ли вы объяснить мне, где вы определяете каждый квадрат как 50px? Кроме того, есть ли онлайн-эмулятор, где я могу его протестировать?
Бруно,

@Bruno Выходные данные являются векторной графикой, поэтому не существует такой вещи, как размеры в пикселях (изображение не имеет собственного размера - его можно масштабировать и отображать в любом размере). Вот почему я спросил.
Мартин Эндер

4
Подожди, GenerateChessBoardWithColorsAsParameters[ColorBlack, ColorWhite, 8, 8, 50, 50]не работает? ;)
Конор О'Брайен

3
@ CᴏɴᴏʀO'Bʀɪᴇɴ Да, но это 73 байта.
Мартин Эндер

10

Mathematica, 81 72 55 байт

Graphics[Rectangle/@Select[Range@8~Tuples~2,2∣Tr@#&]]

Ввод, вывод

Изображение оценки предыдущей версии, но все равно выглядит так же.


8

Октава, 48 байт

​​​​​​​​​​​​​​​imwrite(kron(mod((t=0:7)+t',2),ones(50)),'.png')

Это работает точно так же, как мой ответ Matlab , но нет spiralв Octave. Вместо этого мы используем функцию, которой нет в Matlab: мы можем использовать присваивание tуже в качестве выражения, а позже использовать tснова в том же выражении.

(Это измененная версия, я не хочу загромождать ответы здесь =)


1
Верхний левый угол должен быть белым, а не черным.
Дверная ручка

2
На выходе должна быть шахматная доска, ориентация не указана.
flawr

2
Извините, flawr, на выходе должна быть шахматная доска. Шахматная доска - это всегда «Королева в своем цвете, белая справа» (это означает, что на правой руке каждого игрока есть белый угловой квадрат).
CorsiKa

5
Затем представьте одного игрока, сидящего справа, другого слева. Опять же: это не было указано в вызове, это просто ваша интерпретация.
flawr

8

Pure Bash (без внешних утилит), 133

Я видел комментарий @ Doorknob как нечто сложное. Это немного долго, но здесь идет:

echo \# ImageMagick pixel enumeration:400,400,1,rgb
for((;x=p%400,y=p/400,c=1-(x/50^y/50)&1,p++<160000;));{
echo "$x,$y:($c,$c,$c)"
}

Вывод в формате ImageMagick .txt . Обратите внимание, что это чистый Bash. Ни Imagemagick, ни какие-либо другие внешние утилиты не создаются для генерации этого вывода. Однако выходные данные могут быть перенаправлены в файл .txt и просмотрены с помощью displayутилиты ImageMagick :

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

Этот формат изображения хорош тем, что он не только чистый текст, но и список всех пикселей (x, y и значение цвета), по одному на строку. Довольно просто арифметически вывести все значения пикселей в одном большом цикле.


Предыдущий ответ, 167

echo "\"400 400 2 1\"
\"  c white\"
\"b c black\""
printf -vf %50s
a="$f${f// /b}"
o=("\"$a$a$a$a\"" "\"${f// /b}$a$a$a$f\"")
for i in {0..399};{
echo "${o[i/50%2]}"
}

Вывод осуществляется в формате текстового файла изображения X_PixMap , который также можно просмотреть с помощью displayутилиты ImageMagick .

Заметьте, что я вынул из формата XPM столько, сколько мог, чтобы displayон все равно его принимал. Я был в состоянии вынуть все шаблон, за исключением "двойных кавычек вокруг каждой строки. Понятия не имею, что другие - если таковые имеются - утилиты примут это.


6

PowerShell + браузер на ваш выбор, 149 143 байта

Невозможность использовать импорт действительно сложна, поскольку все вызовы GDI (то есть то, что PowerShell использует для рисования) скрыты за импортом в .NET ...

"<table><tr>"+((1..8|%{$a=$_;-join(1..8|%{'<td style="width:50px;height:50px'+("",";background:#000")[($a+$_)%2]+'"></td>'})})-join'</tr><tr>')

Редактировать - сохранено шесть байтов благодаря @NotThatCharles

Это использует два цикла для 1..8 цикла для генерации большой HTML-строки, аналогичной предоставленной в примере PHP, и вывода ее в конвейер. Каждый раз, когда мы вычисляем, нужно ли добавлять ;background:#000черные фоны, занимая текущую позицию на доске по модулю 2.

Чтобы использовать, перенаправьте вывод в файл по вашему выбору (например, с чем-то вроде > chessboard.htm), а затем запустите его в браузере по вашему выбору. Для скриншота ниже я использовал "c.htm" и Firefox.

Fire Fox


Этот был неожиданным, но мне это как-то нравится :)
Bruno

whiteа blackможет быть #fffи #000... но зачем вообще указывать белый?
Не то, что Чарльз

попробуйте (";background:#000","")[($a+$_)%2]вместо.
Не то чтобы Чарльз

@NotthatCharles Durr, мой белый и черный флип-флоп, так что он выводил только белые квадраты. Исправлены дополнительные 4 байта сохранены.
AdmBorkBork

5

PHP + CSS + HTML, 136 байт

Поднятие стола на более высокий уровень:

<table><?for(;++$i<9;)echo'<tr>',str_repeat(["<td b><td>","<td><td b>"][$i&1],4);?><style>td{width:50px;height:50px}[b]{background:#000}

Он генерирует следующий код:

<table><tr><td><td b><td><td b><td><td b><td><td b><tr><td b><td><td b><td><td b><td><td b><td><tr><td><td b><td><td b><td><td b><td><td b><tr><td b><td><td b><td><td b><td><td b><td><tr><td><td b><td><td b><td><td b><td><td b><tr><td b><td><td b><td><td b><td><td b><td><tr><td><td b><td><td b><td><td b><td><td b><tr><td b><td><td b><td><td b><td><td b><td><style>td{width:50px;height:50px}[b]{background:#000}

Он сильно зависит от доброты браузеров и CSS.


Хорошее решение То я должен был включить php после <? и включите $ i = 0 в качестве первого параметра for, чтобы заставить его работать должным образом, получив окончательный результат в 144 байта.
Бруно

1
@ Bruno Если вы ссылаетесь на предупреждение, которое он выдает, предупреждения здесь не учитываются. Однако существует триллион способов их отключения. Одним из них является замена ++$i<9на @++$i<9. Кроме того, чтобы он работал без <?php, необходимо иметь директиву short_open_tags=On, которая используется по умолчанию в некоторых средах. Узнайте больше на stackoverflow.com/a/2185331/2729937
Исмаэль Мигель

5

Желе, 26 байт

400R%2ẋ€50FU;$ẋ4;;;1j⁶;”PU

Поскольку Jelly не поддерживает встроенные изображения, мы печатаем изображение PPM.

Попробуйте онлайн! (меньшая доска для скорости, сырой PPM)

Полученные результаты

Скриншот

Как это работает

400R%2ẋ€50FU;$ẋ4;;;1j⁶;”PU  Main link. No arguments.

400                         Set the left argument to 400.
   R                        Yield [1, ..., 400].
    %2                      Compute the parity of each integer.
      ẋ€50                  Replace each parity by an array of 50 copies of itself.
          F                 Flatten the resulting, nested list.
                            This creates the first rank of the board.
             $              Combine the two atoms to the left:
           U                  Reverse the array of parities.
            ;                 Concatenate the reversed array with the original.
                            This creates the first two ranks of the board.
              ẋ4            Repeat the resulting list four times.
                            This creates all eight ranks of the board.
                ;           Append 400, the link's left argument.
                 ;          Append 400, the link's left argument.
                  ;1        Append 1.
                    j⁶      Join, separating by spaces.
                      ;”P   Append the character 'P'.
                         U  Reverse the resulting list.

Неконкурентная версия (24 байта)

Новейший переводчик Jelly, предшествовавший этому посту, не векторизовался xдолжным образом. В последней версии можно сохранить 2 дополнительных байта.

400R%2x50U;$ẋ4;;;1j⁶;”PU

Единственное отличие состоит в том, что x50получается плоский список (каждый элемент повторяется 50 раз), поэтому Fон больше не нужен.


1
Похоже, вы писали java-ответ и слегка заснули, когда набирали ;...;)
Конор О'Брайен,

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Ява? Вы должны быть на Java 10.0, Golfing Edition, потому что это не похоже ни на одну Java, которую я видел ....
BalinKingOfMoria

5

MATL , 11 (27) байтов

8:t!+Q2\TYG

Это дает следующий рисунок. У него нет внутреннего размера; он автоматически масштабируется в зависимости от размера окна рисунка. Кажется, что это разрешено вызовом.

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

объяснение

8:      % row vector [1,2,...8]
t!      % duplicate and transpose into column vector
+       % 8x8 matrix with all pairwise additions
Q       % add 1
2\      % modulo 2. Gives 8x8 matrix of zeros and ones
TYG     % draw image

Если автоматическое масштабирование не разрешено:

'imshow'8:t!+Q2\50t3$Y"0#X$

создает следующий рисунок с квадратами 50x50 пикселей

объяснение

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

'imshow'   % name of Matlab function
8:t!+Q2\   % same as above. Produces 8x8 matrix of zeros and ones
50t3$Y"    % repeat each element 50 times in each dimension
0#X$       % call imshow function with above matrix as input

5

Pyth, 28 26 байт

J*4+*50]255*50]0.wm_mxkdJJ

объяснение

J                          - Autoassign J = V
           *50]0           - 50*[0]
    *50]255                - 50*[255]
   +                       - ^^+^
 *4                        - 4*^
                .w         - write_greyscale(V)
                  m      J - [V for d in J]
                   _       - reversed(V) 
                    m   J  - [V for k in J]
                     xkd   - k^d

Эквивалент Python

J = 4*(50*[255]+50*[0])
write_greyscale([[k^d for k in J][::-1] for d in J])

Попробуйте здесь (только значения цвета)

Выход:

Выход


Хорошая работа по подсчету байтов, но мне нужен правильный вывод с видимыми квадратами :)
Bruno

Вывод @Bruno добавлен! Я установил PIL только для вас: O (я на самом деле раньше его не тестировал)
Blue

@muddyfish извините за беспокойство и спасибо. Доска должна начинаться и заканчиваться белым квадратом, хотя :)
Бруно

4

Matlab, 47 (24) байтов

imwrite(kron(mod(spiral(8),2),ones(50)),'.png')

Это работает точно так же, как мой октавский ответ , но я смог использовать тот, spiralкоторый сохранил один байт. spiral(n)создает nxnматрицу и заполняет ее по спирали первыми n^2целыми числами.

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

imshow(mod(spiral(8),2))

(Это измененная версия, я не хочу загромождать ответы здесь =)


4

ФФмпег, 78 82 100 байт

Наконец дошли руки до очистки доски.

ffplay -f lavfi color=s=400x400,geq='255*mod(trunc(X/50)+trunc(Y/50)+1,2):128'

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


Старше :

ffmpeg -f lavfi -i "color=tan@0:256x256,format=ya8" -vf "scale=400:-1:alphablend=checkerboard" .jpg

Будет выходить с ошибкой, но после создания изображения ниже.

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

(доска собрала немного пыли)


3

CJam, 27 байт

"P1"400__,2f%50e*_W%+4*~]S*

Попробуйте онлайн! (меньшая доска для скорости, сырой PPM)

Полученные результаты

Скриншот

Как это работает

"P1"                        e# Push that string.
    400__                   e# Push three copies of 400.
         ,                  e# Turn the last one into [0 ... 399].
          2f%               e# Compute the parity of each integer.
             50e*           e# Repeat each parity 50 times.
                            e# This creates the first rank of the board.
                 _W%        e# Create a reversed copy of the resulting array.
                    +       e# Concatenate the original with the reversed array.
                            e# This creates the first two ranks of the board.
                     4*     e# Repeat the resulting array four times.
                            e# This creates all eight ranks of the board.
                       ~    e# Dump all of its items (the pixels) on the stack.
                        ]   e# Wrap the entire stack in an array.
                         S* e# Join that array, separating them by spaces.

3

HTML с utf-8 - 66b

<div style="font:100 50px/48px serif">▚▚▚▚<br>▚▚▚▚<br>▚▚▚▚<br>▚▚▚▚

▚ коротко-прямой utf для сущности & # 9626;

Символ Unicode 'ВЕРХНЯЯ ЛЕВАЯ И НИЗКАЯ ПРАВА КВАДРАНТА' (U + 259A)

Глупый я, искал решение 1 UTF-8 Char - было бы ... 1b!


2
Похоже, размер шрифта не так.
Qwertiy

1
Вместо этого вы должны использовать так, чтобы верхний левый квадрат был белым, как на стандартной шахматной доске. Кроме того, используйте <pre>вместо <div>так, чтобы вы могли использовать новые строки вместо <br>.
Нил

Похоже, что ваш счетчик неверен, он должен быть 98 байтов, так как считается 3 байта с использованием кодировки UTF-8. В будущем вы можете использовать это, чтобы проверить свой
Тейлор Скотт

2

PHP, 166 158 155 байт

Работает в PHP 7.0.2 (короткие ярлыки включены) и Chrome 48.0.2564.97 m

<table><tr><? while(++$i<=8){while(++$j<=8){echo"<td style=background-color:".($i%2==0?($j%2==1?0:""):($j%2==0?0:"")).";padding:9></td>";}echo"<tr>";$j=0;}

Вы можете использовать это свойство bgcolor=0для создания черного фона. Это должно сбрить тонну байтов! И вместо того $v%2==0, чтобы использовать $v&1, который должен побрить несколько байтов.
Исмаэль Мигель

2

PHP> = 5,4, 175 159 149 116 байт

<table><tr><? for(;@++$i<65;)echo'<td width=50 height=50 ',$i+@$m&1?:'bgcolor=0','>',$i%8<1?'<tr '.($m=@!$m).'>':'';

<table><tr><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><tr 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><tr ><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><tr 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><tr ><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><tr 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><tr ><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><tr 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><td width=50 height=50 bgcolor=0><td width=50 height=50 1><tr >

Заметки

  • Бритые 16 байтов - спасибо @insertusernameherehere
  • Побрился 10 байт - спасибо @ msh210
  • Побрился на 30 байт - Спасибо @Ismael Miguel

1
Вероятно, это может быть игра в гольф еще больше, но здесь вы идете ( 152 байта ):<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;}}
insertusername здесь

Хотя я не удалил первоначальные задания (Работает, личная причуда не позволяет мне это сделать), спасибо за это
Shaun H

1
Согласно даже строгой версии HTML 4, вы можете пропустить конечный тег для TR.
msh210

1
Замените ++$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чтобы сохранить еще больше байтов!
Исмаэль Мигель

1
Чтобы сэкономить еще больше, я заменил ($i+$m)%2на $i+@$m&1, что позволило мне удалить это $m=0. Впереди, я смог удалить ваш ifи заменить его на обычную операцию. Чтобы сохранить еще больше , я удалил ваш styleи добавил свойства widthи height. Чтобы получить еще больше от хакерской стороны, я понял, что Chrome 48.0.2564.103 m использует черный, если цвет фона 0, используя свойство bgcolor. Это позволило мне еще больше уменьшить! Чем больше скидок, тем лучше!
Исмаэль Мигель

1

JavaScript, 150

Это, безусловно, можно сыграть в гольф. Это создает HTML.

for(i=0;i<8;)console.log(`<b style=margin-${['lef','righ'][i++%2]}t:50;width:50;height:50;display:inline-block;background:#000></b>`.repeat(4)+'<br>')

1
Да, я никогда не знал о строках шаблонов в JavaScript. Круто.
Cheezey

1

Айк , 24 байта

,(;cga;t=\:t:2!-20!!160)

доска

Суть метода состоит в том, чтобы сгенерировать список координат x, разделить их, а затем взять кросс-произведение равенства для генерации соответствующего растрового изображения. Используя меньшие примеры в иллюстративных целях:

  !8
0 1 2 3 4 5 6 7

  -2!!8
0 0 1 1 2 2 3 3

  2!-2!!8
0 0 1 1 0 0 1 1

  t=\:t:2!-2!!8
(1 1 0 0 1 1 0 0
 1 1 0 0 1 1 0 0
 0 0 1 1 0 0 1 1
 0 0 1 1 0 0 1 1
 1 1 0 0 1 1 0 0
 1 1 0 0 1 1 0 0
 0 0 1 1 0 0 1 1
 0 0 1 1 0 0 1 1)

попробуйте здесь . Технически iKe работает на логическом холсте размером 160x160 пикселей, но в полноэкранном режиме (по умолчанию при переходе по сохраненной ссылке) он увеличивается в 3 раза. Я думаю, что это все еще соответствует духу вопроса, так как программа может собрать намного больший битовый массив с тем же количеством символов; это просто сводится к произвольному ограничению отображения.

Обновить:

iKe не предназначен в первую очередь для гольфа, но живое кодирование по-прежнему выигрывает от краткости и нормальных значений по умолчанию. В результате использования этой проблемы я решил разрешить ей использовать палитру по умолчанию, если она не указана. Это конкретное решение теперь может быть выражено с помощью:

,(;;t=\:t:2!-20!!160)

Сохранение (неподходящее) 3 байта.


1

Рубин с обувью, 97 знаков

Shoes.app(width:400){64.times{|i|stack(width:50,height:50){background [white,black][(i/8+i)%2]}}}

Пример вывода:

Шахматная доска, нарисованная Руби с обувью


Должен начинаться и заканчиваться белым. В остальном хорошая работа :)
Бруно,

К сожалению. Спасибо @ Бруно. Исправлена.
manatwork

Отлично, проголосовал :)
Bruno

1

Lua + LÖVE, 138 113 112 106 символов

function love.draw()for i=0,31 do
love.graphics.rectangle("fill",i%8*50,(i-i%8)/8*100+i%2*50,50,50)end
end

Пример вывода:

Шахматная доска от Lua + LÖVE


Grr! В Lua 5.3 есть //оператор целочисленного деления, но, по-видимому, до сих пор нет LÖVE, созданного с использованием LuaJIT. Man
manatwork

1

GIMP, 539 байтов

gimp -i -b '(let* ((i (car (gimp-image-new 400 400 1))) (d (car (gimp-layer-new i 400 400 2 "b" 100 0)))) (gimp-image-insert-layer i d 0 -1) (define (t x y) (gimp-selection-translate i x y)) (define (x) (t 100 0)) (define (X) (t -100 0)) (define (y) (t 50 50)) (define (Y) (t -50 50)) (define (f) (gimp-edit-fill d 1)) (define (r) (f) (x) (f) (x) (f) (x) (f) (y)) (define (R) (f) (X) (f) (X) (f) (X) (f) (Y)) (gimp-image-select-rectangle i 2 0 0 50 50) (r) (R) (r) (R) (r) (R) (r) (R) (gimp-file-save 1 i d "c.png" "c.png") (gimp-quit 0))'

Развернутая схема сценария-фу:

(let* ((i (car (gimp-image-new 400 400 GRAY)))
       (d (car (gimp-layer-new i 400 400 GRAY-IMAGE "b" 100 NORMAL-MODE))))

  (gimp-image-insert-layer i d 0 -1)
  (define (t x y) (gimp-selection-translate i x y))
  (define (x) (t 100 0))
  (define (X) (t -100 0))
  (define (y) (t 50 50))
  (define (Y) (t -50 50))
  (define (f) (gimp-edit-fill d BACKGROUND-FILL))
  (define (r) (f) (x) (f) (x) (f) (x) (f) (y))
  (define (R) (f) (X) (f) (X) (f) (X) (f) (Y))

  (gimp-image-select-rectangle i CHANNEL-OP-REPLACE 0 0 50 50)
  (r) (R) (r) (R) (r) (R) (r) (R)
  (gimp-file-save RUN-NONINTERACTIVE i d "c.png" "c.png")
  (gimp-quit 0))

В пакетном режиме создайте пустое изображение, создайте прямоугольное выделение 50x50, заполните его, а затем несколько раз перемещайте вокруг изображения, заполняя квадраты. Затем сохраните c.pngи выйдите.

Выход:

шахматная доска png


1

J, 33 31 байт

Я использовал трюк с бинарным.

   load'viewmat'
   viewmat 8 8$#:43605

... потому что 43605 в двоичном виде это 1010101001010101 (мы используем #:примитив, чтобы получить его). Примитив $формирует этот массив двоичных цифр в матрицу, указанную с размерами 8 8. И viewmatэто просто системная библиотека.
введите описание изображения здесь
Окно полностью изменяемого размера.

Спасибо @FrownyFrog за сокращение его до:

   load'viewmat'
   viewmat#:8$170 85

viewmat 8$#:170 85на 1 байт короче
FrownyFrog

1
viewmat#:8$170 85
FrownyFrog

1

Excel VBA, 82 байта

Функция анонимного непосредственного окна VBE, которая не принимает и выводит шахматную доску в диапазон A1:H8 объекта ActiveSheet

Cells.RowHeight=48:[B1:B8,D1:D8,F1:F8,H1:H8].Interior.Color=0:[A2,A4,A6,A8].Delete

Эта функция работает, сначала создав 4 черные колонки в диапазоне B1:B8,D1:D8,F1:F8,H1:H8 а затем смещая раскраску в строках 2,4,6 and 8слева на одну ячейку.

Пример вывода

шахматная доска


0

Perl 5 - 80

Создает файл .PBM:

print 'P1'.' 400'x2 .$".(((0 x50 .1 x50)x4 .$")x50 .((1 x50 .0 x50)x4 .$")x50)x4

0

PowerShell + GDI, 346 байт

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$f=New-Object Windows.Forms.Form
$f.width=$f.height=450
$g=$f.CreateGraphics()
$f.add_paint({0..7|%{$y=$_;0..7|%{$g.FillRectangle((New-Object Drawing.SolidBrush ("white","black")[($_+$y)%2]),(new-object Drawing.Rectangle ($_*50),($y*50),50,50))}}})
$f.showDialog()

(переводы строки считаются такими же, как точка с запятой, поэтому переводы для удобства чтения)

В отличие от моего другого ответа , этот использует сборки .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 Forms

Обратите внимание, что, поскольку мы создаем объект формы , а PowerShell полностью посвящен конвейеру, закрытие всплывающей формы будет проходить вдоль System.Enum.DialogResultобъекта Cancel, поскольку технически это сделал пользователь. Поскольку мы не собираем и не делаем что-либо с этим результатом, слово Cancelбудет отображено в STDOUT, когда программа завершит работу, как это было оставлено в конвейере.


0

ВЫБРАТЬ. , 8844 8278 байтов

(9,9,50)EXP.SELECT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.LEFT.LEFT.EXP.SELECT.EXP.RIGHT.SELECT.LOG.LEFT.SELECT.EXP.RIGHT.SELECT.RIGHT.EXP.SELECT.EXP.SELECT.EXP.LEFT.SELECT.RIGHT.LOG.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.EXP.SELECT.EXP.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.RIGHT.EXP.SELECT.EXP.LEFT.SELECT.RIGHT.LOG.LEFT.SELECT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.EXP.RIGHT.RIGHT.SELECT.LEFT.LEFT.EXP.RIGHT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.RIGHT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.RIGHT.RIGHT.EXP.SELECT.EXP.LEFT.SELECT.RIGHT.LOG.LEFT.SELECT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.LOOP.RIGHT.RIGHT.EXP.SELECT.EXP.LEFT.SELECT.RIGHT.LOG.LEFT.SELECT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.CONJ.RIGHT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.SELECT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.LEFT.EXP.SELECT.RIGHT.LOG.LEFT.SELECT.EXP.RIGHT.SELECT.RIGHT.EXP.SELECT.EXP.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.RIGHT.SELECT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.LEFT.SELECT.RIGHT.RIGHT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.LOOP.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.RIGHT.LOG.SELECT.LOG.RIGHT.SELECT.LEFT.LEFT.END.RIGHT.RIGHT.LOG.SELECT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.LOOP.RIGHT.EXP.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.LEFT.RIGHT.RIGHT.RIGHT.END.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.LOOP.RIGHT.EXP.SELECT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.RIGHT.EXP.SELECT.EXP.LEFT.SELECT.RIGHT.LOG.LEFT.SELECT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.EXP.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.LOG.RIGHT.SELECT.EXP.SELECT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.RIGHT.SELECT.LEFT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.EXP.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.LOG.RIGHT.SELECT.LEFT.PRINT.RIGHT.RIGHT.LOG.SELECT.LOG.RIGHT.SELECT.LEFT.LEFT.END.RIGHT.RIGHT.LOG.SELECT.LOG.RIGHT.SELECT.LEFT.EXP.LEFT.SELECT.RIGHT.LOOP.RIGHT.EXP.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.LEFT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.END.RIGHT.RIGHT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.LEFT.SELECT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.RIGHT.LOG.RIGHT.SELECT.EXP.LEFT.LEFT.SELECT.RIGHT.RIGHT.EXP.LEFT.SELECT.RIGHT.LOG.RIGHT.SELECT.LEFT.END.

Конечно, это долго, но первые две версии, которые я сгенерировал для этой задачи, были вдвое длиннее.

Выход:

Скриншот

Как это работает:

Вот программа, использованная для его генерации:

init(9,9,50)
makenum(8)
square()
dec()
loop("main",computei=True)
go(1)
makenum(8)
go(1)
copyfrom(-2)
intdiv(-1)
add(-5)           # n%8 blah blah blah blah n//8 k^(n//8) k^(n%8) (n//8+n%8)
go(1)
makeneg1()
exptarget(-1)
go(1)
ifnonpositive("drawtest")
go(1)
makenum(-4,-4)    # n%8 blah blah blah blah n//8 k^(n//8) k^(n%8) n//8+n%8 (-1)^(n//8+n%8) 4 1/2 I k^(-4I) -1 (-4-4I)
go(1)
multiply(-4,-11)   # n%8 blah blah blah blah n//8 k^(n//8) k^(n%8) n//8+n%8 (-1)^(n//8+n%8) 4 1/2 I k^(-4I) -1 -4-4I (nI//8)
add(-16)          # n%8 blah blah blah blah n//8 k^(n//8) k^(n%8) n//8+n%8 (-1)^(n//8+n%8) 4 1/2 I k^(-4I) -1 -4-4I nI//8 k^(nI//8) k^(n%8) (n%8+nI//8)
add(-4)           # n%8 blah blah blah blah n//8 (-1)^(n%8) 4 1/2 I k^(-4I) -1 -4-4I nI//8 k^(nI//8) k^(n%8) n%8+nI//8 k^(n%8+nI//8) k^(-4-4I) ((n%8-4)+I(n//8-4))
output()
endif("drawtest")
go(1)
endloop("main")
writetofile("chessboard4")

Другими словами, цикл n от 0 до 63, рисуя квадрат в (n% 8-4) + (n // 8-4) i, если (-1) ^ (n // 8 + n% 8) не положительны.


Это не действительно гольф это: p?
Бруно,

Я не могу быть уверен, что это самая короткая программа, которая выполняет задачу, нет. Тем не менее, я совершенно уверен, что разница между этим и наилучшим возможным решением на этом языке незначительна по сравнению с общей длиной программы. Я имею в виду еще одну идею, которая может быть или не быть короче. Я попробую это в ближайшее время.
Quintopia


0

Python, 57 байт

c=50*"1"+50*"0"
print"P1 400 400 "+4*(200*c+200*c[::-1])

c это линия из 50 белых и 50 черных пикселей, 200*c это строка с белым спереди,200*c[::-1] наоборот.

Выход в виде PPM, использование:

python golf_chess.py > chess.ppm
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.