La parentesi graffa destra è uno stile di parentesi graffe di codice in cui parentesi graffe e punti e virgola sono tutti allineati a un singolo punto sul lato destro di un file.
In generale, questa è considerata una cattiva pratica, per diversi motivi.
La sfida
Prendi una stringa multilinea con qualsiasi metodo e converti il suo stile di controvento in Rinforzo a destra.
Per questa sfida, è necessario che funzioni solo sul codice Java, tuttavia, teoricamente dovrebbe funzionare su qualsiasi codice che utilizza parentesi graffe e punti e virgola.
Devi prendere tutti i {};
personaggi di fila, con una quantità di spazio tra di loro. PER ESEMPIO. }}
, ; }
}\n\t\t}
e allineali sul lato destro del file mediante l'uso di spazi bianchi.
per esempio:
a {
b;
{c
dovrebbe diventare
a {
b ;{
c
O, più astrattamente, spingi tutti gli spazi bianchi dalla sinistra di tutti i {};
personaggi, a destra.
Il rientro delle righe dovrebbe essere altrimenti preservato. Le linee che contengono spazi bianchi solo dopo il movimento dei {};
personaggi possono essere rimosse facoltativamente.
Per esempio:
a{
b{
c;
}
}
d;
Può diventare neanche
a {
b {
c;}}
d ;
o
a {
b {
c;}}
d ;
Spinto a destra si riferisce a tutti i {};
caratteri allineati a un punto non più corto della linea più lunga. Qualsiasi quantità di spazio dopo è accettabile.
Quindi tutto il seguito è accettabile:
a {
bc;
a {
bc ;
a {
bc ;
eccetera...
Le righe in qualsiasi codice possono contenere {};
caratteri tra altri caratteri non di spazi bianchi, la gestione di questo caso non è necessaria, anche se se sei propenso, dovresti lasciarli in posizione. Le righe potrebbero inoltre non contenere alcun {};
carattere e questo dovrebbe essere gestito correttamente. Come mostrato di seguito.
a {
b ;
c
d }
Poiché non vogliamo che Code Review veda le cose orribili che stiamo facendo, devi rendere il tuo codice il più piccolo possibile.
Esempi / Testcase
Java generico
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
diventa ...
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!") ;}}
L'immagine stessa
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;
}
}
diventa ...
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 non così perfettamente generico
Per contrasto
def Main():
print("Hello, World!");
Main();
diventa ...
def Main():
print("Hello, World!") ;
Main() ;
Gli appunti
- Si applicano scappatoie standard
- Si applica l' IO standard
- Questo è code-golf , quindi vince il programma più breve in byte!
- Non sono responsabile per i danni relativi alla programmazione nello stile del braccio destro
- Divertiti!
Modifica note
Ho riformulato i dettagli della sfida, spero di non aver infranto la visione delle regole da parte di nessuno, ti assicuro che non era intenzionale. Questa dovrebbe essere una specifica molto più chiara e meno auto-conflittuale.
;{}
personaggi siano raccolti se sono su righe separate (è chiaro solo dall'esempio, non dalle regole, e infatti se una riga consiste nel \t}
preservare il rientro significherebbe non spostarsi }
fino alla fine della riga precedente)
int a=0;System.out.println(a);