ตัดแต่งพื้นหลังที่เบี่ยงเบนความสนใจออก!


13

มันไม่น่ารำคาญเมื่อคุณกำลังถ่ายภาพ แต่พื้นหลังเบี่ยงเบนไปจากเนื้อหาจริงของภาพ? ฉันจะบอกว่ามันเป็น ฉันจำเป็นต้องรู้ว่าฉันควรครอบตัดเท่าใดเพื่อที่จะกำจัดปัญหานี้! แต่ - ตามปกติ - ฉันค่อนข้างขี้เกียจดังนั้นฉันต้องการคนที่จะทำสิ่งนี้ให้ฉัน ...

งาน & กฎ

เมื่อพิจารณาจากเมทริกซ์ไบนารีที่แทนภาพให้ส่งออกขนาด (ความกว้างและความสูง) ของเมทริกซ์ย่อยที่เล็กที่สุดที่มี s ทั้งหมดในเมทริกซ์ดั้งเดิม ย่อยเมทริกซ์คือบล็อกของรายการที่อยู่ติดกันจากเมทริกซ์เดิม มันเป็นเมทริกซ์ใหม่ที่เกิดขึ้นจากการซ้อนทับเซตย่อยของแถวที่อยู่ติดกันและเซตย่อยของคอลัมน์ที่อยู่ติดกันของต้นฉบับ1

  • อนุญาตให้ใช้ความกว้างและความสูงของเมทริกซ์เป็นอินพุตเช่นกัน
  • การป้อนข้อมูลที่มีการประกันเพื่อมีอย่างน้อยหนึ่ง11
  • คุณสามารถรับอินพุตและให้เอาต์พุตผ่านวิธีการมาตรฐานใด ๆในขณะที่รับทราบว่าช่องโหว่เหล่านี้ถูกห้ามโดยค่าเริ่มต้น นี่คือดังนั้นพยายามทำงานให้เสร็จอย่างน้อยไบต์ที่คุณสามารถจัดการได้ในภาษาที่คุณเลือก

ตัวอย่าง

[000000010100011011001010000000][101001101101010](5,3)

กรณีทดสอบ

อินพุต | เอาท์พุต

[[0,1,0,0,0,1,0]]
-> (5,1) หรือ (1,5)

[[0,0,0,0,0], [0,1,0,1,0], [0,0,1,0,0]]
-> (3,2) หรือ (2,3)

[[1,1,1,1], [0,0,0,0], [0,0,0,0], [1,0,0,0]]
-> (4,4)

[[0,0,0,0,0,0], [0,1,0,1,0,1], [0,0,0,0,0,0]]
-> (5,1) หรือ (1,5)

[[0,0,0,0,0], [0,1,0,1,0], [0,0,1,0,0], [0,1,0,1,0], [ 0,0,0,0,0]]
-> (3,3)

[[0,0,0,0,0,0], [0,1,0,1,0,0], [0,1,1,0,1,1], [0,0,1, 0,1,0], [0,0,0,0,0,0]]
-> (5,3) หรือ (3,5)

1
มันให้ความรู้สึกคุ้นเคยเป็นอย่างมาก อยู่ใน Sandbox ซักพักซักพักนะ?
Shaggy

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

คำตอบ:



5

APL (Dyalog Unicode) , 10 ไบต์SBCS

ฟังก์ชันนำหน้าเงียบโดยไม่ระบุชื่อ

(1+⌈/-⌊/)⍸

ลองออนไลน์!

 ดัชนี 1s

(... ) ใช้ฟังก์ชัน tacit ต่อไปนี้กับสิ่งนั้น:

⌊/ ขั้นต่ำ ( พิกัดyต่ำสุดและพิกัดxต่ำสุด)

⌈/- จำนวนลบสูงสุดที่ (สิ่งนี้ทำให้เรามีช่วง)

1+ หนึ่งบวกที่ (จะรวม)


5

อ็อกเทฟ , 57 56 45 ไบต์

นี่คือfindการยกของหนัก: มันfindsเป็นดัชนีแถวและโคลัมของรายการที่ไม่ใช่ศูนย์ จากนั้นเราแค่ต้องค้นหาความแตกต่างระหว่างค่าสูงสุดและค่าต่ำสุด (บวกหนึ่ง) สำหรับแต่ละค่าแยกกัน

ขอบคุณ @beaker และ @AndrasDeak สำหรับ -1 ไบต์และ @LuisMendo สำหรับ -11 ไบต์!

@(a){[I{1:2}]=find(a),cellfun(@range,I)}{2}+1

ลองออนไลน์!




3

Python 2 ,  63  55 ไบต์

-8 ด้วยความช่วยเหลือจาก Vincent (นำเมทริกซ์อินพุตเป็นอาร์เรย์ Numpy)

lambda a:[len(`a.max(x)`[7::3].strip('0'))for x in 0,1]

ไม่มีชื่อฟังก์ชั่นการยอมรับ 2-D Numpy อาร์เรย์ของจำนวนเต็ม (ใน{0,1}) [width,height]ซึ่งจะส่งกลับรายการของจำนวนเต็มให้

ลองออนไลน์!


รุ่นที่ไม่ใช่ Numpy ใน 63 ไบต์ (ยอมรับรายการของจำนวนเต็ม{0,1})

lambda a:[len(`map(max,v)`[1::3].strip('0'))for v in zip(*a),a]

ลองออนไลน์!

อย่างไร?

ได้รับเมทริกซ์a, forแต่ละ ( v) ของ transpose ที่zip(*a)และaตัวเองเราจะพบความสูงที่ต้องการ (รับ transpose นี้คือความกว้าง)

