Вступление
Обычная доска для шашек содержит 8 х 8 = 64 квадрата:
Вы можете видеть, что всего есть 12 белых фигур . Черное и белое всегда имеют одинаковое количество фигур. Если на доске есть еще фигуры, фигуры будут соседними, что не разрешено для этой задачи. Чтобы прояснить ситуацию, вот несколько примеров:
Наименьшая возможная доска для этой задачи - 3 х 3 :
Вы можете видеть, что максимальное количество штук равно 2 . Итак, когда дано N = 3 , вам нужно вывести 2 . Если вход N = 4 , мы получаем следующее:
Вы можете видеть, что максимальная сумма также равна 2. Таким образом, для N = 4 результат должен быть 2 . Для N = 5 выход должен быть равен 5 :
Примеры
STDIN: 3
STDOUT: 2
STDIN: 4
STDOUT: 2
STDIN: 5
STDOUT: 5
STDIN: 6
STDOUT: 6
STDIN: 8
STDOUT: 12
правила
- Ваша заявка должна быть программой, или функцией и т. Д., Которая принимает одно целое число и выводит или возвращает количество фигур на доске.
- Вы можете смело предположить, что входное значение является неотрицательным целым числом> 2
- Это код-гольф , поэтому выигрывает программа с наименьшим количеством байтов!
- Обратите внимание, что квадрат в левом нижнем углу доски всегда темный. Кусочки ставятся только на темные квадраты
- Вы должны занять полный ряд с кусочками
code-golf
game
grid
board-game
Аднан
источник
источник
Ответы:
паритет , 8 байт
Один байт используется на символ.
объяснение
источник
Гексагония , 19 байт
Попробуйте онлайн.
объяснение
Это все те же вычисления, которые я использовал в своих ответах на CJam и Labyrinth, но из-за ... особой ... модели памяти Hexagony, немного сложнее сжать вычисление в 19 байтов (так, чтобы оно помещалось внутри длина стороны 3 шестиугольника).
Как и в моем ответе Лабиринт, это заканчивается ошибка деления на 0.
Вот развернутый код:
Как я уже сказал, код полностью линейный. Вы можете объединить выполненный путь в следующем порядке: серый-фиолетовый-зеленый-красный-синий. Путь фактически продолжается немного дальше, пока он не достигнет
:
слева. Удаляя/
(который только перенаправляет поток управления), вся программа развернута линейно:Так что вопрос в том, как это работает. Память Hexagony - это линейный график шестнадцатеричной сетки, где каждое ребро сетки содержит целочисленное значение (изначально ноль). Указатель памяти (MP) всегда находится на одном ребре и указывает в определенном направлении вдоль этого ребра. Арифметические операции , как правило , применяется к двум краям указывали на и находится на краю МП включен.
Для этой программы мы будем использовать три ребра, обозначенные A , B , C , причем MP начинается, как показано здесь:
Вот как это работает:
источник
{
IP-адрес переходит на2
в левом углу. После)
в правом углу, IP-адрес переходит на'
в левом нижнем углу. Затем IP пересекают линии 2 и 4 странным циклическим образом.LabVIEW,
2820 примитивов LabVIEWисточник
CJam, 10 байтов
Проверьте это здесь.
объяснение
источник
Лабиринт , 11 байт
Woohoo, только один байт позади CJam .
Попробуйте онлайн.
Это по сути то же самое:
Однако на данный момент программа еще не завершена. Вместо этого указатель инструкции зашел в тупик и развернулся. Но теперь
/
пытается вычислить,0/0
что заканчивается с ошибкой .источник
Серьезно , 8 байт
Серьезно имеет под рукой
½
(поплавок разделить на 2), иK
(потолок), поэтому нам не нужно добавлять один перед делением.Попробуйте здесь с объяснением.
источник
Python 2,
2221 байтЯ сначала разделяю в двух случаях, нечетные N и четные N.
Нечетным N мы можем заполнить (N - 1) / 2 строки, содержащие в среднем N / 2 штуки. Так как в первом ряду всегда больше частей, мы должны закрыть этот результат. Поэтому, когда N нечетно, у нас есть части ceil ((N-1) / 2 * N / 2).
Даже четным N мы можем заполнить N / 2 - 1, или этаж ((N - 1) / 2) строк, каждая строка содержит N / 2 штук.
Мы можем объединить эти два выражения с помощью ceil (floor ((N-1) / 2) * N / 2). Так как (х потолке / 2) = пол ((х + 1) / 2) , мы можем использовать напольное покрытие деления:
((N - 1) // 2 * N + 1) // 2
.источник
JavaScript,
3735 байтобъяснение
Использует метод, аналогичный остальным ответам. Это алгоритм без правил:
источник
12
Тестовый вывод:
источник
Pyth, 9 байт
Тот же алгоритм, что и в моем ответе на Python 2.
источник
Japt ,
1614 байтовПопробуйте онлайн!
Как это устроено
Довольно просто:
Хотелось бы, чтобы был какой-то способ учесть, что две половины кода так похожи. Предложения приветствуются!
Старая версия (16 байт):
источник
Ява,
23015552Golfed:
Ungolfed:
Выход программы:
источник
throws Exception
допустимоScanner
класс для ввода. Я думаю, это сэкономит вам кучу байтов. (TheBufferedReader
/InputStreamReader
комбо может быть лучше в общем использовании, но это код гольф, иScanner
работает очень хорошо для простого ввода.)Машинный код Zilog ez80, 9 байтов
В шестнадцатеричном виде:
В сборе:
Вход находится в регистре
h
, а выход находится вl
.Zilog ez80 - это 8-разрядный процессор с 8-разрядным аккумулятором и 24-разрядными регистрами. В отличие от z80, он имеет
mlt
(8-битное умножение) инструкцию, которая в 16-битном режиме умножает старший и младший байты пары регистров, здесьhl
и сохраняет их обратно вhl
.Это работает только для значений, для которых дважды результат помещается в 8 битах; то есть n≤23.
источник
TI-BASIC, 13 байтов
Помогает неявное умножение TI-BASIC, но оно не имеет целочисленного деления.
⁻int(⁻X
это более короткая форма ceil (x).источник
vba, 46
Вызовите с? F (x) или = f (A1) в формуле
источник
Pyth,
171413 байт-3 байта благодаря Ypnypn ! Переставил номера оператора *, чтобы сохранить 1 байт.
Объяснение:
Когда n чётно, мы можем занимать n / 2-1 рядов с n / 2 штуками, что в сумме составляет n * (n / 2-1) / 2 штуки. Это выражение эквивалентно (n * (n / 2-1) +1) / 2
Когда n нечетно, мы можем найти, как будет выглядеть удвоенное количество частей, удвоенное количество частей будет охватывать n-1 рядов, и если я уберу один кусок, мы можем разделить n-1 рядов на (n- 1) / 2 группы из 2 строк, так что каждая группа имеет n частей, поэтому выражение для этого случая (n * (n / 2) +1) / 2
Теперь, когда оба выражения очень похожи, мы можем написать код.
Я впервые использую язык игры в гольф.
источник
Javascript, 33 байта
Если функция ES6 разрешена, то 18 байтов:
источник
MATLAB,
3725 байтЯ считаю, что это должно работать, подходит для всех тестовых случаев.
Это также работает в Октаве . Вы можете попробовать онлайн здесь .
Для старого кода я добавил программу в это рабочее пространство в файле с именем
checkerboard.m
. Вы можете запустить его, просто введяcheckerboard
в командной строке, а затем при запуске введите необходимый размер в командной строке. Результат будет распечатан.Для нового кода просто введите код, указанный здесь, в приглашение, а затем вызовите анонимную функцию как
ans(n)
.источник
Сетчатка , 18 байт
Вход и выход в унарном виде .
Попробуйте онлайн!
Последняя версия Retina (новее этой задачи) может обрабатывать десятичный ввод-вывод для четырех дополнительных байтов:
Попробуйте онлайн!
С унарным вводом и десятичным выводом мы можем сделать 16 байтов, но это кажется немного растянутым:
объяснение
Все тот же подход, что и любой другой, но с использованием замены регулярных выражений в унарном представлении числа.
Это вычисляет
n*((n-1)/2)
. Мы делаем это, сопоставляя два символа за раз (деление на два) и заменяя их всей строкой (умножение наn
). Уменьшениеn
выполняется путем пропуска оставшейся части строки, если остается только один или два символа.Это целочисленное деление на 2, округленное в большую сторону. Мы просто заменяем два символа одним (деление на 2), но позволяем последнему совпадению состоять только из одного символа (округление вверх).
источник
Python 3, 39 байт
Это немного раздутый, но я не уверен, что смог бы играть в гольф намного дальше, чем это. Ссылка для тестирования.
источник
Пролог,
3938 байтКод:
Объяснение:
Пример:
Попробуйте онлайн здесь
Редактировать: 1 байт сохранен путем замены ceil / 2 на + 1 // 2
источник
Свинка, 17 байт
Благодаря Эмигне за простое объяснение алгоритма. Это использует «недостаток» математики Мампа в том, что операции выполняются строго слева направо (не PEMDAS), поэтому скобки не требуются. :-)
Однако вывод выглядит немного странно, поскольку Ensemble Cache (среда Mumps, к которой у меня есть доступ) не выводит автоматически возврат каретки даже при нажатии на ввод. Если вы хотите, чтобы он был красивее, добавьте 4 символа для возвратов до / после переноса:
Благодарность!
источник
Баш, 32 байта
источник
Пайк, 8 байт, неконкурентный
DUP, декабрь, половина, мульт, Inc., половина
Попробуй это здесь!
источник
Пакетный, 30 байтов
38 байт, если требуется ввод на stdin:
источник