Brain-flak a un an demain! En l'honneur de son anniversaire, nous organisons une fête d'anniversaire de style PPCG, où plusieurs utilisateurs publient des questions liées au brain-flak! Aidez-nous à célébrer! :)
Brain-flak est un langage ésotérique que j'ai écrit où toutes les commandes sont des crochets et tous les crochets doivent être entièrement mis en correspondance. Pour emprunter ma propre définition :
Aux fins de ce défi, un « support » est l' un de ces caractères:
()[]{}<>
.Une paire de crochets est considérée comme "assortie" si les crochets d'ouverture et de fermeture sont dans le bon ordre et ne contiennent aucun caractère, comme
() []{}
Ou si chaque sous-élément à l'intérieur est également mis en correspondance.
[()()()()] {<[]>} (()())
Les sous-éléments peuvent également être imbriqués plusieurs couches en profondeur.
[(){<><>[()]}<>()] <[{((()))}]>
Une chaîne est considérée comme "entièrement mise en correspondance" si et seulement si:
Chaque caractère est une parenthèse,
Chaque paire de supports a le support d'ouverture et de fermeture correct et dans le bon ordre
Pour célébrer le premier anniversaire de brain-flak, le défi d'aujourd'hui consiste à prendre un ensemble de supports déséquilibré et à déterminer les types d'opérations nécessaires pour le rendre valide.
Par exemple,
((
n'est pas un code de flak de cerveau valide, mais si nous y ajoutons))
, il devient(())
, qui est entièrement équilibré, et donc un flak de cerveau valide. Cela rend cette entrée annexable .De même,
>}
n'est pas valide, mais nous pouvons lui ajouter{<
à faire{<>}
, ce qui est valide. Cela rend cette entrée pré-disponible .Certaines entrées sont légèrement plus compliquées. Par exemple,
)][({
ne peut pas être rendu valide uniquement en ajoutant ou en ajoutant. Mais il peut être validé en ajoutant[(
et en ajoutant})]
. Par conséquent, cette entrée peut être ajoutée et ajoutée à la fois .Enfin, certaines entrées ne peuvent jamais être rendues valides comme un flak de cerveau par n'importe quelle combinaison d'ajout ou de pré-ajout. Par exemple,
(>
ne peut jamais être rendu valide. (La<
création de préfixe<(>
et la)
création de création(>)
ne sont valides ni l'une ni l'autre). Par conséquent, cette entrée n'est ni modifiable ni modifiable.
Pour le défi d'aujourd'hui, vous devez écrire un programme ou une fonction qui prend une chaîne de crochets et détermine si la chaîne est
appendable
prependable
both
neither
Vous pouvez choisir les valeurs que vous utilisez pour représenter pour chaque cas. Par exemple, la sortie 1, 2, 3, 4
, ou 'a', 'p', 'b', 'n'
, ou 1, 'foo', 3.1415, -17
, ou tout ce qui est bien. Tant que chaque sortie est distincte et cohérente , c'est bien. Vous devez cependant spécifier clairement quelle sortie correspond à quel cas.
Vous pouvez renvoyer cette valeur dans le format le plus pratique (par exemple, retour d'une fonction, impression vers STDOUT, modification des arguments, écriture dans un fichier, etc.).
Vous pouvez supposer que l'entrée ne sera jamais valide ou vide.
Exemples
Les entrées suivantes peuvent toutes être ajoutées :
))
(((()()())))}
)>}]
()[]{}<>)
Ce sont tous annexables :
(({}{})
((((
([]()())(
{<<{
Ce sont tous les deux :
))((
>()[(()){
>{
Et ce ne sont ni l'un ni l'autre :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Comme d'habitude, il s'agit de code-golf , donc les failles standard s'appliquent et la réponse la plus courte en octets gagne!
Ce défi est particulièrement difficile en brain-flak, donc le maximum de brownie pointe vers toutes les réponses écrites en brain-flak. :)
la source
maximum brownie points
Je pense qu'offrir à la place un maximum de points de brownie et de cookies encouragerait Brain-Flaking ce défi plus que de simples points de brownie, car je ne pense pas que ce soit trivial du tout dans n'importe quelle langue, sans parler de Brain-Flak. : P][
est pas inscriptible, comme rien que vous pouvez ajouter peut la rendre valide. De même, ce n'est pas disponible. C'est ... 'insérable'! Vous pouvez l'insérer dans une chaîne pour rendre l'ensemble Brainflak valide.You can assume that the input will never be valid brain-flak or empty.
Réponses:
Gelée ,
33 32 37 3534 octetsbug trouvé, horrible correction +5 octets, meilleure correction - 2 octets, en utilisant une astuce d'Adnan que j'ai vue ici pour -1 de plus.
Valeurs de retour:
(Une entrée non valide renvoie des résultats erronés, bien que Brain-flack valide, retourne
[]
.)Essayez-le en ligne! - une suite de tests (imprime des représentations musclées, donc
20
pour[2,0]
, et ignore les lignes qui en contiennent-
).la source
Rétine ,
414041 octets1 octet enregistré grâce à @MartinEnder
Essayez-le en ligne!
1
0
10
01
Modifications
la source
[]})>]
enregistre un octet.(][)
. Je pense qu'il peut être fixé à un coût d'un octet en changeant101
en...+
.Both
aussi bien10
c'est la seule combinaison valable pourBoth
.Lot, 337 octets
Sorties
]
pour pré-[
ajouter , pour ajouter,][
pour les deux,[]
pour aucun.la source
Haskell ,
115108 octetsMODIFIER:
Essayez-le en ligne!
Utilisez comme
(""#) "))"
. Les résultats sont donnés comme suit:Comment ça marche
s#d
analyse une chaîne restanted
, étant donné une chaîne / piles
de crochets de fermeture attendus.s#""
ligne vérifie si tous les crochets de fermeture ont été trouvés à la fin de la chaîne, sinon un ajout est nécessaire.s#(c:d)
vérifications si le caractère suivantc
est une parenthèse ouvrante, et si tel est le cas, laisse la parenthèse fermante correspondante sur la pile pour la récursivité.la source
Japt , 44 octets
Sorties
1
pour pré-ajoutable,3
pour appendice,13
pour les deux et31
pour aucun.Testez-le en ligne! ou Vérifiez tous les cas de test à la fois.
Comment ça marche
la source
PHP, 137 octets
1 => annexable,
2 => disponible,
12 => les deux,
0 => ni
Cas de test
la source