카테고리 보관물: 코딩

코딩

이 물린거야? : .. . 샌드위치: ##### .#### ..### 산출: truthy 예 2 : 내 물린

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

문제:

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

예 :

예 1 :

내 물린 패턴 :

..
.

샌드위치:

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

산출:

truthy

예 2 :

내 물린 패턴 :

..
..

샌드위치:

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

산출:

falsy

예 3 :

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

내 물린 패턴 :

.
 .
  .

샌드위치:

##.
#.#
.##

산출:

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

truthy

유효한 물기 :

..
.

...
.
.

.
 .
  .

..
. .
 ..

 ..
.
. .

일부 유효하지 않은 물기 :

..

...
.

..
.
 .

규칙 :

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

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

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

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

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

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

  • 입력에서 샌드위치와 물기를 나타내는 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 , 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

답변

파이썬 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은 목록의 목록을 수평으로 미러링하는 데 사용됩니다

연결된 예제에서 샌드위치는 다음과 같습니다.

##.
#.#
###

그리고 물린은 :

.
 .

답변