Retirado do Problema B da Rodada de Qualificação do Google Code Jam 2013 :
Alice e Bob têm um gramado em frente à casa, em forma de um retângulo de N metro por M metro. A cada ano, eles tentam cortar o gramado em algum padrão interessante. Eles costumavam cortar com tesouras, o que consumia muito tempo; mas agora eles têm um novo cortador de grama automático com várias configurações e desejam testá-lo.
O novo cortador de grama tem uma configuração de altura - você pode configurá-lo para qualquer altura h entre 1 e 100 milímetros, e cortará toda a grama mais alto que h que encontre na altura h. Você o executa entrando no gramado em qualquer parte da borda do gramado; depois, o cortador de grama segue uma linha reta, perpendicular à borda do gramado em que entrou, cortando a grama em uma faixa de 1 m de largura, até sair do gramado do outro lado. A altura do cortador de grama só pode ser ajustada quando não estiver no gramado.
Alice e Bob têm vários padrões de grama que eles poderiam ter no gramado. Para cada um deles, eles querem saber se é possível cortar a grama nesse padrão com o novo cortador de grama. Cada padrão é descrito especificando a altura da grama em cada quadrado de 1m x 1m do gramado.
A grama tem inicialmente 100 mm de altura em todo o gramado.
Escreva uma função que utilize uma matriz 2D de alturas inteiras e determine se o gramado pode ser cortado adequadamente.
Aqui estão 100 casos de teste do Google Code Jam. Os primeiros 35 casos devem passar, o resto não.
O menor código vence.
Respostas:
J, 15 caracteres
Não esperava essa solução curta.
Breve explicação:
Se sua função for 4, outra função como na solução:
(f1 f2 f3 f4)
e uma entrada J calcula comof1(input,f3(f2(input),f4(input)))
isto éinput f1 ((f2 input) f3 (f4 input))
.fonte
APL, 15 caracteres
Explicação:
⌈⌿⍵
calcula o máximo das colunas de rhs⌈/⍵
faz o mesmo com linhas∘.⌊
faz o produto externo dos dois anteriores em relação à função mínima⍵≡
compara o resultado com o rhsExemplos:
fonte
Python,
112104fonte
map(min,z(*r))
vez de[min(a)for a in z(*r)]
salvar 8 caracteresEu tenho um código python um pouco mais longo, mas ele passou em todos os casos de teste fornecidos no Google Code Jam 2013.
fonte