Desafio
Você deu um mapa a um amigo que se parece com isso:
|
/
|
/
|
\
|
\
D
Um mapa simples que começa na parte superior e termina na parte inferior. Infelizmente, seu amigo não entende. Você pode decodificar o mapa para que ele possa lê-lo?
Entrada
A entrada é uma cadeia de caracteres que consistem em |
, /
, \
, D
, ^
, Y
, (espaço) , e novas linhas.
|
diz para ficar na mesma coluna.\
diz para mover para a coluna à direita e para baixo 1./
diz para mover para a coluna à esquerda e para baixo 1.D
marca o destino.^
(se presente) fala de uma divisão no caminho.Y
(se presente) fala de uma nova junção de caminhos. Trate como um|
.
A entrada será organizada de forma a criar um tipo de caminho:
|
|
\
|
^
/ \
/ |
D |
Sempre haverá um espaço entre dois caminhos, e todos os caminhos se reunirão novamente ou alcançarão a última linha da entrada. Haverá apenas uma divisão por mapa. Não há limite para o comprimento do mapa de entrada. Nunca haverá mais de dois caminhos.
Resultado
A saída deve ser uma sequência de instruções.
- " L " deve dizer ao seu amigo para mover L eft e dar um passo à frente.
- " R " deve dizer ao seu amigo para mover R ight e tomar um passo em frente.
- " F " deve dizer ao seu amigo para dar um passo à frente.
Para o mapa de exemplo de entrada, a saída seria a seguinte:
F F L F R R R
Observe que seu amigo está começando na parte superior do mapa e voltado para baixo no mapa. Dê as instruções da perspectiva dele. Para uma instância de "^", seu programa deve poder escolher o caminho que leva ao destino (D). Se os dois caminhos forem recombinados, seu programa deverá escolher o caminho mais reto (aquele com mais |
s) a seguir. Instruções devem ser separados por espaços, e deve terminar em D .
Exemplos
Entrada
|
|
\
\
^
/ |
| |
\ |
\ \
\ \
\ /
Y
D
Resultado
F F L L L F F F L L R F
Como o caminho mais à esquerda contém apenas 1 |
, usamos o caminho mais à direita que possui 3.
Entrada
\
|
/
|
\
|
/
D
Resultado
L F R F L F R
Entrada
/
\
/
\
^
\ \
D \
Resultado
R L R L R L
Outros detalhes
- Isso é código de golfe, então a pessoa com o código mais curto até a próxima quarta-feira, 19 de agosto, vence.
- Feedback construtivo bem-vindo e muito apreciado.
- Parcialmente inspirado em A Map to Hidden Treasure
- Sinta-se livre para alterar o título para algo mais criativo.
- Se você encontrar erros que eu cometi, corrija-os.
- E claro, divirta-se.
Obrigado!
Um pouco tarde, talvez, mas UndefinedFunction é o vencedor da codificação em JavaScript! Obrigado a todos que entraram. Nenhuma outra entrada será aceita.
L L
, o que eu acho que deveria serL L L
. O exemplo comY
ainda tem um1
no final e também parece ter outros erros. Li o mapa comoF F R R R F F F R R L F
se entendesse as regras corretamente.L
para o^
e doisL
para os dois/
? E por que você adicionou mais duasF
ao final doY
exemplo?Respostas:
Javascript (ES6),
261248252248212 bytesComo apenas uma divisão deve ser suportada:
No entanto, 240 bytes e podemos lidar com várias divisões:
Ambos os programas definem funções anônimas.
Para usar, dê um nome às funções adicionando
f=
antes do código.Depois, eles podem ser chamados com
Explicação
(desatualizado, mas ainda o mesmo conceito. Para a solução de divisão múltipla)
Notas
Todas as barras invertidas (
\
) na entrada são escapadas como\\
, para que o javascript possa reconhecê-las.Ambas as saídas contêm um espaço à direita.
fonte
PHP,
634631607396382381347338330337324 bytesMeu primeiro golfe, então seja gentil. Quaisquer dicas são imensamente apreciadas.
Breve explicação:
Eu tenho uma contagem que é 0 se a entrada tiver apenas um caminho. Quando o caminho se divide, a contagem é 1 para o caminho esquerdo e 2 para o caminho direito. Depois de definir os dois caminhos (ou apenas um), verifico qual caminho tem mais "F".
Versão Ungolfed:
Log:
economizou 36 bytes graças a Kamehameha.
Economizou muitos bytes alterando um pouco a lógica.
Economizou 42 bytes graças a axiac.
Substituído todos os if declaração por operadores ternários.
fonte
$a=$b='';
vez de -$a='';$b='';
Salva em torno de 3 bytes.$a=$a.'L ';
pode ser reduzida para$a.='L '
. Você parece ter feito isso em alguns lugares. Isso vai economizar cerca de 6 bytes :)foreach($e as$i)
); Eu testei isso e parece funcionar bem.as
noforeach
, os espaços entreecho
e o nome da variável podem ser removidos para que você tenhaecho$b
. Além disso, um par de testes de igualdade pode ser mais curto também,$c==0
poderia ser!$c
e se esse for o caso, você pode inicializar$c
a''
com$a
e$b
!PHP, 281 bytes
É o resultado de duas iterações de golfe. A versão ungolfed é:
É bastante golfado em si e surgiu como uma melhoria do seguinte programa de golfe (312 bytes):
É a versão golfada do original:
Exemplo de execução:
Ele também lida com vários garfos corretamente (é necessário ingressar antes da próxima bifurcação para ter no máximo duas ramificações a qualquer momento). Perguntei sobre vários garfos em um comentário, mas o código já estava pronto quando a resposta ("não necessária") chegou.
O código completo com o conjunto de testes e mais comentários pode ser encontrado no github .
fonte