ตรวจสอบว่ากริดมีกริดอื่นหรือไม่


10

Challenge การ
สร้างฟังก์ชั่นใช้สองอาร์เรย์สองมิติของอักขระ (หรือ Strings หากภาษาการเขียนโปรแกรมไม่มีอักขระเป็นประเภทข้อมูล) เป็นอินพุต: a และ b หากภาษาของคุณไม่รองรับอินพุตเหล่านี้คุณสามารถใช้ตัวแปรไบต์เดียวแบบมาตรฐานอื่น ๆ

งานของคุณคือการพิจารณาว่าขมี a หรือไม่ หากเป็นเช่นนั้นให้ส่งคืนจริง มิฉะนั้นส่งคืน false

กรณีทดสอบตัวอย่าง

a:

123
456
789

b:

123
456
789

ควรกลับจริง

a:

code
golf

b:

thisis
code!!
golf!!
ohyeah

ควรกลับจริง

a:

abcd
efgh
ijkl

b:

abcdef
ghijkl
mnopqr

ควรกลับเท็จ

a:

abc
def

b:

1abc2
3def4
5ghi6

ควรกลับจริง

a:

ab
cd

b:

#ab##
##cd#

ควรกลับเท็จ

ไบต์ที่น้อยที่สุดชนะ


2
สวัสดีและยินดีต้อนรับสู่ codegolf! ฉันแก้ไขกรณีทดสอบของคุณเพื่อ (หวังว่า) ทำให้ชัดเจนขึ้นอีกเล็กน้อย โปรดทราบว่าเรามีSandboxสำหรับทำงานกับความท้าทายก่อนโพสต์ไว้ใน main โชคดี!
FryAmTheEggman

2
นอกจากนี้ฉันอาจใช้อาร์เรย์แรกเป็นอาร์เรย์ของสตริงและรายการที่สองเป็นสตริงคั่นด้วยการขึ้นบรรทัดใหม่แม้ว่าภาษาของฉัน (C #) มีประเภทอักขระอยู่ภายในหรือไม่
ศูนย์รวมของความไม่รู้

@ กรณีทดสอบ Neil 2 และ 3 ไม่ได้เป็นแบบสแควร์
Robin Ryder

5
คุณสามารถเพิ่มกรณีทดสอบความจริงที่aไม่อยู่บนbขอบด้านซ้ายของและกรณีทดสอบเท็จที่แต่ละบรรทัดของaปรากฏในบรรทัดที่ต่อเนื่องกันbแต่มีขอบด้านซ้ายของเซ
Shaggy

@EmbodimentofIgnorance ใช่
อันตราย

คำตอบ:


9

Brachylog (v2), 4 ไบต์

s\s\

ลองออนไลน์!

รันได้ง่ายที่สุดเป็นโปรแกรมเต็มรูปแบบตามปกติสำหรับโดยมีการระบุเป็นอาร์กิวเมนต์บรรทัดคำสั่ง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}

"ยืนยันเป็นรูปสี่เหลี่ยมผืนผ้า" เห็นได้ชัดว่าไม่มีจุดหมายเพราะคำถามรับประกันได้แล้ว ส่วนที่เหลือของโปรแกรมทำการค้นหากริดสำหรับเราโดยการระบุซับสตริงของแถวและคอลัมน์เช่นเมทริกซ์ย่อย

Meta-อภิปราย

เราเคยมีคำถามคล้ายกันมาก่อน ฉันคาดว่าคำตอบส่วนใหญ่สำหรับคำถามหนึ่งจะสามารถแก้ไขเป็นคำตอบของคำถามอื่นได้ ฉันคิดว่านี่เป็นเวอร์ชั่น neater ของมัน


คำตอบที่สั้นที่สุดที่นี่ดังนั้นฉันจะยอมรับมัน
Hazard

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

ลองออนไลน์!

รับอินพุตเป็นรายการของ tuples ของอักขระ

ลองกริดย่อยทั้งหมดbและตรวจสอบว่าaอยู่ในกลุ่มหรือไม่ sub-grids สร้างขึ้นโดยการแยกแบบวนซ้ำโดยการเอาแถวแรกออกbหรือหมุน 90 องศา หลังจากตรงสี่ผลัดตรวจสอบถ้าลดได้จะมีค่าเท่ากับba


1
@ มาซี่ฉันคิดว่ากริดอินพุตควรเป็นสี่เหลี่ยม
xnor

5

J , 21 15 8 7 ไบต์

1#.,@E.

ลองออนไลน์!

-7 ไบต์ขอบคุณ Bolce Bussiere

คำตอบเดิม

J , 21 15 ไบต์

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

ลองออนไลน์!

-6 ไบต์ขอบคุณ FrownyFrog

อย่างไร

  • <@[ ARG ซ้ายกล่อง
  • $@[<;.3] สี่เหลี่ยมทั้งหมดใน ARG ด้านขวามีรูปร่างเดียวกันกับ ARG ด้านซ้าย
  • ตอนนี้ผ่านผู้ที่เป็น arg ซ้ายและขวาเพื่อ ...
  • คือ ARG ด้านซ้ายเป็น Elm ของ ARG ด้านขวาหลังจากแฟบทั้งสอง e.&,

ฉันคิดว่านี่อาจเป็น<@[e.&,$@[<;.3]
FrownyFrog

อา ofc, ty! หากคุณต้องการความท้าทายลองดูความ
Jonah

1
-7 +/@:,@E.ไบต์: อีถูกสร้างขึ้นมาสำหรับความท้าทายนี้
Bolce Bussiere

tyvm @BolceBussiere ฉันจะอัปเดตคืนนี้
Jonah

4

ถ่าน 26 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด อย่างหนักตามคำตอบของฉันในการนับเมทริกซ์ย่อยที่อยู่ติดกันความแตกต่างเพียงอย่างเดียวคือแทนที่จะเอาผลรวมของการแข่งขันที่ฉันได้รับมากที่สุดและเนื่องจากการแปลงสตริงโดยนัยเนื่องจากการใช้ผลลัพธ์เป็นสตริงที่บันทึก ไบต์


4

05AB1E , 10 ไบต์

øŒεøŒI.å}à

ใช้bเป็นอินพุตแรกaเป็นวินาที อินพุตทั้งสองเป็นเมทริกซ์อักขระ

คำตอบ 05AB1Eของ Port of @ Mr.Xcoderสำหรับความท้าทายที่เกี่ยวข้องนี้ดังนั้นอย่าลืมโหวตให้เขา!

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

øŒ          # 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 ไบต์

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]เข้าxและn[z]ออกl: ลืมทั้งหมดว่าตัวแปรเหล่านี้ได้รับการติดตั้งแล้ว
  • &&เข้าสู่&: ผู้ประกอบการทั้งสองด้านเป็นบูลีนแล้วดังนั้นผู้ประกอบการระดับบิตจะทำงาน

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()เป็น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 ไบต์

ขอบคุณ @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.