Você é um empresário de ferrovias nos Estados Unidos do século XIX, quando os trens se tornam populares porque são os meios mais eficientes de transportar grandes volumes de materiais por terra. Existe uma necessidade nacional de trilhos de trem da costa leste através de algumas terras recentemente colonizadas no oeste.
Para acomodar essa necessidade, o governo dos EUA aplicará um imposto para subsidiar ferrovias. Eles prometeram pagar à sua empresa ferroviária por cada quilômetro percorrido. Como colocar trilhas em regiões montanhosas e montanhosas é mais caro do que colocar trilhas em terrenos planos, eles ajustam a quantia que dão em conformidade. Ou seja, o governo pagará
- US $ 5.000 por milha de pista traçada em terreno plano
- US $ 12.500 por milha de pista montada em terra montanhosa
- US $ 20.000 por quilômetro de pista montada nas montanhas.
Obviamente, esse plano não reflete com precisão quanto custa realmente rastrear.
Você contratou alguns cartógrafos para desenhar mapas de relevo das regiões onde você seguirá o caminho para analisar a elevação. Aqui está um desses mapas:
S12321
121234
348E96
Cada dígito representa uma milha quadrada de terra. S
é o ponto de partida, E
é o ponto final. Cada número representa a intensidade das mudanças de altitude nessa região.
- Terrenos numerados 1-3 constituem terreno plano.
- Terrenos numerados 4-6 constituem terrenos montanhosos.
- Os terrenos numerados 7-9 constituem uma cordilheira.
Através de anos de experiência na construção de trilhos de trem, avaliou que o custo de construção de trilhos (em dólares) satisfaz esta fórmula:
Cost_Per_Mile = 5000 + (1500 * (Elevation_Rating - 1))
Isso significa que a construção de certos gradientes de elevação custará mais dinheiro do que o governo concede, às vezes será rentável e, às vezes, você apenas empatará.
Por exemplo, uma milha de pista em um gradiente de elevação de 3 custa US $ 8.000 para construir, mas você recebe apenas US $ 5.000 por isso, e perde US $ 3.000. Por outro lado, construir uma milha de trilhos em um gradiente de elevação de 7 custa US $ 14.000, mas você recebe US $ 20.000 por isso: um lucro de US $ 6.000!
Aqui está um exemplo de mapa, bem como dois caminhos possíveis diferentes.
S29 S#9 S##
134 1#4 1##
28E 2#E 2#E
A primeira faixa custa US $ 30.000 para construir, mas o governo paga US $ 30.000 por ela. Você não lucra com esta faixa.
Por outro lado, o segundo custa 56.500 dólares para construir, mas você recebe 62.500 dólares por isso. Você lucra $ 6.000 com esta faixa.
Seu objetivo: com um mapa de relevo, encontre o caminho mais lucrativo (ou talvez apenas o menos caro) do início ao fim. Se vários caminhos estiverem vinculados, qualquer um deles é uma solução aceitável.
Detalhes do Programa
Você recebe uma entrada de texto separada por um mapa retangular de números e um ponto inicial e final. Cada número será um número inteiro, inclusive entre 1 e 9. Além disso, a entrada pode ser fornecida da maneira que você desejar, dentro do motivo.
A saída deve estar no mesmo formato da entrada, com os números nos quais a trilha foi construída substituída por um hash ( #
). Por causa de regulamentações arbitrárias impostas por alguns políticos caprichosos, as trilhas só podem seguir caminhos horizontais ou verticais. Em outras palavras, você não pode voltar atrás ou seguir na diagonal.
O programa deve ser capaz de resolver em um período de tempo razoável (ou seja, <10 minutos) para mapas de até 6 linhas e 6 colunas.
Este é um desafio de código de golfe , portanto o programa mais curto vence.
Eu tenho uma implementação de exemplo (sem golfe) .
E / S de amostra
S12321
121234
348E96
S12321
######
3##E##
S73891
121234
348453
231654
97856E
S#3###
1###3#
3#####
######
#####E
fonte
4
no134
mapa de exemplo6
?Respostas:
Python, 307 caracteres
P
toma um caminho parcialp
e retorna todas as maneiras de estendê-lo para alcançá-loE
. Cada caminho retornado é emparelhado com sua pontuação paramax
encontrar o melhor.Leva cerca de 80 segundos em um mapa 6x6.
fonte
Python:
529482460 bytesMinha solução não ganhará nenhum prêmio. No entanto, como existem apenas duas soluções postadas e achei o problema interessante, decidi postar minha resposta de qualquer maneira.
Edit: Obrigado a Howard por suas recomendações. Consegui raspar muito da minha pontuação!
fonte
P
eM
são usadas apenas uma vez cada uma, portanto, é uma boa ideia fazer a integração (para uma única invocação, funciona em quase todos os casos, para duas, às vezes).m[c]!='S'
pode ser reduzido param[c]<'S'
, tambémabs(z)==1
paraabs(z)<2
ou mesmo-2<z<2
.Ruby, 233 caracteres
Uma abordagem de força bruta Ruby que funciona bem dentro das restrições de tempo em uma placa 6x6. A entrada deve ser fornecida no STDIN.
Exemplos:
fonte