(com desculpas a Jim West pelo título e inspirado aleatoriamente na representação textual da Cisco de seu logotipo: .:|:.:|:.
pelo conceito)
Dado um número inteiro de entrada 1 <= n <= 255
, produza uma representação de arte ASCII de uma ponte suspensa de distância n
seguindo as regras de construção abaixo:
- O início e o fim da ponte (não contados à
n
distância) são sempre-|
e|-
, portanto, a ponte pode se conectar adequadamente às rodovias próximas a ela. - A ponte não se estende para baixo (o nível da estrada, composto pela
-
linha, é a linha inferior). - Pode haver no máximo duas peças de estrada
--
seguidas; qualquer extensão maior requer cabos de suspensão para suporte. - Os cabos de suspensão se
\
estendem da estrada até as torres|
em linhas retas. - As torres
|
devem ser altas o suficiente para suportar os cabos de suspensão adjacentes, mas não mais altas. - A ponte deve ser equilibrada da esquerda para a direita sobre o ponto do meio, favorecendo as seções centrais sempre que possível.
- Todas as opções acima devem resultar em uma minimização dos cabos, mas, para ficar claro, o número de cabos de suspensão deve ser minimizado enquanto ainda segue as regras acima.
Para fornecer uma representação visual, eis as saídas esperadas para n = 1, 2, 3, ... 15
-
1
-|-|-
2
-|--|-
3
-|\-/|-
4
-|\--/|-
5
|\ /|
-|-\-/-|-
6
|\ /|
-|-\--/-|-
7
|\ /|
| \ / |
-|--\-/--|-
8
|\ /|
| \ / |
-|--\--/--|-
9
|\ /|
| \ / |
| \ / |
-|\--\-/--/|-
10
|\ /|
| \ / |
| \ / |
-|\--\--/--/|-
11
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\-/--/-|-
12
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\--/--/-|-
13
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\-/--/--|-
14
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\--/--/--|-
15
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
| \ \ / / |
-|\--\--\-/--/--/|-
Entrada
Um número inteiro positivo único em qualquer formato conveniente , n > 9
.
Resultado
A ponte de arte ASCII seguindo a técnica de construção acima.
Regras
- Novas linhas à esquerda ou à direita ou espaços em branco são opcionais, desde que os próprios caracteres da ponte estejam alinhados corretamente.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que as pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Respostas:
05AB1E ,
795958 bytesExperimente online! .
Explicação:
Encontrada a melhor solução, a chave era retornar as seguintes matrizes para cada número da seguinte maneira:
fonte
Python 2, 173 bytes
Espelhe o valor de be adicione o
f=lambda b:'-|'+b[::-1].replace('/','\\')+-~(~i%2)*'-'+b+'|-'
padrão base "-" central (metade direita da linha inferior)
b=(i*'/--')[:~-i/2]
Loop para camadas não inferiores
for x in range(1,~-i/2):
Obtenha os primeiros x caracteres do padrão base e complete com "-"
(len(b)-x)*'-'+b[:x]
Substitua tudo - por espaços para imprimir todas as camadas (exceto a parte inferior)
print f().replace('-',' ')
Imprimir a camada inferior
print f(b)
fonte
Befunge, 150 bytes
Experimente online!
Também forneci uma versão sem código do código que demonstra melhor a arquitetura usada na construção da ponte.
Experimente online!
As torres lidam com a entrada e a inicialização dos parâmetros. O baralho é formado por dois loops, calculando as partes da ponte que precisam ser produzidas para cada coordenada x, y. E a fundação mantém a tabela de caracteres para essas partes da ponte, bem como algum outro código completamente não relacionado.
Explicação detalhada
Começamos calculando a largura e a altura da área de saída que precisará ser iterada para renderizar a ponte.
Observe que o intervalo y não é baseado em zero. O valor inicial é
5 - (h<5)
e é iterado até h (o valor atual é armazenado em 2,0). O valor x é iterado de w até 0 e é armazenado na pilha.O loop interno é apenas uma série de condições booleanas que determinam se uma determinada coordenada x , y corresponde a qualquer um dos locais que requerem um caractere não espacial. Esses cálculos são baseados em duas compensações deslizantes que seguem o caminho dos cabos de suspensão.
As várias condições são então determinadas da seguinte forma:
Para converter essas condições no deslocamento de caractere correto, basta multiplicar cada um deles por um deslocamento apropriado e somar o resultado. Este cálculo é realizado conforme as condições são avaliadas. Então, é algo parecido com isto:
Observe que o bridge_deck valor é mesclado com base em se alguma das outras condições foi atendida, pois um personagem de suspensão ou torre terá precedência sobre o baralho.
O resultado final é um deslocamento para a tabela de caracteres na última linha do campo de jogo. Nós simplesmente produzimos esse caractere e repetimos o loop.
fonte
Lote, 241 bytes
Nota: Trailing space on line 5. Começa construindo uma fileira de espaços e adicionando cabos conforme necessário, repetindo para construir torres na altura desejada, terminando substituindo os espaços restantes pela estrada.
fonte
WinDbg, 312 bytes
A entrada é feita configurando o pseudo-registro
$t0
.Eu sinto que deveria haver uma maneira de combinar os dois
for
loops em um ... talvez algumas outras oportunidades de golfe também ...Esse funciona preenchendo toda a área com estrada, substituindo toda a última linha por espaço e, finalmente, construindo as colunas e os cabos.
Saída de amostra de 1-15:
fonte
Java 8,
423, 412 bytes11 bytes economizados graças ao Kritixi Lithos
golfed:
ungolfed:
fonte
int i,j,k,t=n/2+n%2,u=t-2,q=0
e, em vez de ter,char v="-";
você pode usarchar v=45;
e alterar osabc%xyz==0
s paraabc%xyz<1
(não a testaram)