Sua tarefa é determinar o comprimento da descida mais longa em uma "montanha" representada como uma grade de alturas inteiras. Uma "descida" é qualquer caminho de uma célula inicial para células adjacentes ortogonalmente com alturas estritamente decrescentes (isto é, não na diagonal nem na mesma altura). Por exemplo, você pode passar de 5-4-3-1, mas não 5-5-4-3-3-2-1. O comprimento desse caminho é quantos movimentos celulares existem da célula inicial para a célula final, portanto, 5-4-3-1 é o comprimento 3.
Você receberá uma grade retangular como entrada e deverá produzir um número inteiro indicando a descida mais longa.
Exemplos
1 2 3 2 2
3 4 5 5 5
3 4 6 7 4
3 3 5 6 2
1 1 2 3 1
O comprimento da descida mais longa nesta montanha é 5. O caminho mais longo começa no 7, move-se para a esquerda, para cima, para a esquerda, para cima e para a esquerda (7-6-5-4-2-1). Como existem 5 movimentos nesse caminho, o comprimento do caminho é 5.
Eles podem ter o mesmo número.
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Como esse mapa de altura é plano, a descida mais longa é 0. (não 19, pois a sequência do caminho deve ser estritamente descendente)
Os mapas de altura podem ser compostos por números maiores que os números de um dígito.
10 12 13 14 15 15
17 14 15 15 15 16
18 20 21 15 15 15
21 14 10 11 11 15
15 15 15 15 15 15
O caminho mais longo aqui é de comprimento 6. (21, 20, 18, 17, 14, 12, 10)
... E números ainda maiores também são bons.
949858 789874 57848 43758 387348
5848 454115 4548 448545 216464
188452 484126 484216 786654 145451
189465 474566 156665 132645 456651
985464 94849 151654 151648 484364
A descida mais longa aqui é de comprimento 7. (786654, 484216, 484126, 474566, 156665, 151654, 151648, 132645)
Regras e Notas
- As grades podem ser obtidas em qualquer formato conveniente. Especifique seu formato na sua resposta.
- Você pode assumir que o mapa de altura é perfeitamente retangular, não é vazio e contém apenas números inteiros positivos no intervalo inteiro de 32 bits assinado.
- O caminho de descida mais longo pode começar e terminar em qualquer lugar da grade.
- Você não precisa descrever o caminho de descida mais longo de nenhuma maneira. Somente seu comprimento é necessário.
- O código mais curto vence
Respostas:
JavaScript (ES7),
106 103 10298 bytesExperimente online!
Comentado
Quão?
fonte
Geléia ,
23 2120 bytes-2 graças a Erik, o Outgolfer
Experimente online! (muito ineficiente para os exemplos - o caminho aqui é o
95 94 93 83 77 40 10
que6
é produzido)Quão?
fonte
Python 2,
150147140136134132125123120 bytesExperimente online!
Recebe entrada na forma de um dicionário
(x, y): value
.-7 bytes graças a wizzwizz4, -2 bytes graças a Jonathan Allen, -2 bytes graças a BMO
Alternativa,
123121 bytesExperimente online!
Essencialmente a mesma solução, apenas com o lambda final substituído por um programa real. Pessoalmente, eu gosto mais do primeiro, mas esse chega perto da contagem de bytes, permitindo
g
ser usado como uma variável global.fonte
Limpo ,
211207 bytesExperimente online!
Uma solução de força bruta usando uma lista de listas de números inteiros (
[[Int]]
).O driver TIO usa o mesmo formato que os exemplos por meio do STDIN.
É muito lento para executar qualquer um dos exemplos no TIO e provavelmente localmente também, mas funciona em teoria.
Este faz a mesma coisa mais rapidamente, pode fazer 3x3 ou 2x4 no TIO e 4x4 e 3x5 localmente.
Recuado:
fonte
Python 3 , 219 bytes
Experimente online!
Grade é representada como lista de listas:
Código original não destruído:
fonte
Haskell ,
188186 bytesExperimente online!
notElem
(not.).(#)
Experimente online!
Explicação e Sem Golfe
Estratégia: tente recursivamente todos os caminhos possíveis, mantendo o controle das entradas visitadas e maximizando seu tamanho.
elem
notElem
(#)
elem
maximize
Agora estamos prontos para definir nossa função recursiva
fun :: [[Integer]] -> Integer
:fonte
[[Integer]]
é uma lista de listas. Embora no TIO vinculado você tenha um invólucroparse :: String -> [[Integer]]
, st. você pode usar seqüências de caracteres divididas em espaços e novas linhas.Python 3,
263227 bytesExperimente online!
-2 bytes graças ao BMO
Toma grades no formato
{(0, 0): 1, (1, 0): 2, ...}
. Este formato pode ser gerado a partir do formato de exemplo usando a seguinte função de utilitário:fonte