La llave de la derecha es un estilo de horquillado de código en el que las llaves y los puntos y comas están todos alineados en un solo punto en el lado derecho de un archivo.
En general, esto se considera una mala práctica, por varias razones.
El reto
Tome una cadena multilínea a través de cualquier método y convierta su estilo de llave en Brace derecho.
Para este desafío, solo necesita que funcione en código Java, sin embargo, en teoría debería funcionar en cualquier código que use llaves y puntos y comas.
Debe tomar todos los {};
caracteres en una fila, con cualquier cantidad de espacio en blanco entre ellos. P.EJ. }}
, ; }
}\n\t\t}
y alinearlos en el lado derecho del archivo mediante el uso de espacios en blanco.
por ejemplo:
a {
b;
{c
debe convertirse
a {
b ;{
c
O, de manera más abstracta, empuje todos los espacios en blanco desde la izquierda de todos los {};
caracteres, hacia la derecha.
La sangría de las líneas debe conservarse de otra manera. Las líneas que solo contienen espacios en blanco después del movimiento de los {};
caracteres pueden eliminarse opcionalmente.
Por ejemplo:
a{
b{
c;
}
}
d;
Puede convertirse en cualquiera
a {
b {
c;}}
d ;
o
a {
b {
c;}}
d ;
Empujado a la derecha se refiere a todos los {};
caracteres que se alinean a un punto no más corto que la línea más larga. Cualquier cantidad de espacio después de eso es aceptable.
Entonces todo lo siguiente es aceptable:
a {
bc;
a {
bc ;
a {
bc ;
etc ...
Las líneas en cualquier código pueden contener {};
caracteres entre otros caracteres que no sean espacios en blanco, el manejo de este caso no es necesario, aunque si está inclinado, debe dejarlos en su lugar. Las líneas también pueden no contener ningún {};
carácter, y esto debe manejarse correctamente. Como se muestra a continuación.
a {
b ;
c
d }
Debido a que no queremos que Code Review vea las cosas horribles que estamos haciendo, debe hacer que su código sea lo más pequeño posible.
Ejemplos / Casos de prueba
Java genérico
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
se convierte en ...
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!") ;}}
La imagen en sí
public class Permuter{
private static void permute(int n, char[] a){
if (n == 0){
System.out.println(String.valueOf(a));
}else{
for (int i=0; i<= n; i++){
permute(n-1, a);
swap(a, n % 2 == 0 ? i : 0, n);
}
}
}
private static void swap(char[] a, int i, int j){
char saved = a[i];
a[i] = a[j];
a[j] = saved;
}
}
se convierte en ...
public class Permuter {
private static void permute(int n, char[] a) {
if (n == 0) {
System.out.println(String.valueOf(a)) ;}
else {
for (int i=0; i<= n; i++) {
permute(n-1, a) ;
swap(a, n % 2 == 0 ? i : 0, n) ;}}}
private static void swap(char[] a, int i, int j) {
char saved = a[i] ;
a[i] = a[j] ;
a[j] = saved ;}}
Python no tan perfectamente genérico
Por contraste
def Main():
print("Hello, World!");
Main();
se convierte en ...
def Main():
print("Hello, World!") ;
Main() ;
Notas
- Se aplican lagunas estándar
- Se aplica el estándar IO
- Este es el código de golf , por lo que gana el programa más corto en bytes.
- No soy responsable de los daños relacionados con la programación en el estilo de llave de mano derecha
- ¡Que te diviertas!
Editar notas
Reescribí los detalles del desafío. Espero no haber roto la visión de las reglas de nadie, les aseguro que no fue intencional. Esta debería ser una especificación mucho más clara y menos conflictiva.
;{}
caracteres se reúnan si están en líneas separadas (solo está claro en el ejemplo, no en las reglas, y de hecho si una línea consiste en \t}
preservar la sangría significaría no moverse }
hasta el final de la línea anterior)
int a=0;System.out.println(a);