Descrição
A tarefa deste desafio é conceber um programa ou função que controla um determinado objeto em um espaço.
I / O
Seu programa receberá três entradas, que podem ser tomadas de qualquer maneira sensata :
n
será do tamanho do lado do avião. (então, para , seu avião será ). Você pode assumir n
que sempre será um número inteiro ímpar.
s
será a posição inicial do objeto, fornecida como um par de coordenadas .
D
será um vetor de pares ordenados. D
seguirá o formato , em que será sempre uma de 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'
, para o cardinal e instruções intercardeais primárias, e será um número inteiro para o número de 'carrapatos'.
Dadas essas entradas, seu programa deve gerar um rastreamento do objeto no plano.
Regras
A saída deve conter os limites do plano. Por exemplo:
- 21012 + + ┌─────┐ 2│ │ 1│ │ 0│ │ 1│ │ 2│ │ -└─────┘
seria um exemplo de um plano 5 × vazio . Os números acima e ao lado são apenas para referência e não precisam ser impressos.
Você pode usar qualquer caractere para os limites, desde que não seja espaço em branco (ou renderizado como espaço em branco). Os caracteres escolhidos devem delinear o plano completo, o que significa que não pode haver espaços entre eles.
Alguns aviões aceitáveis incluem: ┌──┐ .... ---- + - + │ │ . | | | | │ │ . | | | | └──┘; ....; ----; + - + Planos inaceitáveis incluem: .... .... ++++. . . . + +. . . + +. . ; ....; ....; + +; . .
O objeto a ser rastreado pode ser o caractere escolhido, desde que ocupe apenas 1 espaço no plano e seja diferente dos caracteres de limite.
O rastreamento do objeto rastreado também pode ser qualquer caractere que você escolher, desde que ocupe apenas 1 espaço no plano e seja diferente do objeto.
Para cada elemento em , o objeto deve mover espaços em direção a e deixar um rastro.
Se o objeto atingir um limite, ele será refletido. Se o objeto ainda tiver movimentos, ele continuará se movendo na direção em que foi refletido.
Para referência, essas instruções refletem uma à outra:
→ quando o limite superior ou inferior for atingido;
→ quando um limite lateral é atingido;
A saída final conterá os rastreios possíveis mais recentes, ou seja, se o objeto deixar um rastreio em um espaço onde já existe um rastreio, o caractere de rastreio mais recente substituirá o mais antigo.
Como de costume, as brechas padrão são proibidas por padrão .
Pontuação:
Este é um desafio do código-golfe .
Exemplos:
Trabalhando nisso:
0 0 ┌─────┐ │ │ │ │ 0│ ○ │ │ │ │ │ └─────┘
0 0 ┌─────┐ │ ○ │ │ \ │ 0│ \ │ │ │ │ │ └─────┘
0 0 ┌─────┐ │∧ │ │ | \ │ 0│ ○ \ │ │ │ │ │ └─────┘
0 0 ┌─────┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘
(Os 0s são apenas para referência e não precisam estar na saída final.)
0 0 ┌─────────┐ │ │ │ │ │ │ │ ∧ │ 0│ / | │ / ○ / | │ │⟨ / │ │ \ / │ │ ∨ │ └─────────┘
0 0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ └─────────┘
Casos de teste:
Resultado:
0 0 ┌─────┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘
Entrada: , ,
Resultado:
0 0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ └─────────┘
Entrada: , ,
Resultado:
0 0 ┌───┐ │ | │ 0│- ○ ┐│ │ | │ └───┘
Entrada: , ,
Resultado:
0 0 ┌───────────┐ │ ∧ │ │ / \ │ │┌ - / - \ \ │ | \ | / \ \ │ | \ | \ \ │ 0│ / ⟩│ │ | \ / / │ │ / ○ │ │ | / \ │ ∨ ∨ \ │ │ \ │ └───────────┘
'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'
como um número inteiro indexado a 0 (ou indexado a 1)? Assim [('NW',2),('S',2),('E',1)]
se torna, [[7,2],[4,2],[2,1]]
por exemplo.