잔디 깍는 기계 패턴


9

에서 촬영 구글 코드 잼 2013 예선전 문제 B :

Alice와 Bob은 집 앞에 잔디밭이 있으며, N 미터 x M 미터 사각형 모양입니다. 매년 그들은 흥미로운 패턴으로 잔디를 자르려고 노력합니다. 그들은 가위로 자르는 데 아주 시간이 많이 걸렸습니다. 그러나 이제는 여러 설정을 갖춘 새로운 자동 잔디 깍는 기계를 가지고 있으며 시도해보고 싶습니다.

새로운 잔디 깍는 기계는 높이 설정이 있습니다-1에서 100 밀리미터 사이의 높이 h로 설정할 수 있으며, 모든 잔디를 h보다 높은 높이 h로 자릅니다. 잔디밭 가장자리의 잔디밭에 잔디밭에 들어가서 그것을 실행하십시오. 그런 다음 잔디 깍는 기계는 들어간 잔디밭의 가장자리와 직각을 이루는 직선을 따라 다른 쪽 잔디밭에서 나올 때까지 1m 너비의 잔디를 자릅니다. 잔디 깎는 기계의 높이는 잔디밭에 있지 않을 때만 설정할 수 있습니다.

Alice와 Bob은 잔디밭에서 가질 수있는 다양한 잔디 패턴을 가지고 있습니다. 각각의 사람들은 새로운 잔디 깎기 도구로 잔디를이 패턴으로자를 수 있는지 알고 싶어합니다. 잔디밭의 각 1m x 1m 정사각형에 잔디의 높이를 지정하여 각 패턴을 설명합니다.

잔디는 처음에 전체 잔디밭에서 100mm 높이입니다.

정수 높이의 2D 배열을 사용하여 잔디를 적절히자를 수 있는지 여부를 결정하는 함수를 작성하십시오.

다음은 Google Code Jam의 100 가지 테스트 사례입니다. 처음 35 건은 통과해야하고 나머지는 그렇지 않아야합니다.

가장 짧은 코드가 승리합니다.


2
Google Code Jam 문제가 테스트 사례를 제공하는 라이센스를 지적 할 수 있습니까?
피터 테일러

직접 복사하지 않고 문제에 연결되도록 변경했습니다.
cardboard_box

퍼즐 / 질문이 여기에 링크로 제시되어 있으면 매우 불행하다고 생각합니다. 문제는 필요한 모든 세부 사항을 완전히 제공해야합니다.
Howard

2
"모든 문제 진술, 입력 데이터 및 컨테스트 분석은 Creative Commons Attribution License에 따라 라이센스가 부여됩니다." ~ 문제 페이지에서
MrZander

답변:


9

J, 15 자

   (-:>./"1<./>./)

이 짧은 해결책을 기대하지 않았습니다.

간단한 설명 :

(input == ((max of rows of input) table with min of left and right (max in columns of input)))
(      -:          >./"1                        <./                       >./              )

함수가 솔루션에서와 같이 4 개의 다른 함수 인 경우 : (f1 f2 f3 f4)입력 J는 f1(input,f3(f2(input),f4(input)))ie 처럼 계산합니다 input f1 ((f2 input) f3 (f4 input)).


알고리즘을 설명하십시오 (J 코드를 읽을 수 없습니다 ^^)
Olivier Dulac

2
@OlivierDulac 방금 추가했습니다.
randomra

5

APL, 15 자

{⍵≡(⌈/⍵)∘.⌊⌈⌿⍵}

설명:

  • ⌈⌿⍵ rhs 열의 최대 값을 계산합니다
  • ⌈/⍵ 행과 동일하게 수행
  • ∘.⌊ 기능 최소값과 관련하여 이전 두 항목의 외부 곱을 수행
  • ⍵≡ 결과를 rhs와 비교

예 :

      {⍵≡(⌈/⍵)∘.⌊⌈⌿⍵} 3 3 ⍴ 2 1 2 1 1 1 2 1 2
1

      {⍵≡(⌈/⍵)∘.⌊⌈⌿⍵} 2 3 ⍴ 2 2 2 2 1 1
0 

3

파이썬 112 104

z=zip
y=lambda l:[[max(r)]*len(r)for r in l]
f=lambda l:l==[map(min,z(*r))for r in z(y(l),z(*y(z(*l))))]

1
8자를 저장하는 map(min,z(*r))대신 사용[min(a)for a in z(*r)]
변동성

0

조금 더 긴 파이썬 코드가 있지만 Google Code Jam 2013에서 제공된 모든 테스트 사례를 통과했습니다.

 a=input();io=0
 while io<a:
     io+=1;[b,c]=map(int,raw_input("").strip().split());koi=[];koi1=[]
     for i in xrange(b):
         koi.append(map(int,raw_input("").strip().split()))
    rowmax=[]
    for i in koi:
        rowmax.append(max(i))
    for i in xrange(c):
        t=[]
        for j in koi:
            t.append(j[i])
        koi1.append(t);colmax=[]
    for i in koi1:
        colmax.append(max(i))
    toi1=[]
    for i in xrange(b):
        s=[]
        for j in xrange(c):
           s.append(min(colmax[j],rowmax[i]))
        toi1.append(s)
     if toi1==koi:
        print "Case #%d:"%io,"YES"
     else:
        print "Case #%d:"%io,"NO"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.