Это был мой укус?


12

Вчера я оставил свой бутерброд на столе. Когда я встал сегодня, там был укус ... Это было мое? Я не могу вспомнить ...

Проблема:

Возьмите изображение сэндвича и мой рисунок укуса и скажите мне, был ли это мой укус или нет.

Примеры:

Пример 1:

Мой образец укуса:

..
.

Sandwich:

#####
.####
..###

Выход:

truthy

Пример 2:

Мой образец укуса:

..
..

Sandwich:

...##
..###
.####

Выход:

falsy

Пример 3:

Если есть хотя бы 1 вращение, которое считается правдивым, результат будет правдивым.

Мой образец укуса:

.
 .
  .

Sandwich:

##.
#.#
.##

Выход:

Два возможных поворота (кусание в северо-восточном или юго-западном углу).

truthy

Некоторые действительные укусы:

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

Некоторые недействительные укусы:

..

...
.

..
.
 .

Правила:

  • Моя ориентация прикуса всегда будет направлена ​​на то, чтобы кусать северо-западный угол. И должен вращаться, чтобы кусать другие углы;

  • В сэндвиче всегда будет 1 и только 1 укус;

  • Укус в бутерброде может быть в любом из 4 углов (повернут соответственно);

  • Образцы прикуса всегда будут симметричны по главной диагонали;

  • Шаблоны укусов всегда будут по крайней мере 1 шириной и непустыми;

  • Сэндвич всегда будет прямоугольником с шириной и высотой, равными или превышающими ширину моего рисунка прикуса;

  • В качестве входных данных вы можете выбрать любые 2 различных непробельных символа для представления сэндвича и прикуса;

  • Пробелы в шаблоне укуса означают, что мой укус не касается этой части сэндвича.


Может ли рисунок укуса быть больше, чем бутерброд? Может ли образец прикуса быть пустым? Может ли рисунок прикуса совпадать с бутербродом? то есть .., ..?
TheLethalCoder

@ TheLethalCoder правила гласят, что рисунок прикуса всегда будет соответствовать бутерброду. я добавлю новое правило, чтобы указать минимальный размер (1 ширина)
Фелипе Нарди Батиста

@TheLethalCoder и да, рисунок прикуса может быть таким же, как у сэндвича
Фелипе Нарди Батиста

Ответы:


2

Рубин , 103 байта 101 байта

->b,s{[a=s.map(&:reverse),s,s.reverse,a.reverse].any?{|t|b.zip(t).all?{|y,x|y==x.tr(?#,' ').rstrip}}}

Попробуйте онлайн!

Сохранено 2 байта путем перемещения назначения в первое использование a. Очевидно, Ruby достаточно умен, чтобы не перепутать запятые в определении массива и запятые, которые могут возникнуть при одновременном назначении переменной (по крайней мере, в этом случае: D)


2

Python 2 , 134 байта

b,s=input()
a=[''.join(l[::-1])for l in s]
print any(b==[l.replace('#',' ').rstrip()for l in x][:len(b)]for x in(a,a[::-1],s[::-1],s))

Вводит в виде двух списков строк (по одному для каждой строки). Предполагается, что на линиях нет конечных пробелов.

Попробуйте онлайн!

Примеры:

Input: ['..','.'],['#####','.####','..###'] (example 1)
>True

Input: ['..','..'],['...##','..###','.####'] (example 2)
>False

Input: ['',' .'],['#####','#.###','#####'] (no bite in top row)
>True

1

Python 2, 173 байта

Попробуйте онлайн

S,b=input()
L=len
B=map(lambda x:[y<'.'and'#'or y for y in x]+['#']*(L(S[0])-L(x)),b+[[]]*(L(S)-L(b)))
R=map(lambda x:x[::-1],B)
print S==B or S==B[::-1]or S==R[::-1]or S==R

Вводит в виде двух списков списков символов.
Первый - бутерброд
Второй - укус

Сначала он расширяет массив укусов до размера сэндвич-массива:

B=map(lambda x:[y<'.'and'#'or y for y in x]+['#']*(L(S[0])-L(x)),b+[[]]*(L(S)-L(b)))

[y<'.'and'#'or y for y in x]заменяет все пробелы для #
(L(S[0])-L(x)),b+[[]]*(L(S)-L(b))расчета количества пропущенных элементов

Затем он сравнивает все 4 вращения этого «расширенного» укуса с сэндвичем:

R=lambda:map(lambda x:x[::-1],B)
print S==B or S==B[::-1]or S==R()or S==R()[::-1]
print any(map(S.__eq__,[B,B[::-1],R(),R()[::-1]])) #longer but pretty

лямбда R используется для зеркального отображения списка списков

В связанном примере бутерброд это:

##.
#.#
###

И укус это:

.
 .

1
почему R=Lambda:map...и нетR=map...
Фелипе Нарди Батиста

@FelipeNardiBatista Потому что я пропустил это: D Спасибо!
Мертвый Опоссум

B=[[y<'.'and'#'or y for y in x]+['#']*(L(S[0])-L(x))for x in b+[[]]*(L(S)-L(b))]для -4
овс

И R=[x[::-1]for x in B]для -4 также. В общем, не используйте карту с лямбда - функции
овс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.