Тангенциально вдохновлен открытием книги «Что если».
Входные данные представляют собой прямоугольник с пробелами в виде строки, списка строк и т. Д. С объектами, созданными #
внутри, внутри:
########
# #
########
### ####
### ####
###
Объекты всегда будут непересекающимися, не соприкасающимися прямоугольниками. Мягкий объект определяется как объект, который не заполнен #
символами в середине и является только границей, а жесткий объект - это объект, который заполнен. Объект с шириной или высотой <=2
считается сложным. Все объекты жесткие или мягкие.
Если на входе больше твердых объектов, выведите "Hard"
, если более мягкий, выведите "Soft"
, если они равны, выведите "Equal"
.
Это код-гольф , поэтому выигрывает самый короткий код в байтах !
Тестовые случаи
Эти случаи - не полные входные данные, а то, как должен характеризоваться каждый объект. Фактический вклад будет похож на ascii-art в верхней части вопроса.
Жесткий
#
####
##
##
##########
##########
##########
Мягкий
###
# #
###
###################
# #
# #
# #
###################
####
# #
# #
# #
# #
# #
# #
# #
####
Актуальные тестовые случаи
########
# #
########
### ####
### ####
###
Hard
###
###
###
###################
# #
# #
# #
###################
Equal
######
# #
######
###
## # # #
###
########
# #
########
Soft
источник
Ответы:
MATL ,
105104585049 байтовСпасибо @Neil за предложение, которое позволило мне удалить 46 байт!
Ввод - это двумерный массив символов, разделенный строками
;
. Пример в вызовеВот еще один пример:
Это соответствует
и таким образом должен дать
'Equal'
.В качестве третьего примера, что соответствует
'Soft'
,то есть,
Попробуйте онлайн!
объяснение
Это использует 2D свертку для обнаружения фигур. Входные данные преобразуются в двумерный массив с
1
указанием#
и-1
для пробела; и дополнен рамкой-1
значений. Это гарантирует, что формы на краю исходного поля также обнаружены.Мягкий объект обнаружен с помощью маски
который соответствует верхнему левому углу объекта с одной пустой внутренней точкой. Обратите внимание, что свертка инвертирует маску, поэтому она определяется как
[-1 1; 1 1]
в коде. Число S позиций, в которых равна свертка,4
является общим числом мягких объектов.Объект (мягкий или жесткий) детектируют с помощью маски
который соответствует верхнему левому углу объекта вместе с некоторыми пустыми внешними точками. Эта маска является отрицательной версией предыдущей, поэтому результат предыдущей свертки можно использовать повторно. В частности, количество позиций T, в которых этот результат равен,
-4
является общим количеством объектов.Число Н твердых объектов Т - S . Строка вывода определяется знаком S - Н = 2 * S - Т .
источник
JavaScript (ES6),
123121118 байтСохранено 2 байта благодаря @ edc65!
Принимает ввод в виде многострочной строки, дополненной пробелами для формирования сетки.
Объяснение / Тест
Очень близко к длине MATL!По сути, он ищет верхнюю строку#
s каждого объекта, и если длина верхней строки меньше 2 или первые 2 символа под верхней строкой одинаковы, это сложно, в противном случае - мягкий.источник
###
возвращаетсяEqual
.~g.search(/$/m)
чуть более читабельно, чем~g.search`\n`||-1
.||-1
ее исправить, но ваше предложение заставило меня понять, что добавление|$
к регулярному выражению в любом случае сэкономит 2 байта. Благодарность!n=l=...
n>l?...:n<l?...:...
Желе,
5049464338343332 байтаПопробуйте онлайн! или проверьте все контрольные примеры .
Фон
Есть 16 различных 2 × 2 шаблонов блоков и пробелов:
Из них, поскольку два объекта никогда не будут касаться,
никогда не произойдет на входе, оставляя нам с 14 возможных моделей.
Присваивая
значение 0 и
#
значение 1 , мы можем кодировать шаблон 2 × 2как 2 (2a + c) + (2b + d) = 4a + 2b + 2c + d , оставляя следующие значения для 14 шаблонов.
Для частичных шаблонов 2 × 1 , 1 × 2 или 1 × 1 на нижней и / или правой границе мы будем обрабатывать их, как если бы они были заполнены пробелами, кодируя их как 4a + 2b , 4a + 2c и 4a соответственно ,
Таким образом, каждый объект (мягкий или жесткий) будет иметь ровно один шаблон 4 (его правый нижний угол); каждый мягкий объект будет иметь ровно два 7 рисунка (его левый нижний и правый верхний угол).
Таким образом, вычитая количество 4 шаблонов из числа 7 шаблонов, обнаруженных во входных данных, получим (s + h) - 2s = h - s: = d , где h и s - количество твердых и мягких объектов, которые они образуют.
Мы печатаем Hard, если d> 0 , Soft, если d <0, и Equal, если d = 0 .
Как это устроено
источник
Юлия,
999593 байта!
ожидает двухмерный массив Char в качестве аргумента. Попробуйте онлайн!Как это устроено
Это использует почти ту же идею, что и мой ответ Jelly , с одним улучшением:
Вместо того, чтобы считать количество 4 и 7 , мы удаляем все остальные числа, затем вычитаем 5,5, чтобы отобразить (4, 7) в (-1,5, 1,5) . Таким образом, знак суммы полученных разностей определяет правильный результат.
источник
TSQL,
328249 байтОбъявление переменных и тестовых данных:
Код:
Код дефлирован:
Explaination:
Скрипт сканирует текст по шаблону:
Каждый из них является началом коробки
Для этих позиций скрипт затем проверяет шаблон, не нужно проверять сначала x:
Когда это существует, это мягкий объект, в противном случае это жесткий объект.
источник