การทำแผนที่maxข้ามvทำให้รายการของศูนย์และคนที่แสดงว่าแต่ละแถวของvมีคนใด การแทนค่าสตริงของรายการนี้พบโดยใช้ backticks ( `...`) ซึ่งจะให้สตริงที่มีการนำ[หน้าจากนั้นค่าศูนย์และค่าที่คั่นด้วย, (จุลภาค + ช่องว่าง) เราแบ่งสตริงนี้เริ่มต้นที่ดัชนีหนึ่งในขั้นตอนที่สามโดยใช้[1::3]สตริงของเราเพียงศูนย์และคนซึ่งช่วยให้เราสามารถใช้ฟังก์ชั่นสตริงstripเพื่อลบศูนย์ด้านนอก ( strip('0'))

ตัวอย่างเช่น:

      a = [[0,0,0,0,0]           map(max,a)                    = [0,1,1]
          ,[0,1,0,0,0]          `map(max,a)`[1::3]             = '011'
          ,[0,0,0,1,0]]         `map(max,a)`[1::3].strip('0')  = '11'
                            len(`map(max,a)`[1::3].strip('0')) = 2

zip(*a) = [(0,0,0)         map(max,zip(*a))                    = [0,1,0,1,0]
          ,(0,1,0)        `map(max,zip(*a))`[1::3]             = '01010'
          ,(0,0,0)        `map(max,zip(*a))`[1::3].strip('0')  = '101'
          ,(0,0,1)    len(`map(max,zip(*a))`[1::3].strip('0')) = 3
          ,(0,0,0)]

    --> [len(`map(max,v)`[1::3].strip('0'))for v in zip(*a),a] = [3,2]

57 ไบต์ใช้อาร์เรย์ numpy
Vincent

หากเรารับข้อมูลเป็นแบบที่ไม่มีในตัวเราไม่ควรนับคำสั่งการนำเข้าบางประเภทเพื่อให้เราทำเช่นนั้น? (อาจเป็นได้ว่าเราต้องตั้งชื่อโพสต์ว่า "Python 2 with numpy" - ฉันไม่แน่ใจทั้งหมด) ... ถ้าคุณมีเวลาพอที่จะถามคุณในห้องแชท byte ที่สิบเก้า?
Jonathan Allan

1
... ยัง55 ไบต์ใช่ไหม
Jonathan Allan

1
ฉันไม่พบคำตอบที่ชัดเจนเกี่ยวกับPPCG Metaดังนั้นฉันไม่แน่ใจเกี่ยวกับสิ่งนี้ และใช่ 55 ไบต์แน่นอน :)
Vincent

1
ฉันแค่ถาม. ตามโพสต์นี้ไม่จำเป็นต้องรวมการนำเข้า
Vincent

1

เรติน่า 0.8.2 , 83 ไบต์

+`^0+¶|¶0+$

+1`((.)*).(¶(?<-2>.)*).(?<=(1)¶.*|(.))
$1$3$4$5
(¶?)*0*(.*1)0*
$#1 $.2

ลองออนไลน์! คำอธิบาย:

+`^0+¶|¶0+$

ลบแถวนำและต่อท้ายศูนย์แถว

+1`((.)*).(¶(?<-2>.)*).(?<=(1)¶.*|(.))
$1$3$4$5

ลบทั้งหมด0ในบรรทัดด้านบนล่าสุด ลบทั้ง1สองออก แต่เปลี่ยนตัวเลขใต้บรรทัดถัดไปเป็น a 1ในกรณีนั้น ค่าบิตนี้หรือรวมกันเป็นแถว

(¶?)*0*(.*1)0*
$#1 $.2

นับจำนวนแถวเป็นจำนวนบรรทัดใหม่บวก 1 และจำนวนคอลัมน์เป็นจำนวนหลักระหว่าง 1 ถึง 1


1

J , 31 ไบต์

[:$([:|.@|:}.^:(0=1#.{.))^:4^:_

ลองออนไลน์!

คำอธิบาย:

                            ^:_ - repeat until the result stops changing
   (                    )^:4    - repeat 4 times
             ^:(        )       - is
                  1#.           - the sum of
                      {.        - the first row
                 =              - equal 
                0               - to 0
           }.                   - if yes, drop the first row
    [:|.@|:                     - transpose and reverse (rotate 90 degrees) 
[:$                             - what's the shape of the result?


1

Mathematica, 34 ไบต์

Max@#-Min@#+1&/@(#~Position~1)&

ฟังก์ชั่นบริสุทธิ์ รับรายการจำนวนเต็มแบบซ้อนเป็นอินพุตและส่งคืนรายการจำนวนเต็มสองรายการ (ความสูงตามด้วยความกว้าง) เป็นเอาต์พุต อักขระ Unicode เป็น U + F3C7 \[Transpose]สำหรับ



1

05AB1E , 11 9 ไบต์

ζ‚Oε0Û0Üg

-2 ไบต์ขอบคุณที่@ Mr.Xcoder

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

คำอธิบาย:

ζ            # Swap the rows and columns of the (implicit) input-list
            # Pair it with the (implicit) input-list
  O          # Take the sum of each column and row
   ε         # Map Both the list of column-sums and list of row-sums to:
    0Û       #  Remove all leading zeros
      0Ü     #  Remove all trailing zeros
        g    #  Take the length of the remaining lists

1
ζ‚Oε0Û0Ügบันทึก 2 ไบต์
Mr. Xcoder

@ Mr.Xcoder อ่าแน่นอน ฉันไม่ได้มีความสุขกับการแลกเปลี่ยนนั้น ไม่อยากจะเชื่อเลยว่าฉันไม่ได้คิดที่จะทำทั้งคู่ก่อนและรวมกว่า .. >.>
Kevin Cruijssen




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.