Eu tenho uma caixa de arte ASCII e preciso de um programa para abri-la.
Exemplos
Entrada:
-------
| |
|_____|
Saída:
/
/
/
/
/
/
/
| |
|_____|
Especificação
- A primeira linha consistirá apenas em
-
pelo menos três delas - As linhas do meio começarão com
|
espaços e terminarão com|
- Todas as linhas do meio serão iguais
- A última linha começará com
|
have_
e terminará com um|
- Todas as linhas terão o mesmo comprimento
Abrindo a caixa:
- Cada um
-
deve ser substituído por um/
em linhas e posições ascendentes.
Respostas:
CJam, 14 bytes
Experimente online!
Como funciona
fonte
JavaScript ES6, 57 bytes
Gera uma nova linha líder. Funciona pegando a linha de se
-
convertendo-os em um triângulo e substituindo os-
por espaços.Editar: salvou 5 bytes graças a @ edc65.
fonte
f=s=>s[R='replace'](/-+/,s=>s[R](/-/g,"\n$'/"))[R](/-/g,' ')
\n
e converto posteriormente).pb (NÃO COMPROMISSO), 125 bytes
A versão do pbi que você precisa para executar esta resposta é mais recente que a pergunta. Teria funcionado em versões mais antigas, exceto que eu nunca consegui permitir novas linhas de entrada. Ah bem.
Primeiro, isso determina a altura da caixa contando novas linhas na entrada. Uma vez que ele sabe disso, vai para o local Y do lado direito da caixa, desce até onde precisa estar e desenha as paredes e o chão, terminando com a tampa.
Confira esta animação divertida!
A pausa longa é o pincel passando por cima da entrada.
Ungolfed:
fonte
Pitão,
1614 bytesExplicação
Obrigado @FryAmTheEggman pelo novo algoritmo!
Experimente aqui.
fonte
Retina,
3420 bytesNa primeira etapa, todos
-
são substituídos pelos-
seguintes, a/
e uma nova linha. A nova linha no final da primeira linha original é excluída. Na segunda etapa, alteramos os novos-
para espaços que resultam na saída desejada.Experimente online aqui.
fonte
$%'
para capturar os-
s finais, economizando 5 bytes: Experimente on-line!MATL , 14
15bytesA entrada deve ter uma nova linha à direita.
Experimente online!
Explicação
fonte
Japt,
282625221817 bytesTeste online!
Gera uma nova linha principal, aceitável de acordo com o OP.
Como funciona
Isso seria 4 bytes mais curto se a dobradiça estiver na borda direita da caixa:
fonte
JavaScript (ES6), 66
TESTE
fonte
Java 8,
158118 bytesEste é apenas um começo, mas ei, FGITWFTW.
Espera a entrada como uma sequência, retorna a caixa.
fonte
Python 3, 1̶7̶0̶ 88 bytes
Aqui está o meu código (er) curto: EDIT: agora 82 bytes mais curto com o Edit Edit do @Dennis!
Python 3, 421 bytes
Como alternativa, apenas por diversão, você pode usar um que o abra lentamente:
Para usar qualquer um, você deve criar um arquivo de texto no mesmo diretório que contenha uma caixa ascii de qualquer largura ou profundidade chamada 'f.txt'. Ele abrirá essa caixa.
fonte
Bash,
858479 caracteres(Versão do Pure Bash, nenhum comando externo usado.)
Gera uma nova linha líder.
Exemplo de execução:
fonte
echo
é um comando externo -/usr/bin/echo
;)echo
executável existe para a conformidade do sistema operacional com os padrões. Hoje em dia esse é usado apenas se a portabilidade for importante, pois esse é o padrão , mas a maioria dos shells modernos tem seu próprio built-inecho
que é usado por padrão: pastebin.com/RnxhweBv @Levi, se você renomear / mover seu/usr/bin/echo
, meu código ainda funcionará.Perl,
615433 + 3 = 36 caracteresExecute-o como
Cada um
-
na primeira linha é substituído por uma sequência resultante da concatenação de algum número de,
/
e\n
.${chr 39}
é avaliada$'
como$POSTMATCH
variável especial do perl (in) famosa aka . Por fim, o chomp se livra do caractere de nova linha à direita que foi adicionado para o último-
caractere.Obrigado a @manatwork por salvar mais de 7 caracteres.
Bônus -
s^-^" "x$i++."\\\n"^ge&&chop
abre a caixa da borda direita em 29 + 3 caracteres :). Execute-o como:fonte
-
, então sim, eu posso jogar ainda mais. Obrigado!$.==1
→$.<2
,&&chop
→&chop
, remova o par extra de parênteses ao redorlength
, conte{chr 39}
como 1, pois não é necessário apenas pela versão da linha de comando devido à sintaxe do shell:$.<2&&s^-^" "x(length$')."/\n"^ge&chop
+ 2 caracteres para as opções da linha de comando = 40 de acordo com a minha contagem. pastebin.com/iDhUs9XX$.==1
ou$.<2
pode ser eliminado porque só primeira linha contém-
\n
.s^-^$'=~y/-/ /r."/\n"^ge&chomp
Pitão,
2623 bytesQue nojo. Definitivamente pode ser mais curto; ainda trabalhando nisso.
fonte
Python3, 76 bytes
/
precedidas por um número decrescente de espaços.stdin
linha reta parastdout
.EDIT: Acabei de notar que meu código é quase idêntico à edição de comentários de @Dennis do código Python3 mais curto do @ Monster, a única diferença é imprimir o restante
stdin
diretamente, em vez de armazená-lo em uma variável. Grandes mentes!fonte
Tela ,
64 bytesExperimente aqui!
Explicação:
fonte
Python 2, 100 bytes
Define uma função
o
que recebe uma string como entrada. (O programa completo não foi especificado na pergunta).fonte
PowerShell, 55 bytes
Pega a entrada
$args
como uma string,-split
s em novas linhas`n
( link de referência ) , armazena a primeira linha em$d
(como uma string) e a restante em$b
(como uma matriz de strings). Em seguida, fazemos um loop a partirlength
da primeira linha (menos 1)0
e cada iteração gera esse número de espaços mais a/
. Finalmente, produza$b
(o restante da sequência de entrada) que, por padrão, gera uma por linha.Exemplo de execução
fonte
JavaScript (Node.js) , 56 bytes
Experimente online!
Deve ser escrito como um comentário de @Neil 's resposta , mas eu não posso criar comentários ainda
fonte
05AB1E (herdado) , 9 bytes
Experimente online! (somente legado)
Como funciona
fonte
Carvão , 14 bytes
Experimente online (detalhado) ou online (puro) .
Explicação:
Divida a entrada por novas linhas, pegue o comprimento da primeira linha e imprima uma linha desse comprimento da parte superior direita para a esquerda inferior:
Mova uma vez para a direita:
Divida a entrada por novas linhas novamente e remova o primeiro item e imprima o que resta implicitamente:
(OBSERVAÇÃO: Colocar a entrada dividida por novas linhas em uma variável (uma vez que eu faço isso duas vezes acima) tem
1 byte a mais e14 bytes usando um método ligeiramente diferente (graças ao @Neil ):≔⮌⪪θ¶θ↙L⊟θM→⮌θ
Experimente on-line (detalhado) ou on-line (puro) ).fonte
JavaScript ES6, 106 bytes
Simples o suficiente: obter o comprimento da primeira linha, criar um triângulo com espaçamento à direita
/
e adicioná-lo ao original, fatiado e unido.Teste! (Somente ES6
:(
)Mostrar snippet de código
fonte
.repeat(n-i-1)
=>.repeat(n+~i)
Python 2.7,
120122 caracteresPrecisa de um arquivo
f
com a caixa original / fechada, a saída é a aberta. Um brinde a @Monster pela idéia ... tentará descobrir a entrada de várias linhas mais tarde e ver se é mais curta.Editar
/
tem um espaço à frente; +2 bytesfonte
Ruby, 59 caracteres
(Código de 57 caracteres + opções de linha de comando de 2 caracteres.)
Exemplo de execução:
fonte
Bash, 129 caracteres
Requer um arquivo chamado
a
com a caixa fechada, com saída para stdout.Pode ser possível reduzi-lo usando
sed
e usando stdin e tubulação.fonte
for i in $(seq `awk 'NR<2&&$0=length-1' a` -1 1);{ for j in `seq 1 $i`;{ printf \ ;};echo /;};echo /;tail -n2 a
PHP, 127 caracteres
Versão não destruída:
fonte
$argv
. Existem alguns truques menores que você pode aplicar:$l=strlen(strtok($s=$argv[1],"↵"));while($l)$s=preg_replace("/-/","↵".str_repeat(" ",--$l-$i)."/",$s,1);echo$s;
(Use uma nova linha literal no seu código onde é "↵": pastebin.com/36t2fb0P )Python, 125 bytes (110 sem caixa)
Se alguém tiver alguma idéia de como reduzi-lo, entre em contato!
fonte
Awk,
4746 caracteres(Código de 44 caracteres + opção de linha de comando de 2 caracteres.)
Exemplo de execução:
fonte
Gema,
514931 caracteresExemplo de execução:
fonte
K (ngn / k) , 18 bytes
Experimente online!
fonte
05AB1E (herdado) , 12 bytes
Experimente online!
fonte