그리드에 다른 그리드가 포함되어 있는지 확인


10

과제
함수를 작성하면 2 차원 2 차원 배열 (또는 프로그래밍 언어에 문자가 데이터 유형이없는 경우 문자열)이 입력으로 사용됩니다. a 및 b. 언어가 이러한 입력을 지원하지 않으면 다른 표준 1 바이트 변수를 사용할 수 있습니다.

당신의 임무는 b에 a가 포함되어 있는지 확인하는 것입니다. 그렇다면, true를 반환하십시오. 그렇지 않으면 false를 반환하십시오.

샘플 테스트 사례

a:

123
456
789

b:

123
456
789

true를 반환해야합니다.

a:

code
golf

b:

thisis
code!!
golf!!
ohyeah

true를 반환해야합니다.

a:

abcd
efgh
ijkl

b:

abcdef
ghijkl
mnopqr

거짓을 반환해야합니다.

a:

abc
def

b:

1abc2
3def4
5ghi6

true를 돌려줘야한다

a:

ab
cd

b:

#ab##
##cd#

거짓을 돌려줘야한다

최소 바이트가 이깁니다.


2
codegolf에 오신 것을 환영합니다! 테스트 케이스를 좀 더 명확하게하기 위해 편집했습니다. 도전 과제를 메인에 게시하기 전에 과제 를 수행 할 수있는 샌드 박스 가 있습니다 . 행운을 빕니다!
FryAmTheEggman 19:35에

