EDITAR
Parece que houve alguma confusão após meu erro de digitação no post original, que usava o minúsculo para definir o plano e depois o maiúsculo. Infelizmente, este bug não foi detectado na Sandbox. Como muitos membros escreveram respostas com ambos e como o erro de digitação foi minha culpa, permitirei maiúsculas ou minúsculas na definição do avião. Eu adicionei uma nova regra para isso.
fundo
Eu gosto de animações de arte ascii, como costumo chamá-las, então aqui está outra. Eu não acho que isso seja muito difícil de implementar, então esperamos obter respostas curtas e interessantes.
Para todos os membros da comunidade
Se você melhorar sua resposta, modifique sua contagem de bytes como
contagem de bytes antigos contagem de bytes novos
para que possamos ver seu progresso. Obrigado!
Desafio
Aqui está um avião ascii
--O--
Aqui está uma pista ascii
____| |____
O avião começa em 5 novas linhas acima da pista. Para evitar conflitos entre os sistemas métrico e imperial e fazer deste um desafio verdadeiramente internacional, não mencionarei metros ou pés. Exemplo:
--O--
____| |____
O avião deve pousar exatamente no meio da pista, como mostrado abaixo:
____|--O--|____
Entrada
A posição horizontal inicial do plano é definida por uma entrada inteira que é usada para referenciar a ponta da asa esquerda, ou seja, está entre 0 e 10 inclusive.
Saída
Cada estágio do voo dos aviões deve ser mostrado. Exemplo abaixo (input = 10):
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
____|--O--|____
Para simplificar, estamos ignorando as leis da perspectiva. A pista permanece do mesmo tamanho à medida que você se aproxima.
Regras
- Atualizar O meio do plano pode ser maiúsculo ou minúsculo, mas o que for escolhido deve ser consistente em todo o código. Se o seu idioma não suportar os caracteres acima, sinta-se à vontade para usar caracteres alternativos ASCII.
- O plano desce 1 linha por quadro.
- O avião só pode mover 1 espaço para a esquerda ou direita cada vez que desce uma linha. Não precisa se mover em cada linha de descida. Desde que termine na pista, você decide quando se move para a direita ou para a esquerda. Você é o piloto!
- Não é necessário tratamento de erros. Você pode assumir que a entrada sempre será um número inteiro válido de 0 a 10, inclusive.
- A saída deve consistir apenas dos caracteres mostrados acima (se o seu idioma não os suportar, consulte a primeira regra editada) e deve ser do mesmo tamanho, ou seja, deve iniciar 6 linhas de altura por 15 caracteres de largura. A altura pode diminuir à medida que avança, como no exemplo acima.
- Programa ou função é bom, mas deve produzir uma saída como mostrado acima.
- Espaços iniciais / finais / novas linhas são ótimos para mim.
- Sinta-se à vontade para limpar a tela entre os quadros de saída, se desejar. Isso não é um requisito.
- Falhas padrão proibidas como de costume (embora eu não ache que haja muitas que ajudariam nesse tipo de desafio).
- Esse é o código do código, portanto a resposta mais curta é obviamente a vencedora e provavelmente obterá a maioria dos votos, mas pode não ser necessariamente aceita como a melhor resposta se alguma solução realmente interessante surgir em algum idioma inesperado, mesmo que seja mais longo. Sinta-se livre para publicar qualquer coisa que atenda às regras, desde que funcione.
Implementação de referência ungolfed em Python 2 disponível em Experimente online! para que você possa ver como ele procura diferentes valores de entrada.
Respostas:
TI-BASIC, 61 bytes
fonte
TI-BASIC, 62 bytes
Note que o TI-BASIC não suporta _ ou | e, portanto, substituí por um capital I e -. Isso não deve afetar a contagem de bytes.
fonte
Python 2, 107 bytes
Experimente online
Simplesmente codifica a última linha do avião de pouso. Provavelmente, você pode jogar golfe reutilizando peças de antes ou sendo integrado ao loop.
fonte
Perl, 94 bytes
93 bytes de código +
-p
sinalizador.Experimente online!
fonte
}{
(e da$"
bagunça com o destaque da sintaxe).JavaScript (ES6), 108 bytes
Teste-o
Mostrar snippet de código
Uso
Basta ligar
f
com o índice do avião.Saída
fonte
Scala,
224181bytesEdição : Eu não tinha idéia que você poderia fazer
"string"*n
para repeti-lo n vezes! Scala continua me surpreendendo. Perder o emif(t>0)
vez deif(t==0)
foi um erro de novato. Obrigado pelas dicas, Suma !Observações originais:
Eu achei que uma solução recursiva seria divertida de tentar. Sou relativamente novo no Scala, por isso tenho certeza de que isso está longe de ser o ideal.
fonte
:Unit=
. Omitir o sinal de igual definirá o tipo de retorno como Unidade.o
na primeira linha? E comoi
sempre é> = 0, você pode mudari!=0&&i==t
parai>0&i==t
(terceira linha).Lote, 230 bytes
x
é o número de espaços a serem removidos do início da strings
, portanto subtraio o parâmetro de 10. A última linha é a que o Lote mais próximo tiverx-=sgn(x-5)
.fonte
sed, 181 bytes + 2 para
-nr
sinalizadoresUngolfed
Uso:
$ echo 2 | sed -nrf flightsim.sed
fonte
Retina ,
8683 bytesExperimente online!
Provavelmente existe algum tipo de compactação que eu poderia ter usado na pista e o espaço vazio sobre ela, mas qualquer coisa que eu tentei saiu mais cara que o texto simples (no Retina ¶ é uma nova linha, é possível ver o estado inicial em texto simples no segunda linha).
fonte
Scala ,
177, 163, 159137 bytesCom base em outra resposta , com reduções significativas.
fonte
Perl 6 ,
979081 bytesAo contrário do que parece, ele gera a * versão em minúscula do avião (
--o--
), conforme permitido pela descrição da tarefa atualizada.Experimente online!
Como funciona
Operadores de string bit a bit FTW!
Funciona porque os operadores de cadeia de bits usam os valores de ponto de código dos caracteres em uma determinada posição em duas cadeias, para calcular um novo caractere nessa posição na cadeia de saída.
Nesse caso:
Para um
O
plano em maiúsculas , poderíamos ter usado~^
(string bit a bit XOR), com uma máscara de plano de\r\ro\r\r
(+4 bytes para barras invertidas):A fórmula para o deslocamento do avião,,
h + v*(17 - h/5)
foi simplificada de:fonte
Python 2 , 160 bytes
Experimente online!
Aqui está a implementação de referência que reduziu de 384 para 160 o 160. Acho que ainda há um caminho a percorrer. Apenas postado por diversão e para incentivar uma melhor resposta em Python.
fonte
while-~x
?i
comoi+=(i<5)-(i>5)
Befunge-93,
136130 bytesExperimente online!
Explicação
fonte
Ruby, 94 bytes
Imprime a posição do avião seguida por novas linhas e depois pelo aeroporto. Em seguida, move o plano em 1, -1 ou 0, dependendo da sua posição em relação a 5.
Depois de repetir as 5 etapas acima, ele imprime o avião no aeroporto.
fonte
8o ,
177172 bytesA palavra
f
espera um número inteiro entre 0 e 10.Uso
Explicação
fonte
Mathematica, 111 bytes
Função anônima. Pega um número como entrada e retorna uma string como saída. Provavelmente poderia ser jogado ainda mais.
fonte
QBIC ,
939184 bytesDescartou alguns bytes substituindo a declaração de X $; otimizou o loop FOR que imprime a distância acima do solo. A explicação abaixo é para a versão antiga, mas basicamente funciona da mesma maneira.
Para testes (e estética), eu tinha uma versão ligeiramente diferente, com 103 bytes:
Estes são funcionalmente idênticos. O segundo acrescenta que a tela fica limpa entre os quadros e que para por 0,5 segundos entre os quadros.
Saída de amostra
Observe que eu adicionei duas novas linhas entre os quadros. O código mais jogado acima não adiciona linhas vazias entre os quadros; o mais frio limpa a tela.
Explicação
Como sinto que isso toca em muitas coisas de que realmente gosto no QBIC e fornece uma boa visão de como algumas de suas funções funcionam sob o capô, fiquei um pouco exagerado na explicação. Observe que o QBIC é, em sua essência, um intérprete QBasic para o Codegolf. O código QBIC entra - o código QBasic sai (e é executado posteriormente).
fonte
SmileBASIC,
109105 bytesfonte
PHP 7, 139 bytes
ainda muito longo
recebe entrada do argumento da linha de comando; corra com
-r
.demolir
fonte