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.Respostas:
JavaScript (ES6), 228 bytes
(n,x,y,[[dir,len],[dir,len],...])
Produz uma string com
0
para um limite,1
para um rastreio e3
para a posição final.Experimente online!
Quão?
A inicialização e o desenho em uma 'tela' (ou seja, uma matriz de caracteres) é um pouco tedioso e demorado em JavaScript.
Esse código está usando uma estratégia diferente: em vez de armazenar a saída em uma matriz 2D, ele cria uma cadeia de caracteres por caractere, da esquerda para a direita e de cima para baixo. Em cada iteração:
0
se estamos acima de um limite.1
ou,3
se houver, ou um espaço de outra forma.Em suma, essa pode não ser a abordagem mais curta, mas achei que valia a pena tentar.
fonte
Java 10,
350343340336 bytesD
é um número inteiro 2D-matriz em que as instruções são números inteiros de 0-indexados:N=0, NE=1, E=2, SE=3, S=4, SW=5, W=6, NW=7
. Asx,y
coordenadas iniciais serão dois parâmetros separadoss
eS
. A saída é uma matriz de caracteres.Ele usa
#
como borda,*
como trilha eO
para a posição final (mas todos os três podem ter quaisquer caracteres ASCII no intervalo unicode[33,99]
para a mesma contagem de bytes, se desejar).Experimente online.
-4 bytes graças a @ceilingcat .
Definitivamente, você pode jogar golfe um pouco mais, simplificando os movimentos e em que direção estamos viajando um pouco mais.
Explicação:
y<2&i<2|y>=n&i>2&i<5?4-i:x<2&i>4|x>=n&i>0&i<4?8-i:y<2&i>6?5:y<n|i!=5?i:7
é uma versão em golfe disso abaixo usando4-i
e8-i
para a maioria das mudanças de direção:fonte
Carvão , 74 bytes
Experimente online! Link é a versão detalhada do código. Recebe a entrada no formato n, x, y, d em que d é uma matriz de matrizes de pares [distância, direção] em que a direção é uma codificação numérica de 0 = sul no sentido horário a 7 = sudeste. Explicação:
Introduza
n
e desenhe uma caixa cujo interior seja esse tamanho centrado na origem.Insira e pule para
x
ey
(mas neguey
porque o eixo y do carvão vegetal está aumentando para baixo).Faça um loop sobre as entradas em
d
.Extraia a direção inicial.
Repita para a distância desejada.
Salve a direção.
Faça um movimento experimental nessa direção.
Se isso der errado, gire a direção horizontalmente.
Se isso sair da parte superior ou inferior, gire a direção verticalmente.
Reduza a direção do módulo 8 (os comandos Pivot aceitam apenas valores de 0 a 7).
Desfazer a jogada experimental.
Fique na direção correta e imprima um traço e mova-o.
Volte para a direção padrão e imprima o objeto na posição atual.
fonte
JavaScript, 206 bytes
Aceita entrada como (n, x, y, [[dir, len], [dir, len], ...]) onde as direções são codificadas usando máscaras de bits:
Produz uma string com
Os diferentes valores para limites são usados para avaliar a próxima direção
Menos golfe
TESTE
fonte
C (gcc) ,
352323bytesJogou 29 bytes com o graças ao tetocat.
Experimente online!
O programa recebe entrada como argumentos de linha de comando (como
a.out 10 1 1 3 5 0 4 7 2
):E
Explicação
fonte