Eu tenho um pseudocódigo Java que usa espaço em branco em vez de chaves, e quero que você o converta.
I / O
Seu programa deve levar um arquivo de entrada junto com um número designando quantos espaços são usados para recuar um bloco. Aqui está um exemplo:
$ convert.lang input.p 4 // Converter usando 4 espaços como delimitador de bloco $ convert.lang input.p 2 // Converter usando 2 espaços como o delimitador de bloco
Em seguida, ele deve converter o resultado usando o delimitador de bloco especificado e enviar o resultado para stdout.
A carne do programa
Os blocos são abertos :
e cada linha dentro do bloco é recuada usando o delimitador de blocos, como o código Python.
while (verdadeiro): System.out.println ("Teste");
Cada um :
está substituído com um {
, e uma }
é anexado ao fim do bloco.
while (true) { System.out.println ("Teste"); }
Exemplos
Entrada:
Teste de classe pública: main public void estático (String [] args): System.out.println ("Java é detalhado ...");
Resultado:
$ convert Test.pseudojava 4 Teste de classe pública { public static void main (String [] args) { System.out.println ("Java é detalhado ..."); } }
Entrada:
a Principal(): printf ("Olá Mundo");
Resultado:
$ convert test.file 2 a Principal() { printf ("Olá Mundo"); }
Entrada:
def generic_op (the_stack, func): # Código genérico de manipulação de operações b = the_stack.pop () se isinstance (b, list): se b: Retorna top = b.pop (0) enquanto b: top = func (parte superior, b.pop (0)) the_stack.push (superior) outro: a = the_stack.pop () retornar func (a, b)
Resultado:
$ convert code.py 4 def generic_op (the_stack, func) { # Código genérico de manipulação de operações b = the_stack.pop () if isinstance (b, list) { se b { Retorna } top = b.pop (0) enquanto b { top = func (parte superior, b.pop (0)) } the_stack.push (superior) } outro { a = the_stack.pop () retornar func (a, b) } }
Pontuação
O código com a menor quantidade de bytes vence!
Respostas:
Perl, 41 bytes
Contando o shebang como dois, a entrada é retirada de stdin. Um argumento de linha de comando não precisa ser fornecido. Qualquer contexto de aninhamento válido pode ser determinado (e correspondido) sem conhecer o tamanho do recuo.
Divisão Regex
Uso da amostra
in1.dat
Resultado
in2.dat
Resultado
in3.dat
Resultado
fonte
Python 3,
299265 bytesBam bam pow.
Algoritmo usado:
fonte
Ruby, 70
Adiciona uma nova linha à direita. Não precisa do parâmetro de tamanho do bloco de recuo.
Execute isso com
-n0
(isso é realmente 68 + 2). Muito obrigado ao @primo por economizar mais de uma dúzia de bytes.fonte
-p0
também funciona para ruby (-0
lê todas as entradas de uma só vez,-p
armazena stdin$_
e as imprime automaticamente no final).x=$<.readlines*''
. Enquanto eu estou fazendo isso,sub!
também tem uma sobrecarga de dois parâmetros (em vez de um paramater + bloco) que aceita uma cadeia de substituição, de modo que você pode usar\1
,\2
etc. em vez de precisar concatenar tudo.