주의가 산만 해지는 배경을 제거하십시오!


13

사진을 찍을 때 성 가시지 않습니까?하지만 배경이 이미지의 실제 물질에서 벗어나지 않습니까? 나는 그것을 말할 것입니다. 이 문제를 없애기 위해 얼마나 자르어야하는지 알아야합니다! 그러나-평소와 같이-나는 게으르다. 그래서 누군가 나를 위해 이것을해야한다.

작업 및 규칙

이미지를 나타내는 이진 행렬이 주어지면 원래 행렬에 모두 포함하는 가장 작은 하위 행렬의 크기 (너비 및 높이)를 출력합니다 . 서브 행렬은 원래 행렬의 인접 엔트리의 블록이다. 마찬가지로, 이는 인접한 행의 서브 세트와 원본의 인접한 열의 서브 세트를 겹쳐서 형성된 새로운 매트릭스입니다.1

  • 행렬의 너비와 높이도 입력으로 사용할 수 있습니다.
  • 입력 값은 이상을 포함해야합니다 .1
  • 이러한 허점 은 기본적으로 금지되어 있음을 유의하면서 모든 표준 방법을 통해 입력을 받고 출력을 제공 할 수 있습니다 . 이것은 이므로 선택한 언어로 관리 할 수있는 최소 바이트로 작업을 완료하십시오 .

[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
이것은 매우 친숙한 느낌입니다 . 샌드 박스에 잠시 있었습니까?
Shaggy

8
이것은 실제로 관련 질문에 매우 가깝지만 매트릭스를 생성하는 것이 실제 너비와 높이를 계산하는 데 절대적으로 필요하지 않기 때문에 충분히 멀리 떨어져있는 것으로 간주 될 수 있다고 생각합니다. 예를 들어, 가능한 한 가지 알고리즘은 각 행과 열에 대한 최소 한계 마진 제로 수를 세고 원래 차원에서 빼는 것입니다.
Mr. Xcoder

답변:




5

옥타브 , 57 56 45 바이트

여기 find에 무거운 리프팅 finds이 수행됩니다. 0이 아닌 항목의 행 및 열 인덱스입니다. 그런 다음 각각에 대한 최대 값과 최소값의 차이 (+1)를 별도로 찾아야합니다.

-1 바이트의 경우 @beaker와 @AndrasDeak, -11 바이트의 경우 @LuisMendo에 감사드립니다!

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

온라인으로 사용해보십시오!



3

젤리 , 7 바이트

S,§t€0Ẉ

온라인으로 사용해보십시오!

작동 원리

S,§t€0Ẉ  Main link. Argument: M (matrix)

S        Take the columnwise sum. Let's call the resulting array A.
  §      Take the sum of each row. Let's call the resulting array B.
 ,       Pair; yield [A, B].
   t€0   Trim surrounding zeroes of A and B.
      Ẉ  Widths; yields the lengths of the trimmed arrays.

3

파이썬 2 ,  63  55 바이트

Vincent의 도움을 받아 -8 (입력 행렬을 Numpy 배열로 가져옴)

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

이름이없는 함수는 정수 {0,1}목록을 반환하는 정수의 2 차원 Numpy 배열 (in )을 허용합니다 ( ) [width,height].

온라인으로 사용해보십시오!


63 바이트의 비정형 버전 (의 정수 목록 허용 {0,1}) :

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

온라인으로 사용해보십시오!

어떻게?

매트릭스 주어 a, for각 ( v트랜스의)을, zip(*a)그리고 a그 자체 우리는 (이것이 전치 폭을 지정)에 필요한 높이를 찾는.

max걸쳐 매핑 v하면 0과 1의 목록이 생성되며 각 행에 1이 v포함되어 있는지 나타냅니다 . 이 목록의 문자열 표현은 백틱 ( `...`)을 사용하여 찾을 수 있으며 [, 앞에 문자열이 붙은 다음 0과 1 , (쉼표 + 공백)로 구분됩니다 . 우리 [1::3]는 0과 1로만 이루어진 문자열을 사용하여 인덱스 1에서 시작하여이 문자열을 세 단계로 나눕니다.이를 통해 문자열 함수 strip를 사용 하여 외부 0을 제거 할 수 있습니다 ( 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]

numpy 배열을 사용하는 57 바이트
Vincent

내장되지 않은 유형으로 입력을받는다면 그렇게 할 수 있도록 일종의 import 문을 세지 않아야합니까? (우리는 게시물을 "Python 2 with numpy"로 제목 지정해야 할 수도 있습니다. 전적으로 확실하지는 않습니다) ... 19 바이트 대화방에서 시간을 가질 수 있습니까?
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+$

선행 및 후행 0 행을 삭제하십시오.

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

0마지막 위의 줄에서 모든 s를 제거하십시오 . 1s 2를 모두 제거 하되 다음 줄 아래의 숫자 1를이 경우 변경하십시오. 이것은 비트 단위 또는 행입니다.

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

줄 수를 줄 바꿈 수에 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)&

순수한 기능. 중첩 된 정수 목록을 입력으로 취하고 두 정수 목록 (높이 뒤에 너비)을 출력으로 리턴합니다. 유니 코드 문자는 U + F3C7입니다 \[Transpose].



1

05AB1E , 11 9 바이트

ζ‚Oε0Û0Üg

@ Mr.Xcoder 덕분에 -2 바이트 .

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

ζ            # 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Üg2 바이트를 절약합니다.
Mr. Xcoder

물론 @ Mr.Xcoder Ah. 나는 그 스왑에 대해 이미 너무 행복하지 않았다. 내가 쌍을 먼저하고 합계보다 생각하지 않았다 믿을 수 없어 ..>.>
케빈 Cruijssen



0

apt, 16 15 바이트

[UUy]®=ðd)ÎaZÌÄ

사용해 보거나 모든 테스트 사례를 실행하십시오.


설명

[   ]               :Create an array containing
 U                  : The input and
  Uy                : The input transposed
     ®              :Map each Z
       ð            : Indices of elements where
        d           :  Any element is truthy (not 0)
      =  )          : Reassign to Z
          Î         : First element
           a        : Absolute difference with
            ZÌ      :  Last element
              Ä     :   Plus 1

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.