Determine if a grid contains another grid
Brachylog (v2), 4 bytes
s\s\
Try it online!
Most easily run as a full program, as usual for a decision-problem, with a specified as a command-line argument, b on standard input. The question asks for a function, and the program also works as a function, with b on the left, a on the right, and output via producing an exception if and only if the decision is false.
Explanation
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}
The "assert rectangular" is, obviously, pointless, as the question guarantees that already. The rest of the program does the grid-finding for us by identifying a substring of the rows and of the columns, i.e. a submatrix.
Meta-discussion
We've had a very similar question before; I'd expect most answers to one question to be modifiable into answers to the other. I think this is the neater version of it, though.
Python 2, 67 bytes
f=lambda a,b,r=4:b*r and f(a,b[1:],r)|f(a,zip(*b)[::-1],r-1)or a==b
Try it online!
Takes input as lists of tuples of characters.
Tries all sub-grids of b
and checks if a
is among them. The sub-grids are generated by recursively branching on either removing the first row of b
or rotating it 90 degrees. After exactly four rotations, checks if the trimmed down b
is equal to a
.
J, 21 15 8 7 bytes
1#.,@E.
Try it online!
-7 bytes thanks to Bolce Bussiere
original answer
J, 21 15 bytes
<@[e.&,$@[<;.3]
Try it online!
-6 bytes thanks to FrownyFrog
how
<@[
boxed left arg$@[<;.3]
all rectangles in the right arg with the same shape as the left arg- now pass those as the left and right arg to...
- is the left arg an elm of the right arg, after flattening both
e.&,