Это мой любимый эмодзи, Билли:
-_-
Эмодзи не нравится находиться под дождем, поэтому Билли грустит ... Давайте нарисуем ему зонт, чтобы он почувствовал себя лучше!
/\
/ \
/ \
-_-
Это хорошо, он полностью накрыт своим зонтиком! Вот пример, где покрыта только его часть:
/\
/ \
/ \
-_-
В этом случае участки 2 и 3 его тела подвергаются воздействию дождя.
Зонты бывают разных форм и размеров, но они всегда состоят из серии восходящих косых /
черт, за которыми следует серия нисходящих обратных косых черт \
. Например, это все действительные зонтики:
/\
/ \
/ \
/\
/\
/ \
/ \
/ \
/ \
И это не
/ \
\/
\
/ \
/ \
0\
/ \
//\\
/ \
Вы должны определить, какие части моих смайликов подвержены воздействию дождя.
Разъяснения
Ваша программа (или функция) будет принимать 2d строку в качестве входных данных. Это может быть любой формат, наиболее удобный или естественный для вашего языка. Массив строк, массив массивов символов, строка с символами новой строки и т. Д.
Вы должны указать, какие разделы смайликов подвержены воздействию дождя. Это может быть с нулевой или одной индексацией, если вы это ясно дадите. Вывод может быть в любом разумном формате. Если все смайлики защищены от дождя, ничего не выводите (или пустой массив).
Можно предположить , что все входы будут иметь действительный зонтик, и тот же смайлик:
-_-
. Смайлики всегда будут в последней строке ввода, однако их может быть несколько пустых строк между зонтиком и смайликами.Все, что не является частью зонтика или смайликов, будет космическим
персонажем или переводом строки.
Ввод будет дополнен пробелами, чтобы длина каждой строки была одинаковой.
Применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах!
Тест IO:
Все примеры случаев будут использовать одноиндексирование.
/\
/ \
/ \
-_-
Outputs: []
----------------
/\
/ \
-_-
Outputs: [2, 3]
----------------
/\
-_-
Outputs: [1]
----------------
/\
/ \
/ \
/ \
/ \
/ \
-_-
Outputs: [1, 2, 3]
["_","-"]
.Ответы:
05AB1E ,
181715 байтКод:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн! (убедитесь, что все строки дополняются пробелами одинаковой длины.
источник
JavaScript (ES6), 95 байт
Входные данные должны быть массивом строк, где каждая строка дополняется пробелами, образуя квадрат. Выход - это массив 1-индексированных чисел.
объяснение
источник
JavaScript (ES6), 92 байта
Принимает рваный массив строк и возвращает результат с 1 индексом. Объяснение:
источник
Java 8 лямбда,
241218201191185184 (или 161) символовПотому что вы знаете, Java также нуждается в сухих смайликах.
Он возвращает
ArrayList, стек HashSet, содержащий части смайликов, подверженные воздействию дождя (индексация начинается с 0). Все это развернуто:Обновления
Я немного поиграл в гольф. Это включает в себя объединение объявлений, сравнение со значениями ascii для сохранения некоторых символов и сокращения циклов.
Спасибо @ user902383 за указание на мою ошибку дампа с использованием ArrayLists вместо просто Lists. Я заменил ArrayLists / Lists на HashSets / Sets, который сохраняет еще несколько символов. Также спасибо за совет по использованию цикла foreach во внутреннем цикле! Благодаря этому изменению я могу создать переменную для индекса последней строки сетки, которая укорачивает его немного больше. Всего 17 символов были сохранены!
@KevinCruijssen предложили удалить дженерики при инициализации, я пошел на один шаг дальше: удалите все дженерики. Это сохраняет еще 10 символов.
Я переключился обратно с цикла foreach на цикл for. Это позволяет пропустить сравнение последней строки, что, в свою очередь, позволяет сократить сравнение значений ascii. В этом контексте только '/', '\' и '_' имеют значение ascii более 46. Если мы не проверяем последнюю строку, мы можем использовать
> 46 check
вместо этого для проверки фактического значения.Еще раз спасибо @ user902383 за показ, что я использую лямбду и могу использовать List + Stack вместо Set + HashSet, чтобы сбрить другой символ.
Строка, возвращающая версию
@ user902383 указал, что я могу вместо этого просто создать строку с цифрами. Это звучит очень обманчиво, но другие, похоже, решают эту проблему таким образом, вот более короткая версия, использующая возврат String:
Ungolfed:
источник
always program to an interface
, если вы используетеList
вместо этого,ArrayList
вы можете сохранить 5 байтов=new HashSet<>();
скорее всего, можно в гольф=new HashSet();
.<>
вас 2 байта. :)Set(3)
HashSet(7)
противList
(4) иStack
(5).V ,
2019 байт (не конкурирует)Альтернативная конкурирующая версия (21 байт):
Попробуйте онлайн! (Обратите внимание, что tryitonline.net использует немного старую версию V. Чтобы компенсировать это, он использует эту более длинную версию)
Объяснение:
Одно это дает правильный результат в 17 байтах. Тем не менее, это также создает некоторые дополнительные пробелы. Я не против, но я не хочу давать себе несправедливое преимущество, поэтому я добавляю два байта:
источник
JavaScript (ES6),
117112 байтПринимает рваный массив
строк,массив символов и возвращает результаты с 0 индексами.демонстрация
источник
Сетчатка , 56 байт
Число байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
Это один этап замещения, где регулярное выражение совпадает с одним из символов эмодзи, при условии, что где-то выше в той же горизонтальной позиции находится непробельный символ (то есть
/
или или\
), а затем мы фиксируем количество символов эмодзи до этого точка. Это совпадение заменяется длиной последнего захвата, который дает нам индекс этого незащищенного персонажа смайликов. Регулярное выражение также содержит a,|\D
чтобы соответствовать всему остальному, которое вообще заменяется ничем, поэтому мы удаляем все остальные символы.источник
/
или\
, я снова выскочил из этой группы, сопоставляя материал, предшествующий этому , и затем убедился, что полностью истощил группу. Это в основном гарантирует, что горизонтальное положение эмодзи и персонажа на крыше совпадает.Pyth,
2723 байт0 индексированные.
Попробуйте онлайн!
объяснение
история
27 байт:
sM:#"^ *\d"0.T:R"-_-"s`M3.z
( Попробуйте онлайн! )источник
Matlab, 43 байта
Этот код находит позиции столбцов непробельных символов в последней строке ввода, суммирует количество непробельных символов в этих столбцах и находит, где есть только один такой символ (символ смайлика, не экранированный зонтиком!) , Этот код возвращает правильные результаты только для правильно сформированных зонтиков (предполагается, что любой символ выше наших смайликов является частью правильно сформированного зонтика).
Вот немного полезного кода для написания тестовых случаев и проверки моей работы:
Бег
x = thrht(7)
даетИли
x = twht(0)
даетисточник
APL, 31 байт
Это принимает матрицу символов в качестве входных данных.
тесты:
Объяснение:
'-_-'⍷⍵
: в матрице нулей размер входных данных отметьте положение начала'-_-'
входного значения 1.+\+\
: Суммарная сумма по строкам. Первый превращается0 0 0 1 0 0 ...
в0 0 0 1 1 1 ...
, второй затем превращает в0 0 0 1 2 3 ...
.⍵∊'/\'
: пометить все вхождения '/' и '\' на входе 1с.∨⌿
:or
над столбцами. Это отмечает 1 все позиции в последнем ряду, которые покрыты зонтиком.~
:not
, Потому что нам нужно наоборот(
...)/
...: Выбрать все открытые столбцы из матрицы промежуточных сумм из предыдущих,
: Получить список всех значений в результирующей матрице.(⍳3)∩
: Пересечение между этим и1 2 3
(это избавляет от любых выбранных значений 0 или более, которые будут пробелами).источник
Python 2,
114111 байтИспользует индексирование на основе 0.
Попробуй это здесь .
источник