O desafio
Seu programa ou função aceitará uma entrada de sequência única de STDIN ou um parâmetro de função. Você pode assumir que a entrada conterá apenas caracteres alfabéticos (a-zA-Z), espaços e pontos finais. A entrada não diferencia maiúsculas de minúsculas, portanto, você deve tratar 'a' exatamente da mesma forma que trataria 'A'.
Para cada caractere na sequência, você produzirá uma representação de um edifício conforme a seguinte especificação.
Cada edifício deve ter um telhado, designado por um sublinhado na linha superior, depois uma barra, espaço, barra invertida na segunda linha.
_
/ \
Você terá um número de andares, correspondendo ao número da letra (a = 1, b = 2, c = 3 etc.) representados por uma parede (|) em cada lado e um espaço no meio. O piso inferior (e somente o piso inferior) deve ter uma base, que é um sublinhado entre as paredes. Como isso...
|_|
Por exemplo, 'b' ficaria assim
_
/ \
| |
|_|
Agora, sabemos que prédios muito altos e estreitos não podem suportar e devem ficar mais largos na base; portanto, nenhum edifício pode ter mais de três andares sem suporte adicional. Portanto, a cada três níveis (não menos), você deve adicionar uma 'camada de ampliação'. A camada de alargamento consiste em uma barra e uma barra invertida diretamente acima das paredes da seção abaixo dela, e a seção abaixo deve ter dois espaços mais largos que a seção acima. A camada extra não conta para a altura do edifício.
Os edifícios não devem se sobrepor, mas não devem ter espaços desnecessários entre eles, e o chão é sempre plano, portanto todos os edifícios devem ter sua base no mesmo nível.
Por exemplo, 'abcdefga' ficará assim.
_
/ \
_ | |
_ / \ | |
_ / \ | | | |
/ \ | | | | / \
_ | | | | | | | |
_ / \ | | | | / \ | |
_ / \| | | | / \| | | | _
/ \| || |/ \| || |/ \/ \
|_||_||_||___||___||___||_____||_|
Os espaços na entrada da string devem ser representados por um espaço duplo.
Paradas completas na entrada de string devem ser representadas por entulhos como este.
/\/\
Outros exemplos
Input = Hello world.
Saída =
_
/ \
| |
| |
| |
/ \
| |
| | _
| | / \
/ \ | |
| | | |
_ | | _ | |
/ \ | | / \ / \
| | / \ | | | |
| | | | | | | |
_ _ | | | | | | | | _
/ \ / \ / \ | | / \ / \ / \
| | | | | | / \ | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
_ / \ / \ / \ | | / \ / \ / \
/ \ | | | | | | / \ | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | _ / \ / \ / \ | | / \ / \ / \
/ \ / \ | | | | | | / \ | | | | | | _
| | | | | | | | | | | | | | | | | | / \
| | | | | | | | | | | | | | | | | | | |
| | | | / \/ \/ \ | | / \/ \/ \ | |
/ \/ \| || || | / \| || || | | |
| || || || || | | || || || |/ \
|_____||___||_______||_______||_________| |_______________||_________||___________||_______||___|/\/\
Input = lorem ipsum
_
/ \
_ | |
/ \ | |
_ | | | |
/ \ | | / \
| | _ | | | |
| | / \ / \ | |
_ | | | | | | | |
/ \ / \ | | | | / \
| | | | _ | | | | | | _
| | | | / \ / \ / \ | | / \
_ | | | | | | | | | | | | | |
/ \ / \ / \ | | | | | | / \ | |
| | | | | | | | | | | | | | | |
| | | | | | / \ / \ / \ | | / \
| | | | | | | | _ | | | | | | | |
/ \ / \ / \ | | / \ | | | | / \ | |
| | | | | | | | | | | | | | | | | |
| | | | | | / \ | | / \ / \ | | / \
| | | | | | | | | | | | | | | | | |
/ \ / \ / \ _ | | / \ | | | | / \ | |
| | | | | | / \ | | | | | | | | | | | |
| | | | | | | | / \ | | / \ / \ | | / \
| | | | | | | | | | | | | | | | | | | |
/ \/ \/ \ | | | | / \ | | | | / \ | |
| || || |/ \ | | | | | | | | | | | |
| || || || |/ \ | |/ \/ \| |/ \
|_______||_________||___________||___||_________| |_____||___________||_____________||_____________||_________|
Input = a.a.a.x.x.x.a.a.a
_ _ _
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
_ _ _ | | | | | | _ _ _
/ \ / \ / \ | | | | | | / \ / \ / \
|_|/\/\|_|/\/\|_|/\/\|_______________|/\/\|_______________|/\/\|_______________|/\/\|_|/\/\|_|/\/\|_|
Regras
- Claro que isso é código de golfe, a menor pontuação em bytes ganha
- Aplicam-se regras de brecha padrão
- Qualquer número de linhas em branco adicionais antes ou depois da saída é permitido
- Você pode optar por gerar o resultado inteiro em uma sequência ou oferecer a saída como uma matriz em que cada elemento representa uma linha de saída ou enviar para STDOUT
Nota
Este é o meu primeiro post no PPCG, então, vá com calma comigo. Já passou pela caixa de areia. Quaisquer pontos negativos ou possíveis melhorias, por favor poste como comentário e farei o que puder
[a,z]
, [1.26]
partes do Mego mencionado. Tê-lo opcional é muitas vezes a melhor (a menos que seja uma parte fundamental do desafio (não é aqui).
[a,z]
e[A,Z]
to[1,26]
parece um requisito inútil. Seria muito melhor usar apenas uma lista de números inteiros como entrada (0
sendo a entrada para entulho). Além disso, postar seu desafio depois que ele estiver na Sandbox por apenas 21 horas , sem esperar para receber votos ou feedback de mais de um usuário, não conta como se tivesse "passado pela sandbox". É recomendável deixar os desafios no Sandbox por 48 a 72 horas, no mínimo, para dar às pessoas tempo suficiente para analisá-los.