Die rechte Klammer ist eine Art von Code-Klammer, bei der geschweifte Klammern und Semikolons an einem einzelnen Punkt auf der rechten Seite einer Datei ausgerichtet sind.
Im Allgemeinen wird dies aus mehreren Gründen als schlechte Praxis angesehen.
Die Herausforderung
Führen Sie eine mehrzeilige Zeichenfolge durch eine beliebige Methode und konvertieren Sie den Klammerstil in die rechte Klammer.
Für diese Herausforderung benötigen Sie sie nur, um mit Java-Code zu arbeiten. Theoretisch sollte sie jedoch mit jedem Code funktionieren, der geschweifte Klammern und Semikolons verwendet.
Sie müssen alle {};
Zeichen hintereinander mit beliebigem Leerzeichen abrufen. Z.B. }}
, ; }
}\n\t\t}
und richten Sie sie mit Leerzeichen auf der rechten Seite der Datei aus.
beispielsweise:
a {
b;
{c
soll werden
a {
b ;{
c
Oder, abstrakter ausgedrückt, schieben Sie alle Leerzeichen von der linken Seite aller {};
Zeichen nach rechts.
Einrückungen von Linien sollten ansonsten erhalten bleiben. Zeilen, die nach dem Verschieben der {};
Zeichen nur Leerzeichen enthalten, können optional entfernt werden.
Beispielsweise:
a{
b{
c;
}
}
d;
Kann auch werden
a {
b {
c;}}
d ;
oder
a {
b {
c;}}
d ;
Nach rechts verschoben bezieht sich auf alle {};
Zeichen, die an einem Punkt ausgerichtet sind, der nicht kürzer als die längste Linie ist. Jede Menge Platz danach ist akzeptabel.
Das Folgende ist also akzeptabel:
a {
bc;
a {
bc ;
a {
bc ;
etc...
Zeilen in jedem Code können {};
Zeichen zwischen anderen Nicht-Leerzeichen enthalten. Die Behandlung dieses Falls ist nicht erforderlich. Wenn Sie jedoch geneigt sind, sollten Sie sie an Ort und Stelle belassen. Zeilen dürfen auch überhaupt keine {};
Zeichen enthalten , und dies sollte korrekt gehandhabt werden. Wie unten gezeigt.
a {
b ;
c
d }
Da wir nicht möchten, dass Code Review die schrecklichen Dinge sieht, die wir tun, müssen Sie Ihren Code so klein wie möglich machen.
Beispiele / Testfälle
Generisches Java
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
wird...
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!") ;}}
Das Bild selbst
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;
}
}
wird...
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 ;}}
Nicht so perfekt generisches Python
Für den Kontrast
def Main():
print("Hello, World!");
Main();
wird...
def Main():
print("Hello, World!") ;
Main() ;
Anmerkungen
- Es gelten Standard-Regelungslücken
- Standard IO gilt
- Das ist Code-Golf , also gewinnt das kürzeste Programm in Bytes!
- Ich hafte nicht für Schäden, die mit der Programmierung im Stil der rechten Zahnspange zusammenhängen
- Habe Spaß!
Notizen bearbeiten
Ich habe die Herausforderungsdetails umformuliert. Hoffentlich habe ich nicht gegen die Regeln verstoßen. Ich versichere Ihnen, dass es unbeabsichtigt war. Dies sollte eine deutlichere und weniger widersprüchliche Spezifikation sein.
;{}
Zeichen gesammelt, wenn sie in separaten Zeilen sind (es ist nur aus dem Beispiel klar, nicht die Regeln, und in der Tat , wenn eine Zeile besteht \t}
würde die Vertiefung Haltbarmachung nicht bewegt }
bis zum Ende der vorherigen Zeile)
int a=0;System.out.println(a);