Sua tarefa é criar um programa ou função que obtenha, como entrada, um número natural ( n
) entre 1 e 25 (inclusive) e imprima uma representação isométrica de um slide e escada com n
número de degraus.
Especificações de escada e corrediça
A escada está sempre orientada à esquerda e a corrediça à direita. Como a visualizamos pelo lado da escada, parte do slide fica oculta nos três níveis superiores. Os degraus são representados por quatro traços ( ----
) e os lados da escada e deslizam por barras ( /
e \
). A seguir, é apresentado um diagrama para representar os padrões de espaços necessários para um slide com cinco degraus.
Slide Blank space count
/----/\ 1234/----/\
/----/ \ 123/----/12\
/----/ \ 12/----/1234\
/----/ \ \ 1/----/1\1234\
/----/ \ \ /----/123\1234\
Exemplos
>>1
/----/\
>>3
/----/\
/----/ \
/----/ \
>>4
/----/\
/----/ \
/----/ \
/----/ \ \
>>10
/----/\
/----/ \
/----/ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
Isso é código-golfe, então a resposta com a menor contagem de bytes vence.
Nota: o espaço em branco à direita é aceitável na saída, desde que não exceda o comprimento da linha.
Respostas:
Retina ,
817252 bytesA contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
Explicação
O programa consiste em quatro etapas, todas substituições de expressões regulares (com alguns recursos específicos da Retina). Vou usar a entrada
5
como um exemplo para a explicação.Estágio 1
Isso transforma a entrada
n
emn
espaços seguidos pelos/\ \
quais se tornarão o topo da escada / slide:Por enquanto, apenas mostraremos o slide na íntegra e representamos a escada apenas pela mão esquerda
/
.Etapa 2
Infelizmente, os
n
espaços são um a mais do que precisamos, então removemos o primeiro caractere novamente. Agora temos:Etapa 3
Hora de expandir a estrutura completa. Saber onde está o topo é suficiente para construir a coisa toda, porque podemos simplesmente estendê-la uma linha de cada vez, afastando a escada e o escorregador por dois espaços.
O
+
instrui o Retina a repetir esse estágio em um loop até que a saída pare de mudar (nesse caso, porque o regex para de corresponder). Quanto ao regex em si, simplesmente combinamos o/
na última linha e tudo o que está depois dele e também o espaço na frente dele, o que significa que isso não pode mais corresponder depois/
que a primeira coluna for atingida.Aqui está o que substituímos por:
Portanto, a cada iteração, isso adiciona uma linha à string, até que terminemos com isso:
Etapa 4
Tudo o que resta é acertar a escada. Isso é realmente simples: basta combinar os
/
5 caracteres seguintes e inserir a representação correta da escada, substituindo assim o slide ou os espaços que já estão lá:fonte
V ,
38, 37, 36, 34, 33, 32, 31, 3029 bytesExperimente online!
Eu posso conversar com Osabie. Um byte menor que Osabie.Um byte mais curto!\o/
Amarrado com 2sable!Em outras notícias, esse é definitivamente o cabeçalho tachado mais longo que eu já fiz.
Explicação:
Isso será executado até que ocorra um erro que, graças ao comando "mover para a esquerda" ('h'), será 'arg1' vezes.
Agora só precisamos adicionar a perna interna
Versão não concorrente (28 bytes)
fonte
Pitão,
3935 bytesExplicação:
Teste aqui
fonte
2sable ,
40363230 bytesHmmm, V está chegando muito perto ...
Usa a codificação CP-1252 . Experimente uma versão compatível com 05AB1E! .
fonte
:P
PowerShell v2 +,
999082 bytesRecebe entrada
$n
, inicia um loop de1
para$n
com|%{...}
. A cada iteração, estamos construindo uma string. Começamos com o número apropriado de espaços" "*($n-$_)
e a escada"/----/"
.Para isso, adicionamos outra string que foi fatiada
[...]
e-join
edificada novamente. A segunda string é o slide, e assumimos que o slide inteiro esteja sempre visível. É o número de espaços antes do início do slide" "*($_+$i++)
, seguido pelo próprio slide"\ \"
. Isso é fatiado por um intervalo calculado como sendo a parte dos "espaços mais slide" que está parcialmente oculta pela escada.Exemplos
fonte
:D
\golfing
pasta deve ser muito organizada #._.
Python 2 -
797675 bytesAgradeço a Hubert Grzeskowiak por me "desqualificar", pois a impressão do meu programa realmente salvou 3 bytes! Agradecemos também a Eʀɪᴋ ᴛʜᴇ Gᴏʟғᴇʀ por economizar mais 1 byte!
fonte
def f(x):
porx=input()
e remova o recuo na segunda linha. Isso economiza 1 byte.Vim, 71 pressionamentos de tecla
É uma maneira tão estúpida de fazê-lo, mas é um pouco divertido. A entrada é fornecida como um arquivo de texto com uma única linha contendo um número inteiro. Provavelmente isso é bastante jogável, mas funcionará por enquanto ( editar: estilo alternado de caracteres de controle mediante solicitação ):
<c-v>
,<esc>
e<cr>
são todas as teclas individuais; ctrl + v, escape e retorno de carro (enter) respectivamente. Para uma versão simples de digerir com os literais corretos, aqui está o arquivoladder.keys
executadoxxd
:Para testá-lo (assumindo um nix com as ferramentas apropriadas), execute o procedimento acima, execute-o
xxd -r
e coloque-o no arquivoladder.keys
. Crie um arquivoladder.txt
com um número inteiro. Então faça:fonte
^V
como<c-v>
aqui.festança, 61
onde
^M
é um retorno de carro literalfonte
/
e `\` na quarta linha e menos 1 espaço entre as bordas dos slides.JavaScript (ES6), 79 bytes
Funciona ocupando uma série de
n
espaços, fazendo uma substituição exótica para obter o slide com um suporte e substituindo o suporte por uma escada.fonte
Ruby, 61 bytes
Ungolfed
Eu poderia salvar dois bytes usando
'%*s\ \^M%*s----/'
(onde^M
está um retorno de carro literal) para a string de formato, mas Ruby imprime o aviso "warning: encountered \r in middle of line, treated as a mere space
". ¯ \ _ (ツ) _ / ¯Solução anterior (64 bytes)
fonte
Lote, 194 bytes
Acabou sendo razoavelmente simples: recue o slide, remova os 7 primeiros caracteres, recue a escada, remova o espaço inicial. Este último pedaço envolve um pouco de truque!
fonte
Java, 116 bytes
Infelizmente, você não pode [facilmente] duplicar seqüências de caracteres em Java, então acabo abusando da função de formatação.
fonte
Scala, 95 bytes
fonte
Haskell, 81 bytes
fonte
do i<-[1..n];a(n-i)++"/----/"++drop 7(a(2*i)++"\\ \\\n")
salva dois bytes.eacal , não-competitivo, 386 bytes
Tornei oficialmente a linguagem mais detalhada possível.Fiz o comentário em tom de brincadeira e sarcasmo. Por favor acalme-se. Instruções sobre como executar no repositório github vinculado no cabeçalho.Ungolfed
fonte