グリッドに別のグリッドが含まれているかどうかを判別する


10

チャレンジ
Create関数は、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

falseを返す必要があります。

a:

abc
def

b:

1abc2
3def4
5ghi6

trueを返す必要があります

a:

ab
cd

b:

#ab##
##cd#

falseを返す必要があります

最小バイトが勝ちます。


2
こんにちは、コードゴルフへようこそ!テストケースを編集して(うまくいけば)もう少しわかりやすくしました。mainに投稿する前に課題に取り組むためのサンドボックスがあることに注意してください。幸運を!
FryAmTheEggman

2
また、私の言語(C#)に文字タイプが組み込まれている場合でも、最初の配列を文字列の配列として、2番目の配列を改行で区切られた文字列として取得できますか?
無知の実施形態

@Neilテストケース2および3は正方ではありません。
Robin Ryder

5
の左端にaないb真のテストケースと、の各行aが連続する行に表示されるbが左端がずれている偽のテストケースを追加できますか?
シャギー

@EmbodimentofIgnoranceはい
ハザード

回答:


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}

「長方形のアサート」は、質問がすでにそれを保証しているように、明らかに無意味です。プログラムの残りの部分は、行と列の部分文字列、つまり部分行列を特定することで、グリッド検索を実行します。

メタディスカッション

以前にも非常によく似た質問がありました。1つの質問に対するほとんどの回答は、他の回答への変更が可能であることを期待しています。でもこれはもっとすっきりしたバージョンだと思います。


ここで一番短い答えなので、それを受け入れます。
ハザード

7

Python 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します。サブグリッドは、最初の行を削除するか、b90度回転させることで再帰的に分岐することによって生成されます。ちょうど4回転した後、トリムダウンbがに等しいかどうかを確認しaます。


1
@mazzy入力グリッドは長方形であると思われます。
-xnor

5

J21 15 8 7バイト

1#.,@E.

オンラインでお試しください!

Bolce Bussiereのおかげで-7バイト

元の答え

J21 15バイト

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

オンラインでお試しください!

FrownyFrogのおかげで-6バイト

どうやって

  • <@[ 箱入り左引数
  • $@[<;.3] 左引数と同じ形状の右引数のすべての長方形
  • これらを左と右の引数として渡します...
  • 両方をフラット化した後の、左引数と右引数のelmです。 e.&,

これは可能だと思います<@[e.&,$@[<;.3]
FrownyFrog

ああ、あなた、ty!挑戦したい場合は、私がサイトを汚したこの怪物を
ジョナ

1
-7バイト:+/@:,@E.。E.は、この課題にほぼ対応しています。
Bolce Bussiere、

tyvm @BolceBussiere。今夜更新します。
ジョナ

4

チャコール、26バイト

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

オンラインでお試しください!リンクはコードの詳細バージョンです。Count the contiguous submatricsへの私の回答に大きく基づいています。唯一の違いは、一致の合計をとるのではなく最大を取ることです。また、結果の使用による暗黙的な文字列変換のため、保存されている文字列はすでにバイト。


4

05AB1E、10 バイト

øŒεøŒI.å}à

かかりb、第1の入力としてa第二のように。文字行列としての両方の入力。

Mr.Xcoder @この関連挑戦のための05AB1Eの答えは、そう、彼をupvoteすることを確認してください!

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

øŒ          # 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 112105バイト

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

PowerShell71 102 85 98バイト

@Jo Kingに感謝します。テストケースが追加されました。

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.