Vous recevrez une chaîne (éventuellement vide) contenant des crochets ( [{()}]
) et tout autre caractère ( A
- Z
, a
- z
, 0
- 9
, ponctuation). Vous devez vérifier s'il respecte les règles suivantes:
- Les caractères non crochets sont ignorés.
- Chaque support ouvert
[{(
a un support de fermeture)}]
. Ce[](
n'est donc pas permis. - Les supports sont imbriqués correctement.
[(])
n'est pas autorisé. - Les accolades ne peuvent pas contenir de crochets. Les crochets simples ne peuvent contenir ni crochets ni crochets. Donc
[({})]
,[{[]}]
et({})
ne sont pas autorisés. Les crochets peuvent être imbriqués avec des crochets similaires, ce qui[[{((()))}{{(())}}]()]{()}
est donc autorisé.
La sortie est une seule valeur vérité / falsey selon votre choix.
Le code le plus court gagne.
Cas de test
b[[a{(/)}(())+={{}-}],]
-> Valide
([h][e][l][l][o])
-> invalide
[///[{(\/(arg()))}1{{((-)-2)}}]()]{()}
-> Valide
hi
-> Valide
code-golf
string
decision-problem
balanced-string
ghosts_in_the_code
la source
la source
Réponses:
Rétine , 84 octets
Essayez-le en ligne.
Il s'agit d'une extension assez simple (mais jouée) de l'expression rationnelle .NET de vérification des parenthèses de base .
Bien que cela soit tout à fait possible avec des groupes d'équilibrage, la récursivité de Perl a définitivement l'avantage ici . Cependant, l'une ou l'autre approche est battue en abandonnant l'élégance d'un match regex unique en faveur de la réduction progressive de l'entrée via des substitutions répétées, comme le fait la réponse sed de Digital Trauma . Cela peut être implémenté en 34 octets dans la rétine, mais j'hésite à publier le code moi-même, car je n'ai pas eu l'idée.
la source
Rétine, 34
Tout d'abord, le crédit lorsque le crédit est dû:
J'ai indépendamment (plus tard) proposé la même approche dans sed , donc j'espère que je ne marche sur aucun orteil ( gros ou autre) en publiant ceci:
Alors maintenant, avec un
sudo apt-get install mono-complete
etgit clone https://github.com/mbuettner/retina.git
j'ai une rétine de travail sur ma machine virtuelle Ubuntu. Voici la sortie de test:la source
Sed, 53
Ici, je prétends que depuis
sed
prétends qu'étant n'y a pas vraiment de concept de vérité / falsey, je définis la chaîne vide comme signifiant vérité et toutes les autres chaînes comme signifiant falsey.Si cela n'est pas acceptable, nous pouvons ajouter quelques lignes, ainsi:
Sed, 66
Cela renvoie 0 pour faux et 1 pour vrai.
la source
0
ou1
). Je ne peux pas dire qui devrait l'afficher, mais ce devrait probablement être l'un de vous deux.CJam,
2726 octetsCela imprime 1 (véridique) ou 0 (fausse). Essayez-le en ligne! ou vérifiez tous les cas de test.
Comment ça fonctionne
la source
𝔼𝕊𝕄𝕚𝕟, 43 caractères / 62 octets
Try it here (Firefox only).
Nan.
Cependant, si j'utilise des fonctionnalités nouvellement implémentées, je peux descendre à 28 caractères / 47 octets:
la source
Japt ,
4237 octetsEnregistré 5 octets avec une fonctionnalité que je ne savais pas que ma propre langue avait ... Merci de l'avoir ajouté, @Downgoat!
Japt a vraiment besoin d'un meilleur support RegExp ...
Essayez-le en ligne!
Comment ça fonctionne
la source
C99,
226208207 octetsC'est la première fois que j'essaie de jouer au golf
Lisible:
Il y a un débordement de tampon mais cela ne semble pas affecter quoi que ce soit - je pense que cela est dû à l'alignement.
la source
char* s
Perl, 50 + 1 = 51 octets
Nécessite le
-p
drapeau et les impressions1
pour des résultats véridiques et rien pour des résultats faux. Je compte-p
comme un, car il peut être combiné avec-e
:Le code est fondamentalement juste une correspondance regex ordinaire avec l'entrée, en utilisant la fonctionnalité de regex récursif astucieux de Perl.
Merci à Dennis de m'avoir aidé à tester cela et à jouer au passe-partout Perl.
la source
Python 3: 120 octets
S'appuyant sur la réponse de @ Adnan , il s'est avéré plus court à utiliser:
la source
Python 3,
196170160 160154 octetsLongtemps maladroit, merci à Mego pour avoir économisé 6 octets:
la source