Introdução
É 2600 aC e as pessoas estão construindo pirâmides agora. Eles já fizeram a base da pirâmide, mas não sabem como continuar. Então, eles te pediram ajuda.
As regras para fazer uma pirâmide são bastante simples. Para a camada acima da camada anterior, basta seguir este guia passo a passo:
Corte as bordas da camada anterior.
Acima do
/
personagem, deve haver um\
personagem e vice-versa. Isso se aplica a todos os caracteres, exceto as arestas.O caractere mais à esquerda é sempre um
/
e o caractere mais à direita é sempre\
.
Vamos dar um exemplo de base para uma pirâmide:
//\/\/\\
Cortamos as bordas, deixando:
/\/\/\
Alteramos as barras para frente com barras para trás e vice-versa:
\/\/\/
O caractere mais à esquerda é sempre um /
e o caractere mais à direita é sempre um \
, então alteramos isso:
//\/\\
Colocamos essa camada na camada anterior:
//\/\\
//\/\/\\
Continuamos até o topo (que parece /\
). Então, eventualmente, obtemos:
/\
//\\
//\/\\
//\/\/\\
É isso que você precisa produzir.
A tarefa
Dada a base de uma pirâmide (com um comprimento maior que 3), produza a pirâmide completa. Você pode assumir com segurança que o caractere mais à esquerda é /
e o caractere mais à direita é a \
. Você também pode assumir que o comprimento da base é sempre uniforme . É permitido o uso de espaços à direita . O uso de espaços à esquerda também é permitido, desde que a pirâmide permaneça no lugar. A utilização de 1 à direita e 1 principais é permitido novas linhas.
Casos de teste
Input: /\\\
Output:
/\
/\\\
Input: //\\///\/\
Output:
/\
/\\\
/\///\
///\\\/\
//\\///\/\
Input: /////////////\
Output:
/\
/\\\
/////\
/\\\\\\\
/////////\
/\\\\\\\\\\\
/////////////\
Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Respostas:
Gelatina ,
28 26 2524 bytes-4 bytes graças a Dennis
Receita:
(sirva com limonada, essas pirâmides produzem trabalhadores com sede)
Crie sua própria pirâmide de barra no TryItOnline ou experimente todos os provadores sugeridos pelo OP
fonte
Retina ,
59565452 bytesExperimente online!
Saída de amostra
fonte
Pitão -
2726 bytesReduz pela operação fornecida no OP até repetir, como é o caso da linha em branco.
Conjunto de Teste .
fonte
Python 2, 78 bytes
Uma função recursiva que gera uma string. Cada camada da pirâmide é anexada à chamada recursiva com a camada acima dela. O prefixo
p
, que começa como um caractere de nova linha, ganha mais um espaço para formar o triângulo. A próxima camada é produzida trocando barras, cortando o primeiro e o último dois símbolos e colocando-a dentro de uma barra esquerda e direita.O Python 3 pode salvar um byte, fazendo
*99
otranslate
, como o requisito length-256 foi descartado.fonte
Haskell,
98949085 bytesExemplo de uso (nota: em barras invertidas Haskell dentro de cadeias literais devem ser escapadas
\\
):Abordagem simples de recursão:
#
faz o trabalho mapeandos
, que inverte o/
e\
, nos elementos internos. O parâmetro adicionalt
controla o nível de indução e é expandido por um espaço em cada chamada recursiva.Nota: a segunda chamada recursiva de
#
(->l#""
) vai diretamente para o caso base e é apenas uma maneira curta para adicionarl
,\
e uma nova linha, ou seja, ele substitui++l++"\\\n"
.Edit: @xnor salvou 5 bytes. Obrigado!
fonte
l++"\\\n"
parecel#""
.s
é[c|x<-s,c<-"ab",c/=x]
.++"\\\n"
, mas perdi essa. Obrigado!Python 3,
108 104 101 94 91 8988 bytes-7 bytes graças ao xnor (informando que não precisamos imprimir!)
-3 bytes graças ao xnor (tirando a declaração fora da declaração da função [d'oh])
-1 byte graças ao Dennis (substitua
f,b='/\\'
porb,f='\/'
)Teste em ideone . Nota: entrada ajustada para barra invertida dupla (mesmo as strings brutas não funcionarão se elas terminarem em um número ímpar de barras invertidas).
fonte
f,b='/\\'
fora da função.JavaScript (ES6),
9186 bytesA saída inclui um caractere principal de nova linha.
fonte
Ruby, 80 bytes
Ungolfed
Veja no ideone: http://ideone.com/HN0l0Y
fonte
f
no corpoLote, 137 bytes
Convenientemente meu uso
%~2
e%1
significa que evito ter que gastar bytessetlocal
. Explicação: Como o Lote não executará substituições na sequência vazia, precisamos configurar a próxima camada com as arestas "erradas", que serão corrigidas como parte das substituições da sequência.fonte
BASH (sed + sort)
7166 bytesentrada vem de stdin.
Exemplo:
Explicação:
-n
- suprima a impressão automática:l
- etl
ramifique de volta ao início se essa linha não for/\
p
- imprima esta linhay|\\/|1\\|;y|1|/|
- substitua\
por1
,/
por\
e depois1
por/
th;:h
- teste e pule no mesmo lugar, para que apenas a próxima substituição seja testada depoiss|\\.(.*)./| /\1\\|
- substitua as duas por fora cortadas de cada lado por{space}/
e\
sort
-space
vem antes,/
para colocar tudo na ordem certafonte
05AB1E,
423836 bytesExperimente online!
Explicação:
(Obrigado a Emigna por apontar isso
DD -> Ð
eDR -> Â
).fonte
Dg;GDðK¦¦¨¨„/\‡'\«R'/«ðN׫R}r»
salva 7 bytes.Go,
300276 bytesVersão longa:
fonte
import(."regexp";."os")
salva 2 bytesPerl,
5352 bytesInclui +1 para
-p
Corra com a entrada no STDIN, por exemplo
pyramid.pl
:fonte
05AB1E , 31 bytes
Explicação
Experimente online
fonte
> <> ,
186179175171 bytesoooh cara, essa é definitivamente a minha maior> <> resposta ainda.
Provavelmente ainda há algum golfe a ser feito (a área inferior é um grande desperdício)
Experimente online
fonte
Powershell, 142 bytes
fonte
C #, 250 bytes
Definitivamente posso jogar mais, mas meu cérebro ficou morto, então decidi deixá-lo como está no momento.
fonte