Domani, un anno fa il cervello ! In onore del suo compleanno, stiamo organizzando una festa di compleanno in stile PPCG, in cui diversi utenti pubblicano domande correlate al cervello! Aiutaci a festeggiare! :)
Brain-flak è un linguaggio esoterico che ho scritto in cui tutti i comandi sono parentesi e tutte le parentesi devono essere completamente abbinate. Per prendere in prestito la mia definizione :
Ai fini di questa sfida, una "staffa" è uno di questi personaggi:
()[]{}<>
.Una coppia di parentesi è considerata "abbinata" se le parentesi aperta e chiusa sono nell'ordine giusto e non hanno caratteri al loro interno, come
() []{}
O se anche ogni sottoelemento al suo interno è abbinato.
[()()()()] {<[]>} (()())
I sottoelementi possono anche essere nidificati a più livelli di profondità.
[(){<><>[()]}<>()] <[{((()))}]>
Una stringa è considerata "Completamente abbinata" se e solo se:
Ogni singolo personaggio è una parentesi,
Ogni coppia di staffe ha la staffa di apertura e chiusura corretta e nel giusto ordine
Per celebrare il primo compleanno di brain-flak, la sfida di oggi consiste nel prendere un set squilibrato di parentesi e determinare quali tipi di operazioni sono necessarie per renderlo valido-brain-flak.
Ad esempio,
((
non è un codice valido per scartare il cervello, ma se lo accodiamo))
diventa(())
, che è completamente bilanciato, e quindi valido per scartare il cervello. Ciò rende questo input appendibile .Allo stesso modo,
>}
non è valido, ma possiamo anteporre{<
a esso per fare{<>}
, che è valido. Ciò rende questo input prependibile .Alcuni input sono leggermente più complicati. Ad esempio,
)][({
non può essere reso valido esclusivamente aggiungendo o anteponendo. Ma può essere reso valido anteponendo[(
e aggiungendo})]
. Pertanto, questo input è sia prependibile che appendibile .Infine, alcuni input non possono mai essere resi validi come codice del cervello-flak da qualsiasi combinazione di aggiunta o aggiunta. Ad esempio,
(>
non può mai essere reso valido. (Anteponendo<
crea<(>
e l'accodamento)
crea(>)
, nessuno dei quali sono valide) Pertanto, questo ingresso è né appendable o prependable.
Per la sfida di oggi, è necessario scrivere un programma o una funzione che accetta una stringa di parentesi e determina se la stringa è
appendable
prependable
both
neither
Puoi scegliere quali valori utilizzare per rappresentare per ciascun caso. Ad esempio, l'output 1, 2, 3, 4
, o 'a', 'p', 'b', 'n'
, o 1, 'foo', 3.1415, -17
, o qualunque cosa vada bene. Finché ogni output è distinto e coerente , va bene. Tuttavia, è necessario specificare chiaramente quale output corrisponde a quale caso.
È possibile restituire questo valore in qualsiasi formato sia più comodo (ad esempio, tornare da una funzione, stampare su STDOUT, modificare argomenti, scrivere su un file, ecc.).
Si può presumere che l'input non sarà mai valido in modo errato o vuoto.
Esempi
I seguenti input sono tutti prependibili :
))
(((()()())))}
)>}]
()[]{}<>)
Questi sono tutti appendibili :
(({}{})
((((
([]()())(
{<<{
Questi sono tutti e due :
))((
>()[(()){
>{
E questi non sono tutti né due :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Come al solito, si tratta di code-golf , quindi si applicano scappatoie standard e vince la risposta più breve in byte!
Questa sfida è particolarmente difficile con il cervello-flak, quindi il massimo brownie indica qualsiasi risposta scritta nel cervello-flak. :)
][
è appendibile, poiché nulla che puoi aggiungere può renderla valida. Allo stesso modo, non è prepagabile. È ... "inseribile"! Puoi inserirlo in una stringa per rendere l'intero Brainflak valido.
You can assume that the input will never be valid brain-flak or empty.
maximum brownie points
Penso che offrire il massimo dei punti brownie e dei cookie incoraggerebbe invece Brain-Flaking a questa sfida più dei semplici punti brownie, dal momento che non credo affatto banale in nessuna lingua, figuriamoci Brain-Flak. : P