Blackbeard era um pirata Inglês do início do 18 º século. Embora ele fosse conhecido por saquear e embarcar navios, ele comandava seus navios com a permissão de suas tripulações. Não há relatos de que ele tenha prejudicado ou assassinado seus cativos.
Este desafio é uma homenagem ao infame Barba Negra e inspirado no Dia Internacional como um Pirata (19 de setembro). É também o inverso desse desafio de Pyrrha .
O desafio
Crie um programa que use um mapa do tesouro como entrada (composto pelos caracteres listados abaixo) e dê saída às direções.
Entrada
Todas as entradas será composto de v
, >
, <
, ^
, espaço em branco, e um único X
.
Você pode assumir o seguinte:
o mapa nunca fará um loop ou se cruzará
a seta inicial sempre será o caractere mais baixo na coluna mais à esquerda
sempre haverá um tesouro (
X
)
Uma entrada de amostra é mostrada abaixo.
>>v >>>>>>v
^ v ^ v
^ v ^ v<<
^ v ^ v
^ >>>>^ >>X
^
>>^
Resultado
A saída deve ser uma ", "
sequência de direções delimitada. Abaixo está a saída correta do mapa acima.
E2, N6, E2, S4, E4, N4, E6, S2, W2, S2, E2
Uma única nova linha ou espaço à direita é permitida.
Exemplos
In:
>>>>>>>>>>>>>>>v
v
v
>>>>X
Out:
E15, S3, E4
In:
>>>>>>v
^ v
^ >>>>X
Out:
N2, E6, S2, E4
In:
X
^
^
^
Out:
N3
In:
>>>>>>v
^ v
^ v
v
>>>>>>X
Out:
N2, E6, S4, E6
In:
X
^
^
>^
Out:
E1, N3
In:
>X
Out:
E1
In:
v<<<<<
vX<<<^
>>>>^^
>>>>>^
Out:
E5, N3, W5, S2, E4, N1, W3
Conversa internacional feliz como um dia do pirata!
Respostas:
CJam, 78 bytes
Experimente online .
Explicação
A idéia principal aqui é encontrar a linha mais longa (chamaremos esse comprimento
T
), depois preencher todas as linhas com o mesmo comprimento e concatená-las (essa nova string éU
). Dessa forma, apenas um único contador é necessário para se mover no mapa. Adicionar / subtrair1
significa mover para a direita / esquerda na mesma linha, adicionar / subtrairT
significa mover para baixo / para cima uma linha.Agora é hora de configurar o loop.
O corpo do loop usa uma tabela de pesquisa e avaliação para escolher o que fazer. No início de cada iteração, o elemento da pilha superior é a posição atual. Abaixo dele, estão todas as instruções processadas do NSWE. No final da iteração, a nova direção é colocada embaixo da posição e uma cópia dela é usada como condição para o loop. Caracteres diferentes de zero são verdadeiros. Quando um X é encontrado, 0 é pressionado como a direção, encerrando o loop.
Agora os olhares pilha assim:
[directions 0 position]
. Vamos gerar a saída.fonte
CJam, 86 bytes
Experimente online
Explicação:
fonte
Javascript (ES6), 239 bytes
Explicação:
fonte
JavaScript (ES6), 189
Teste a execução do snippet abaixo em um navegador compatível com EcmaScript 6.
Menos golfe
fonte