Étant donné l'entrée d'une chaîne représentant une définition de fonction, sortez la chaîne avec des sauts de ligne et des espaces insérés de sorte que les arguments de la fonction soient séparés par des sauts de ligne et alignés.
La chaîne d'entrée suivra le modèle suivant:
Tout d'abord, il commencera par un préfixe, qui est toujours long d'au moins un caractère et ne contient aucun des caractères
,()
.Une parenthèse ouverte (
(
) marquera alors le début de la liste d'arguments.Une liste de zéro ou plusieurs arguments suivra ensuite. Celles-ci sont séparées par la chaîne
", "
(une virgule puis un espace). Aucun des arguments ne contiendra aucun des caractères,()
.Une parenthèse fermée (
)
) marquera la fin de la liste des arguments.Enfin, un suffixe peut être trouvé, qui est long de zéro ou plusieurs caractères et peut contenir les caractères
,()
.
La chaîne d'entrée consistera uniquement en ASCII imprimable (ce qui signifie qu'elle ne contiendra jamais de nouvelle ligne).
La sortie doit être:
Le préfixe, copié mot pour mot, et la parenthèse ouverte.
La liste d'arguments, cette fois séparée non pas par
", "
mais par une virgule, une nouvelle ligne et autant d'espaces que nécessaire pour aligner verticalement le premier caractère de chaque argument.Le paren proche et le suffixe (s'il existe) textuellement.
Puisqu'il s'agit de code-golf , le code le plus court en octets gagnera.
Cas de test (format: entrée sur une seule ligne suivie d'une sortie suivie d'un double retour à la ligne):
def foo(bar, baz, quux):
def foo(bar,
baz,
quux):
int main() {
int main() {
fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) {
fn f(a: i32,
b: f64,
c: String) -> (String, Vec<i32>) {
function g(h) {
function g(h) {
def abc(def, ghi, jkl, mno)
def abc(def,
ghi,
jkl,
mno)
x y z(x, y, z) x, y, z)
x y z(x,
y,
z) x, y, z)
a>>" "
est vraiment intelligent ...Japt, 23 octets
Testez-le en ligne!
Comment ça fonctionne
la source
Perl,
6252 + 2 = 54 octetsNécessite le
-p
drapeau:Comment ça fonctionne:
la source
Rétine, 31 octets
Notez les espaces à la fin des deux lignes.
Nous remplaçons chaque espace qui a le regex
^([^(])*\([^)]*,
devant lui. La chaîne de remplacement sera une nouvelle ligne et le nombre de captures avec([^(])*
plus un espace.Une explication plus cohérente vient plus tard.
Essayez-le en ligne ici.
la source
ES6,
6867 octetsCela fonctionne en extrayant la liste d'arguments de la chaîne d'origine et en remplaçant chaque séparateur d'arguments par une indentation calculée à partir de la position de la liste d'arguments dans la chaîne d'origine.
Edit: 1 octet enregistré grâce à @ETHproductions.
la source
.split`, `.join(...)
place.replace(...)
. Il s'avère que l'autre est un octet plus court:s=>s.replace(/\(.*?\)/,(s,n)=>s.replace(/, /g,`,\n `+` `.repeat(n)))
Pyth,
3530 octetsEssayez-le ici!
Explication:
la source
Groovy,
1378995 octetsGroovy n'est pas le "bon outil pour le travail" ™.Edit: Cela fonctionne très bien lorsque quelqu'un avec un cerveau l'utilise ...Tests:
Assez peu golfé:
la source
Rétine , 47 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
la source
JavaScript (ES6), 85
Tester
la source
"x y z(x
comme vous pouvez le voir,"
c'est pourquoi je pensais que c'était un espace de moins. D'où la suppressionGelée , 39 octets
Essayez-le en ligne!
la source