Nawiasy klamrowe to styl nawiasowania kodu, w którym nawiasy klamrowe i średniki są wyrównane do jednego punktu po prawej stronie pliku.
Z wielu powodów uważa się to za złą praktykę.
Wyzwanie
Weź ciąg multilinii dowolną metodą i przekonwertuj jego styl nawiasów klamrowych na prawą nawias klamrowy.
W przypadku tego wyzwania potrzebujesz go tylko do pracy z kodem Java, jednak teoretycznie powinien on działać z każdym kodem, który używa nawiasów klamrowych i średników.
Musisz złapać wszystkie {};
postacie z rzędu, z dowolną spacją między nimi. NA PRZYKŁAD. }}
, ; }
}\n\t\t}
i wyrównaj je po prawej stronie pliku za pomocą białych znaków.
na przykład:
a {
b;
{c
powinno stać się
a {
b ;{
c
Lub, bardziej abstrakcyjnie, przesuń dowolną spację od lewej strony wszystkich {};
znaków w prawo.
Wcięcie linii powinno być w inny sposób zachowane. Linie zawierające tylko białe znaki po ruchu {};
znaków mogą być opcjonalnie usunięte.
Na przykład:
a{
b{
c;
}
}
d;
Może stać się albo
a {
b {
c;}}
d ;
lub
a {
b {
c;}}
d ;
Przesunięcie w prawo oznacza {};
wyrównanie wszystkich znaków do punktu nie krótszego niż najdłuższa linia. Każda ilość miejsca po tym jest akceptowalna.
Tak więc wszystkie poniższe elementy są dopuszczalne:
a {
bc;
a {
bc ;
a {
bc ;
itp...
Linie w dowolnym kodzie mogą zawierać {};
znaki między innymi znakami spacjami, obsługa tego przypadku nie jest konieczna, chociaż jeśli masz skłonność, powinieneś pozostawić je na miejscu. Linie mogą także w ogóle nie zawierać żadnych {};
znaków i należy z tym poprawnie postępować. Jak pokazano poniżej.
a {
b ;
c
d }
Ponieważ nie chcemy, aby Code Review widział straszne rzeczy, które robimy, musisz zminimalizować swój kod.
Przykłady / przypadki testowe
Ogólna Java
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
staje się...
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!") ;}}
Sam obraz
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;
}
}
staje się...
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 ;}}
Nie tak idealnie ogólny Python
Dla kontrastu
def Main():
print("Hello, World!");
Main();
staje się...
def Main():
print("Hello, World!") ;
Main() ;
Uwagi
- Standardowe Luki zastosowanie
- Obowiązuje standardowe IO
- To jest golf golfowy , więc wygrywa najkrótszy program w bajtach!
- Nie jestem odpowiedzialny za szkody związane z programowaniem w stylu prawej ręki
- Baw się dobrze!
Edytuj notatki
Przeredagowałem szczegóły wyzwania. Mam nadzieję, że nie złamałem niczyjego spojrzenia na zasady, zapewniam cię, że było to niezamierzone. To powinno być znacznie bardziej jasne i mniej sprzeczne ze specyfikacją.
;{}
wyjaśnić , że chcesz zebrać postacie, jeśli znajdują się w osobnych wierszach (wynika to tylko z przykładu, a nie z reguł, a w rzeczywistości, jeśli linia polega na \t}
zachowaniu wcięcia, oznacza to, że nie przesunie }
się do końca poprzedniej linii)
int a=0;System.out.println(a);