Имея 3 входных элемента, список пар координат, 2D-строку и односимвольную строку, выведите, равен ли символ в каждой координате 2D-строки одному символу. Вы можете принимать входные данные в любом порядке, а координаты могут быть проиндексированы на 1.
Вы можете взять 2D-строку как 2D-список, список строк или 2D-строку.
Пример: (0,0), "#_\n__", "#" -> True
Строка
#_
__
Символ в координате (0,0)
(слева вверху) есть #
. Это равно третьему элементу ввода #
, поэтому вы True
выводите (или любое истинное значение)
Пример: [(0,0), (1,1)], "#_\n_#", "#" -> True
Строка
#_
_#
Символы в координатах (0,0)
и (1,1)
оба являются одинаковыми #
, поэтому вывод соответствует действительности.
Выходные данные верны только тогда, когда каждая координата соответствует хешу. Не каждый хеш должен иметь совпадающую координату. Если #
в двумерной строке нет вхождений одного символа ( в некоторых тестовых случаях), результат все равно будет ложным.
Вы можете предположить, что координаты всегда будут в пределах 2D-строки.
Больше тестов: (я помещаю один символ в секунду для удобства чтения)
[(0,0), (2,1), (3,0)], #
#_##
#_##
True
[(0,0), (1,1), (3,0)], #
#_##
#_##
False (1,1 is not a hash)
[(1,1)], a
#a##
#a##
True
[(4, 0), (3, 0), (2, 0), (1, 0), (0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (2, 3), (2, 2), (3, 2), (4, 2), (4, 3)], ' '
####
#
#
True
Обратите внимание, что в последнем тесте в качестве единственной строки символов используются пробелы и хэшируются вокруг пробелов.
Связанные с. (обратная задача)
(row, column)
но в последнем примере координаты в формате(column, row)
.Ответы:
Дьялог АПЛ , 8 байт
Запрашивает список пар координат (строка, столбец), затем двумерный массив, затем символ.
[⎕]
запрашивать координаты и использовать их для выбора⎕
подсказанный ввод (2D массив)=
сравнить выбранные элементы с⎕
ввод (символ)∧/
проверить, все ли верно (И-сокращение)Контрольные примеры (
⎕IO←0
чтобы соответствовать примерам, но это не обязательно):Первый пример
Второй пример
Третий пример
Четвертый пример
Пятый пример
источник
Python, 39 байт
Принимает входные данные:
a
список(x, y)
целочисленных координатb
список строкc
одиночная строка символовисточник
f=
. Добро пожаловать в PPCG!JavaScript (ES6), 37 байт
Принимает входные данные:
a
массив[x, y]
целочисленных координатs
массив строкc
одиночная строка символовисточник
Октава,
453829 байтФункция, которая принимает двумерный массив символов
A
и координаты (на основе 0)B
как матрицу из двух столбцов[col row]
и совпадающий символ какC
. Координаты двух элементов (с использованием умножения матриц) преобразуются в линейный индекс.Примечание. Предыдущий ответ, в котором использовалась разреженная матрица, был неверным.
Другие участники:
Стьюи Гриффин за сохранение 5 байтов, отметив, что [0 1 0] может рассматриваться как ложное значение !!
Луис Мендо за сохранение 2 байта, что
~0 == true
и уведомление о разреженной матрице.Попробуйте онлайн
источник
all
и сохранить три байта.1 1 1
верно и1 0 1
ложно в октаве, так что все должно быть в порядке. :)true
на ,~0
чтобы сохранить 2 байтаMathematica, 28 байт
1-индексироваться. Из-за того, как массивы структурированы в Mathematica, входные координаты должны быть обращены (то есть
(row, column)
)Применение
источник
Haskell, 27 байт
Пример использования:
( ["#_##","#_##"] ! '#' ) [(0,0), (2,1), (3,0)]
->True
.источник
Желе , 10 байт
Это работает только как полная программа. Порядок ввода: индексы, строковый массив, одиночная строка.
Попробуйте онлайн!
Как это работает
источник
Perl 6 ,
4140 байтОжидает 2D-строку в виде 2D-списка.
Спасибо b2gills за -1 байт.
источник
$_
вместо этого,\c
вы могли бы использовать.map:{…}
сохранение одного байта.map: {…}
. Это полезно знать. Кроме того, обидно, что префикс||
еще не реализован, это может сделать внутреннюю лямбду простоn eq h[||$_]
...C #,
8077 байтовСохранено 3 байта, благодаря pinkfloydx33
a - пары координат, b - список строк, а c - односимвольная строка.
источник
false
на1<0
иtrue
с1>0
и сохранить 3 байта.Haskell,
7263 байтаВвод
c [(0,0), (1,0), (3,0)] "#_##\n#_##" '#'
выходовFalse
вход
c [(4, 0), (3, 0), (2, 0), (1, 0), (0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (2, 3), (2, 2), (3, 2), (4, 2), (4, 3)] " \n ####\n # \n # " ' '
Вывод
True
UnGolfed
источник
c[]_ _=1<2;c((f,s):t)m n|n/=lines m!!s!!f=1>2|1>0=c t m n
if n/=lines m!!s!!f then False else c t m n
выражение может быть заменено наn/=lines m!!s!!f&&c t m n
.You may take the 2D string as a 2D list, a list of lines, or a 2D string.
вы можете удалитьlines
и непосредственно взять список строк в качестве входных данных.Скала, 68 байт
источник
Clojure, 39 байт
Пример (строковый ввод является вектором символов):
источник