Seu trabalho é escrever um programa que encontre o número ideal de movimentos necessários para ir do canto inferior esquerdo de um retângulo ao canto superior direito, diretamente oposto.
Seu programa aceitará entrada como um par ordenado (width, height)
. Essas serão as dimensões do retângulo com as quais você trabalhará. Seu programa criará uma arte ASCII da solução (use .
para quadrado vazio e #
parte da solução, X
para iniciar quadrado) e conte o número de movimentos necessários para alcançar o ponto final. Movimentos diagonais não são permitidos. Se houver várias soluções, escolha uma para saída.
O programa mais curto em bytes vence.
Exemplo
Entrada: (4, 5)
Resultado:
..##
..#.
.##.
.#..
X#..
Contagem de movimentos: 7
#
"a solução ideal" (que é qualquer solução que nunca se move para a esquerda ou para baixo) também?#
porque é ilógico ir para a esquerda ou para baixo.Respostas:
05AB1E ,
2724 bytesCódigo:
Explicação:
Experimente online! . Usa a codificação CP-1252 .
fonte
Retina ,
5453 bytesSepara a entrada por um avanço de linha e gera a grade da solução seguida pela contagem de movimentos.
Experimente online!
Explicação
Transforme ambos os números inteiros em muitos
.
s, ou seja, converta-os para unários.Isso cria uma grade de
.
s, combinando cada um.
na altura unária e capturando a representação unária da largura. AS
ativa modo de divisão que retorna as cordas capturados, eo|\D
e_
juntos garantir que tudo o resto é removido da corda.Isso transforma o último caractere de cada linha e a última linha inteira em
#
s.Isso usa várias opções para converter apenas o primeiro
#
da última linha emX
(precisamos garantir que apenas a última linha seja afetada devido às entradas de largura 1).m
ativa o modo de várias linhas, que faz^
corresponder o início das linhas.-1=
diz à Retina para fazer a substituição apenas na última partida. Por fim,:
desativa o modo silencioso padrão, de modo que a grade seja impressa em STDOUT como um resultado intermediário.Finalmente, contamos simplesmente o número
#
na string, que corresponde ao número de movimentos.fonte
Pyke, 26 bytes
Experimente aqui
Ou 34 bytes não competitivos, adicione nó de aplicação com um ast)
Experimente aqui!
Ou 30 bytes, se houver espaço permitido como preenchimento
fonte
Pitão,
322924 bytesExperimente online!
Entrada de amostra:
Saída de amostra:
Como funciona:
Tentativa anterior:
Experimente online!
Entrada de amostra:
Saída de amostra:
Como funciona:
fonte
AtMQ
. Isso atribui os dois valores aG
eH
.CJam,
3533 bytesRecebe entrada no formulário
width height
e gera a contagem de movimentação na primeira linha, seguida pela grade da solução.Teste aqui.
Isso também funciona para a mesma contagem de bytes:
fonte
Ruby, 48 bytes
Esta é uma função anônima que, de acordo com esta meta post é aceitável, a menos que a pergunta indique "programa completo". Normalmente, eu não seria pedante sobre isso, mas o problema é muito simples e fazer um programa seria um aumento significativo de% na pontuação.
Entrada são dois argumentos. O valor de retorno é uma matriz que contém a sequência de arte ASCII e o número do
#
caminho.No programa de teste
Resultado
É apenas uma sequência de h-1 linhas de w-1 pontos, seguidas por
#
ae newline. Coloquei#
no final para usar um único#\n
literal para ambos#
e nova linha (o código contém uma nova linha real, em vez de uma sequência de escape.) A linha final é entãoX
seguida por w-1#
's.Foi mais curto diminuir os valores de we durante a geração de arte ASCII, para que o cálculo final seja simples
w+h
.fonte
JavaScript (ES6), 60 bytes
Uso
fonte
MATL ,
282625 bytesEDIT (10 de junho de 2016): o link abaixo inclui uma modificação (
5L
substituída porIL
) para se adaptar às alterações no idiomaExperimente online!
Explicação
fonte
Scala, 118 bytes
fonte
Haskell, 64 bytes
Exemplo de uso:
Como funciona:
fonte
Java,
137132 bytesfonte
Lua, 81 bytes
Experimente online!
Golfe:
Ungolfed:
fonte
Python, 48.
Para usá-lo, adicione
f=
antes da linha acima e chame-a assim:Resultado:
fonte