Colchete à direita é um estilo de colchete de código no qual colchetes e ponto e vírgula estão todos alinhados a um único ponto no lado direito de um arquivo.
Geralmente, isso é considerado uma má prática, por várias razões.
O desafio
Pegue uma sequência de várias linhas através de qualquer método e converta o estilo da chave para Chave à direita.
Para esse desafio, você só precisa trabalhar com código Java; no entanto, teoricamente, ele deve funcionar com qualquer código que use chaves e ponto e vírgula.
Você deve pegar todos os {};
caracteres em uma linha, com qualquer quantidade de espaço em branco entre eles. POR EXEMPLO. }}
, ; }
}\n\t\t}
E alinhá-los no lado direito do arquivo através do uso de espaço em branco.
por exemplo:
a {
b;
{c
Deve se tornar
a {
b ;{
c
Ou, de maneira mais abstrata, empurre todo e qualquer espaço em branco da esquerda de todos os {};
caracteres para a direita.
O recuo das linhas deve ser preservado. As linhas que contêm apenas espaço em branco após o movimento dos {};
caracteres podem opcionalmente ser removidas.
Por exemplo:
a{
b{
c;
}
}
d;
Pode tornar-se
a {
b {
c;}}
d ;
ou
a {
b {
c;}}
d ;
Empurrado para a direita refere-se a todos os {};
caracteres sendo alinhados a um ponto não menor que a linha mais longa. Qualquer quantidade de espaço depois disso é aceitável.
Portanto, todos os itens abaixo são aceitáveis:
a {
bc;
a {
bc ;
a {
bc ;
etc ...
Linhas em qualquer código podem conter {};
caracteres entre outros caracteres que não sejam espaços em branco, o tratamento deste caso não é necessário, embora se você quiser, deixe-os no lugar. As linhas também podem não conter {};
caracteres, e isso deve ser tratado corretamente. Como é mostrado abaixo.
a {
b ;
c
d }
Como não queremos que a Revisão de código veja as coisas horríveis que estamos fazendo, você precisa tornar seu código o menor possível.
Exemplos / casos de teste
Java genérico
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
torna-se...
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!") ;}}
A própria imagem
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;
}
}
torna-se...
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 não tão perfeitamente genérico
Para contraste
def Main():
print("Hello, World!");
Main();
torna-se...
def Main():
print("Hello, World!") ;
Main() ;
Notas
- Aplicam-se brechas padrão
- IO padrão se aplica
- Isso é código-golfe , e o programa mais curto em bytes vence!
- Não sou responsável por danos relacionados à programação no estilo Right Hand Brace
- Diverta-se!
Editar notas
Eu reformulei os detalhes do desafio. Espero não ter quebrado a visão de ninguém sobre as regras, garanto que não foi intencional. Essa deve ser uma especificação muito mais clara e menos conflitante.
;{}
caracteres sejam reunidos se estiverem em linhas separadas (isso é claro apenas no exemplo, não nas regras, e, de fato, se uma linha consiste em \t}
preservar o recuo, isso significa não avançar }
até o fim da linha anterior)
int a=0;System.out.println(a);