Compte tenu de la contribution suivante au programme:
- Liste des caractères de début de bloc
- Liste des caractères de fin de bloc
- Une chaîne à formater
formatez la chaîne avec les blocs délimités par les deux jeux de caractères en retrait.
Le formatage se fait avec deux espaces par niveau et les parenthèses sont placées comme indiqué dans l'exemple ci-dessous. Vous pouvez supposer que les ensembles de caractères d'ouverture et de fermeture sont disjoints.
Par exemple pour {[(<
et }])>
comme les jeux de caractères d'ouverture et de fermeture et la chaîne suivante:
abc{xyz{text[note{comment(t{ex}t)abc}]}}
la sortie suivante serait attendue:
abc
{
xyz
{
text
[
note
{
comment
(
t
{
ex
}
t
)
abc
}
]
}
}
Vous ne pouvez pas coder en dur la liste des caractères «entre parenthèses». La manière dont l'entrée est donnée n'est cependant pas spécifiée; il peut s'agir d'arguments en ligne de commande ou via une entrée standard, comme vous le souhaitez.
code-golf
string
whitespace
balanced-string
Prashant Bhate
la source
la source
./program 'p' 'q' <<< '1p23p45q67q8'
Ou a-t-il seulement besoin de support{[(<
et}])>
?Réponses:
Rubis,
1061019695L'entrée est fournie via la ligne de commande.
la source
~-j+=1
au lieu de(j+=1;j-1)
. De plus, utiliser$.
partout au lieu dej
vous permet de supprimer lej=0
, ce qui enregistre un autre personnage.Perl -
1319694 caractèresIl semble qu'il devrait y avoir de la place pour éliminer les expressions courantes, au moins, mais c'est une prise rapide qui gère l'exemple, ainsi que l'hypothèse de Joey Adams sur les crochets arbitraires.
Il y avait, en effet, beaucoup de place pour l'amélioration:
... et encore un peu plus:
la source
Mathematica (golf sans code)
Tester
En prime, la fonction suivante peut être utilisée pour formater l'expression mathématique
EDIT (golf sans code) Mis à jour avec un contrôle granulaire fin sur la façon dont les nouvelles lignes sont rendues
Production
la source
indent
. Votre objectif est-il un code au maximum concis ou de lisibilité? Il existe plusieurs façons de raccourcir ce code, si tel est votre objectif. Aussi: "Vous ne pouvez pas coder en dur la liste des caractères" parenthèses "." n'est-ce pas exactement ce que vous avez fait ici? Quoi qu'il en soit, désolé de paraître si négatif; cela me semble être une réponse étrange à votre propre défi.JavaScript,
255227205 caractèresHé, sa longueur s'intègre parfaitement dans un octet! :RÉC'est une fonction, passez-lui les caractères de début, les caractères de fin, puis le texte.
la source
Python - 162 caractères
la source
Python 2.7.X - 136 caractères
Usage : $ ./foo.py '(' ')' '(ab (cd (ef) gh) ij)'
Résultat résultant:
la source
print
déclarations?C -
213209Je déteste les erreurs stupides ...>. <
Lit les parens à gauche du premier argument de ligne de commande, les parens à droite du deuxième argument et les entrées pour mettre en retrait sur stdin.
Assez imprimé et commenté:
la source
C (
159225 caractères)Cela m'a coûté 66 caractères supplémentaires juste pour corriger le bug avec les lignes vides :( Franchement, j'ai besoin d'une nouvelle approche, mais je l'appellerai un jour pour l'instant.
Une approche plutôt rapide et sale. Il a un bug de produire des lignes vides entre parenthèses fermantes consécutives, mais sinon il fait le travail (ou du moins je pense). Je vais le revoir pour une solution meilleure et plus propre, cette semaine.
char * b est le jeu de parenthèses ouvrantes, char * e est le jeu de parenthèses fermantes et char * s est la chaîne d'entrée.
la source
Perl - 69 octets
TMTOWTDI rend le code simple
la source
Scala (2.9), 211 caractères
la source
Perl -
8985 octetsUne version de la réponse de Hojung Youn qui accepte les caractères de bloc via deux arguments.
Appelé comme:
la source
Python3,
184182 caractèresExemple:
la source
_,p,q,t=sys.argv
Groovy, 125
Vous pouvez enregistrer le script dans un fichier indent.groovy et l'essayer avec:
groovy indent.groovy "abc {xyz {text [note {comment (t {ex} t) abc}]}}" "{[(" ") ]} "
la source
Python - 407
Une version non golfée du programme:
Les arguments du programme sont (dans l'ordre): les parenthèses ouvrantes, les parenthèses fermantes et le texte à mettre en retrait.
Exemple ($ est l'invite de ligne de commande):
la source
D (300)
a besoin d'une chaîne terminée par null pour la vérification des limites (sinon, il
if(*s)
faut la changer enif(s.length)
)la source
Java
Non
codegolf version
! En supposant que nous ayons cette version de split () qui inclut les délimitations,la source
StringUtils
ne fait pas partie du JDK standard.C 284 Caractères non blancs
Je ne suis pas fan d'obscurcissement mais bon ...
Utilisation: ./program start_brackets end_brackets string_to_parse
la source
php
(187)(153)La fonction prend la chaîne, ouvrant les délimiteurs, terminant les délimiteurs comme arguments.
la source
C, 256
Paramètres:
J'ai cassé le code pour éviter la barre de défilement horizontale.
Le programme complet comprend 363 caractères.
la source
VB.net (? C)
Le langage n'est pas adapté au golf de code, j'ai donc utilisé une approche peu commune. Utilisation d'un écouteur de trace pour sortir vers la console.
Utilise les arguments de ligne de commande pour l'entrée
la source
Powershell, 146 octets
Explication non golfée
la source
C, 181 caractères
À peu près l'approche la plus simple imaginable. Itérer à travers la chaîne (v [3]), si c'est une accolade gauche (comme défini dans v [1]), augmenter le niveau de retrait, si c'est une accolade droite (comme défini dans v [2]), diminuer le niveau de retrait .
la source
C,
114121Pas très agréable, mais une solution .. une ligne vide peut apparaître avant / après selon que l'entrée commence / se termine par des parenthèses.
Avec la nouvelle restriction, cette approche est presque inutile pour le golf.
la source