Tentukan apakah kisi berisi kisi lain

10

Tantangan
Buat fungsi mengambil dalam dua array 2 dimensi Karakter (atau String jika bahasa pemrograman tidak memiliki karakter sebagai tipe data) sebagai input: a dan b. Jika bahasa Anda tidak mendukung input ini, Anda dapat menggunakan variabel satu byte standar lainnya.

Tugas Anda adalah menentukan apakah b berisi a. Jika demikian, kembalikan benar. Jika tidak, kembalikan salah.

Contoh Uji Kasus

a:

123
456
789

b:

123
456
789

harus mengembalikan true.

a:

code
golf

b:

thisis
code!!
golf!!
ohyeah

harus mengembalikan true.

a:

abcd
efgh
ijkl

b:

abcdef
ghijkl
mnopqr

harus mengembalikan false.

a:

abc
def

b:

1abc2
3def4
5ghi6

harus mengembalikan true

a:

ab
cd

b:

#ab##
##cd#

harus mengembalikan false

Paling tidak byte menang.

Bahaya
sumber
2
Hai dan selamat datang di codegolf! Saya mengedit kasus uji Anda untuk (mudah-mudahan) membuatnya lebih jelas. Perhatikan bahwa kami memiliki kotak pasir untuk mengerjakan tantangan sebelum mempostingnya ke utama. Semoga berhasil!
FryAmTheEggman
2
Juga, bolehkah saya mengambil array pertama sebagai array string dan yang kedua sebagai string yang dipisahkan oleh baris baru, meskipun bahasa saya (C #) memiliki tipe karakter bawaan?
Perwujudan Ketidaktahuan
@Nil Uji kasus 2 dan 3 tidak persegi.
Robin Ryder
5
Bisakah Anda menambahkan kotak uji yang benar di mana atidak bdi tepi kiri dan kotak uji palsu di mana setiap baris amuncul dalam baris berturut-turut btetapi dengan tepi kiri mereka terhuyung-huyung?
Shaggy
@EmbodimentofIgnorance ya
Hazard

Jawaban:

9

Brachylog (v2), 4 byte

s\s\

Cobalah online!

Paling mudah dijalankan sebagai program penuh, seperti biasa untuk , dengan sebuah ditetapkan sebagai argumen baris perintah, b input standar. Pertanyaannya menanyakan fungsi, dan program juga berfungsi sebagai fungsi, dengan b di kiri, a di kanan, dan keluaran melalui menghasilkan pengecualian jika dan hanya jika keputusan salah .

Penjelasan

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}

"Menegaskan segi empat" jelas, tidak ada gunanya, karena pertanyaan sudah menjamin hal itu. Sisa dari program melakukan pencarian grid untuk kami dengan mengidentifikasi substring dari baris dan kolom, yaitu submatrix.

Diskusi meta

Kami memiliki pertanyaan yang sangat mirip sebelumnya; Saya berharap sebagian besar jawaban untuk satu pertanyaan dapat dimodifikasi menjadi jawaban yang lain. Saya pikir ini adalah versi yang lebih rapi.

ais523
sumber
Jawaban terpendek di sini, jadi saya akan menerimanya.
Hazard
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

Cobalah online!

Mengambil input sebagai daftar tupel karakter.

Mencoba semua sub-grid bdan memeriksa apakah aada di antara mereka. Sub-grid dihasilkan oleh percabangan rekursif baik dengan menghapus baris pertama batau memutarnya 90 derajat. Setelah tepat empat rotasi, periksa apakah yang dipangkas bsama dengan a.

Tidak
sumber
1
@ Mazzy Saya pikir grid input seharusnya persegi panjang.
xnor
5

J , 21 15 8 7 byte

1#.,@E.

Cobalah online!

-7 byte terima kasih kepada Bolce Bussiere

jawaban asli

J , 21 15 byte

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

Cobalah online!

-6 byte berkat FrownyFrog

bagaimana

  • <@[ kotak kiri arg
  • $@[<;.3] semua persegi panjang di arg kanan dengan bentuk yang sama dengan arg kiri
  • sekarang lewati itu sebagai arg kiri dan kanan untuk ...
  • adalah arg kiri elm dari arg kanan, setelah meratakan keduanya e.&,
Jonah
sumber
Saya pikir ini bisa<@[e.&,$@[<;.3]
FrownyFrog
Ah ofc, ty! Jika Anda ingin tantangan, lihatlah keanehan ini. Saya mencemari situs ini dengan
Jonah
1
-7 Bytes: +/@:,@E.. E. cukup banyak dibuat untuk tantangan ini.
Bolce Bussiere
tyvm @BolceBussiere. saya akan memperbarui ini malam ini.
Jonah
4

Arang , 26 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sangat berdasarkan pada jawaban saya untuk Menghitung para pendatang yang bersebelahan , satu-satunya perbedaan adalah bahwa alih-alih mengambil jumlah pertandingan yang saya ambil maksimum, dan karena konversi string tersirat karena penggunaan hasilnya sudah menjadi string yang menyimpan sebuah byte.

Neil
sumber
4

05AB1E , 10 byte

øŒεøŒI.å}à

Dibutuhkan b sebagai input pertama, asebagai yang kedua. Kedua input sebagai karakter-matriks.

Pelabuhan @ABXcoder 's jawaban 05AB1E untuk tantangan terkait ini , jadi pastikan untuk membesarkannya!

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

øŒ          # 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)
Kevin Cruijssen
sumber
3

Python 2 , 106 118 113 byte

lambda a,b,L=len:any(sum(A==B[j:j+L(A)]for A,B in zip(a,b[i:]))==L(a)for i in range(L(b))for j in range(L(b[0])))

Cobalah online!

Chas Brown
sumber
@Nil: Tetap sekarang.
Chas Brown
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)))

Cobalah online!

Perubahan:

  • m[i]ke dalam xdan n[z]ke l: Benar-benar lupa bahwa variabel-variabel ini sudah instanciated
  • &&ke &: Kedua sisi operator sudah boolean sehingga operator bitwise akan bekerja

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

Cobalah online!

Perubahan:

  • map((c,j)=>{...}).some(s=>s)ke dalam some((c,j)=>{...}): Redundansi
  • m[i+z].join()menjadi m[i+z]+'': Cara yang lebih singkat untuk mengubah array menjadi string
  • indexOf(n[z].join(),j)ke indexOf(n[z],j): The indexOf Metode sudah mengkonversi n[z] ke dalam string

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

Cobalah online!

Dapat dibaca:

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

Alih-alih membandingi nilai-nilai individual, saya memeriksa apakah garis-garis dari grid N dimasukkan dalam garis-garis grid M, dan jika demikian, di mana indeks. Jika semua garis dimasukkan mulai dari indeks yang sama maka grid N terkandung dalam grid M.

M. Paviza
sumber
2

PowerShell , 71 102 85 98 byte

terima kasih @ Jo King; kasus uji ditambahkan.

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

Cobalah online!

Kurang golf:

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
mazzy
sumber
1

Javascript, 150 byte

f=(a,b)=>{_='length';for(r=i=0;i<=b[_]-a[_];i++)for(j=0;j<=b[0][_]-a[0][_];j++){u=0;a.map((l,y)=>l.map((c,x)=>u=u||b[i+y][j+x]!=c));r=r||!u;}return r}

Cobalah online

Johan du Toit
sumber