이 물린거야?


12

어제 샌드위치를 ​​테이블 위에 두었습니다. 내가 오늘 일어 났을 때 물린 곳이 있었어 기억이 안나

문제:

샌드위치와 내 물린 패턴을 표현하고 그것이 내 물린 것인지 알려주세요.

예 :

예 1 :

내 물린 패턴 :

..
.

샌드위치:

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

산출:

truthy

예 2 :

내 물린 패턴 :

..
..

샌드위치:

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

산출:

falsy

예 3 :

진실로 계산되는 회전이 1 회 이상이면 출력이 진실입니다.

내 물린 패턴 :

.
 .
  .

샌드위치:

##.
#.#
.##

산출:

두 개의 가능한 회전 (동북 또는 남서쪽 코너에서 물기).

truthy

유효한 물기 :

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

일부 유효하지 않은 물기 :

..

...
.

..
.
 .

규칙 :

  • 내 바이트 패턴 방향은 항상 북서쪽 모서리를 물기위한 것입니다. 다른 모서리를 물도록 회전해야합니다.

  • 샌드위치에는 항상 1과 1 바이트 만 있습니다.

  • 샌드위치의 물린은 4 개의 옥수수 중 하나에있을 수 있습니다 (그에 따라 회전).

  • 바이트 패턴은 항상 주 대각선을 따라 대칭입니다.

  • 바이트 패턴은 항상 너비가 1 이상이고 비어 있지 않습니다.

  • 샌드위치는 항상 너비와 높이가 내 바이트 패턴의 너비와 같거나 큰 직사각형입니다.

  • 입력에서 샌드위치와 물기를 나타내는 2 개의 고유 한 공백이 아닌 문자를 선택할 수 있습니다.

  • 바이트 패턴의 공백은 내 바이트가 샌드위치의 해당 부분에 닿지 않음을 의미합니다.


물린 패턴이 샌드위치보다 클 수 있습니까? 물린 패턴을 비울 수 있습니까? 바이트 패턴이 샌드위치와 동일 할 수 있습니까? 즉 .., ..?
TheLethalCoder

@TheLethalCoder 규칙에 따르면 물린 패턴은 항상 샌드위치에 맞습니다. 난 최소 크기 (1 폭)를 지정하는 새 규칙을 추가 할 것입니다
펠리페 나르디 바티스타

@TheLethalCoder 그리고 네, 물린 패턴은 샌드위치와 동일 할 수 있습니다
Felipe Nardi Batista

답변:


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

온라인으로 사용해보십시오!

할당을 a의 첫 번째 사용으로 이동하여 2 바이트를 절약했습니다. 분명히 루비는 배열 정의에서 쉼표와 동시 변수 할당에서 발생하는 쉼표를 혼동하지 않을 정도로 똑똑합니다 (적어도이 경우 : D).


2

파이썬 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

파이썬 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 감사합니다!
죽은 Possum

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

그리고 R=[x[::-1]for x in B]-4도. 일반적으로 람다 함수와 함께 맵을 사용하지 마십시오
ovs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.