Đây có phải vết cắn của tôi không?


12

Hôm qua, tôi để bánh sandwich của tôi trên bàn. Khi tôi thức dậy hôm nay, có một vết cắn trong đó ... Nó có phải của tôi không? Tôi không thể nhớ ...

Vấn đề:

Lấy một đại diện của bánh sandwich và mô hình cắn của tôi và cho tôi biết nếu đó là vết cắn của tôi hay không.

Ví dụ:

Ví dụ 1:

Mô hình cắn của tôi:

..
.

Bánh mì sandwich:

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

Đầu ra:

truthy

Ví dụ 2:

Mô hình cắn của tôi:

..
..

Bánh mì sandwich:

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

Đầu ra:

falsy

Ví dụ 3:

Nếu có ít nhất 1 vòng quay được tính là trung thực, thì đầu ra là trung thực.

Mô hình cắn của tôi:

.
 .
  .

Bánh mì sandwich:

##.
#.#
.##

Đầu ra:

Hai góc quay có thể (cắn ở góc đông bắc hoặc tây nam).

truthy

Một số vết cắn hợp lệ:

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

Một số vết cắn không hợp lệ:

..

...
.

..
.
 .

Quy tắc:

  • Định hướng mô hình cắn của tôi sẽ luôn luôn là để cắn góc phía tây bắc. Và phải được xoay để cắn các góc khác;

  • Sẽ luôn có 1 và chỉ 1 miếng trong bánh sandwich;

  • Vết cắn trong bánh sandwich có thể ở bất kỳ trong số 4 góc (xoay tương ứng);

  • Các mẫu cắn sẽ luôn đối xứng dọc theo đường chéo chính;

  • Các mẫu cắn sẽ luôn có ít nhất 1 chiều rộng và không trống;

  • Bánh sandwich sẽ luôn là một hình chữ nhật có chiều rộng và chiều cao bằng hoặc lớn hơn chiều rộng của mẫu cắn của tôi;

  • Trong đầu vào của bạn, bạn có thể chọn bất kỳ 2 ký tự không phải khoảng trắng riêng biệt nào để đại diện cho bánh sandwich và miếng cắn;

  • Không gian trong mẫu cắn có nghĩa là vết cắn của tôi không chạm vào phần đó của bánh sandwich.


Mô hình cắn có thể lớn hơn bánh sandwich? Mô hình cắn có thể để trống? Mô hình cắn có thể giống như bánh sandwich? tức là .., ..?
TheLethalCoder

@TheLethalCoder các quy tắc nói rằng mô hình cắn sẽ luôn phù hợp với bánh sandwich. Tôi sẽ thêm một quy tắc mới để chỉ định kích thước tối thiểu (1 chiều rộng)
Felipe Nardi Batista

@TheLethalCoder và vâng, mô hình cắn có thể giống như bánh sandwich
Felipe Nardi Batista

Câu trả lời:


2

Ruby , 103 byte 101 byte

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

Hãy thử trực tuyến!

Đã lưu 2 byte bằng cách di chuyển bài tập sang lần sử dụng đầu tiên của a. Rõ ràng Ruby đủ thông minh để không nhầm lẫn dấu phẩy trong định nghĩa mảng và dấu phẩy sẽ phát sinh từ việc gán biến đồng thời (ít nhất là trong trường hợp này: D)


2

Python 2 , 134 byte

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))

Lấy đầu vào là hai danh sách các chuỗi (một cho mỗi dòng). Giả sử không có khoảng trắng ở cuối dòng.

Hãy thử trực tuyến!

Ví dụ:

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

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

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

1

Python 2, 173 byte

Dùng thử trực tuyến

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

Lấy đầu vào là hai danh sách các danh sách các ký tự.
Đầu tiên - bánh sandwich
Thứ hai - cắn

Đầu tiên, nó mở rộng mảng cắn đến kích thước của mảng sandwich:

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]thay thế tất cả các khoảng trắng để #
(L(S[0])-L(x)),b+[[]]*(L(S)-L(b))tính toán số phần tử bị thiếu

Sau đó, nó so sánh tất cả 4 vòng quay của miếng cắn "kéo dài" này với bánh sandwich:

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

lambda R được sử dụng để phản chiếu danh sách các danh sách theo chiều ngang

Trong ví dụ liên kết sandwich là:

##.
#.#
###

Và cắn là:

.
 .

1
tại sao R=Lambda:map...và khôngR=map...
Felipe Nardi Batista

@FelipeNardiBatista Vì tôi đã bỏ lỡ: D Cảm ơn!
Chết có

B=[[y<'.'and'#'or y for y in x]+['#']*(L(S[0])-L(x))for x in b+[[]]*(L(S)-L(b))]cho -4
OVS

R=[x[::-1]for x in B]cho -4 là tốt. Nói chung, không sử dụng bản đồ với chức năng lambda
ovs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.