2
또한 언어 (C #)에 문자 유형이 내장되어 있지만 첫 번째 배열을 문자열 배열로 사용하고 두 번째 배열을 줄 바꿈으로 구분 된 문자열로 사용할 수 있습니까?
무지의 실시

@ 닐 테스트 사례 2와 3은 정사각형이 아닙니다.
Robin Ryder

5
당신은 truthy 테스트 케이스 추가 할 수 a에없는 b'의 왼쪽 가장자리와 각 라인 A falsey 테스트 케이스 a의 연속 선에 나타납니다 b하지만 자신의 왼쪽 가장자리가 비틀 거렸다를?
얽히고 설킨 Shaggy

@EmbodimentofIgnorance yes
위험

답변:


9

Brachylog (v2), 4 바이트

s\s\

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

대부분 쉽게를 위해 평소와 같이, 전체 프로그램으로 실행 와 함께, 명령 줄 인수로 지정 B 표준 입력합니다. 문제는 기능을 요구하고, 또한 프로그램으로 함수로서 작동 B , 왼쪽 통해 우측 및 출력 결정이 거짓 인 경우에만, 예외의 제조 .

설명

s\s\
s     a substring of rows of {the left input}
 \…\  assert rectangular; swap row and column operations
  s   a substring of <s>rows</s> columns of {the above matrix}
      {implicit} assert that the result can be {the right input}

"사각형 어설 션"은 분명히 문제가 이미 보증했듯이 무의미합니다. 프로그램의 나머지 부분은 행과 열의 하위 문자열, 즉 하위 행렬을 식별하여 그리드 검색을 수행합니다.

메타 토론

우리는 전에 매우 비슷한 질문 을했습니다; 한 질문에 대한 대부분의 답변이 다른 질문에 대한 답변으로 수정 가능할 것으로 기대합니다. 그래도 이것이 더 깔끔한 버전이라고 생각합니다.


여기서 가장 짧은 답변이므로 받아 드리겠습니다.
위험

7

파이썬 2 , 67 바이트

f=lambda a,b,r=4:b*r and f(a,b[1:],r)|f(a,zip(*b)[::-1],r-1)or a==b

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

튜플 문자 목록으로 입력을받습니다.

모든 하위 그리드를 시도하고 그중에 b있는지 확인 a합니다. 하위 그리드는 첫 번째 행을 제거 b하거나 90도 회전 하여 재귀 적으로 분기하여 생성됩니다 . 정확히 네 번 회전 한 후 다듬은 b것이 같은지 확인합니다 a.


1
@mazzy 입력 그리드는 사각형이어야한다고 생각합니다.
xnor

5

J , 21 15 8 7 바이트

1#.,@E.

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

Bolce Bussiere 덕분에 -7 바이트

원래 답변

J , 21 15 바이트

<@[e.&,$@[<;.3]

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

FrownyFrog 덕분에 -6 바이트

어떻게

  • <@[ 박스형 왼쪽 인수
  • $@[<;.3] 왼쪽 arg와 모양이 같은 오른쪽 arg의 모든 사각형
  • 이제 왼쪽과 오른쪽 arg로 그것들을 전달하십시오 ...
  • 왼쪽 arg는 오른쪽 arg의 느릅 나무입니다. e.&,

나는 이것이 될 수 있다고 생각합니다<@[e.&,$@[<;.3]
FrownyFrog

아 오크, 타이! 당신이 도전을 원한다면, 내가이 사이트를 더럽힌이 괴물에
Jonah

1
-7 바이트 : +/@:,@E.. E.는이 도전을 위해 거의 만들어졌습니다.
Bolce Bussiere

tyvm @BolceBussiere. 오늘 밤에 업데이트하겠습니다.
요나

4

, 26 바이트

⌈⭆η⭆ι⁼θE✂ηκ⁺Lθκ¹✂νμ⁺L§θ⁰μ¹

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 연속적인 하위 행렬 수 에 대한 나의 대답에 크게 의존하지만 , 유일한 차이점은 일치하는 합계를 취하는 대신 최대 값을 얻는다는 것입니다 . 결과 사용으로 인한 암시 적 문자열 변환으로 인해 이미 문자열을 저장하는 문자열입니다 바이트.


4

05AB1E , 10 바이트

øŒεøŒI.å}à

취하고 b, 첫번째 입력으로서 a제있다. 두 입력 모두 문자 행렬로 사용됩니다.

이 관련 도전에 대한 @ Mr.Xcoder 의 05AB1E 포트 답변 , 따라서 그를 찬성 해야합니다!

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

øŒ          # Get the sublists of every column of the (implicit) input `b`
  ε         # Map each list of sublists to:
   øŒ       #  Get the sublists of every column again
            #  (now we have all sub-matrices of `b`)
     I    #  Check if the second input `a` is in this list of sub-matrices
          # After the map: check if any are truthy by taking the maximum
            # (which is output implicitly as result)



3

자바 스크립트 (ES6) , 131 (112) 105 바이트

105 바이트 :

f=(m,n)=>m.some((x,i)=>i<=m.length-n.length&x.some((c,j)=>n.every((l,z)=>(m[i+z]+'').indexOf(l,j)==2*j)))

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

변경 사항 :

  • m[i]into xand n[z]into l: 이 변수가 이미 설정되어 있음을 완전히 잊었습니다 .
  • &&into &: 연산자의 양쪽이 이미 부울이므로 비트 연산자가 작동합니다.

112 바이트 :

f=(m,n)=>m.some((x,i)=>i<=m.length-n.length&&m[i].some((c,j)=>n.every((l,z)=>(m[i+z]+'').indexOf(n[z],j)==2*j)))

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

변경 사항 :

  • map((c,j)=>{...}).some(s=>s)some((c,j)=>{...}): 이중화
  • m[i+z].join()into m[i+z]+'': 배열을 문자열로 변환하는 더 짧은 방법
  • indexOf(n[z].join(),j)indexOf(n[z],j): 방법 이미 변환 문자열로 indexOf n[z]

131 바이트 :

f=(m,n)=>m.some((x,i)=>i<=m.length-n.length&&m[i].map((c,j)=>n.every((l,z)=>m[i+z].join().indexOf(n[z].join(),j)==2*j)).some(s=>s))

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

읽을 수있는 :

function f (m, n) {
  return m.some((x, i) => {
    return i <= m.length - n.length
      && m[i].map((c, j) => {
        return n.every((l, z) => {
          return m[i + z].join().indexOf(n[z].join(), j) == 2 * j
        })
      })
        .some(s => s)
  })
}

개별 값을 비교하는 대신 그리드 N의 라인이 그리드 M의 라인에 포함되어 있는지, 그렇다면 인덱스가 있는지 확인했습니다. 모든 라인이 동일한 인덱스에서 시작하여 포함되면 그리드 N은 그리드 M에 포함됩니다.


2

PowerShell을 , 71 102 85 98 바이트

감사합니다 @ 조 킹; 테스트 사례가 추가되었습니다.

param($a,$b)!!($a|%{$p=[regex]::Escape($_)
$b|sls $p -a -ca|% m*}|group index|?{"$a"-ceq$_.Group})

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

덜 골프 :

param($a,$b)

$matches = $a|%{
    $pattern = [regex]::Escape($_)
    $b|Select-String $pattern -AllMatches -CaseSensitive|% Matches
}

$relevantGroupsByMatchPosition = $matches|group index|?{
    "$a"-ceq$_.Group  # the '$_.Group' contains matches in source order
                      # -ceq is case sensitivity equation operator
                      # -ceq performs an implicit conversion to the left operand type
}

!!($relevantGroupsByMatchPosition)  # true if the variable is not $null

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.