Dada a seguinte entrada para o programa:
- Lista de caracteres de início do bloco
- Lista de caracteres de final de bloco
- Uma sequência para formatar
formate a string com os blocos delimitados pelos dois conjuntos de caracteres recuados.
A formatação é feita com dois espaços por nível e os parênteses são colocados como mostrado no exemplo abaixo. Você pode presumir que os conjuntos de caracteres de abertura e fechamento não sejam comuns.
Por exemplo, para {[(<
e }])>
como os conjuntos de caracteres de abertura e fechamento e a seguinte sequência:
abc{xyz{text[note{comment(t{ex}t)abc}]}}
a seguinte saída seria esperada:
abc
{
xyz
{
text
[
note
{
comment
(
t
{
ex
}
t
)
abc
}
]
}
}
Você não pode codificar a lista de caracteres entre parênteses. Porém, como a entrada é fornecida não é especificado; isso pode ser argumentos da linha de comando ou via entrada padrão, como você deseja.
code-golf
string
whitespace
balanced-string
Prashant Bhate
fonte
fonte
./program 'p' 'q' <<< '1p23p45q67q8'
ou ele precisa apenas de suporte{[(<
e}])>
?Respostas:
Ruby,
1061019695A entrada é fornecida via linha de comando.
fonte
~-j+=1
vez de(j+=1;j-1)
. Além disso, o uso de$.
qualquer lugar em vez dej
permite remover o arquivoj=0
, o que salva outro caractere.Perl -
1319694 caracteresParece que deveria haver espaço para eliminar expressões comuns, pelo menos, mas é uma abordagem rápida que lida com o exemplo, bem como a hipótese de Joey Adams sobre colchetes arbitrários.
De fato, havia muito espaço para melhorias:
... e ainda um pouco mais:
fonte
Mathematica (golfe sem código)
Teste
Como bônus, a função a seguir pode ser usada para formatar a expressão mathematica
EDIT (golfe não codificado) Atualizado com controle granular fino sobre a maneira como as novas linhas são renderizadas
Resultado
fonte
indent
. O seu objetivo é um código maximamente conciso ou legível? Existem várias maneiras de reduzir esse código, se esse é realmente o seu objetivo. Além disso: "Você não pode codificar a lista de caracteres" parênteses "." ainda não foi exatamente o que você fez aqui? Enfim, desculpe soar tão negativo; isso me parece uma resposta estranha ao seu próprio desafio.JavaScript,
255227205 caracteresEi, seu comprimento se encaixa perfeitamente em um byte! : DÉ uma função, passe os caracteres iniciais, finais e depois o texto.
fonte
Python - 162 caracteres
fonte
Python 2.7.X - 136 caracteres
Uso : $ ./foo.py '(' ')' '(ab (cd (ef) gh) ij)'
Resultado resultante:
fonte
print
declarações?C -
213209Eu odeio erros estúpidos ...>. <
Lê parens à esquerda do primeiro argumento da linha de comando, parêntes à direita do segundo argumento e entrada para recuar no stdin.
Muito impresso e comentado:
fonte
C (
159225 caracteres)Custou-me 66 caracteres extras apenas para corrigir o erro com as linhas vazias :( Francamente, preciso de uma nova abordagem, mas vou encerrar o dia por enquanto.
Uma abordagem bastante rápida e suja. Ele tem um problema de produzir linhas vazias entre parênteses de fechamento consecutivos, mas, caso contrário, ele faz o trabalho (ou pelo menos eu acho). Vou revisitá-lo para uma solução melhor e mais limpa, ainda esta semana.
char * b é o conjunto de parênteses de abertura, char * e é o conjunto de parênteses de fechamento e char * s é a sequência de entrada.
fonte
Perl - 69 bytes
TMTOWTDI simplifica o código
fonte
Scala (2,9), 211 caracteres
fonte
Perl -
8985 bytesUma versão da resposta de Hojung Youn que aceita os caracteres do bloco por meio de dois argumentos.
Chamado como:
fonte
Python3,
184182 caracteresExemplo:
fonte
_,p,q,t=sys.argv
Groovy, 125
Você pode salvar o script em um arquivo indent.groovy e experimentá-lo com:
groovy indent.groovy "abc {xyz {text [note {comment (t {ex} t) abc}]}}" "{[(" ") ]} "
fonte
Python - 407
Uma versão não destruída do programa:
Os argumentos para o programa são (em ordem): os parênteses de abertura, os parênteses de fechamento e o texto a ser recuado.
Exemplo ($ é prompt de linha de comando):
fonte
D (300)
precisa de uma sequência terminada nula para a verificação de limites (caso contrário,
if(*s)
precisa ser alterada paraif(s.length)
)fonte
Java
Non
codegolf version
! Supondo que tenhamos esta versão de split () que inclui delins,fonte
StringUtils
não faz parte do JDK padrão.C 284 Caracteres não em branco
Eu não sou fã de ofuscação, mas bem ...
Uso: ./program start_brackets end_brackets string_to_parse
fonte
php
(187)(153)A função pega string, abrindo delimitadores, terminando delimitadores como argumentos.
fonte
C, 256
Parâmetros:
Eu quebrei o código para evitar a barra de rolagem horizontal.
O programa completo tem 363 caracteres.
fonte
VB.net (? C)
O idioma não é adequado para codificar o golfe, então usei uma abordagem incomum. Usando um ouvinte de rastreamento para gerar saída para o console.
Usa argumentos da linha de comando para a entrada
fonte
Powershell, 146 bytes
Explicação Ungolfed
fonte
C, 181 caracteres
Praticamente a abordagem mais direta que se possa imaginar. Itere pela string (v [3]), se for uma chave esquerda (conforme definido em v [1]), aumente o nível de indentação, se for uma chave direita (como definido em v [2]), diminua o nível de indentação .
fonte
C,
114121Não é muito bom, mas uma solução .. uma linha vazia pode aparecer antes / depois, dependendo se a entrada começa ou termina entre parênteses.
Com a nova restrição, essa abordagem é quase inútil para o golfe.
fonte