Tengo un pseudocódigo de Java que usa espacios en blanco en lugar de llaves, y quiero que lo conviertas.
I / O
Su programa debe tomar un archivo de entrada junto con un número que designe cuántos espacios se usan para sangrar un bloque. Aquí hay un ejemplo:
$ convert.lang input.p 4 // Convertir usando 4 espacios como delimitador de bloque $ convert.lang input.p 2 // Convertir usando 2 espacios como delimitador de bloque
A continuación, debe convertir el resultado utilizando el delimitador de bloque especificado y generar el resultado en stdout.
La carne del programa.
Los bloques se abren :
y cada línea dentro del bloque se sangra usando el delimitador de bloque, como el código Python.
while (verdadero): System.out.println ("Prueba");
Cada uno :
se reemplaza con a {
, y a }
se agrega al final del bloque.
while (verdadero) { System.out.println ("Prueba"); }
Ejemplos
Entrada:
Prueba de clase pública: public static void main (String [] args): System.out.println ("Java es detallado ...");
Salida:
$ convert Test.pseudojava 4 Prueba de clase pública { public static void main (String [] args) { System.out.println ("Java es detallado ..."); } }
Entrada:
principal(): printf ("Hola mundo");
Salida:
$ convert test.file 2 principal() { printf ("Hola mundo"); }
Entrada:
def generic_op (the_stack, func): # Código de manejo de operaciones genérico b = the_stack.pop () if isinstance (b, list): si b: regreso top = b.pop (0) mientras b: top = func (top, b.pop (0)) the_stack.push (arriba) más: a = the_stack.pop () func de retorno (a, b)
Salida:
$ convert code.py 4 def generic_op (the_stack, func) { # Código de manejo de operaciones genérico b = the_stack.pop () if isinstance (b, list) { si b { regreso } top = b.pop (0) mientras que b { top = func (top, b.pop (0)) } the_stack.push (arriba) } más { a = the_stack.pop () func de retorno (a, b) } }
Puntuación
¡El código con la menor cantidad de bytes gana!
Respuestas:
Perl, 41 bytes
Contando el shebang como dos, la entrada se toma de stdin. No es necesario proporcionar un argumento de línea de comando. Cualquier contexto de anidamiento válido puede determinarse (y coincidir) sin conocer el tamaño de sangría.
Desglose de expresiones regulares
Uso de muestra
in1.dat
Salida
in2.dat
Salida
in3.dat
Salida
fuente
Python 3,
299265 bytesBoom bam pow.
Algoritmo utilizado:
fuente
Rubí, 70
Agrega una nueva línea final. No necesita el parámetro sangrar tamaño de bloque.
Ejecute esto con
-n0
(esto es realmente 68 + 2). Muchas gracias a @primo por guardar más de una docena de bytes.fuente
-p0
también funciona para ruby (-0
lee todas las entradas a la vez,-p
almacena stdin$_
y las imprime automáticamente al final).x=$<.readlines*''
. Mientras yo estoy haciendo eso,sub!
también tiene una sobrecarga de dos parámetros (en lugar de un parámetro de bloque +) que acepta una cadena de reemplazo, para que pueda utilizar\1
,\2
, etc., en lugar de tener que concatenar todo.