Шаблоны газонокосилки

9

Взято из Google Code Jam 2013. Отборочный раунд Задача B :

Алиса и Боб имеют лужайку перед своим домом в форме прямоугольника N метра на М метра. Каждый год они пытаются подстричь газон по какой-то интересной схеме. Они делали свою стрижку ножницами, что занимало очень много времени; но теперь у них есть новая автоматическая газонокосилка с несколькими настройками, и они хотят попробовать это.

Новая газонокосилка имеет настройку высоты - вы можете установить ее на любую высоту h от 1 до 100 миллиметров, и она будет подстригать всю траву выше, чем h, с которой она сталкивается, до высоты h. Вы управляете этим, входя в газон в любой части края газона; затем газонокосилка движется по прямой линии, перпендикулярной к краю газона, в который она попала, подрезая траву валком шириной 1 м, пока он не выйдет из газона на другой стороне. Высота газонокосилки может быть установлена ​​только тогда, когда она не на газоне.

У Алисы и Боба есть несколько различных типов травы, которые они могли бы иметь на своем газоне. Для каждого из них они хотят знать, возможно ли срезать траву по этой схеме с помощью новой газонокосилки. Каждый рисунок описывается путем указания высоты травы на каждом квадрате 1 х 1 м газона.

Трава изначально имеет высоту 100 мм на всей лужайке.

Напишите функцию, которая получает двумерный массив целочисленных высот и определяет, можно ли соответствующим образом обрезать газон.

Вот 100 тестовых примеров из Google Code Jam. Первые 35 случаев должны пройти, остальные не должны.

Самый короткий код выигрывает.

картонная коробка
источник
2
Можете ли вы указать лицензию, по которой проблемы Google Code Jam доступны для тестирования?
Питер Тейлор
Я изменил его, чтобы связать с проблемой, а не копировать напрямую.
картонная
Я думаю, что очень жаль, если головоломка / вопрос представлен здесь только со ссылкой. Задача должна быть предоставлена ​​в полном объеме со всеми необходимыми деталями.
Говард
2
«Все постановки задач, исходные данные и анализ конкурсов лицензируются по лицензии Creative Commons Attribution». ~ Со страницы проблемы
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)))есть input f1 ((f2 input) f3 (f4 input)).

randomra
источник
пожалуйста, объясните алгоритм (я не могу прочитать J-код ^^)
Оливье Дюлак
2
@OlivierDulac Только что добавили прямо сейчас.
Рандомра
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
Используйте map(min,z(*r))вместо того, [min(a)for a in z(*r)]чтобы сохранить 8 символов
Волатильность
0

У меня немного более длинный код Python, но он прошел все тестовые примеры, приведенные на 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"
tusharmakkar08
источник