Xác định xem một lưới có chứa một lưới khác không


10

Thử thách
Tạo một hàm có hai mảng Ký tự 2 chiều (hoặc Chuỗi nếu ngôn ngữ lập trình không có ký tự dưới dạng kiểu dữ liệu) làm đầu vào: a và b. Nếu ngôn ngữ của bạn không hỗ trợ các đầu vào này, bạn có thể sử dụng bất kỳ biến một byte tiêu chuẩn nào khác.

Nhiệm vụ của bạn là xác định xem b có chứa a. Nếu điều này là như vậy, trả lại đúng sự thật. Nếu không, trả lại sai.

Các trường hợp kiểm tra mẫu

a:

123
456
789

b:

123
456
789

nên trả lại đúng.

a:

code
golf

b:

thisis
code!!
golf!!
ohyeah

nên trả lại đúng.

a:

abcd
efgh
ijkl

b:

abcdef
ghijkl
mnopqr

nên trả lại sai.

a:

abc
def

b:

1abc2
3def4
5ghi6

nên trả lại đúng

a:

ab
cd

b:

#ab##
##cd#

nên trả lại sai

Ít nhất là byte thắng.


2
Xin chào và chào mừng đến với codegolf! Tôi đã chỉnh sửa các trường hợp thử nghiệm của bạn để (hy vọng) làm cho chúng rõ ràng hơn một chút. Lưu ý rằng chúng tôi có một hộp cát để thực hiện các thử thách trước khi đăng chúng lên chính. Chúc may mắn!
FryAmTheEggman

2
Ngoài ra, tôi có thể lấy mảng đầu tiên làm một chuỗi các chuỗi và chuỗi thứ hai làm một chuỗi được phân tách bằng các dòng mới, mặc dù ngôn ngữ của tôi (C #) có một kiểu ký tự được xây dựng không?
Hiện thân của sự thiếu hiểu biết

@Neil Trường hợp kiểm tra 2 và 3 không vuông.
Robin Ryder

5
Bạn có thể thêm một trường hợp kiểm tra trung thực akhông nằm bở cạnh trái và trường hợp kiểm tra falsey trong đó mỗi dòng axuất hiện trong các dòng liên tiếp bnhưng với các cạnh trái của chúng được đặt so le?
Xù xì

@EmbodimentofIgnorance có
Hazard

Câu trả lời:


9

Brachylog (v2), 4 byte

s\s\

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

Dễ dàng chạy nhất như một chương trình đầy đủ, như thường lệ cho một , với một đối số dòng lệnh được chỉ định, b trên đầu vào tiêu chuẩn. Câu hỏi yêu cầu một hàm và chương trình cũng hoạt động như một hàm, với b ở bên trái, a ở bên phải và xuất ra thông qua việc tạo ra một ngoại lệ khi và chỉ khi quyết định sai .

Giải trình

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}

"Hình chữ nhật khẳng định" rõ ràng là vô nghĩa, vì câu hỏi đã bảo đảm điều đó rồi. Phần còn lại của chương trình thực hiện tìm kiếm lưới cho chúng tôi bằng cách xác định một chuỗi con của các hàng và của các cột, tức là một chuỗi con.

Thảo luận tổng hợp

Chúng tôi đã có một câu hỏi rất giống nhau trước đây; Tôi mong đợi hầu hết các câu trả lời cho một câu hỏi có thể sửa đổi thành câu trả lời cho câu hỏi khác. Tôi nghĩ rằng đây là phiên bản gọn gàng hơn của nó.


Câu trả lời ngắn nhất ở đây, vì vậy tôi sẽ chấp nhận nó.
Nguy hiểm

7

Python 2 , 67 byte

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

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

Lấy đầu vào là danh sách các bộ ký tự.

Thử tất cả các lưới con bvà kiểm tra nếu anằm trong số chúng. Các lưới con được tạo ra bằng cách phân nhánh đệ quy trên hoặc loại bỏ hàng đầu tiên bhoặc xoay nó 90 độ. Sau chính xác bốn lần quay, kiểm tra xem phần cắt giảm bcó bằng không a.


1
@mazzy Tôi nghĩ các lưới đầu vào được cho là hình chữ nhật.
xnor

5

J , 21 15 8 7 byte

1#.,@E.

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

-7 byte nhờ Bolce Bussiere

câu trả lời gốc

J , 21 15 byte

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

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

-6 byte nhờ FrownyFrog

làm sao

  • <@[ đóng hộp trái arg
  • $@[<;.3] tất cả các hình chữ nhật ở bên phải arg có cùng hình dạng với arg bên trái
  • bây giờ chuyển những cái đó sang trái và phải để ...
  • là đối số bên trái một elm của arg bên phải, sau khi làm phẳng cả hai e.&,

Tôi nghĩ điều này có thể<@[e.&,$@[<;.3]
FrownyFrog

Ah ofc, ty! Nếu bạn muốn thử thách, hãy nhìn vào sự quái dị này, tôi đã làm ô uế trang web này với
Jonah

1
-7 byte : +/@:,@E.. E. được thực hiện khá nhiều cho thử thách này.
Bolce Bussiere

tyvm @BolceBussiere. Tôi sẽ cập nhật tối nay.
Giô-na

4

Than , 26 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Dựa nhiều vào câu trả lời của tôi để Đếm các mô hình con liền kề , điểm khác biệt duy nhất là thay vì lấy tổng số trận đấu tôi lấy tối đa và do chuyển đổi chuỗi ẩn do sử dụng kết quả đã là một chuỗi lưu byte.


4

05AB1E , 10 byte

øŒεøŒI.å}à

Lấy blàm đầu vào đầu tiên, anhư thứ hai. Cả hai đầu vào như ma trận nhân vật.

Câu trả lời 05AB1E của Port @ Mr.Xcoder cho thử thách liên quan này , vì vậy hãy đảm bảo nâng cao anh ấy!

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

øŒ          # 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

JavaScript (ES6) , 131 112 105 byte

105 byte:

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

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

Thay đổi:

  • m[i]vào xn[z]vào l: Hoàn toàn quên rằng các biến này đã được cung cấp
  • &&vào &: Cả hai mặt của toán tử đều là booleans nên toán tử bitwise sẽ hoạt động

112 byte:

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

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

Thay đổi:

  • map((c,j)=>{...}).some(s=>s)thành some((c,j)=>{...}): dư thừa
  • m[i+z].join()thành m[i+z]+'': Một cách ngắn hơn để chuyển đổi mảng thành chuỗi
  • indexOf(n[z].join(),j)thành indexOf(n[z],j): Các indexOf phương pháp đã được chuyển đổi n[z] thành một chuỗi

131 byte:

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

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

Có thể đọc được

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

Thay vì kết hợp các giá trị riêng lẻ, tôi đã kiểm tra xem các dòng từ lưới N có được bao gồm trong các dòng của lưới M hay không, và nếu vậy, tại các chỉ mục nào. Nếu tất cả các dòng được bao gồm bắt đầu từ cùng một chỉ mục thì lưới N được chứa trong lưới M.


2

PowerShell , 71 102 85 98 byte

cảm ơn @Jo King; trường hợp kiểm tra thêm.

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

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

Ít chơi gôn hơn:

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

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.