Введение
Так выглядит шахматная доска.
Вы можете видеть, что a1
это темный квадрат. Тем не менее, b1
это светлый квадрат .
Задание
Задача состоит, учитывая dark
, light
или both
, выход все темные , свет или все квадраты с сепаратором (например , пробелом или переводом строки). Порядок всех квадратов не имеет значения .
Контрольные примеры
Input: dark
Output: a1 a3 a5 a7 b2 b4 b6 b8
c1 c3 c5 c7 d2 d4 d6 d8
e1 e3 e5 e7 f2 f4 f6 f8
g1 g3 g5 g7 h2 h4 h6 h8
Input: light
Output: a2 a4 a6 a8 b1 b3 b5 b7
c2 c4 c6 c8 d1 d3 d5 d7
e2 e4 e6 e8 f1 f3 f5 f7
g2 g4 g6 g8 h1 h3 h5 h7
Input: both
Output: a1 a2 a3 a4 a5 a6 a7 a8
b1 b2 b3 b4 b5 b6 b7 b8
c1 c2 c3 c4 c5 c6 c7 c8
d1 d2 d3 d4 d5 d6 d7 d8
e1 e2 e3 e4 e5 e6 e7 e8
f1 f2 f3 f4 f5 f6 f7 f8
g1 g2 g3 g4 g5 g6 g7 g8
h1 h2 h3 h4 h5 h6 h7 h8
Примечание: я предварительно подтвердил вывод, но это не обязательно .
Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
a2a4a6...
будет хорошо?[[a2,a4,a6,a8],[...]...]
light
,dark
иboth
должны быть введены какString
s или они могут быть представлены через любой тип данных?Ответы:
Pyth,
2221 байт-1 байт от @ Sp3000
В соответствии с функцией
%Chz3
,dark
хэши в 1,light
в 0 иboth
в 2. Если мы берем четность суммы орд шахматного квадрата (то есть,a1
->[97, 33]
->(97 + 33)%2
=0
, темные квадраты переходят в 0, а светлые в 1 Это позволяет нам фильтровать по неравенству.Попробуй это здесь .
источник
fn%Chz3%sCMT2sM*<G8S8
Bash + GNU Utilities, 74
{a..h}{1..9}
это расширение фигурной скобки, которое выдает все координаты для доски 8х8 плюс дополнительный столбец9
. Это важно, потому что это делает длину строки нечетной, что обеспечивает эффект шахматной доски.printf
Просто форматы каждой координате, по одному в каждой строке.Затем встроенное выражение sed удаляет все
x9
координаты и затем печатает либо четные, либо нечетные, либо обе входные строки в соответствии со входными данными скрипта.источник
JavaScript (SpiderMonkey 30+),
90858382 байтаВозвращает разделенную запятыми строку квадратов. Совместимая версия для 99 байтов:
Работает, перечисляя все 64 квадратных имени, затем анализируя их в базе 19, чтобы увидеть, являются ли они светлыми или темными по модулю 2.
источник
JavaScript (ES6), 82
87 98Анонимная функция, возвращающая разделенную пробелами строку квадратов.
ТЕСТ
источник
Пакет, 192 байта
источник
Pyth
4839 байтПопробуй это здесь!
Все еще дольше, чем другое решение Pyth, но я не думаю, что смогу победить это с помощью моего алгоритма.
объяснение
Сначала мы генерируем список всех квадратов на доске и назначаем его
Y
. Затем мы фильтруем этот список так, чтобы остались только светлые квадраты, и назначаем этот списокJ
. После этого мы оцениваем ввод и печатаем:Y
если вход былboth
J
если вход былlight
Y-J
если вход былdark
Определение, является ли квадрат светом, работает следующим образом:
18
дляa8
и т. Д.x%2 == y%2
)источник
Python 2,
737170 байтЯ все еще немного сбит с толку, подходят ли функции для этого вопроса, поскольку в задании упоминается «разделитель», но, поскольку есть много других представлений функций, я сделал то же самое.
Аналогично ответу Эрвана, но с
гораздо большимколичеством Python-2.(-2 байта благодаря @xnor)
источник
s=="dark"
и,s[0]=="d"
но для моей защиты в моей действительно первой попытке, которую я использовалs,*_=s
и 4cmp
ord(s[_])&_
илиord(s[_])/_
.%
:) Спасибо!PHP,
132126120108106 байтОн перебирает столбцы (0-7) и строки (1-8) и проверяет, является ли сумма обоих нечетной / четной.
Протестировано с PHP 5.6.4, запустите его:
php -d error_reporting=30709 -r '<CODE>' {dark|light|both}
источник
$s==2
на$s-1
. Если $ s = 2 и -1, то это 1, что верно и будет продолжаться$c=0
может быть$c
, это даст кучу уведомлений, но, по крайней мере, для темных он отлично работает$s-1
не работает, но должно. Спасибо за эту прекрасную идею! Я исправлю это позже.$c
переменной? Это звучит немного странно и недействительно. Или не?Вицы ,
9082 байтаПояснения к первой строке:
Объяснение второй строки:
Будут бонусные трейлинговые строки для «темных» и «обоих». Требуется, чтобы вводились только «темный», «оба» или «светлый».
Попробуйте онлайн!
источник
PowerShell v3 +,
142129 байтПринимает ввод
$a
и устанавливает две переменные, если мы должны вывести$d
дуги или$l
квадраты на основе первой буквы ввода.Затем мы перебираем
a-h
и1-8
и использует тот же трюк , как на Определяют цвет шахматной площади , чтобы разобрать , является ли это светлый или темный квадрат (установка переменной хелперов$q
в первом тесте) и добавить , что квадрат в случае необходимости трубопровода. После выполнения элементы в конвейере выводятся по одному на строку.Требуется v3 или новее для
-in
оператора.Редактировать - 13 байтов сохранено путем исключения
switch
и путем изменения порядка проверки на равенствоисточник
Джольф, 48 байт
Это все гречески для меня ¯ \ _ (ツ) _ / ¯ Это прекрасный ответ edc65.
источник
Perl, 69 + 3 = 72 байта
Для запуска
perl -p
, для которого я добавил 3 байта.Версия с меньшим объемом игры (немного отличается, так как оператор детской тележки затрудняет форматирование):
Гольф версия использует
"@{[]}"
; закомментированная версия использует@a=...; "@"
так, чтобы закомментированный код все еще работал.источник
map$l.$_,1..8
-1grep$i=!$i||$b,map
снова -1C ++, 132 байта
Принимает ввод из командной строки. Использует указатель / модуль вуду для условия печати.
источник
n
-луп необходим. Я думаю, что вложенные в циклыi
иj
обрезать несколько байтов.(i+j)%2
Подход действительно умный. Я не думал об этом.(i//8+i%8)%2
это то же самое, что(i//8+i)%2
вы можете выиграть несколько байтов, еслиj=n%8
Ява, 143
Эй, это не самый длинный ответ :)
Ввод принимается в качестве аргумента командной строки.
источник
PHP,
998279767473 байтаИспользует кодировку ISO 8859-1.
Запустите так (
-d
добавлено только для эстетики):Это работает так: переменная
$x
увеличивается от 1 до 71, числа соответствуют ячейкам, как показано ниже.Следовательно,
$x modulo 9
возвращает номер столбца и номер$x / 9
строки, которую я конвертирую в букву, используяchr
. Код$z<c|$z>k^$x&1
даетtrue
для inputboth
($z<c
) и в случаеlight
илиdark
только для четных или нечетных ячеек соответственно ($z>k ^ $x&1
). Результат этого выражения определяет, будут ли печататься координаты ячейки. Наконец, если в$x modulo 9
результате0
я пропускаю эту несуществующую ячейку.1817 байт (исправлена ошибка) благодаря наличию только 1 цикла, преобразовывающего число в символ, а не наоборотxor
.125
в выражении,$x/9+69.9
чтобы получить правильный номер строки перед преобразованием в символ~ß
пробелаисточник
JavaScript ES6,
187160159 байтЯ, наверное, упускаю что-то мучительно очевидное.Ну что ж. Отсутствие необходимости выравнивать массив помогает.Возвращает двумерный массив.
Попробуйте это здесь:
Показать фрагмент кода
источник
Руби, 85
Я думаю, что есть более короткие пути, но это симпатичное использование
.upto
.источник
R,
12994 байтаЯ знал, что смогу создать доску лучше :). По сути, это создает перевернутую плату, отфильтровывая ссылки сетки, где тень не соответствует входным данным. Выход разделен пробелом.
Ungolfed
Тест
источник
Oracle SQL 11.2,
192180 байтUn-golfed
Вид v генерирует координаты каждого квадрата. Если сумма координат четна, тогда квадрат черный, иначе белый.
источник
Rust,
263259244 BytesРасширенная форма:
источник
MATL , 31 байт
Попробуйте онлайн!
источник
CJam, 29
Просто быстрое и грязное решение: p
Попробуйте онлайн
Объяснение:
источник
Haskell,
1331161051009891 байтЭто моя первая попытка игры в гольф на Haskell.
С некоторой помощью Михаэля Кляйна нам удалось получить его под 100 символов!
источник
c>0
дляc==1
иc<1
дляc==0
? Сохраняет два байта.f r=[[[a,b]|a<-['a'..'h'],b<-['1'..'8']]!!i|i<-[0..63],even i||r<"l",odd i||r!!0/='d']
i
не дают нам диагональные полосы. Некоторые решают это сi+i`div`8
(какx+y
). Другие начинаются с['1'..'9']
и[0..71]
затем сохраняют толькоi`mod`9<8
результаты позже, для 96 байтов. Тем не менее, этот гибрид наших двух подходов хорошо работает при 91l=[0..7];f r=[["abcdefgh"!!x,"12345678"!!y]|x<-l,y<-l,odd(x+y)||r<"l",even(x+y)||r!!0/='d']
Mathematica 133 байта
Метод 1 : 108 байтов. Это создает доску в виде таблицы с метками в каждой ячейке и возвращает светлые или темные диагонали или полосы по мере необходимости.
Метод 2 : 133 байта. Создает массив и выбирает в соответствии с четно-нечетным характером суммы номера строки + номера столбца каждой ячейки.
источник
JS, 197 байт
источник
Python (3,5),
1061009692 байтаиспользуйте трюк MegaTom,
(i+j)%2
чтобы выиграть 6 байтовПопробуйте это на repl.it
Полученные результаты
Предыдущая версия
источник
C ++, 119 байт
Основано на уловке MegaTom.
источник
C (gcc) , 112 байт
Попробуйте онлайн!
Если a == 1, то квадрат всегда будет черным, если «нечетность» строки и столбца одинакова, то есть оба являются нечетными или оба являются четными. Противоположность верна для белых квадратов, где строка и столбец всегда будут отличаться по странности.
После этого нужно просто объединить циклы строк и столбцов, а также просмотреть таблицу приоритетов операторов, пока не будет достигнут достаточный уровень непонятности.
источник